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( |