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 0416733b35fd9fec878fa3d7a7e3d8c08f54f817..f4c666220a686d51c606e9aa085097d5bf266f17 100644 |
--- a/content/browser/service_worker/service_worker_context_core.cc |
+++ b/content/browser/service_worker/service_worker_context_core.cc |
@@ -141,6 +141,7 @@ ServiceWorkerContextCore::ServiceWorkerContextCore( |
provider_by_uuid_(new ProviderByClientUUIDMap), |
next_handle_id_(0), |
next_registration_handle_id_(0), |
+ next_navigation_provider_host_id_(0), |
observer_list_(observer_list), |
weak_factory_(this) { |
// These get a WeakPtr from weak_factory_, so must be set after weak_factory_ |
@@ -163,6 +164,8 @@ ServiceWorkerContextCore::ServiceWorkerContextCore( |
provider_by_uuid_(old_context->provider_by_uuid_.release()), |
next_handle_id_(old_context->next_handle_id_), |
next_registration_handle_id_(old_context->next_registration_handle_id_), |
+ next_navigation_provider_host_id_( |
+ old_context->next_navigation_provider_host_id_), |
observer_list_(old_context->observer_list_), |
weak_factory_(this) { |
// These get a WeakPtr from weak_factory_, so must be set after weak_factory_ |
@@ -228,6 +231,26 @@ ServiceWorkerContextCore::GetClientProviderHostIterator(const GURL& origin) { |
providers_.get(), base::Bind(IsSameOriginClientProviderHost, origin))); |
} |
+scoped_ptr<ServiceWorkerProviderHost> |
+ServiceWorkerContextCore::CreateNavigationProviderHost() { |
+ return scoped_ptr<ServiceWorkerProviderHost>(new ServiceWorkerProviderHost( |
+ ServiceWorkerProviderHost::kVirtualProcessIDForNavigationRequest, |
+ MSG_ROUTING_NONE, next_navigation_provider_host_id_++, |
+ SERVICE_WORKER_PROVIDER_FOR_WINDOW, AsWeakPtr(), nullptr)); |
+} |
+ |
+void ServiceWorkerContextCore::RegisterNavigationProviderHost( |
+ scoped_ptr<ServiceWorkerProviderHost> provider_host) { |
+ navigation_provider_host_map_.add(provider_host->provider_id(), |
+ provider_host.Pass()); |
+} |
+ |
+scoped_ptr<ServiceWorkerProviderHost> |
+ServiceWorkerContextCore::TakeNavigationProviderHost( |
+ int navigation_provider_id) { |
+ return navigation_provider_host_map_.take(navigation_provider_id); |
+} |
+ |
void ServiceWorkerContextCore::RegisterProviderHostByClientID( |
const std::string& client_uuid, |
ServiceWorkerProviderHost* provider_host) { |