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

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

Issue 445883003: ServiceWorker: Consolidate version change messages (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove ctor/dtor 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_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 8112f3dd4977e6d0eafe3a6a726db7488c0bc901..9e29a107af189c8d9e0be81db7876078f2559408 100644
--- a/content/browser/service_worker/service_worker_provider_host.cc
+++ b/content/browser/service_worker/service_worker_provider_host.cc
@@ -49,12 +49,9 @@ void ServiceWorkerProviderHost::OnVersionAttributesChanged(
ServiceWorkerRegistration* registration,
ChangedVersionAttributesMask changed_mask,
const ServiceWorkerRegistrationInfo& info) {
michaeln 2014/08/11 22:15:41 maybe DCHECK(registration == accociated_registrati
nhiroki 2014/08/12 01:45:56 Done.
- if (changed_mask.installing_changed())
- SetInstallingVersion(registration->installing_version());
- if (changed_mask.waiting_changed())
- SetWaitingVersion(registration->waiting_version());
- if (changed_mask.active_changed())
- SetActiveVersion(registration->active_version());
+ SetVersionAttributes(registration->installing_version(),
+ registration->waiting_version(),
+ registration->active_version());
}
void ServiceWorkerProviderHost::OnRegistrationFailed(
@@ -69,93 +66,102 @@ 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.
+void ServiceWorkerProviderHost::SetVersionAttributes(
+ ServiceWorkerVersion* installing_version,
+ ServiceWorkerVersion* waiting_version,
+ ServiceWorkerVersion* active_version) {
+ ChangedVersionAttributesMask mask;
+
+ ChangedVersionAttributesMask::AttributeType type =
+ ChangedVersionAttributesMask::INSTALLING_VERSION;
+ if (CanSetVersionAttribute(type, installing_version)) {
michaeln 2014/08/11 22:15:41 could this be replace with if (installing_version
nhiroki 2014/08/12 01:45:56 Done.
+ SetVersionAttributesInternal(type, installing_version);
+ mask.add(type);
+ }
- dispatcher_host_->Send(new ServiceWorkerMsg_SetControllerServiceWorker(
- kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version)));
-}
+ type = ChangedVersionAttributesMask::WAITING_VERSION;
+ if (CanSetVersionAttribute(type, waiting_version)) {
+ SetVersionAttributesInternal(type, waiting_version);
+ mask.add(type);
+ }
-void ServiceWorkerProviderHost::SetActiveVersion(
- ServiceWorkerVersion* version) {
- DCHECK(CanAssociateVersion(version));
- if (version == active_version_)
- return;
- scoped_refptr<ServiceWorkerVersion> previous_version = active_version_;
- active_version_ = version;
- if (version)
- version->AddPotentialControllee(this);
- if (previous_version)
- previous_version->RemovePotentialControllee(this);
+ type = ChangedVersionAttributesMask::ACTIVE_VERSION;
+ if (CanSetVersionAttribute(type, active_version)) {
+ SetVersionAttributesInternal(type, active_version);
+ mask.add(type);
+ }
if (!dispatcher_host_)
return; // Could be NULL in some tests.
+ if (!mask.changed())
+ return;
- dispatcher_host_->Send(new ServiceWorkerMsg_SetActiveServiceWorker(
- kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version)));
+ ServiceWorkerVersionAttributes attributes;
+ if (mask.installing_changed())
+ attributes.installing = CreateHandleAndPass(installing_version);
+ if (mask.waiting_changed())
+ attributes.waiting = CreateHandleAndPass(waiting_version);
+ if (mask.active_changed())
+ attributes.active = CreateHandleAndPass(active_version);
+
+ dispatcher_host_->Send(new ServiceWorkerMsg_SetVersionAttributes(
+ kDocumentMainThreadId, provider_id(), mask.changed(), attributes));
}
-void ServiceWorkerProviderHost::SetWaitingVersion(
+void ServiceWorkerProviderHost::SetVersionAttributesInternal(
+ ChangedVersionAttributesMask::AttributeType type,
ServiceWorkerVersion* version) {
michaeln 2014/08/11 22:15:41 if this method took a ptr to the version and a ptr
nhiroki 2014/08/12 01:45:56 Done.
- DCHECK(CanAssociateVersion(version));
- if (version == waiting_version_)
- return;
- scoped_refptr<ServiceWorkerVersion> previous_version = waiting_version_;
- waiting_version_ = version;
+ DCHECK(CanSetVersionAttribute(type, version));
+ scoped_refptr<ServiceWorkerVersion> previous_version;
+
+ switch (type) {
+ case ChangedVersionAttributesMask::INSTALLING_VERSION:
+ previous_version = installing_version_;
+ installing_version_ = version;
+ break;
+ case ChangedVersionAttributesMask::WAITING_VERSION:
+ previous_version = waiting_version_;
+ waiting_version_ = version;
+ break;
+ case ChangedVersionAttributesMask::ACTIVE_VERSION:
+ previous_version = active_version_;
+ active_version_ = version;
+ break;
+ default:
+ NOTREACHED() << "Unsupported attribute type: " << type;
+ break;
+ }
+
if (version)
version->AddPotentialControllee(this);
if (previous_version)
previous_version->RemovePotentialControllee(this);
-
- if (!dispatcher_host_)
- return; // Could be NULL in some tests.
-
- dispatcher_host_->Send(new ServiceWorkerMsg_SetWaitingServiceWorker(
- kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version)));
}
-void ServiceWorkerProviderHost::SetInstallingVersion(
+void ServiceWorkerProviderHost::SetControllerVersionAttribute(
ServiceWorkerVersion* version) {
- DCHECK(CanAssociateVersion(version));
- if (version == installing_version_)
+ if (!CanSetVersionAttribute(ChangedVersionAttributesMask::CONTROLLING_VERSION,
michaeln 2014/08/11 22:15:41 can this be simplified to if (version == controlli
nhiroki 2014/08/12 01:45:56 Done.
+ version)) {
return;
- scoped_refptr<ServiceWorkerVersion> previous_version = installing_version_;
- installing_version_ = version;
+ }
+
+ scoped_refptr<ServiceWorkerVersion> previous_version = controlling_version_;
+ controlling_version_ = version;
if (version)
- version->AddPotentialControllee(this);
+ version->AddControllee(this);
if (previous_version)
- previous_version->RemovePotentialControllee(this);
+ previous_version->RemoveControllee(this);
if (!dispatcher_host_)
return; // Could be NULL in some tests.
- dispatcher_host_->Send(new ServiceWorkerMsg_SetInstallingServiceWorker(
+ dispatcher_host_->Send(new ServiceWorkerMsg_SetControllerServiceWorker(
kDocumentMainThreadId, provider_id(), CreateHandleAndPass(version)));
}
-void ServiceWorkerProviderHost::UnsetVersion(ServiceWorkerVersion* version) {
- if (!version)
- return;
- if (installing_version_ == version)
- SetInstallingVersion(NULL);
- else if (waiting_version_ == version)
- SetWaitingVersion(NULL);
- else if (active_version_ == version)
- SetActiveVersion(NULL);
- else if (controlling_version_ == version)
- SetControllerVersion(NULL);
+void ServiceWorkerProviderHost::ClearVersionAttributes() {
+ SetVersionAttributes(NULL, NULL, NULL);
+ SetControllerVersionAttribute(NULL);
}
bool ServiceWorkerProviderHost::SetHostedVersionId(int64 version_id) {
@@ -185,10 +191,10 @@ void ServiceWorkerProviderHost::AssociateRegistration(
DCHECK(CanAssociateRegistration(registration));
associated_registration_ = registration;
registration->AddListener(this);
-
- SetActiveVersion(registration->active_version());
- SetInstallingVersion(registration->installing_version());
- SetWaitingVersion(registration->waiting_version());
+ SetVersionAttributes(registration->installing_version(),
+ registration->waiting_version(),
+ registration->active_version());
+ SetControllerVersionAttribute(registration->active_version());
}
void ServiceWorkerProviderHost::UnassociateRegistration() {
@@ -196,11 +202,7 @@ void ServiceWorkerProviderHost::UnassociateRegistration() {
return;
associated_registration_->RemoveListener(this);
associated_registration_ = NULL;
-
- SetActiveVersion(NULL);
- SetInstallingVersion(NULL);
- SetWaitingVersion(NULL);
- SetControllerVersion(NULL);
+ ClearVersionAttributes();
}
scoped_ptr<ServiceWorkerRequestHandler>
@@ -221,28 +223,30 @@ ServiceWorkerProviderHost::CreateRequestHandler(
return scoped_ptr<ServiceWorkerRequestHandler>();
}
-bool ServiceWorkerProviderHost::CanAssociateVersion(
+bool ServiceWorkerProviderHost::CanSetVersionAttribute(
michaeln 2014/08/11 22:15:41 I think this method could maybe be simplified or e
nhiroki 2014/08/12 01:45:56 Ah, good point! I think we can completely remove t
+ ChangedVersionAttributesMask::AttributeType type,
ServiceWorkerVersion* version) {
if (!context_)
return false;
if (running_hosted_version_)
return false;
- if (!version)
- return true;
+ if (!associated_registration_)
+ return false;
+ if (version && version->registration_id() != associated_registration_->id())
+ return false;
- 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_)
- already_associated_version = waiting_version_;
- else if (installing_version_)
- already_associated_version = installing_version_;
-
- return !already_associated_version ||
- already_associated_version->registration_id() ==
- version->registration_id();
+ switch (type) {
+ case ChangedVersionAttributesMask::INSTALLING_VERSION:
+ return installing_version_ != version;
+ case ChangedVersionAttributesMask::WAITING_VERSION:
+ return waiting_version_ != version;
+ case ChangedVersionAttributesMask::ACTIVE_VERSION:
+ return active_version_ != version;
+ case ChangedVersionAttributesMask::CONTROLLING_VERSION:
+ return controlling_version_ != version;
+ }
+ NOTREACHED();
+ return false;
}
bool ServiceWorkerProviderHost::CanAssociateRegistration(

Powered by Google App Engine
This is Rietveld 408576698