| 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 2de8b88307279714cb2493a75286313f6df5f8d4..5065999b96bce0c4b730b63d779c9c3f03209788 100644
|
| --- a/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| +++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "content/browser/service_worker/service_worker_dispatcher_host.h"
|
|
|
| +#include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "base/profiler/scoped_tracker.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| @@ -23,6 +24,7 @@
|
| #include "content/common/service_worker/service_worker_utils.h"
|
| #include "content/public/browser/content_browser_client.h"
|
| #include "content/public/common/content_client.h"
|
| +#include "content/public/common/content_switches.h"
|
| #include "content/public/common/origin_util.h"
|
| #include "ipc/ipc_message_macros.h"
|
| #include "net/base/net_util.h"
|
| @@ -725,10 +727,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
|
| + CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| + switches::kEnableBrowserSideNavigation));
|
| + provider_host = GetContext()->TakeBrowserProviderHost(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->CompleteBrowserInitialized(render_process_id_, route_id);
|
| + } 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());
|
| }
|
|
|
|
|