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 a27a2c1bbd5b06aba31b540bdfe14306174fcc3f..c8f1812825c901105aee808ca7473936db2e1c42 100644 |
--- a/content/browser/service_worker/service_worker_provider_host.cc |
+++ b/content/browser/service_worker/service_worker_provider_host.cc |
@@ -4,6 +4,7 @@ |
#include "content/browser/service_worker/service_worker_provider_host.h" |
+#include "base/command_line.h" |
#include "base/guid.h" |
#include "base/stl_util.h" |
#include "base/time/time.h" |
@@ -27,6 +28,7 @@ |
#include "content/public/browser/render_widget_host_view.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/common/child_process_host.h" |
+#include "content/public/common/content_switches.h" |
namespace content { |
@@ -84,9 +86,14 @@ ServiceWorkerProviderHost::ServiceWorkerProviderHost( |
context_(context), |
dispatcher_host_(dispatcher_host), |
allow_association_(true) { |
- DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_); |
DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_); |
DCHECK_NE(SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME, provider_type_); |
+ |
+ // PlzNavigate |
+ CHECK_IMPLIES(render_process_id == ChildProcessHost::kInvalidUniqueID, |
+ base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableBrowserSideNavigation)); |
+ |
if (provider_type_ == SERVICE_WORKER_PROVIDER_FOR_CONTROLLER) { |
// Actual thread id is set when the service worker context gets started. |
render_thread_id_ = kInvalidEmbeddedWorkerThreadId; |
@@ -516,29 +523,28 @@ void ServiceWorkerProviderHost::CompleteCrossSiteTransfer( |
DCHECK_NE(ChildProcessHost::kInvalidUniqueID, new_process_id); |
DCHECK_NE(MSG_ROUTING_NONE, new_frame_id); |
- render_process_id_ = new_process_id; |
- route_id_ = new_frame_id; |
render_thread_id_ = kDocumentMainThreadId; |
provider_id_ = new_provider_id; |
provider_type_ = new_provider_type; |
- dispatcher_host_ = new_dispatcher_host; |
- for (const GURL& pattern : associated_patterns_) |
- IncreaseProcessReference(pattern); |
+ FinalizeInitialization(new_process_id, new_frame_id, new_dispatcher_host); |
+} |
- for (auto& key_registration : matching_registrations_) |
- IncreaseProcessReference(key_registration.second->pattern()); |
+// PlzNavigate |
+void ServiceWorkerProviderHost::CompleteNavigationInitialized( |
+ int process_id, |
+ int frame_routing_id, |
+ ServiceWorkerDispatcherHost* dispatcher_host) { |
+ CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableBrowserSideNavigation)); |
+ DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, render_process_id_); |
+ DCHECK_EQ(SERVICE_WORKER_PROVIDER_FOR_WINDOW, provider_type_); |
+ DCHECK_EQ(kDocumentMainThreadId, render_thread_id_); |
- if (associated_registration_.get()) { |
- SendAssociateRegistrationMessage(); |
- if (dispatcher_host_ && associated_registration_->active_version()) { |
- Send(new ServiceWorkerMsg_SetControllerServiceWorker( |
- render_thread_id_, provider_id(), |
- GetOrCreateServiceWorkerHandle( |
- associated_registration_->active_version()), |
- false /* shouldNotifyControllerChange */)); |
- } |
- } |
+ DCHECK_NE(ChildProcessHost::kInvalidUniqueID, process_id); |
+ DCHECK_NE(MSG_ROUTING_NONE, frame_routing_id); |
+ |
+ FinalizeInitialization(process_id, frame_routing_id, dispatcher_host); |
} |
void ServiceWorkerProviderHost::SendUpdateFoundMessage( |
@@ -684,4 +690,30 @@ void ServiceWorkerProviderHost::Send(IPC::Message* message) const { |
dispatcher_host_->Send(message); |
} |
+void ServiceWorkerProviderHost::FinalizeInitialization( |
+ int process_id, |
+ int frame_routing_id, |
+ ServiceWorkerDispatcherHost* dispatcher_host) { |
+ render_process_id_ = process_id; |
+ route_id_ = frame_routing_id; |
+ dispatcher_host_ = dispatcher_host; |
+ |
+ for (const GURL& pattern : associated_patterns_) |
+ IncreaseProcessReference(pattern); |
+ |
+ for (auto& key_registration : matching_registrations_) |
+ IncreaseProcessReference(key_registration.second->pattern()); |
+ |
+ if (associated_registration_.get()) { |
+ SendAssociateRegistrationMessage(); |
+ if (dispatcher_host_ && associated_registration_->active_version()) { |
+ Send(new ServiceWorkerMsg_SetControllerServiceWorker( |
+ render_thread_id_, provider_id(), |
+ GetOrCreateServiceWorkerHandle( |
+ associated_registration_->active_version()), |
+ false /* shouldNotifyControllerChange */)); |
+ } |
+ } |
+} |
+ |
} // namespace content |