Index: content/browser/service_worker/service_worker_registration.cc |
diff --git a/content/browser/service_worker/service_worker_registration.cc b/content/browser/service_worker/service_worker_registration.cc |
index 26d45285dec88a02aede08a2a5ff296807917566..e3d0552cf0078bad77568586383ad784ebf3dda6 100644 |
--- a/content/browser/service_worker/service_worker_registration.cc |
+++ b/content/browser/service_worker/service_worker_registration.cc |
@@ -84,23 +84,54 @@ ServiceWorkerRegistrationInfo ServiceWorkerRegistration::GetInfo() { |
} |
void ServiceWorkerRegistration::SetActiveVersion( |
- ServiceWorkerVersion* version) { |
+ const scoped_refptr<ServiceWorkerVersion>& version) { |
should_activate_when_ready_ = false; |
- SetVersionInternal(version, &active_version_, |
- ChangedVersionAttributesMask::ACTIVE_VERSION); |
+ if (active_version_ == version) |
+ return; |
+ |
+ ChangedVersionAttributesMask mask; |
+ if (version) |
+ UnsetVersionInternal(version.get(), &mask); |
+ if (active_version_) |
+ active_version_->RemoveListener(this); |
+ active_version_ = version; |
+ if (active_version_) |
+ active_version_->AddListener(this); |
+ mask.add(ChangedVersionAttributesMask::ACTIVE_VERSION); |
+ |
+ FOR_EACH_OBSERVER(Listener, listeners_, |
+ OnVersionAttributesChanged(this, mask, GetInfo())); |
} |
void ServiceWorkerRegistration::SetWaitingVersion( |
- ServiceWorkerVersion* version) { |
+ const scoped_refptr<ServiceWorkerVersion>& version) { |
should_activate_when_ready_ = false; |
- SetVersionInternal(version, &waiting_version_, |
- ChangedVersionAttributesMask::WAITING_VERSION); |
+ if (waiting_version_ == version) |
+ return; |
+ |
+ ChangedVersionAttributesMask mask; |
+ if (version) |
+ UnsetVersionInternal(version.get(), &mask); |
+ waiting_version_ = version; |
+ mask.add(ChangedVersionAttributesMask::WAITING_VERSION); |
+ |
+ FOR_EACH_OBSERVER(Listener, listeners_, |
+ OnVersionAttributesChanged(this, mask, GetInfo())); |
} |
void ServiceWorkerRegistration::SetInstallingVersion( |
- ServiceWorkerVersion* version) { |
- SetVersionInternal(version, &installing_version_, |
- ChangedVersionAttributesMask::INSTALLING_VERSION); |
+ const scoped_refptr<ServiceWorkerVersion>& version) { |
+ if (installing_version_ == version) |
+ return; |
+ |
+ ChangedVersionAttributesMask mask; |
+ if (version) |
+ UnsetVersionInternal(version.get(), &mask); |
+ installing_version_ = version; |
+ mask.add(ChangedVersionAttributesMask::INSTALLING_VERSION); |
+ |
+ FOR_EACH_OBSERVER(Listener, listeners_, |
+ OnVersionAttributesChanged(this, mask, GetInfo())); |
} |
void ServiceWorkerRegistration::UnsetVersion(ServiceWorkerVersion* version) { |
@@ -115,27 +146,6 @@ void ServiceWorkerRegistration::UnsetVersion(ServiceWorkerVersion* version) { |
} |
} |
-void ServiceWorkerRegistration::SetVersionInternal( |
- ServiceWorkerVersion* version, |
- scoped_refptr<ServiceWorkerVersion>* data_member, |
- int change_flag) { |
- if (version == data_member->get()) |
- return; |
- scoped_refptr<ServiceWorkerVersion> protect(version); |
- ChangedVersionAttributesMask mask; |
- if (version) |
- UnsetVersionInternal(version, &mask); |
- if (*data_member && *data_member == active_version_) |
- active_version_->RemoveListener(this); |
- *data_member = version; |
- if (active_version_.get() && active_version_.get() == version) |
- active_version_->AddListener(this); |
- mask.add(change_flag); |
- ServiceWorkerRegistrationInfo info = GetInfo(); |
- FOR_EACH_OBSERVER(Listener, listeners_, |
- OnVersionAttributesChanged(this, mask, info)); |
-} |
- |
void ServiceWorkerRegistration::UnsetVersionInternal( |
ServiceWorkerVersion* version, |
ChangedVersionAttributesMask* mask) { |
@@ -278,7 +288,7 @@ void ServiceWorkerRegistration::ActivateWaitingVersion() { |
// "6. Set serviceWorkerRegistration.activeWorker to activatingWorker." |
// "7. Set serviceWorkerRegistration.waitingWorker to null." |
- SetActiveVersion(activating_version.get()); |
+ SetActiveVersion(activating_version); |
// "8. Run the [[UpdateState]] algorithm passing registration.activeWorker and |
// "activating" as arguments." |