Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(388)

Side by Side Diff: content/browser/service_worker/service_worker_context_wrapper.cc

Issue 261063009: ServiceWorker: Create sequenced task runner for database (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698