| 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 c192d96e37110d5e35316776283d4de9afe29874..2468131dd1a200800e3e465d0c407e07931256cf 100644
|
| --- a/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| +++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| @@ -735,10 +735,26 @@ 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 = 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());
|
| }
|
|
|
|
|