Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1396)

Unified Diff: content/browser/service_worker/service_worker_provider_host.h

Issue 2936623002: Implement dumb URLLoader{Factory} for ServiceWorker script loading (for try)
Patch Set: . Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_provider_host.h
diff --git a/content/browser/service_worker/service_worker_provider_host.h b/content/browser/service_worker/service_worker_provider_host.h
index f2ed389537b99cbe513b74dd77380e354a832b68..ad54f6c510dd4027d8e8654199a6dcd5c7789fa4 100644
--- a/content/browser/service_worker/service_worker_provider_host.h
+++ b/content/browser/service_worker/service_worker_provider_host.h
@@ -30,6 +30,7 @@
#include "content/public/common/request_context_type.h"
#include "content/public/common/resource_type.h"
#include "mojo/public/cpp/bindings/associated_binding.h"
+#include "mojo/public/cpp/bindings/strong_associated_binding_set.h"
namespace storage {
class BlobStorageContext;
@@ -58,17 +59,23 @@ class WebContents;
// For providers hosting a running service worker, this class will observe
// resource loads made directly by the service worker.
//
-// A ServiceWorkerProviderHost instance is created when a
-// ServiceWorkerNetworkProvider is created on the renderer process, which
-// happens 1) when a document or worker (i.e., a service worker client) is
-// created, or 2) during service worker startup. Mojo's connection from
-// ServiceWorkerNetworkProvider is established on the creation time, and the
-// instance is destroyed on disconnection from the renderer side.
-// If PlzNavigate is turned on, an instance is pre-created on the browser
+// A ServiceWorkerProviderHost is created in the following situations:
+// 1) When it's for a document or worker (i.e., a service
+// worker client), the provider host is created when
+// ServiceWorkerNetworkProvider is created on the renderer process. Mojo's
+// connection from ServiceWorkerNetworkProvider is established on the creation
+// time.
+// 2) When it's for a service worker context, the provider host is created on
+// the browser process before launching the service worker's thread. Mojo's
+// connection to the renderer is established with the StartWorker message.
+// 3) When PlzNavigate is turned on, an instance is pre-created on the browser
// before ServiceWorkerNetworkProvider is created on the renderer because
// navigation is initiated on the browser side. In that case, establishment of
// Mojo's connection will be deferred until ServiceWorkerNetworkProvider is
// created on the renderer.
+// Destruction of the ServiceWorkerProviderHost instance happens on
+// disconnection of the Mojo's pipe from the renderer side regardless of what
+// the provider is for.
class CONTENT_EXPORT ServiceWorkerProviderHost
: public NON_EXPORTED_BASE(ServiceWorkerRegistration::Listener),
public base::SupportsWeakPtr<ServiceWorkerProviderHost>,
@@ -91,6 +98,13 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
bool are_ancestors_secure,
const WebContentsGetter& web_contents_getter);
+ // Creates a ServiceWorkerProviderHost for hosting a running service worker.
+ // Information about the ServiceWorkerProviderHost is passed with the
+ // StartWorker message.
+ static std::unique_ptr<ServiceWorkerProviderHost> PreCreateForController(
+ ServiceWorkerVersion* hosted_version,
+ base::WeakPtr<ServiceWorkerContextCore> context);
+
// Used to create a ServiceWorkerProviderHost when the renderer-side provider
// is created. This ProviderHost will be created for the process specified by
// |process_id|.
@@ -200,8 +214,6 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
// Clears the associated registration and stop listening to it.
void DisassociateRegistration();
- void SetHostedVersion(ServiceWorkerVersion* version);
-
// Returns a handler for a request, the handler may return NULL if
// the request doesn't require special handling.
std::unique_ptr<ServiceWorkerRequestHandler> CreateRequestHandler(
@@ -270,6 +282,16 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
ServiceWorkerProviderHostInfo info,
ServiceWorkerDispatcherHost* dispatcher_host);
+ // Completes initialization of provider hosts for controllers.
+ // This is called when a process for the service worker has already been
+ // allocated and EmbeddedWorkerInstance is about to send the StartWorker
+ // message. |out_provider_client_info| will be initialized by the values to
+ // create ServiceWorkerNetworkProvider on the renderer which will be connected
+ // to this instance.
+ virtual void CompleteStartWorkerPreparation(
+ int process_id,
+ mojom::ServiceWorkerProviderClientInfoPtr* out_provider_client_info);
+
// Sends event messages to the renderer. Events for the worker are queued up
// until the worker thread id is known via SetReadyToSendMessagesToWorker().
void SendUpdateFoundMessage(
@@ -305,6 +327,12 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
void BindWorkerFetchContext(
mojom::ServiceWorkerWorkerClientAssociatedPtrInfo client_ptr_info);
+ protected:
+ ServiceWorkerProviderHost(int process_id,
+ ServiceWorkerProviderHostInfo info,
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ ServiceWorkerDispatcherHost* dispatcher_host);
+
private:
friend class ForeignFetchRequestHandlerTest;
friend class LinkHeaderServiceWorkerTest;
@@ -335,11 +363,6 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
~OneShotGetReadyCallback();
};
- ServiceWorkerProviderHost(int process_id,
- ServiceWorkerProviderHostInfo info,
- base::WeakPtr<ServiceWorkerContextCore> context,
- ServiceWorkerDispatcherHost* dispatcher_host);
-
// ServiceWorkerRegistration::Listener overrides.
void OnVersionAttributesChanged(
ServiceWorkerRegistration* registration,
@@ -373,6 +396,10 @@ class CONTENT_EXPORT ServiceWorkerProviderHost
bool IsReadyToSendMessages() const;
void Send(IPC::Message* message) const;
+ // Sets the version hosted by this provider. This method should be used only
+ // for provider hosts for controllers.
+ void SetHostedVersion(ServiceWorkerVersion* version);
+
// Notifies the information about the controller and associated registration
// to the provider on the renderer. This is for cross site transfer and
// browser side navigation which need to decide which process will handle the

Powered by Google App Engine
This is Rietveld 408576698