Index: content/browser/service_worker/service_worker_context_core.cc |
diff --git a/content/browser/service_worker/service_worker_context_core.cc b/content/browser/service_worker/service_worker_context_core.cc |
index 2272c95851bf8eec3c0f5a09dd63d3b4d2ab4455..31db5a93331812a57671e48d48b2494919c02418 100644 |
--- a/content/browser/service_worker/service_worker_context_core.cc |
+++ b/content/browser/service_worker/service_worker_context_core.cc |
@@ -401,6 +401,38 @@ void ServiceWorkerContextCore::SetBlobParametersForCache( |
blob_storage_context); |
} |
+scoped_ptr<ServiceWorkerProviderHost> |
+ServiceWorkerContextCore::TransferProviderHostOut( |
+ int process_id, int provider_id) { |
+ ProviderMap* map = GetProviderMapForProcess(process_id); |
+ ServiceWorkerProviderHost* transferee = map->Lookup(provider_id); |
+ int frame_id = transferee->frame_id(); |
+ transferee->PrepareForCrossSiteTransfer(); |
+ |
+ ServiceWorkerProviderHost* replacement = |
+ new ServiceWorkerProviderHost(process_id, |
+ frame_id, |
+ provider_id, |
+ AsWeakPtr(), |
+ transferee->dispatcher_host()); |
+ map->Replace(provider_id, replacement); |
+ |
+ return make_scoped_ptr(transferee); |
+} |
+ |
+void ServiceWorkerContextCore::TransferProviderHostIn( |
+ int new_process_id, int new_provider_id, |
+ scoped_ptr<ServiceWorkerProviderHost> transferree) { |
+ ProviderMap* map = GetProviderMapForProcess(new_process_id); |
+ ServiceWorkerProviderHost* temp = map->Lookup(new_provider_id); |
falken
2014/12/08 07:32:15
I have a question, how do we know no one like Serv
michaeln
2014/12/08 23:56:43
The 'temp' host has just been created to conduct t
|
+ transferree->CompleteCrossSiteTransfer(new_process_id, |
+ temp->frame_id(), |
+ new_provider_id, |
+ temp->dispatcher_host()); |
+ map->Replace(new_provider_id, transferree.release()); |
+ delete temp; |
+} |
+ |
void ServiceWorkerContextCore::OnWorkerStarted(ServiceWorkerVersion* version) { |
if (!observer_list_.get()) |
return; |