Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/service_worker/service_worker_registration.h" | 5 #include "content/browser/service_worker/service_worker_registration.h" |
| 6 | 6 |
| 7 #include "content/browser/service_worker/service_worker_context_core.h" | 7 #include "content/browser/service_worker/service_worker_context_core.h" |
| 8 #include "content/browser/service_worker/service_worker_info.h" | 8 #include "content/browser/service_worker/service_worker_info.h" |
| 9 #include "content/public/browser/browser_thread.h" | 9 #include "content/public/browser/browser_thread.h" |
| 10 | 10 |
| 11 namespace content { | 11 namespace content { |
| 12 | 12 |
| 13 namespace { | |
| 14 | |
| 15 ServiceWorkerVersionInfo GetVersionInfo(ServiceWorkerVersion* version) { | |
| 16 if (!version) | |
| 17 return ServiceWorkerVersionInfo(); | |
| 18 return version->GetInfo(); | |
| 19 } | |
| 20 | |
| 21 } // namespace | |
| 22 | |
| 13 ServiceWorkerRegistration::ServiceWorkerRegistration( | 23 ServiceWorkerRegistration::ServiceWorkerRegistration( |
| 14 const GURL& pattern, | 24 const GURL& pattern, |
| 15 const GURL& script_url, | 25 const GURL& script_url, |
| 16 int64 registration_id, | 26 int64 registration_id, |
| 17 base::WeakPtr<ServiceWorkerContextCore> context) | 27 base::WeakPtr<ServiceWorkerContextCore> context) |
| 18 : pattern_(pattern), | 28 : pattern_(pattern), |
| 19 script_url_(script_url), | 29 script_url_(script_url), |
| 20 registration_id_(registration_id), | 30 registration_id_(registration_id), |
| 21 is_shutdown_(false), | |
| 22 context_(context) { | 31 context_(context) { |
| 23 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 32 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 24 DCHECK(context_); | 33 DCHECK(context_); |
| 25 context_->AddLiveRegistration(this); | 34 context_->AddLiveRegistration(this); |
| 26 } | 35 } |
| 27 | 36 |
| 28 ServiceWorkerRegistration::~ServiceWorkerRegistration() { | 37 ServiceWorkerRegistration::~ServiceWorkerRegistration() { |
| 29 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 38 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 30 if (context_) | 39 if (context_) |
| 31 context_->RemoveLiveRegistration(registration_id_); | 40 context_->RemoveLiveRegistration(registration_id_); |
| 32 } | 41 } |
| 33 | 42 |
| 43 void ServiceWorkerRegistration::AddListener(Listener* listener) { | |
| 44 listeners_.AddObserver(listener); | |
| 45 } | |
| 46 | |
| 47 void ServiceWorkerRegistration::RemoveListener(Listener* listener) { | |
| 48 listeners_.RemoveObserver(listener); | |
| 49 } | |
| 50 | |
| 34 ServiceWorkerRegistrationInfo ServiceWorkerRegistration::GetInfo() { | 51 ServiceWorkerRegistrationInfo ServiceWorkerRegistration::GetInfo() { |
| 35 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 52 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 36 return ServiceWorkerRegistrationInfo( | 53 return ServiceWorkerRegistrationInfo( |
| 37 script_url(), | 54 script_url(), |
| 38 pattern(), | 55 pattern(), |
| 39 registration_id_, | 56 registration_id_, |
| 40 active_version_ ? active_version_->GetInfo() : ServiceWorkerVersionInfo(), | 57 GetVersionInfo(active_version_), |
| 41 waiting_version_ ? waiting_version_->GetInfo() | 58 GetVersionInfo(waiting_version_), |
| 42 : ServiceWorkerVersionInfo()); | 59 GetVersionInfo(installing_version_)); |
| 43 } | 60 } |
| 44 | 61 |
| 45 ServiceWorkerVersion* ServiceWorkerRegistration::GetNewestVersion() { | 62 void ServiceWorkerRegistration::SetActiveVersion( |
| 46 if (active_version()) | 63 ServiceWorkerVersion* version) { |
| 47 return active_version(); | 64 SetVersionInternal(version, &active_version_, |
| 48 return waiting_version(); | 65 ChangedVersionAttributesMask::ACTIVE_VERSION); |
|
nhiroki
2014/07/02 07:25:12
nit: indent
| |
| 49 } | 66 } |
| 50 | 67 |
| 51 void ServiceWorkerRegistration::ActivateWaitingVersion() { | 68 void ServiceWorkerRegistration::SetWaitingVersion( |
| 52 active_version_->SetStatus(ServiceWorkerVersion::REDUNDANT); | 69 ServiceWorkerVersion* version) { |
| 53 active_version_ = waiting_version_; | 70 SetVersionInternal(version, &waiting_version_, |
| 54 // TODO(kinuko): This should be set to ACTIVATING until activation finishes. | 71 ChangedVersionAttributesMask::WAITING_VERSION); |
|
nhiroki
2014/07/02 07:25:12
ditto.
| |
| 55 active_version_->SetStatus(ServiceWorkerVersion::ACTIVE); | |
| 56 waiting_version_ = NULL; | |
| 57 } | 72 } |
| 58 | 73 |
| 74 void ServiceWorkerRegistration::SetInstallingVersion( | |
| 75 ServiceWorkerVersion* version) { | |
| 76 SetVersionInternal(version, &installing_version_, | |
| 77 ChangedVersionAttributesMask::INSTALLING_VERSION); | |
|
nhiroki
2014/07/02 07:25:12
ditto.
| |
| 78 } | |
| 79 | |
| 80 void ServiceWorkerRegistration::UnsetVersion(ServiceWorkerVersion* version) { | |
| 81 if (!version) | |
| 82 return; | |
| 83 ChangedVersionAttributesMask mask; | |
| 84 UnsetVersionInternal(version, &mask); | |
| 85 if (mask.changed()) { | |
| 86 ServiceWorkerRegistrationInfo info = GetInfo(); | |
| 87 FOR_EACH_OBSERVER(Listener, listeners_, | |
| 88 OnVersionAttributesChanged(this, mask, info)); | |
| 89 } | |
| 90 } | |
| 91 | |
| 92 void ServiceWorkerRegistration::SetVersionInternal( | |
| 93 ServiceWorkerVersion* version, | |
| 94 scoped_refptr<ServiceWorkerVersion>* data_member, | |
| 95 int change_flag) { | |
| 96 if (version == data_member->get()) | |
| 97 return; | |
| 98 ChangedVersionAttributesMask mask; | |
| 99 if (version) | |
| 100 UnsetVersionInternal(version, &mask); | |
| 101 *data_member = version; | |
| 102 mask.add(change_flag); | |
| 103 ServiceWorkerRegistrationInfo info = GetInfo(); | |
| 104 FOR_EACH_OBSERVER(Listener, listeners_, | |
| 105 OnVersionAttributesChanged(this, mask, info)); | |
| 106 } | |
| 107 | |
| 108 void ServiceWorkerRegistration::UnsetVersionInternal( | |
|
nhiroki
2014/07/02 07:25:12
nit: indent
| |
| 109 ServiceWorkerVersion* version, | |
| 110 ChangedVersionAttributesMask* mask) { | |
| 111 DCHECK(version); | |
| 112 if (installing_version_ == version) { | |
| 113 installing_version_ = NULL; | |
| 114 mask->add(ChangedVersionAttributesMask::INSTALLING_VERSION); | |
| 115 } else if (waiting_version_ == version) { | |
|
falken
2014/07/02 05:42:11
extra space before the ==
| |
| 116 waiting_version_ = NULL; | |
| 117 mask->add(ChangedVersionAttributesMask::WAITING_VERSION); | |
| 118 } else if (active_version_ == version) { | |
| 119 active_version_ = NULL; | |
| 120 mask->add(ChangedVersionAttributesMask::ACTIVE_VERSION); | |
| 121 } | |
| 122 } | |
| 123 | |
| 124 | |
|
nhiroki
2014/07/02 07:25:12
nit: an extra empty line
| |
| 59 } // namespace content | 125 } // namespace content |
| OLD | NEW |