Index: content/browser/service_worker/service_worker_provider_host.cc |
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc |
index c36829aa959e0490b0c4f40d31f5a873e09697af..7bbc833d7b7a9fe1cf1a1387ddce46eb5a891223 100644 |
--- a/content/browser/service_worker/service_worker_provider_host.cc |
+++ b/content/browser/service_worker/service_worker_provider_host.cc |
@@ -52,17 +52,20 @@ ServiceWorkerProviderHost::OneShotGetReadyCallback::~OneShotGetReadyCallback() { |
std::unique_ptr<ServiceWorkerProviderHost> |
ServiceWorkerProviderHost::PreCreateNavigationHost( |
base::WeakPtr<ServiceWorkerContextCore> context, |
+ const MojoURLLoaderFactoryGetter& url_loader_factory_getter, |
bool are_ancestors_secure) { |
CHECK(IsBrowserSideNavigationEnabled()); |
// Generate a new browser-assigned id for the host. |
int provider_id = g_next_navigation_provider_id--; |
- return std::unique_ptr<ServiceWorkerProviderHost>( |
- new ServiceWorkerProviderHost( |
+ std::unique_ptr<ServiceWorkerProviderHost> host( |
+ base::MakeUnique<ServiceWorkerProviderHost>( |
ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE, provider_id, |
SERVICE_WORKER_PROVIDER_FOR_WINDOW, |
are_ancestors_secure ? FrameSecurityLevel::SECURE |
: FrameSecurityLevel::INSECURE, |
context, nullptr)); |
+ host->url_loader_factory_getter_ = url_loader_factory_getter; |
+ return host; |
} |
ServiceWorkerProviderHost::ServiceWorkerProviderHost( |
@@ -82,7 +85,10 @@ ServiceWorkerProviderHost::ServiceWorkerProviderHost( |
parent_frame_security_level_(parent_frame_security_level), |
context_(context), |
dispatcher_host_(dispatcher_host), |
- allow_association_(true) { |
+ allow_association_(true), |
+ url_loader_factory_getter_( |
+ dispatcher_host_ ? dispatcher_host_->url_loader_factory_getter() |
+ : MojoURLLoaderFactoryGetter()) { |
DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); |
// PlzNavigate |
@@ -341,14 +347,12 @@ ServiceWorkerProviderHost::CreateRequestHandler( |
} |
if (ServiceWorkerUtils::IsMainResourceType(resource_type) || |
controlling_version()) { |
- // |dispatcher_host_| may be null in some unittests. |
return std::unique_ptr<ServiceWorkerRequestHandler>( |
new ServiceWorkerControlleeRequestHandler( |
context_, AsWeakPtr(), blob_storage_context, request_mode, |
credentials_mode, redirect_mode, resource_type, |
request_context_type, frame_type, body, |
- dispatcher_host_ ? dispatcher_host_->url_loader_factory_getter() |
- : MojoURLLoaderFactoryGetter())); |
+ url_loader_factory_getter_)); |
} |
return std::unique_ptr<ServiceWorkerRequestHandler>(); |
} |
@@ -458,6 +462,7 @@ void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() { |
provider_id_ = kInvalidServiceWorkerProviderId; |
provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN; |
dispatcher_host_ = nullptr; |
+ url_loader_factory_getter_ = MojoURLLoaderFactoryGetter(); |
} |
void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( |
@@ -661,9 +666,11 @@ void ServiceWorkerProviderHost::FinalizeInitialization( |
int process_id, |
int frame_routing_id, |
ServiceWorkerDispatcherHost* dispatcher_host) { |
+ DCHECK(dispatcher_host); |
render_process_id_ = process_id; |
route_id_ = frame_routing_id; |
dispatcher_host_ = dispatcher_host; |
+ url_loader_factory_getter_ = dispatcher_host_->url_loader_factory_getter(); |
for (const GURL& pattern : associated_patterns_) |
IncreaseProcessReference(pattern); |
@@ -673,7 +680,7 @@ void ServiceWorkerProviderHost::FinalizeInitialization( |
if (associated_registration_.get()) { |
SendAssociateRegistrationMessage(); |
- if (dispatcher_host_ && associated_registration_->active_version()) { |
+ if (associated_registration_->active_version()) { |
Send(new ServiceWorkerMsg_SetControllerServiceWorker( |
render_thread_id_, provider_id(), |
GetOrCreateServiceWorkerHandle( |