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_context_wrapper.h" | 5 #include "content/browser/service_worker/service_worker_context_wrapper.h" |
6 | 6 |
7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
8 #include "content/browser/service_worker/service_worker_context_core.h" | 8 #include "content/browser/service_worker/service_worker_context_core.h" |
9 #include "content/browser/service_worker/service_worker_context_observer.h" | 9 #include "content/browser/service_worker/service_worker_context_observer.h" |
10 #include "content/browser/service_worker/service_worker_process_manager.h" | 10 #include "content/browser/service_worker/service_worker_process_manager.h" |
11 #include "content/public/browser/browser_thread.h" | 11 #include "content/public/browser/browser_thread.h" |
12 #include "webkit/browser/quota/quota_manager_proxy.h" | 12 #include "webkit/browser/quota/quota_manager_proxy.h" |
13 | 13 |
14 namespace content { | 14 namespace content { |
15 | 15 |
16 ServiceWorkerContextWrapper::ServiceWorkerContextWrapper( | 16 ServiceWorkerContextWrapper::ServiceWorkerContextWrapper( |
17 BrowserContext* browser_context) | 17 BrowserContext* browser_context) |
18 : observer_list_( | 18 : observer_list_( |
19 new ObserverListThreadSafe<ServiceWorkerContextObserver>()), | 19 new ObserverListThreadSafe<ServiceWorkerContextObserver>()), |
20 browser_context_(browser_context) { | 20 browser_context_(browser_context) { |
21 observer_list_->AddObserver(this); | |
michaeln
2014/05/01 02:52:07
this should always be called on the UI thread, we'
horo
2014/05/01 04:52:32
Done.
Moved to Init().
| |
21 } | 22 } |
22 | 23 |
23 ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() { | 24 ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() { |
25 observer_list_->RemoveObserver(this); | |
michaeln
2014/05/01 02:52:07
does ObserverListThreadSafe require that an observ
horo
2014/05/01 04:52:32
Done.
Moved to Shutdown().
| |
24 } | 26 } |
25 | 27 |
26 void ServiceWorkerContextWrapper::Init( | 28 void ServiceWorkerContextWrapper::Init( |
27 const base::FilePath& user_data_directory, | 29 const base::FilePath& user_data_directory, |
28 quota::QuotaManagerProxy* quota_manager_proxy) { | 30 quota::QuotaManagerProxy* quota_manager_proxy) { |
29 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 31 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
30 BrowserThread::PostTask( | 32 BrowserThread::PostTask( |
31 BrowserThread::IO, | 33 BrowserThread::IO, |
32 FROM_HERE, | 34 FROM_HERE, |
33 base::Bind(&ServiceWorkerContextWrapper::Init, | 35 base::Bind(&ServiceWorkerContextWrapper::Init, |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
123 return; | 125 return; |
124 } | 126 } |
125 | 127 |
126 context()->UnregisterServiceWorker( | 128 context()->UnregisterServiceWorker( |
127 pattern, | 129 pattern, |
128 source_process_id, | 130 source_process_id, |
129 NULL /* provider_host */, | 131 NULL /* provider_host */, |
130 base::Bind(&FinishUnregistrationOnIO, continuation)); | 132 base::Bind(&FinishUnregistrationOnIO, continuation)); |
131 } | 133 } |
132 | 134 |
135 void ServiceWorkerContextWrapper::AddStatusChangeCallback( | |
136 const base::Callback<void(void)>& callback) { | |
137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
138 return status_change_callbacks_.push_back(callback); | |
139 } | |
140 | |
141 void ServiceWorkerContextWrapper::RemoveStatusChangeCallback( | |
142 const base::Callback<void(void)>& callback) { | |
143 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
144 for (std::vector<base::Callback<void(void)> >::iterator it = | |
145 status_change_callbacks_.begin(); | |
146 it != status_change_callbacks_.end();) { | |
147 if (it->Equals(callback)) { | |
148 it = status_change_callbacks_.erase(it); | |
149 } else { | |
150 ++it; | |
151 } | |
152 } | |
153 } | |
154 | |
133 void ServiceWorkerContextWrapper::AddObserver( | 155 void ServiceWorkerContextWrapper::AddObserver( |
134 ServiceWorkerContextObserver* observer) { | 156 ServiceWorkerContextObserver* observer) { |
135 observer_list_->AddObserver(observer); | 157 observer_list_->AddObserver(observer); |
136 } | 158 } |
137 | 159 |
138 void ServiceWorkerContextWrapper::RemoveObserver( | 160 void ServiceWorkerContextWrapper::RemoveObserver( |
139 ServiceWorkerContextObserver* observer) { | 161 ServiceWorkerContextObserver* observer) { |
140 observer_list_->RemoveObserver(observer); | 162 observer_list_->RemoveObserver(observer); |
141 } | 163 } |
142 | 164 |
165 void ServiceWorkerContextWrapper::GetRunningServiceWorkerInfo( | |
166 const GetRunningServiceWorkerInfoCallback& callback) { | |
167 // TODO(horo): Implement this. | |
168 NOTIMPLEMENTED(); | |
169 } | |
170 | |
171 void ServiceWorkerContextWrapper::OnWorkerStarted(int64 version_id, | |
172 int process_id, | |
173 int thread_id) { | |
174 CallStatusChangeCallback(); | |
175 } | |
176 | |
177 void ServiceWorkerContextWrapper::OnWorkerStopped(int64 version_id, | |
178 int process_id, | |
179 int thread_id) { | |
180 CallStatusChangeCallback(); | |
181 } | |
182 | |
183 void ServiceWorkerContextWrapper::OnVersionStateChanged(int64 version_id) { | |
184 CallStatusChangeCallback(); | |
185 } | |
186 | |
187 void ServiceWorkerContextWrapper::CallStatusChangeCallback() { | |
188 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
189 for (size_t i = 0; i < status_change_callbacks_.size(); ++i) { | |
190 status_change_callbacks_[i].Run(); | |
191 } | |
192 } | |
193 | |
143 } // namespace content | 194 } // namespace content |
OLD | NEW |