// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_NEW_SCRIPT_LOADER_H_ #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_NEW_SCRIPT_LOADER_H_ #include "content/browser/service_worker/service_worker_cache_writer.h" #include "content/browser/service_worker/url_loader_client_checker.h" #include "content/common/content_export.h" #include "content/public/browser/global_routing_id.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/remote.h" #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/net_adapters.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/mojom/url_loader.mojom.h" #include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h" #include "url/gurl.h" namespace blink { class ThrottlingURLLoader; } // namespace blink namespace content { class ServiceWorkerVersion; // This is the URLLoader used for loading scripts for a new (installing) service // worker. It fetches the script (the main script or imported script) and // returns the response to |client|, while also writing the response into the // service worker script storage. // // This loader works as follows: // 1. Makes a network request. // 2. OnReceiveResponse() is called, writes the response headers to the // service worker script storage and responds with them to the |client| // (which is the service worker in the renderer). Reads the network // response from the data pipe. While reading the response, writes it to // the service worker script storage and responds with it to the |client|. // 3. OnComplete() for the network load and OnWriteDataComplete() are called, // calls CommitCompleted() and closes the connections with the network // service and the renderer process. // // A set of |network_loader_state_|, |header_writer_state_|, and // |body_writer_state_| is the state of this loader. Each of them is changed // independently, while some state changes have dependency to other state // changes. See the comment for each field below to see exactly when their state // changes happen. // // NOTE: To perform the network request, this class uses |loader_factory_| which // may internally use a non-NetworkService factory if URL has a non-http(s) // scheme, e.g., a chrome-extension:// URL. Regardless, that is still called a // "network" request in comments and naming. "network" is meant to distinguish // from the load this URLLoader does for its client: // "network" <------> SWNewScriptLoader <------> client class CONTENT_EXPORT ServiceWorkerNewScriptLoader final : public network::mojom::URLLoader, public network::mojom::URLLoaderClient { … }; } // namespace content #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_NEW_SCRIPT_LOADER_H_