Index: content/browser/service_worker/service_worker_provider_host.cc |
diff --git a/content/browser/service_worker/service_worker_provider_host.cc b/content/browser/service_worker/service_worker_provider_host.cc |
index 4cc054a7f021f2b7d42d0c12ac323b71a61fd55a..7d887c5a3458e70397968142ef2b2d93a6e246d2 100644 |
--- a/content/browser/service_worker/service_worker_provider_host.cc |
+++ b/content/browser/service_worker/service_worker_provider_host.cc |
@@ -60,7 +60,7 @@ void ServiceWorkerProviderHost::OnVersionAttributesChanged( |
void ServiceWorkerProviderHost::OnRegistrationFailed( |
ServiceWorkerRegistration* registration) { |
DCHECK_EQ(associated_registration_.get(), registration); |
- UnassociateRegistration(); |
+ DisassociateRegistration(); |
} |
void ServiceWorkerProviderHost::SetDocumentUrl(const GURL& url) { |
@@ -116,15 +116,32 @@ void ServiceWorkerProviderHost::AssociateRegistration( |
DecreaseProcessReference(associated_registration_->pattern()); |
IncreaseProcessReference(registration->pattern()); |
+ if (dispatcher_host_) { |
+ ServiceWorkerRegistrationHandle* handle = |
+ dispatcher_host_->GetOrCreateRegistrationHandle( |
+ provider_id(), registration); |
+ |
+ ServiceWorkerVersionAttributes attrs; |
+ attrs.installing = handle->CreateServiceWorkerHandleAndPass( |
+ registration->installing_version()); |
+ attrs.waiting = handle->CreateServiceWorkerHandleAndPass( |
+ registration->waiting_version()); |
+ attrs.active = handle->CreateServiceWorkerHandleAndPass( |
+ registration->active_version()); |
+ |
+ dispatcher_host_->Send(new ServiceWorkerMsg_AssociateRegistration( |
+ kDocumentMainThreadId, provider_id(), handle->GetObjectInfo(), attrs)); |
+ } |
+ |
associated_registration_ = registration; |
- registration->AddListener(this); |
+ associated_registration_->AddListener(this); |
installing_version_ = registration->installing_version(); |
waiting_version_ = registration->waiting_version(); |
active_version_ = registration->active_version(); |
SetControllerVersionAttribute(registration->active_version()); |
} |
-void ServiceWorkerProviderHost::UnassociateRegistration() { |
+void ServiceWorkerProviderHost::DisassociateRegistration() { |
if (!associated_registration_.get()) |
return; |
DecreaseProcessReference(associated_registration_->pattern()); |
@@ -134,6 +151,11 @@ void ServiceWorkerProviderHost::UnassociateRegistration() { |
waiting_version_ = NULL; |
active_version_ = NULL; |
SetControllerVersionAttribute(NULL); |
+ |
+ if (dispatcher_host_) { |
+ dispatcher_host_->Send(new ServiceWorkerMsg_DisassociateRegistration( |
+ kDocumentMainThreadId, provider_id())); |
+ } |
} |
scoped_ptr<ServiceWorkerRequestHandler> |