Chromium Code Reviews| 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..062f88d0502c271999fc28bf2623789d79fec3e3 100644 |
| --- a/content/browser/service_worker/service_worker_context_core.cc |
| +++ b/content/browser/service_worker/service_worker_context_core.cc |
| @@ -401,6 +401,51 @@ void ServiceWorkerContextCore::SetBlobParametersForCache( |
| blob_storage_context); |
| } |
| +scoped_ptr<ServiceWorkerProviderHost> |
| +ServiceWorkerContextCore::TransferProviderHostOut( |
| + int process_id, int provider_id) { |
| + ProviderMap* map = GetProviderMapForProcess(process_id); |
| + if (!map) { |
| + NOTREACHED(); |
| + return scoped_ptr<ServiceWorkerProviderHost>(); |
|
falken
2014/11/11 08:38:57
This pattern of gracefully handling a DCHECK()/NOT
michaeln
2014/11/13 00:05:08
Done.
|
| + } |
| + |
| + ServiceWorkerProviderHost* transferree = map->Lookup(provider_id); |
| + if (!transferree) { |
| + NOTREACHED(); |
| + return scoped_ptr<ServiceWorkerProviderHost>(); |
| + } |
| + transferree->PrepareForCrossSiteTransfer(); |
| + |
| + ServiceWorkerProviderHost* replacement = |
| + new ServiceWorkerProviderHost(process_id, |
| + provider_id, |
| + AsWeakPtr(), |
| + transferree->dispatcher_host()); |
| + map->Replace(provider_id, replacement); |
| + |
| + return make_scoped_ptr(transferree); |
| +} |
| + |
| +void ServiceWorkerContextCore::TransferProviderHostIn( |
| + int new_process_id, int new_provider_id, |
| + scoped_ptr<ServiceWorkerProviderHost> transferree) { |
| + ProviderMap* map = GetProviderMapForProcess(new_process_id); |
| + if (!map) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + ServiceWorkerProviderHost* temp = map->Lookup(new_provider_id); |
| + if (!temp) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + transferree->CompleteCrossSiteTransfer(new_process_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; |