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

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 50d4f4eb835858be5503263f42d47b9d5e4d9cc0..43c4885afb6a9c2930cd366e59a7fea602d72d64 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 {
@@ -87,6 +89,12 @@ ServiceWorkerProviderHost::ServiceWorkerProviderHost(
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 == kVirtualProcessIDForBrowserRequest,
+ 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 +524,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_id,
+ ServiceWorkerDispatcherHost* dispatcher_host) {
+ CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableBrowserSideNavigation));
+ DCHECK_EQ(kVirtualProcessIDForBrowserRequest, 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_id);
nasko 2015/10/02 22:09:45 Routing id or FTN id?
Fabrice (no longer in Chrome) 2015/10/06 17:21:38 Done.
+
+ FinalizeInitialization(process_id, frame_id, dispatcher_host);
}
void ServiceWorkerProviderHost::SendUpdateFoundMessage(
@@ -684,4 +691,30 @@ void ServiceWorkerProviderHost::Send(IPC::Message* message) const {
dispatcher_host_->Send(message);
}
+void ServiceWorkerProviderHost::FinalizeInitialization(
+ int process_id,
+ int frame_id,
+ ServiceWorkerDispatcherHost* dispatcher_host) {
+ render_process_id_ = process_id;
+ route_id_ = frame_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