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

Side by Side Diff: components/webdata/common/web_database_service.cc

Issue 16174013: Remove dependency of WebData on content (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 7 years, 6 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
« no previous file with comments | « components/webdata/common/web_database_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "components/webdata/common/web_database_service.h" 5 #include "components/webdata/common/web_database_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "components/webdata/common/web_data_request_manager.h" 9 #include "components/webdata/common/web_data_request_manager.h"
10 #include "components/webdata/common/web_data_results.h" 10 #include "components/webdata/common/web_data_results.h"
11 #include "components/webdata/common/web_data_service_backend.h" 11 #include "components/webdata/common/web_data_service_backend.h"
12 #include "components/webdata/common/web_data_service_consumer.h" 12 #include "components/webdata/common/web_data_service_consumer.h"
13 13
14 using base::Bind; 14 using base::Bind;
15 using base::FilePath; 15 using base::FilePath;
16 using content::BrowserThread;
17 16
18 // Receives messages from the backend on the DB thread, posts them to 17 // Receives messages from the backend on the DB thread, posts them to
19 // WebDatabaseService on the UI thread. 18 // WebDatabaseService on the UI thread.
20 class WebDatabaseService::BackendDelegate : 19 class WebDatabaseService::BackendDelegate :
21 public WebDataServiceBackend::Delegate { 20 public WebDataServiceBackend::Delegate {
22 public: 21 public:
23 BackendDelegate( 22 BackendDelegate(
24 const base::WeakPtr<WebDatabaseService>& web_database_service) 23 const base::WeakPtr<WebDatabaseService>& web_database_service)
25 : web_database_service_(web_database_service) { 24 : web_database_service_(web_database_service),
25 callback_thread_(base::MessageLoopProxy::current()) {
26 } 26 }
27 27
28 virtual void DBLoaded(sql::InitStatus status) OVERRIDE { 28 virtual void DBLoaded(sql::InitStatus status) OVERRIDE {
29 BrowserThread::PostTask( 29 callback_thread_->PostTask(
30 BrowserThread::UI,
31 FROM_HERE, 30 FROM_HERE,
32 base::Bind(&WebDatabaseService::OnDatabaseLoadDone, 31 base::Bind(&WebDatabaseService::OnDatabaseLoadDone,
33 web_database_service_, 32 web_database_service_,
34 status)); 33 status));
35 } 34 }
36 private: 35 private:
37 const base::WeakPtr<WebDatabaseService> web_database_service_; 36 const base::WeakPtr<WebDatabaseService> web_database_service_;
37 scoped_refptr<base::MessageLoopProxy> callback_thread_;
38 }; 38 };
39 39
40 WebDatabaseService::WebDatabaseService( 40 WebDatabaseService::WebDatabaseService(
41 const base::FilePath& path, 41 const base::FilePath& path,
42 const scoped_refptr<base::MessageLoopProxy>& ui_thread) 42 const scoped_refptr<base::MessageLoopProxy>& ui_thread,
43 const scoped_refptr<base::MessageLoopProxy>& db_thread)
43 : base::RefCountedDeleteOnMessageLoop<WebDatabaseService>(ui_thread), 44 : base::RefCountedDeleteOnMessageLoop<WebDatabaseService>(ui_thread),
44 path_(path), 45 path_(path),
45 weak_ptr_factory_(this), 46 weak_ptr_factory_(this),
46 db_loaded_(false) { 47 db_loaded_(false),
48 db_thread_(db_thread) {
47 // WebDatabaseService should be instantiated on UI thread. 49 // WebDatabaseService should be instantiated on UI thread.
48 DCHECK(ui_thread->BelongsToCurrentThread()); 50 DCHECK(ui_thread->BelongsToCurrentThread());
49 // WebDatabaseService requires DB thread if instantiated. 51 // WebDatabaseService requires DB thread if instantiated.
50 DCHECK(BrowserThread::IsWellKnownThread(BrowserThread::DB)); 52 DCHECK(db_thread);
51 } 53 }
52 54
53 WebDatabaseService::~WebDatabaseService() { 55 WebDatabaseService::~WebDatabaseService() {
54 } 56 }
55 57
56 void WebDatabaseService::AddTable(scoped_ptr<WebDatabaseTable> table) { 58 void WebDatabaseService::AddTable(scoped_ptr<WebDatabaseTable> table) {
57 if (!wds_backend_.get()) { 59 if (!wds_backend_.get()) {
58 wds_backend_ = new WebDataServiceBackend( 60 wds_backend_ = new WebDataServiceBackend(
59 path_, new BackendDelegate(weak_ptr_factory_.GetWeakPtr())); 61 path_, new BackendDelegate(weak_ptr_factory_.GetWeakPtr()),
62 db_thread_);
60 } 63 }
61 wds_backend_->AddTable(table.Pass()); 64 wds_backend_->AddTable(table.Pass());
62 } 65 }
63 66
64 void WebDatabaseService::LoadDatabase() { 67 void WebDatabaseService::LoadDatabase() {
65 DCHECK(wds_backend_.get()); 68 DCHECK(wds_backend_.get());
66 69
67 BrowserThread::PostTask( 70 db_thread_->PostTask(
68 BrowserThread::DB,
69 FROM_HERE, 71 FROM_HERE,
70 Bind(&WebDataServiceBackend::InitDatabase, wds_backend_)); 72 Bind(&WebDataServiceBackend::InitDatabase, wds_backend_));
71 } 73 }
72 74
73 void WebDatabaseService::UnloadDatabase() { 75 void WebDatabaseService::UnloadDatabase() {
74 db_loaded_ = false; 76 db_loaded_ = false;
75 if (!wds_backend_.get()) 77 if (!wds_backend_.get())
76 return; 78 return;
77 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 79 db_thread_->PostTask(FROM_HERE,
78 Bind(&WebDataServiceBackend::ShutdownDatabase, 80 Bind(&WebDataServiceBackend::ShutdownDatabase,
79 wds_backend_, true)); 81 wds_backend_, true));
80 } 82 }
81 83
82 void WebDatabaseService::ShutdownDatabase() { 84 void WebDatabaseService::ShutdownDatabase() {
83 db_loaded_ = false; 85 db_loaded_ = false;
84 weak_ptr_factory_.InvalidateWeakPtrs(); 86 weak_ptr_factory_.InvalidateWeakPtrs();
85 loaded_callbacks_.clear(); 87 loaded_callbacks_.clear();
86 error_callbacks_.clear(); 88 error_callbacks_.clear();
87 if (!wds_backend_.get()) 89 if (!wds_backend_.get())
88 return; 90 return;
89 BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 91 db_thread_->PostTask(FROM_HERE,
90 Bind(&WebDataServiceBackend::ShutdownDatabase, 92 Bind(&WebDataServiceBackend::ShutdownDatabase,
91 wds_backend_, false)); 93 wds_backend_, false));
92 } 94 }
93 95
94 WebDatabase* WebDatabaseService::GetDatabaseOnDB() const { 96 WebDatabase* WebDatabaseService::GetDatabaseOnDB() const {
95 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB)); 97 DCHECK(db_thread_->BelongsToCurrentThread());
96 if (!wds_backend_.get()) 98 if (!wds_backend_.get())
97 return NULL; 99 return NULL;
98 return wds_backend_->database(); 100 return wds_backend_->database();
99 } 101 }
100 102
101 scoped_refptr<WebDataServiceBackend> WebDatabaseService::GetBackend() const { 103 scoped_refptr<WebDataServiceBackend> WebDatabaseService::GetBackend() const {
102 return wds_backend_; 104 return wds_backend_;
103 } 105 }
104 106
105 void WebDatabaseService::ScheduleDBTask( 107 void WebDatabaseService::ScheduleDBTask(
106 const tracked_objects::Location& from_here, 108 const tracked_objects::Location& from_here,
107 const WriteTask& task) { 109 const WriteTask& task) {
108 if (!wds_backend_.get()) { 110 if (!wds_backend_.get()) {
109 NOTREACHED() << "Task scheduled after Shutdown()"; 111 NOTREACHED() << "Task scheduled after Shutdown()";
110 return; 112 return;
111 } 113 }
112 114
113 scoped_ptr<WebDataRequest> request( 115 scoped_ptr<WebDataRequest> request(
114 new WebDataRequest(NULL, wds_backend_->request_manager().get())); 116 new WebDataRequest(NULL, wds_backend_->request_manager().get()));
115 117
116 BrowserThread::PostTask(BrowserThread::DB, from_here, 118 db_thread_->PostTask(from_here,
117 Bind(&WebDataServiceBackend::DBWriteTaskWrapper, wds_backend_, 119 Bind(&WebDataServiceBackend::DBWriteTaskWrapper, wds_backend_,
118 task, base::Passed(&request))); 120 task, base::Passed(&request)));
119 } 121 }
120 122
121 WebDataServiceBase::Handle WebDatabaseService::ScheduleDBTaskWithResult( 123 WebDataServiceBase::Handle WebDatabaseService::ScheduleDBTaskWithResult(
122 const tracked_objects::Location& from_here, 124 const tracked_objects::Location& from_here,
123 const ReadTask& task, 125 const ReadTask& task,
124 WebDataServiceConsumer* consumer) { 126 WebDataServiceConsumer* consumer) {
125 DCHECK(consumer); 127 DCHECK(consumer);
126 WebDataServiceBase::Handle handle = 0; 128 WebDataServiceBase::Handle handle = 0;
127 129
128 if (!wds_backend_.get()) { 130 if (!wds_backend_.get()) {
129 NOTREACHED() << "Task scheduled after Shutdown()"; 131 NOTREACHED() << "Task scheduled after Shutdown()";
130 return handle; 132 return handle;
131 } 133 }
132 134
133 scoped_ptr<WebDataRequest> request( 135 scoped_ptr<WebDataRequest> request(
134 new WebDataRequest(consumer, wds_backend_->request_manager().get())); 136 new WebDataRequest(consumer, wds_backend_->request_manager().get()));
135 handle = request->GetHandle(); 137 handle = request->GetHandle();
136 138
137 BrowserThread::PostTask(BrowserThread::DB, from_here, 139 db_thread_->PostTask(from_here,
138 Bind(&WebDataServiceBackend::DBReadTaskWrapper, wds_backend_, 140 Bind(&WebDataServiceBackend::DBReadTaskWrapper, wds_backend_,
139 task, base::Passed(&request))); 141 task, base::Passed(&request)));
140 142
141 return handle; 143 return handle;
142 } 144 }
143 145
144 void WebDatabaseService::CancelRequest(WebDataServiceBase::Handle h) { 146 void WebDatabaseService::CancelRequest(WebDataServiceBase::Handle h) {
145 if (!wds_backend_.get()) 147 if (!wds_backend_.get())
146 return; 148 return;
147 wds_backend_->request_manager()->CancelRequest(h); 149 wds_backend_->request_manager()->CancelRequest(h);
(...skipping 22 matching lines...) Expand all
170 } else { 172 } else {
171 // Notify that the database load failed. 173 // Notify that the database load failed.
172 for (size_t i = 0; i < error_callbacks_.size(); i++) { 174 for (size_t i = 0; i < error_callbacks_.size(); i++) {
173 if (!error_callbacks_[i].is_null()) 175 if (!error_callbacks_[i].is_null())
174 error_callbacks_[i].Run(status); 176 error_callbacks_[i].Run(status);
175 } 177 }
176 178
177 error_callbacks_.clear(); 179 error_callbacks_.clear();
178 } 180 }
179 } 181 }
OLDNEW
« no previous file with comments | « components/webdata/common/web_database_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698