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

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

Issue 2638313002: Manage ServiceWorkerDispatcherHost in ServiceWorkerContextCore (Closed)
Patch Set: Add a newline Created 3 years, 11 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 a32fdd32fea0d945eff3b333e822dd761e6becec..9133d9f6cb6a65e65e74e58f662cd99abac748a2 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -91,16 +91,43 @@ ServiceWorkerProviderHost::PreCreateNavigationHost(
CHECK(IsBrowserSideNavigationEnabled());
// Generate a new browser-assigned id for the host.
int provider_id = g_next_navigation_provider_id--;
- auto host = base::MakeUnique<ServiceWorkerProviderHost>(
+ auto host = base::WrapUnique(new ServiceWorkerProviderHost(
ChildProcessHost::kInvalidUniqueID, MSG_ROUTING_NONE, provider_id,
SERVICE_WORKER_PROVIDER_FOR_WINDOW,
are_ancestors_secure ? FrameSecurityLevel::SECURE
: FrameSecurityLevel::INSECURE,
- context, nullptr);
+ context, nullptr));
host->web_contents_getter_ = web_contents_getter;
return host;
}
+// static
+std::unique_ptr<ServiceWorkerProviderHost>
+ServiceWorkerProviderHost::CreateForTesting(
+ int process_id,
+ int provider_id,
+ ServiceWorkerProviderType type,
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ int route_id,
+ ServiceWorkerDispatcherHost* dispatcher_host) {
+ return base::WrapUnique(new ServiceWorkerProviderHost(
+ process_id, route_id, provider_id, type,
+ FrameSecurityLevel::UNINITIALIZED, context, dispatcher_host));
+}
+
+// static
+std::unique_ptr<ServiceWorkerProviderHost> ServiceWorkerProviderHost::Create(
+ int process_id,
+ ServiceWorkerProviderHostInfo info,
+ base::WeakPtr<ServiceWorkerContextCore> context,
+ ServiceWorkerDispatcherHost* dispatcher_host) {
+ return base::WrapUnique(new ServiceWorkerProviderHost(
falken 2017/01/26 05:15:43 MakeUnique is preferred
shimazu 2017/01/26 09:27:23 The constructor is private, so WrapUnique is used
+ process_id, info.route_id, info.provider_id, info.type,
+ info.is_parent_frame_secure ? FrameSecurityLevel::SECURE
+ : FrameSecurityLevel::INSECURE,
+ context, dispatcher_host));
+}
+
ServiceWorkerProviderHost::ServiceWorkerProviderHost(
int render_process_id,
int route_id,
@@ -486,12 +513,18 @@ bool ServiceWorkerProviderHost::GetRegistrationForReady(
return true;
}
-void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() {
+std::unique_ptr<ServiceWorkerProviderHost>
+ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() {
DCHECK_NE(ChildProcessHost::kInvalidUniqueID, render_process_id_);
DCHECK_NE(MSG_ROUTING_NONE, route_id_);
DCHECK_EQ(kDocumentMainThreadId, render_thread_id_);
DCHECK_NE(SERVICE_WORKER_PROVIDER_UNKNOWN, provider_type_);
+ std::unique_ptr<ServiceWorkerProviderHost> new_provider_host =
+ base::WrapUnique(new ServiceWorkerProviderHost(
+ process_id(), frame_id(), provider_id(), provider_type(),
+ parent_frame_security_level_, context_, dispatcher_host()));
+
for (const GURL& pattern : associated_patterns_)
DecreaseProcessReference(pattern);
@@ -511,6 +544,7 @@ void ServiceWorkerProviderHost::PrepareForCrossSiteTransfer() {
provider_id_ = kInvalidServiceWorkerProviderId;
provider_type_ = SERVICE_WORKER_PROVIDER_UNKNOWN;
dispatcher_host_ = nullptr;
+ return new_provider_host;
}
void ServiceWorkerProviderHost::CompleteCrossSiteTransfer(

Powered by Google App Engine
This is Rietveld 408576698