| 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 a042183870385fae365aa66e76d1a92d2de05e67..dadcab50eadda4db3c97614e89b3f98cf1059d6d 100644
|
| --- a/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| +++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| @@ -733,10 +733,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());
|
| }
|
|
|
|
|