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

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

Issue 354643003: ServiceWorker: Support navigator.serviceWorker.active (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comment fix Created 6 years, 5 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 e30a6b2d60c29bbef230ca8f36846b69497ea6a3..946397d56042b0d3d1976e233003088750e826cd 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -30,8 +30,10 @@ ServiceWorkerProviderHost::ServiceWorkerProviderHost(
}
ServiceWorkerProviderHost::~ServiceWorkerProviderHost() {
+ if (controlling_version_)
+ controlling_version_->RemoveControllee(this);
if (active_version_)
- active_version_->RemoveControllee(this);
+ active_version_->RemovePotentialControllee(this);
if (waiting_version_)
waiting_version_->RemovePotentialControllee(this);
if (installing_version_)
@@ -43,6 +45,25 @@ void ServiceWorkerProviderHost::SetDocumentUrl(const GURL& url) {
document_url_ = url;
}
+void ServiceWorkerProviderHost::SetControllerVersion(
+ ServiceWorkerVersion* version) {
+ DCHECK(CanAssociateVersion(version));
+ if (version == controlling_version_)
+ return;
+ scoped_refptr<ServiceWorkerVersion> previous_version = controlling_version_;
+ controlling_version_ = version;
+ if (version)
+ version->AddControllee(this);
+ if (previous_version)
+ previous_version->RemoveControllee(this);
+
+ if (!dispatcher_host_)
+ return; // Could be NULL in some tests.
+
+ dispatcher_host_->Send(new ServiceWorkerMsg_SetControllerServiceWorker(
+ kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version)));
+}
+
void ServiceWorkerProviderHost::SetActiveVersion(
ServiceWorkerVersion* version) {
DCHECK(CanAssociateVersion(version));
@@ -51,14 +72,14 @@ void ServiceWorkerProviderHost::SetActiveVersion(
scoped_refptr<ServiceWorkerVersion> previous_version = active_version_;
active_version_ = version;
if (version)
- version->AddControllee(this);
+ version->AddPotentialControllee(this);
if (previous_version)
- previous_version->RemoveControllee(this);
+ previous_version->RemovePotentialControllee(this);
if (!dispatcher_host_)
return; // Could be NULL in some tests.
- dispatcher_host_->Send(new ServiceWorkerMsg_SetControllerServiceWorker(
+ dispatcher_host_->Send(new ServiceWorkerMsg_SetActiveServiceWorker(
kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version)));
}
@@ -109,6 +130,8 @@ void ServiceWorkerProviderHost::UnsetVersion(ServiceWorkerVersion* version) {
SetWaitingVersion(NULL);
else if (active_version_ == version)
SetActiveVersion(NULL);
+ else if (controlling_version_ == version)
+ SetControllerVersion(NULL);
}
bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) {
@@ -161,6 +184,8 @@ bool ServiceWorkerProviderHost::CanAssociateVersion(
return true;
ServiceWorkerVersion* already_associated_version = NULL;
+ if (controlling_version_)
+ already_associated_version = controlling_version_;
if (active_version_)
already_associated_version = active_version_;
else if (waiting_version_)

Powered by Google App Engine
This is Rietveld 408576698