Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2223)

Unified Diff: content/browser/service_worker/service_worker_provider_host.cc

Issue 1294243004: PlzNavigate: Make ServiceWorker work with PlzNavigate. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698