Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1949)

Unified Diff: content/child/service_worker/service_worker_dispatcher.cc

Issue 1307133003: ServiceWorker: Make APIs that return ServiceWorkerRegistration coin a new JS object (2/3) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698