Index: content/child/service_worker/service_worker_dispatcher.cc |
diff --git a/content/child/service_worker/service_worker_dispatcher.cc b/content/child/service_worker/service_worker_dispatcher.cc |
index 4fd5de13d42ecdb6f2709c7627751fc3035de5a1..13b7fce556275362b9064de2a7dbe1047de83585 100644 |
--- a/content/child/service_worker/service_worker_dispatcher.cc |
+++ b/content/child/service_worker/service_worker_dispatcher.cc |
@@ -297,13 +297,13 @@ WebServiceWorkerImpl* ServiceWorkerDispatcher::GetServiceWorker( |
return new WebServiceWorkerImpl(handle_ref.Pass(), thread_safe_sender_.get()); |
} |
-WebServiceWorkerRegistrationImpl* |
-ServiceWorkerDispatcher::CreateServiceWorkerRegistration( |
+scoped_ptr<WebServiceWorkerRegistrationImpl> |
+ServiceWorkerDispatcher::CreateRegistration( |
const ServiceWorkerRegistrationObjectInfo& info, |
+ const ServiceWorkerVersionAttributes& attrs, |
bool adopt_handle) { |
DCHECK(!ContainsKey(registrations_, info.handle_id)); |
- if (info.handle_id == kInvalidServiceWorkerRegistrationHandleId) |
- return NULL; |
+ DCHECK_NE(kInvalidServiceWorkerRegistrationHandleId, info.handle_id); |
scoped_ptr<ServiceWorkerRegistrationHandleReference> handle_ref = |
adopt_handle ? ServiceWorkerRegistrationHandleReference::Adopt( |
@@ -313,7 +313,13 @@ ServiceWorkerDispatcher::CreateServiceWorkerRegistration( |
// WebServiceWorkerRegistrationImpl constructor calls |
// AddServiceWorkerRegistration. |
- return new WebServiceWorkerRegistrationImpl(handle_ref.Pass()); |
+ scoped_ptr<WebServiceWorkerRegistrationImpl> registration( |
+ new WebServiceWorkerRegistrationImpl(handle_ref.Pass())); |
+ |
+ registration->SetInstalling(GetServiceWorker(attrs.installing, adopt_handle)); |
+ registration->SetWaiting(GetServiceWorker(attrs.waiting, adopt_handle)); |
+ registration->SetActive(GetServiceWorker(attrs.active, adopt_handle)); |
+ return registration.Pass(); |
} |
// We can assume that this message handler is called before the worker context |
@@ -385,7 +391,7 @@ void ServiceWorkerDispatcher::OnRegistered( |
if (!callbacks) |
return; |
- callbacks->onSuccess(FindOrCreateRegistration(info, attrs)); |
+ callbacks->onSuccess(CreateRegistration(info, attrs, true).release()); |
pending_registration_callbacks_.Remove(request_id); |
} |
@@ -445,11 +451,11 @@ void ServiceWorkerDispatcher::OnDidGetRegistration( |
if (!callbacks) |
return; |
- WebServiceWorkerRegistrationImpl* registration = NULL; |
+ scoped_ptr<WebServiceWorkerRegistrationImpl> registration; |
if (info.handle_id != kInvalidServiceWorkerHandleId) |
- registration = FindOrCreateRegistration(info, attrs); |
+ registration = CreateRegistration(info, attrs, true); |
- callbacks->onSuccess(registration); |
+ callbacks->onSuccess(registration.release()); |
pending_get_registration_callbacks_.Remove(request_id); |
} |
@@ -481,7 +487,7 @@ void ServiceWorkerDispatcher::OnDidGetRegistrations( |
if (infos[i].handle_id != kInvalidServiceWorkerHandleId) { |
ServiceWorkerRegistrationObjectInfo info(infos[i]); |
ServiceWorkerVersionAttributes attr(attrs[i]); |
- (*registrations)[i] = FindOrCreateRegistration(info, attr); |
+ (*registrations)[i] = CreateRegistration(info, attr, true).release(); |
} |
} |
@@ -508,10 +514,7 @@ void ServiceWorkerDispatcher::OnDidGetRegistrationForReady( |
if (!callbacks) |
return; |
- WebServiceWorkerRegistrationImpl* registration = NULL; |
- DCHECK(info.handle_id != kInvalidServiceWorkerHandleId); |
- registration = FindOrCreateRegistration(info, attrs); |
- callbacks->onSuccess(registration); |
+ callbacks->onSuccess(CreateRegistration(info, attrs, true).release()); |
get_for_ready_callbacks_.Remove(request_id); |
} |
@@ -776,30 +779,4 @@ void ServiceWorkerDispatcher::RemoveServiceWorkerRegistration( |
registrations_.erase(registration_handle_id); |
} |
-WebServiceWorkerRegistrationImpl* |
-ServiceWorkerDispatcher::FindOrCreateRegistration( |
- const ServiceWorkerRegistrationObjectInfo& info, |
- const ServiceWorkerVersionAttributes& attrs) { |
- RegistrationObjectMap::iterator found = registrations_.find(info.handle_id); |
- if (found != registrations_.end()) { |
- ServiceWorkerRegistrationHandleReference::Adopt(info, |
- thread_safe_sender_.get()); |
- ServiceWorkerHandleReference::Adopt(attrs.installing, |
- thread_safe_sender_.get()); |
- ServiceWorkerHandleReference::Adopt(attrs.waiting, |
- thread_safe_sender_.get()); |
- ServiceWorkerHandleReference::Adopt(attrs.active, |
- thread_safe_sender_.get()); |
- return found->second; |
- } |
- |
- bool adopt_handle = true; |
- WebServiceWorkerRegistrationImpl* registration = |
- CreateServiceWorkerRegistration(info, adopt_handle); |
- registration->SetInstalling(GetServiceWorker(attrs.installing, adopt_handle)); |
- registration->SetWaiting(GetServiceWorker(attrs.waiting, adopt_handle)); |
- registration->SetActive(GetServiceWorker(attrs.active, adopt_handle)); |
- return registration; |
-} |
- |
} // namespace content |