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

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

Issue 825383004: ServiceWorker: Send state change events via SWProviderHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 11 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_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 6153b93a747902920cd1602d5151efd0853a289b..12512a122eda99d33d3713f994ada6064a231219 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -121,7 +121,7 @@ void ServiceWorkerProviderHost::SetControllerVersionAttribute(
dispatcher_host_->Send(new ServiceWorkerMsg_SetControllerServiceWorker(
kDocumentMainThreadId, provider_id(),
- dispatcher_host_->CreateAndRegisterServiceWorkerHandle(version),
+ CreateAndRegisterServiceWorkerHandle(version),
should_notify_controllerchange));
}
@@ -204,6 +204,20 @@ ServiceWorkerProviderHost::CreateRequestHandler(
return scoped_ptr<ServiceWorkerRequestHandler>();
}
+ServiceWorkerObjectInfo
+ServiceWorkerProviderHost::CreateAndRegisterServiceWorkerHandle(
+ ServiceWorkerVersion* version) {
+ DCHECK(dispatcher_host_);
+ ServiceWorkerObjectInfo info;
+ if (context_ && version) {
+ scoped_ptr<ServiceWorkerHandle> handle =
+ ServiceWorkerHandle::Create(context_, AsWeakPtr(), version);
+ info = handle->GetObjectInfo();
+ dispatcher_host_->RegisterServiceWorkerHandle(handle.Pass());
+ }
+ return info;
+}
+
bool ServiceWorkerProviderHost::CanAssociateRegistration(
ServiceWorkerRegistration* registration) {
if (!context_)
@@ -298,27 +312,76 @@ void ServiceWorkerProviderHost::CompleteCrossSiteTransfer(
if (dispatcher_host_ && associated_registration_->active_version()) {
dispatcher_host_->Send(new ServiceWorkerMsg_SetControllerServiceWorker(
kDocumentMainThreadId, provider_id(),
- dispatcher_host_->CreateAndRegisterServiceWorkerHandle(
+ CreateAndRegisterServiceWorkerHandle(
associated_registration_->active_version()),
false /* shouldNotifyControllerChange */));
}
}
}
+void ServiceWorkerProviderHost::SendUpdateFoundMessage(
+ const ServiceWorkerRegistrationObjectInfo& object_info) {
+ if (!dispatcher_host_)
+ return; // Could be nullptr in some tests.
+
+ // TODO(nhiroki): Queue the message if a receiver's thread is not ready yet
+ // (http://crbug.com/437677).
+ dispatcher_host_->Send(new ServiceWorkerMsg_UpdateFound(
+ kDocumentMainThreadId, object_info));
+}
+
+void ServiceWorkerProviderHost::SendSetVersionAttributesMessage(
+ int registration_handle_id,
+ ChangedVersionAttributesMask changed_mask,
+ ServiceWorkerVersion* installing_version,
+ ServiceWorkerVersion* waiting_version,
+ ServiceWorkerVersion* active_version) {
+ if (!dispatcher_host_)
+ return; // Could be nullptr in some tests.
+ if (!changed_mask.changed())
+ return;
+
+ ServiceWorkerVersionAttributes attrs;
+ if (changed_mask.installing_changed())
+ attrs.installing = CreateAndRegisterServiceWorkerHandle(installing_version);
+ if (changed_mask.waiting_changed())
+ attrs.waiting = CreateAndRegisterServiceWorkerHandle(waiting_version);
+ if (changed_mask.active_changed())
+ attrs.active = CreateAndRegisterServiceWorkerHandle(active_version);
+
+ // TODO(nhiroki): Queue the message if a receiver's thread is not ready yet
+ // (http://crbug.com/437677).
+ dispatcher_host_->Send(new ServiceWorkerMsg_SetVersionAttributes(
+ kDocumentMainThreadId, provider_id_, registration_handle_id,
+ changed_mask.changed(), attrs));
+}
+
+void ServiceWorkerProviderHost::SendServiceWorkerStateChangedMessage(
+ int worker_handle_id,
+ blink::WebServiceWorkerState state) {
+ if (!dispatcher_host_)
+ return;
+
+ // TODO(nhiroki): Queue the message if a receiver's thread is not ready yet
+ // (http://crbug.com/437677).
+ dispatcher_host_->Send(new ServiceWorkerMsg_ServiceWorkerStateChanged(
+ kDocumentMainThreadId, worker_handle_id, state));
+}
+
void ServiceWorkerProviderHost::SendAssociateRegistrationMessage() {
if (!dispatcher_host_)
return;
ServiceWorkerRegistrationHandle* handle =
dispatcher_host_->GetOrCreateRegistrationHandle(
- provider_id(), associated_registration_.get());
+ AsWeakPtr(), associated_registration_.get());
ServiceWorkerVersionAttributes attrs;
- attrs.installing = dispatcher_host_->CreateAndRegisterServiceWorkerHandle(
+ attrs.installing = CreateAndRegisterServiceWorkerHandle(
associated_registration_->installing_version());
- attrs.waiting = dispatcher_host_->CreateAndRegisterServiceWorkerHandle(
+ attrs.waiting = CreateAndRegisterServiceWorkerHandle(
associated_registration_->waiting_version());
- attrs.active = dispatcher_host_->CreateAndRegisterServiceWorkerHandle(
+ attrs.active = CreateAndRegisterServiceWorkerHandle(
associated_registration_->active_version());
dispatcher_host_->Send(new ServiceWorkerMsg_AssociateRegistration(

Powered by Google App Engine
This is Rietveld 408576698