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

Unified Diff: content/browser/service_worker/service_worker_dispatcher_host.cc

Issue 463013002: ServiceWorker: Implement updatefound event and version attributes (Chromium) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address for comments Created 6 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/browser/service_worker/service_worker_dispatcher_host.cc
diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc
index 2c68c82a3ef598b0c94388ea3e0f3f08943f3bcb..47885d1db6ce9625994225d9102cdf3098cebe12 100644
--- a/content/browser/service_worker/service_worker_dispatcher_host.cc
+++ b/content/browser/service_worker/service_worker_dispatcher_host.cc
@@ -13,6 +13,7 @@
#include "content/browser/service_worker/service_worker_context_wrapper.h"
#include "content/browser/service_worker/service_worker_handle.h"
#include "content/browser/service_worker/service_worker_registration.h"
+#include "content/browser/service_worker/service_worker_registration_handle.h"
#include "content/browser/service_worker/service_worker_utils.h"
#include "content/common/service_worker/embedded_worker_messages.h"
#include "content/common/service_worker/service_worker_messages.h"
@@ -135,6 +136,10 @@ bool ServiceWorkerDispatcherHost::OnMessageReceived(
OnIncrementServiceWorkerRefCount)
IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount,
OnDecrementServiceWorkerRefCount)
+ IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_IncrementRegistrationRefCount,
+ OnIncrementRegistrationRefCount)
+ IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_DecrementRegistrationRefCount,
+ OnDecrementRegistrationRefCount)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -165,6 +170,12 @@ void ServiceWorkerDispatcherHost::RegisterServiceWorkerHandle(
handles_.AddWithID(handle.release(), handle_id);
}
+void ServiceWorkerDispatcherHost::RegisterServiceWorkerRegistrationHandle(
+ scoped_ptr<ServiceWorkerRegistrationHandle> handle) {
+ int handle_id = handle->handle_id();
+ registration_handles_.AddWithID(handle.release(), handle_id);
+}
+
void ServiceWorkerDispatcherHost::OnRegisterServiceWorker(
int thread_id,
int request_id,
@@ -331,6 +342,23 @@ ServiceWorkerHandle* ServiceWorkerDispatcherHost::FindHandle(int provider_id,
return NULL;
}
+ServiceWorkerRegistrationHandle*
+ServiceWorkerDispatcherHost::FindRegistrationHandle(int provider_id,
+ int64 registration_id) {
+ for (IDMap<ServiceWorkerRegistrationHandle, IDMapOwnPointer>::iterator
+ iter(&registration_handles_);
+ !iter.IsAtEnd();
+ iter.Advance()) {
+ ServiceWorkerRegistrationHandle* handle = iter.GetCurrentValue();
+ DCHECK(handle);
+ if (handle->provider_id() == provider_id && handle->registration() &&
+ handle->registration()->id() == registration_id) {
+ return handle;
+ }
+ }
+ return NULL;
+}
+
void ServiceWorkerDispatcherHost::RegistrationComplete(
int thread_id,
int provider_id,
@@ -350,6 +378,7 @@ void ServiceWorkerDispatcherHost::RegistrationComplete(
DCHECK(version);
DCHECK_EQ(registration_id, version->registration_id());
ServiceWorkerObjectInfo info;
+
ServiceWorkerHandle* handle = FindHandle(provider_id, version_id);
if (handle) {
DCHECK_EQ(thread_id, handle->thread_id());
@@ -361,8 +390,27 @@ void ServiceWorkerDispatcherHost::RegistrationComplete(
info = new_handle->GetObjectInfo();
RegisterServiceWorkerHandle(new_handle.Pass());
}
+
+ ServiceWorkerRegistration* registration =
+ GetContext()->GetLiveRegistration(registration_id);
+ DCHECK(registration);
+
+ ServiceWorkerRegistrationHandle* registration_handle =
+ FindRegistrationHandle(provider_id, registration_id);
+ int registration_handle_id = kInvalidServiceWorkerRegistrationHandleId;
+ if (registration_handle) {
+ registration_handle->IncrementRefCount();
+ registration_handle_id = registration_handle->handle_id();
+ } else {
+ scoped_ptr<ServiceWorkerRegistrationHandle> new_handle(
+ new ServiceWorkerRegistrationHandle(
+ GetContext()->AsWeakPtr(), this, provider_id, registration));
+ registration_handle_id = new_handle->handle_id();
+ RegisterServiceWorkerRegistrationHandle(new_handle.Pass());
+ }
+
Send(new ServiceWorkerMsg_ServiceWorkerRegistered(
- thread_id, request_id, info));
+ thread_id, request_id, registration_handle_id, info));
}
void ServiceWorkerDispatcherHost::OnWorkerScriptLoaded(int embedded_worker_id) {
@@ -467,6 +515,30 @@ void ServiceWorkerDispatcherHost::OnDecrementServiceWorkerRefCount(
handles_.Remove(handle_id);
}
+void ServiceWorkerDispatcherHost::OnIncrementRegistrationRefCount(
+ int registration_handle_id) {
+ ServiceWorkerRegistrationHandle* handle =
+ registration_handles_.Lookup(registration_handle_id);
+ if (!handle) {
+ BadMessageReceived();
+ return;
+ }
+ handle->IncrementRefCount();
+}
+
+void ServiceWorkerDispatcherHost::OnDecrementRegistrationRefCount(
+ int registration_handle_id) {
+ ServiceWorkerRegistrationHandle* handle =
+ registration_handles_.Lookup(registration_handle_id);
+ if (!handle) {
+ BadMessageReceived();
+ return;
+ }
+ handle->DecrementRefCount();
+ if (handle->HasNoRefCount())
+ registration_handles_.Remove(registration_handle_id);
+}
+
void ServiceWorkerDispatcherHost::UnregistrationComplete(
int thread_id,
int request_id,

Powered by Google App Engine
This is Rietveld 408576698