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 |