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 "base/threading/sequenced_worker_pool.h" |
8 #include "content/browser/service_worker/service_worker_context_core.h" | 9 #include "content/browser/service_worker/service_worker_context_core.h" |
9 #include "content/browser/service_worker/service_worker_context_observer.h" | 10 #include "content/browser/service_worker/service_worker_context_observer.h" |
10 #include "content/browser/service_worker/service_worker_process_manager.h" | 11 #include "content/browser/service_worker/service_worker_process_manager.h" |
11 #include "content/public/browser/browser_thread.h" | 12 #include "content/public/browser/browser_thread.h" |
12 #include "webkit/browser/quota/quota_manager_proxy.h" | 13 #include "webkit/browser/quota/quota_manager_proxy.h" |
13 | 14 |
14 namespace content { | 15 namespace content { |
15 | 16 |
16 ServiceWorkerContextWrapper::ServiceWorkerContextWrapper( | 17 ServiceWorkerContextWrapper::ServiceWorkerContextWrapper( |
17 BrowserContext* browser_context) | 18 BrowserContext* browser_context) |
18 : observer_list_( | 19 : observer_list_( |
19 new ObserverListThreadSafe<ServiceWorkerContextObserver>()), | 20 new ObserverListThreadSafe<ServiceWorkerContextObserver>()), |
20 browser_context_(browser_context) { | 21 browser_context_(browser_context) { |
21 } | 22 } |
22 | 23 |
23 ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() { | 24 ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() { |
24 } | 25 } |
25 | 26 |
26 void ServiceWorkerContextWrapper::Init( | 27 void ServiceWorkerContextWrapper::Init( |
27 const base::FilePath& user_data_directory, | 28 const base::FilePath& user_data_directory, |
28 quota::QuotaManagerProxy* quota_manager_proxy) { | 29 quota::QuotaManagerProxy* quota_manager_proxy) { |
29 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 30 scoped_refptr<base::SequencedTaskRunner> database_task_runner = |
30 BrowserThread::PostTask( | 31 BrowserThread::GetBlockingPool()-> |
31 BrowserThread::IO, | 32 GetSequencedTaskRunnerWithShutdownBehavior( |
32 FROM_HERE, | 33 BrowserThread::GetBlockingPool()->GetSequenceToken(), |
33 base::Bind(&ServiceWorkerContextWrapper::Init, | 34 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
34 this, | 35 InitInternal(user_data_directory, database_task_runner, quota_manager_proxy); |
35 user_data_directory, | |
36 make_scoped_refptr(quota_manager_proxy))); | |
37 return; | |
38 } | |
39 DCHECK(!context_core_); | |
40 context_core_.reset(new ServiceWorkerContextCore( | |
41 user_data_directory, | |
42 quota_manager_proxy, | |
43 observer_list_, | |
44 make_scoped_ptr(new ServiceWorkerProcessManager(this)))); | |
45 } | 36 } |
46 | 37 |
47 void ServiceWorkerContextWrapper::Shutdown() { | 38 void ServiceWorkerContextWrapper::Shutdown() { |
48 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { | 39 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
49 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 40 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
50 browser_context_ = NULL; | 41 browser_context_ = NULL; |
51 BrowserThread::PostTask( | 42 BrowserThread::PostTask( |
52 BrowserThread::IO, FROM_HERE, | 43 BrowserThread::IO, FROM_HERE, |
53 base::Bind(&ServiceWorkerContextWrapper::Shutdown, this)); | 44 base::Bind(&ServiceWorkerContextWrapper::Shutdown, this)); |
54 return; | 45 return; |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 void ServiceWorkerContextWrapper::AddObserver( | 121 void ServiceWorkerContextWrapper::AddObserver( |
131 ServiceWorkerContextObserver* observer) { | 122 ServiceWorkerContextObserver* observer) { |
132 observer_list_->AddObserver(observer); | 123 observer_list_->AddObserver(observer); |
133 } | 124 } |
134 | 125 |
135 void ServiceWorkerContextWrapper::RemoveObserver( | 126 void ServiceWorkerContextWrapper::RemoveObserver( |
136 ServiceWorkerContextObserver* observer) { | 127 ServiceWorkerContextObserver* observer) { |
137 observer_list_->RemoveObserver(observer); | 128 observer_list_->RemoveObserver(observer); |
138 } | 129 } |
139 | 130 |
| 131 void ServiceWorkerContextWrapper::InitForTesting( |
| 132 const base::FilePath& user_data_directory, |
| 133 base::SequencedTaskRunner* database_task_runner, |
| 134 quota::QuotaManagerProxy* quota_manager_proxy) { |
| 135 InitInternal(user_data_directory, database_task_runner, quota_manager_proxy); |
| 136 } |
| 137 |
| 138 void ServiceWorkerContextWrapper::InitInternal( |
| 139 const base::FilePath& user_data_directory, |
| 140 base::SequencedTaskRunner* database_task_runner, |
| 141 quota::QuotaManagerProxy* quota_manager_proxy) { |
| 142 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
| 143 BrowserThread::PostTask( |
| 144 BrowserThread::IO, |
| 145 FROM_HERE, |
| 146 base::Bind(&ServiceWorkerContextWrapper::InitInternal, |
| 147 this, |
| 148 user_data_directory, |
| 149 make_scoped_refptr(database_task_runner), |
| 150 make_scoped_refptr(quota_manager_proxy))); |
| 151 return; |
| 152 } |
| 153 DCHECK(!context_core_); |
| 154 context_core_.reset(new ServiceWorkerContextCore( |
| 155 user_data_directory, |
| 156 database_task_runner, |
| 157 quota_manager_proxy, |
| 158 observer_list_, |
| 159 make_scoped_ptr(new ServiceWorkerProcessManager(this)))); |
| 160 } |
| 161 |
140 } // namespace content | 162 } // namespace content |
OLD | NEW |