| Index: content/browser/service_worker/service_worker_dispatcher_host.cc
|
| diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| index eb65e4e2be475a2b65c4a3f6dc2020cd8ad7bd13..cfcc58e9493ecf5e610ef881a26d11d4260a2185 100644
|
| --- a/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| +++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| @@ -727,10 +727,27 @@ void ServiceWorkerDispatcherHost::OnProviderCreated(
|
| bad_message::SWDH_PROVIDER_CREATED_NO_HOST);
|
| return;
|
| }
|
| - scoped_ptr<ServiceWorkerProviderHost> provider_host(
|
| - new ServiceWorkerProviderHost(render_process_id_, route_id, provider_id,
|
| - provider_type, GetContext()->AsWeakPtr(),
|
| - this));
|
| +
|
| + scoped_ptr<ServiceWorkerProviderHost> provider_host;
|
| + if (ServiceWorkerUtils::IsBrowserAssignedProviderId(provider_id)) {
|
| + // PlzNavigate
|
| + // Retrieve the provider host previously created for navigation requests.
|
| + provider_host = scoped_ptr<ServiceWorkerProviderHost>(
|
| + GetContext()->TakeNavigationProviderHost(provider_id));
|
| + if (provider_host == nullptr) {
|
| + bad_message::ReceivedBadMessage(
|
| + this, bad_message::SWDH_PROVIDER_CREATED_NO_HOST);
|
| + return;
|
| + }
|
| + DCHECK_EQ(SERVICE_WORKER_PROVIDER_FOR_WINDOW, provider_type);
|
| + provider_host->CompleteNavigationInitialized(render_process_id_, route_id,
|
| + this);
|
| + } else {
|
| + provider_host =
|
| + scoped_ptr<ServiceWorkerProviderHost>(new ServiceWorkerProviderHost(
|
| + render_process_id_, route_id, provider_id, provider_type,
|
| + GetContext()->AsWeakPtr(), this));
|
| + }
|
| GetContext()->AddProviderHost(provider_host.Pass());
|
| }
|
|
|
|
|