Commit 6329a550 authored by Kinuko Yasuda's avatar Kinuko Yasuda Committed by Commit Bot

Clean up and document ServiceWorkerNetworkProvider's ctors

Make ServiceWorkerNetworkProvider's ctors private, adds
specific creation methods like:
- CreateForSharedWorker
- CreateForController

Bug: 740070
Change-Id: Ib17d50f2bf49b3895569551f805892b4c3706d38
Reviewed-on: https://chromium-review.googlesource.com/597553Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Commit-Queue: Kinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491332}
parent d5c6448d
...@@ -139,27 +139,39 @@ ServiceWorkerNetworkProvider::CreateForNavigation( ...@@ -139,27 +139,39 @@ ServiceWorkerNetworkProvider::CreateForNavigation(
const bool is_parent_frame_secure = IsFrameSecure(frame->Parent()); const bool is_parent_frame_secure = IsFrameSecure(frame->Parent());
if (service_worker_provider_id == kInvalidServiceWorkerProviderId) { if (service_worker_provider_id == kInvalidServiceWorkerProviderId) {
network_provider = std::unique_ptr<ServiceWorkerNetworkProvider>( network_provider = base::WrapUnique(new ServiceWorkerNetworkProvider(
new ServiceWorkerNetworkProvider(route_id, route_id, SERVICE_WORKER_PROVIDER_FOR_WINDOW, GetNextProviderId(),
SERVICE_WORKER_PROVIDER_FOR_WINDOW, is_parent_frame_secure));
is_parent_frame_secure));
} else { } else {
CHECK(browser_side_navigation); CHECK(browser_side_navigation);
DCHECK(ServiceWorkerUtils::IsBrowserAssignedProviderId( DCHECK(ServiceWorkerUtils::IsBrowserAssignedProviderId(
service_worker_provider_id)); service_worker_provider_id));
network_provider = std::unique_ptr<ServiceWorkerNetworkProvider>( network_provider = base::WrapUnique(new ServiceWorkerNetworkProvider(
new ServiceWorkerNetworkProvider( route_id, SERVICE_WORKER_PROVIDER_FOR_WINDOW,
route_id, SERVICE_WORKER_PROVIDER_FOR_WINDOW, service_worker_provider_id, is_parent_frame_secure));
service_worker_provider_id, is_parent_frame_secure));
} }
} else { } else {
network_provider = std::unique_ptr<ServiceWorkerNetworkProvider>( network_provider = base::WrapUnique(new ServiceWorkerNetworkProvider());
new ServiceWorkerNetworkProvider());
} }
return base::MakeUnique<WebServiceWorkerNetworkProviderForFrame>( return base::MakeUnique<WebServiceWorkerNetworkProviderForFrame>(
std::move(network_provider)); std::move(network_provider));
} }
// static
std::unique_ptr<ServiceWorkerNetworkProvider>
ServiceWorkerNetworkProvider::CreateForSharedWorker(int route_id) {
return base::WrapUnique(new ServiceWorkerNetworkProvider(
route_id, SERVICE_WORKER_PROVIDER_FOR_SHARED_WORKER, GetNextProviderId(),
true /* is_parent_frame_secure */));
}
// static
std::unique_ptr<ServiceWorkerNetworkProvider>
ServiceWorkerNetworkProvider::CreateForController(
mojom::ServiceWorkerProviderInfoForStartWorkerPtr info) {
return base::WrapUnique(new ServiceWorkerNetworkProvider(std::move(info)));
}
// static // static
ServiceWorkerNetworkProvider* ServiceWorkerNetworkProvider*
ServiceWorkerNetworkProvider::FromWebServiceWorkerNetworkProvider( ServiceWorkerNetworkProvider::FromWebServiceWorkerNetworkProvider(
...@@ -172,6 +184,26 @@ ServiceWorkerNetworkProvider::FromWebServiceWorkerNetworkProvider( ...@@ -172,6 +184,26 @@ ServiceWorkerNetworkProvider::FromWebServiceWorkerNetworkProvider(
->provider(); ->provider();
} }
ServiceWorkerNetworkProvider::~ServiceWorkerNetworkProvider() {
if (provider_id_ == kInvalidServiceWorkerProviderId)
return;
if (!ChildThreadImpl::current())
return; // May be null in some tests.
provider_host_.reset();
}
bool ServiceWorkerNetworkProvider::IsControlledByServiceWorker() const {
if (ServiceWorkerUtils::IsServicificationEnabled()) {
// Interception for subresource loading is not working (yet)
// when servicification is enabled.
return false;
}
return context() && context()->controller();
}
ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider()
: provider_id_(kInvalidServiceWorkerProviderId) {}
ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider( ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
int route_id, int route_id,
ServiceWorkerProviderType provider_type, ServiceWorkerProviderType provider_type,
...@@ -183,6 +215,11 @@ ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider( ...@@ -183,6 +215,11 @@ ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
if (!ChildThreadImpl::current()) if (!ChildThreadImpl::current())
return; // May be null in some tests. return; // May be null in some tests.
// We don't support dedicated worker (WORKER) as an independent service
// worker client yet.
DCHECK(provider_type == SERVICE_WORKER_PROVIDER_FOR_WINDOW ||
provider_type == SERVICE_WORKER_PROVIDER_FOR_SHARED_WORKER);
ServiceWorkerProviderHostInfo host_info(provider_id_, route_id, provider_type, ServiceWorkerProviderHostInfo host_info(provider_id_, route_id, provider_type,
is_parent_frame_secure); is_parent_frame_secure);
host_info.host_request = mojo::MakeRequest(&provider_host_); host_info.host_request = mojo::MakeRequest(&provider_host_);
...@@ -200,15 +237,6 @@ ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider( ...@@ -200,15 +237,6 @@ ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
dispatcher_host_->OnProviderCreated(std::move(host_info)); dispatcher_host_->OnProviderCreated(std::move(host_info));
} }
ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
int route_id,
ServiceWorkerProviderType provider_type,
bool is_parent_frame_secure)
: ServiceWorkerNetworkProvider(route_id,
provider_type,
GetNextProviderId(),
is_parent_frame_secure) {}
ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider( ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
mojom::ServiceWorkerProviderInfoForStartWorkerPtr info) mojom::ServiceWorkerProviderInfoForStartWorkerPtr info)
: provider_id_(info->provider_id) { : provider_id_(info->provider_id) {
...@@ -233,24 +261,4 @@ ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider( ...@@ -233,24 +261,4 @@ ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider(
provider_host_.Bind(std::move(info->host_ptr_info)); provider_host_.Bind(std::move(info->host_ptr_info));
} }
ServiceWorkerNetworkProvider::ServiceWorkerNetworkProvider()
: provider_id_(kInvalidServiceWorkerProviderId) {}
ServiceWorkerNetworkProvider::~ServiceWorkerNetworkProvider() {
if (provider_id_ == kInvalidServiceWorkerProviderId)
return;
if (!ChildThreadImpl::current())
return; // May be null in some tests.
provider_host_.reset();
}
bool ServiceWorkerNetworkProvider::IsControlledByServiceWorker() const {
if (ServiceWorkerUtils::IsServicificationEnabled()) {
// Interception for subresource loading is not working (yet)
// when servicification is enabled.
return false;
}
return context() && context()->controller();
}
} // namespace content } // namespace content
...@@ -47,26 +47,21 @@ class CONTENT_EXPORT ServiceWorkerNetworkProvider { ...@@ -47,26 +47,21 @@ class CONTENT_EXPORT ServiceWorkerNetworkProvider {
blink::WebLocalFrame* frame, blink::WebLocalFrame* frame,
bool content_initiated); bool content_initiated);
// Creates a ServiceWorkerNetworkProvider for a shared worker (as a
// non-document service worker client).
static std::unique_ptr<ServiceWorkerNetworkProvider> CreateForSharedWorker(
int route_id);
// Creates a ServiceWorkerNetworkProvider for a "controller" (i.e.
// a service worker execution context).
static std::unique_ptr<ServiceWorkerNetworkProvider> CreateForController(
mojom::ServiceWorkerProviderInfoForStartWorkerPtr info);
// Valid only for WebServiceWorkerNetworkProvider created by // Valid only for WebServiceWorkerNetworkProvider created by
// CreateForNavigation. // CreateForNavigation.
static ServiceWorkerNetworkProvider* FromWebServiceWorkerNetworkProvider( static ServiceWorkerNetworkProvider* FromWebServiceWorkerNetworkProvider(
blink::WebServiceWorkerNetworkProvider*); blink::WebServiceWorkerNetworkProvider*);
// PlzNavigate
// The |browser_provider_id| is initialized by the browser for navigations.
ServiceWorkerNetworkProvider(int route_id,
ServiceWorkerProviderType type,
int browser_provider_id,
bool is_parent_frame_secure);
// This is for service worker clients.
ServiceWorkerNetworkProvider(int route_id,
ServiceWorkerProviderType type,
bool is_parent_frame_secure);
// This is for controllers.
explicit ServiceWorkerNetworkProvider(
mojom::ServiceWorkerProviderInfoForStartWorkerPtr info);
ServiceWorkerNetworkProvider();
~ServiceWorkerNetworkProvider(); ~ServiceWorkerNetworkProvider();
int provider_id() const { return provider_id_; } int provider_id() const { return provider_id_; }
...@@ -79,6 +74,23 @@ class CONTENT_EXPORT ServiceWorkerNetworkProvider { ...@@ -79,6 +74,23 @@ class CONTENT_EXPORT ServiceWorkerNetworkProvider {
bool IsControlledByServiceWorker() const; bool IsControlledByServiceWorker() const;
private: private:
ServiceWorkerNetworkProvider();
// This is for service worker clients (used in CreateForNavigation and
// CreateForSharedWorker). |provider_id| is provided by the browser process
// for navigations (with PlzNavigate, which is default).
// |type| must be either one of SERVICE_WORKER_PROVIDER_FOR_{WINDOW,
// SHARED_WORKER,WORKER} (while currently we don't have code for WORKER).
// |is_parent_frame_secure| is only relevant when the |type| is WINDOW.
ServiceWorkerNetworkProvider(int route_id,
ServiceWorkerProviderType type,
int provider_id,
bool is_parent_frame_secure);
// This is for controllers, used in CreateForController.
explicit ServiceWorkerNetworkProvider(
mojom::ServiceWorkerProviderInfoForStartWorkerPtr info);
const int provider_id_; const int provider_id_;
scoped_refptr<ServiceWorkerProviderContext> context_; scoped_refptr<ServiceWorkerProviderContext> context_;
mojom::ServiceWorkerDispatcherHostAssociatedPtr dispatcher_host_; mojom::ServiceWorkerDispatcherHostAssociatedPtr dispatcher_host_;
......
...@@ -615,8 +615,8 @@ ServiceWorkerContextClient::ServiceWorkerContextClient( ...@@ -615,8 +615,8 @@ ServiceWorkerContextClient::ServiceWorkerContextClient(
std::move(instance_host), main_thread_task_runner_); std::move(instance_host), main_thread_task_runner_);
// Create a content::ServiceWorkerNetworkProvider for this data source so // Create a content::ServiceWorkerNetworkProvider for this data source so
// we can observe its requests. // we can observe its requests.
pending_network_provider_ = pending_network_provider_ = ServiceWorkerNetworkProvider::CreateForController(
base::MakeUnique<ServiceWorkerNetworkProvider>(std::move(provider_info)); std::move(provider_info));
provider_context_ = pending_network_provider_->context(); provider_context_ = pending_network_provider_->context();
TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("ServiceWorker", TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("ServiceWorker",
......
...@@ -233,9 +233,7 @@ EmbeddedSharedWorkerStub::CreateServiceWorkerNetworkProvider() { ...@@ -233,9 +233,7 @@ EmbeddedSharedWorkerStub::CreateServiceWorkerNetworkProvider() {
// Create a content::ServiceWorkerNetworkProvider for this data source so // Create a content::ServiceWorkerNetworkProvider for this data source so
// we can observe its requests. // we can observe its requests.
std::unique_ptr<ServiceWorkerNetworkProvider> provider( std::unique_ptr<ServiceWorkerNetworkProvider> provider(
new ServiceWorkerNetworkProvider( ServiceWorkerNetworkProvider::CreateForSharedWorker(route_id_));
route_id_, SERVICE_WORKER_PROVIDER_FOR_SHARED_WORKER,
true /* is_parent_frame_secure */));
// Blink is responsible for deleting the returned object. // Blink is responsible for deleting the returned object.
return base::MakeUnique<WebServiceWorkerNetworkProviderImpl>( return base::MakeUnique<WebServiceWorkerNetworkProviderImpl>(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment