Chromium Code Reviews| 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 7ea5029b10cdd734cdbf03d6ddd4442283eeb690..40a9cfb95072db9b23a2ca22190445ff31d73169 100644 |
| --- a/content/browser/service_worker/service_worker_registration.cc |
| +++ b/content/browser/service_worker/service_worker_registration.cc |
| @@ -10,6 +10,16 @@ |
| namespace content { |
| +namespace { |
| + |
| +ServiceWorkerVersionInfo GetVersionInfo(ServiceWorkerVersion* version) { |
| + if (!version) |
| + return ServiceWorkerVersionInfo(); |
| + return version->GetInfo(); |
| +} |
| + |
| +} // namespace |
| + |
| ServiceWorkerRegistration::ServiceWorkerRegistration( |
| const GURL& pattern, |
| const GURL& script_url, |
| @@ -18,7 +28,6 @@ ServiceWorkerRegistration::ServiceWorkerRegistration( |
| : pattern_(pattern), |
| script_url_(script_url), |
| registration_id_(registration_id), |
| - is_shutdown_(false), |
| context_(context) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| DCHECK(context_); |
| @@ -31,29 +40,86 @@ ServiceWorkerRegistration::~ServiceWorkerRegistration() { |
| context_->RemoveLiveRegistration(registration_id_); |
| } |
| +void ServiceWorkerRegistration::AddListener(Listener* listener) { |
| + listeners_.AddObserver(listener); |
| +} |
| + |
| +void ServiceWorkerRegistration::RemoveListener(Listener* listener) { |
| + listeners_.RemoveObserver(listener); |
| +} |
| + |
| ServiceWorkerRegistrationInfo ServiceWorkerRegistration::GetInfo() { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| return ServiceWorkerRegistrationInfo( |
| script_url(), |
| pattern(), |
| registration_id_, |
| - active_version_ ? active_version_->GetInfo() : ServiceWorkerVersionInfo(), |
| - waiting_version_ ? waiting_version_->GetInfo() |
| - : ServiceWorkerVersionInfo()); |
| + GetVersionInfo(active_version_), |
| + GetVersionInfo(waiting_version_), |
| + GetVersionInfo(installing_version_)); |
| } |
| -ServiceWorkerVersion* ServiceWorkerRegistration::GetNewestVersion() { |
| - if (active_version()) |
| - return active_version(); |
| - return waiting_version(); |
| +void ServiceWorkerRegistration::SetActiveVersion( |
| + ServiceWorkerVersion* version) { |
| + SetVersionInternal(version, &active_version_, |
| + ChangedVersionAttributesMask::ACTIVE_VERSION); |
|
nhiroki
2014/07/02 07:25:12
nit: indent
|
| } |
| -void ServiceWorkerRegistration::ActivateWaitingVersion() { |
| - active_version_->SetStatus(ServiceWorkerVersion::REDUNDANT); |
| - active_version_ = waiting_version_; |
| - // TODO(kinuko): This should be set to ACTIVATING until activation finishes. |
| - active_version_->SetStatus(ServiceWorkerVersion::ACTIVE); |
| - waiting_version_ = NULL; |
| +void ServiceWorkerRegistration::SetWaitingVersion( |
| + ServiceWorkerVersion* version) { |
| + SetVersionInternal(version, &waiting_version_, |
| + ChangedVersionAttributesMask::WAITING_VERSION); |
|
nhiroki
2014/07/02 07:25:12
ditto.
|
| } |
| +void ServiceWorkerRegistration::SetInstallingVersion( |
| + ServiceWorkerVersion* version) { |
| + SetVersionInternal(version, &installing_version_, |
| + ChangedVersionAttributesMask::INSTALLING_VERSION); |
|
nhiroki
2014/07/02 07:25:12
ditto.
|
| +} |
| + |
| +void ServiceWorkerRegistration::UnsetVersion(ServiceWorkerVersion* version) { |
| + if (!version) |
| + return; |
| + ChangedVersionAttributesMask mask; |
| + UnsetVersionInternal(version, &mask); |
| + if (mask.changed()) { |
| + ServiceWorkerRegistrationInfo info = GetInfo(); |
| + FOR_EACH_OBSERVER(Listener, listeners_, |
| + OnVersionAttributesChanged(this, mask, info)); |
| + } |
| +} |
| + |
| +void ServiceWorkerRegistration::SetVersionInternal( |
| + ServiceWorkerVersion* version, |
| + scoped_refptr<ServiceWorkerVersion>* data_member, |
| + int change_flag) { |
| + if (version == data_member->get()) |
| + return; |
| + ChangedVersionAttributesMask mask; |
| + if (version) |
| + UnsetVersionInternal(version, &mask); |
| + *data_member = version; |
| + mask.add(change_flag); |
| + ServiceWorkerRegistrationInfo info = GetInfo(); |
| + FOR_EACH_OBSERVER(Listener, listeners_, |
| + OnVersionAttributesChanged(this, mask, info)); |
| +} |
| + |
| + void ServiceWorkerRegistration::UnsetVersionInternal( |
|
nhiroki
2014/07/02 07:25:12
nit: indent
|
| + ServiceWorkerVersion* version, |
| + ChangedVersionAttributesMask* mask) { |
| + DCHECK(version); |
| + if (installing_version_ == version) { |
| + installing_version_ = NULL; |
| + mask->add(ChangedVersionAttributesMask::INSTALLING_VERSION); |
| + } else if (waiting_version_ == version) { |
|
falken
2014/07/02 05:42:11
extra space before the ==
|
| + waiting_version_ = NULL; |
| + mask->add(ChangedVersionAttributesMask::WAITING_VERSION); |
| + } else if (active_version_ == version) { |
| + active_version_ = NULL; |
| + mask->add(ChangedVersionAttributesMask::ACTIVE_VERSION); |
| + } |
| +} |
| + |
| + |
|
nhiroki
2014/07/02 07:25:12
nit: an extra empty line
|
| } // namespace content |