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

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

Issue 122543002: Ensure WeakPtrFactories are at the end of their owning classes and refer (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 6 years, 11 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
« 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"
(...skipping 25 matching lines...) Expand all
36 const base::WeakPtr<WebDatabaseService> web_database_service_; 36 const base::WeakPtr<WebDatabaseService> web_database_service_;
37 scoped_refptr<base::MessageLoopProxy> callback_thread_; 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 const scoped_refptr<base::MessageLoopProxy>& db_thread)
44 : base::RefCountedDeleteOnMessageLoop<WebDatabaseService>(ui_thread), 44 : base::RefCountedDeleteOnMessageLoop<WebDatabaseService>(ui_thread),
45 path_(path), 45 path_(path),
46 weak_ptr_factory_(this),
47 db_loaded_(false), 46 db_loaded_(false),
48 db_thread_(db_thread) { 47 db_thread_(db_thread),
48 weak_ptr_factory_(this) {
49 // WebDatabaseService should be instantiated on UI thread. 49 // WebDatabaseService should be instantiated on UI thread.
50 DCHECK(ui_thread->BelongsToCurrentThread()); 50 DCHECK(ui_thread->BelongsToCurrentThread());
51 // WebDatabaseService requires DB thread if instantiated. 51 // WebDatabaseService requires DB thread if instantiated.
52 DCHECK(db_thread.get()); 52 DCHECK(db_thread.get());
53 } 53 }
54 54
55 WebDatabaseService::~WebDatabaseService() { 55 WebDatabaseService::~WebDatabaseService() {
56 } 56 }
57 57
58 void WebDatabaseService::AddTable(scoped_ptr<WebDatabaseTable> table) { 58 void WebDatabaseService::AddTable(scoped_ptr<WebDatabaseTable> table) {
59 if (!wds_backend_.get()) { 59 if (!wds_backend_) {
60 wds_backend_ = new WebDataServiceBackend( 60 wds_backend_ = new WebDataServiceBackend(
61 path_, new BackendDelegate(weak_ptr_factory_.GetWeakPtr()), 61 path_, new BackendDelegate(weak_ptr_factory_.GetWeakPtr()),
62 db_thread_); 62 db_thread_);
63 } 63 }
64 wds_backend_->AddTable(table.Pass()); 64 wds_backend_->AddTable(table.Pass());
65 } 65 }
66 66
67 void WebDatabaseService::LoadDatabase() { 67 void WebDatabaseService::LoadDatabase() {
68 DCHECK(wds_backend_.get()); 68 DCHECK(wds_backend_);
69
70 db_thread_->PostTask( 69 db_thread_->PostTask(
71 FROM_HERE, 70 FROM_HERE,
72 Bind(&WebDataServiceBackend::InitDatabase, wds_backend_)); 71 Bind(&WebDataServiceBackend::InitDatabase, wds_backend_));
73 } 72 }
74 73
75 void WebDatabaseService::UnloadDatabase() { 74 void WebDatabaseService::UnloadDatabase() {
76 db_loaded_ = false; 75 db_loaded_ = false;
77 if (!wds_backend_.get()) 76 if (!wds_backend_)
78 return; 77 return;
79 db_thread_->PostTask(FROM_HERE, 78 db_thread_->PostTask(FROM_HERE,
80 Bind(&WebDataServiceBackend::ShutdownDatabase, 79 Bind(&WebDataServiceBackend::ShutdownDatabase,
81 wds_backend_, true)); 80 wds_backend_, true));
82 } 81 }
83 82
84 void WebDatabaseService::ShutdownDatabase() { 83 void WebDatabaseService::ShutdownDatabase() {
85 db_loaded_ = false; 84 db_loaded_ = false;
86 weak_ptr_factory_.InvalidateWeakPtrs();
87 loaded_callbacks_.clear(); 85 loaded_callbacks_.clear();
88 error_callbacks_.clear(); 86 error_callbacks_.clear();
89 if (!wds_backend_.get()) 87 weak_ptr_factory_.InvalidateWeakPtrs();
88 if (!wds_backend_)
90 return; 89 return;
91 db_thread_->PostTask(FROM_HERE, 90 db_thread_->PostTask(FROM_HERE,
92 Bind(&WebDataServiceBackend::ShutdownDatabase, 91 Bind(&WebDataServiceBackend::ShutdownDatabase,
93 wds_backend_, false)); 92 wds_backend_, false));
94 } 93 }
95 94
96 WebDatabase* WebDatabaseService::GetDatabaseOnDB() const { 95 WebDatabase* WebDatabaseService::GetDatabaseOnDB() const {
97 DCHECK(db_thread_->BelongsToCurrentThread()); 96 DCHECK(db_thread_->BelongsToCurrentThread());
98 if (!wds_backend_.get()) 97 return wds_backend_ ? wds_backend_->database() : NULL;
99 return NULL;
100 return wds_backend_->database();
101 } 98 }
102 99
103 scoped_refptr<WebDataServiceBackend> WebDatabaseService::GetBackend() const { 100 scoped_refptr<WebDataServiceBackend> WebDatabaseService::GetBackend() const {
104 return wds_backend_; 101 return wds_backend_;
105 } 102 }
106 103
107 void WebDatabaseService::ScheduleDBTask( 104 void WebDatabaseService::ScheduleDBTask(
108 const tracked_objects::Location& from_here, 105 const tracked_objects::Location& from_here,
109 const WriteTask& task) { 106 const WriteTask& task) {
110 if (!wds_backend_.get()) { 107 DCHECK(wds_backend_);
111 NOTREACHED() << "Task scheduled after Shutdown()";
112 return;
113 }
114
115 scoped_ptr<WebDataRequest> request( 108 scoped_ptr<WebDataRequest> request(
116 new WebDataRequest(NULL, wds_backend_->request_manager().get())); 109 new WebDataRequest(NULL, wds_backend_->request_manager().get()));
117
118 db_thread_->PostTask(from_here, 110 db_thread_->PostTask(from_here,
119 Bind(&WebDataServiceBackend::DBWriteTaskWrapper, wds_backend_, 111 Bind(&WebDataServiceBackend::DBWriteTaskWrapper,
120 task, base::Passed(&request))); 112 wds_backend_, task, base::Passed(&request)));
121 } 113 }
122 114
123 WebDataServiceBase::Handle WebDatabaseService::ScheduleDBTaskWithResult( 115 WebDataServiceBase::Handle WebDatabaseService::ScheduleDBTaskWithResult(
124 const tracked_objects::Location& from_here, 116 const tracked_objects::Location& from_here,
125 const ReadTask& task, 117 const ReadTask& task,
126 WebDataServiceConsumer* consumer) { 118 WebDataServiceConsumer* consumer) {
127 DCHECK(consumer); 119 DCHECK(consumer);
128 WebDataServiceBase::Handle handle = 0; 120 DCHECK(wds_backend_);
129
130 if (!wds_backend_.get()) {
131 NOTREACHED() << "Task scheduled after Shutdown()";
132 return handle;
133 }
134
135 scoped_ptr<WebDataRequest> request( 121 scoped_ptr<WebDataRequest> request(
136 new WebDataRequest(consumer, wds_backend_->request_manager().get())); 122 new WebDataRequest(consumer, wds_backend_->request_manager().get()));
137 handle = request->GetHandle(); 123 WebDataServiceBase::Handle handle = request->GetHandle();
138
139 db_thread_->PostTask(from_here, 124 db_thread_->PostTask(from_here,
140 Bind(&WebDataServiceBackend::DBReadTaskWrapper, wds_backend_, 125 Bind(&WebDataServiceBackend::DBReadTaskWrapper,
141 task, base::Passed(&request))); 126 wds_backend_, task, base::Passed(&request)));
142
143 return handle; 127 return handle;
144 } 128 }
145 129
146 void WebDatabaseService::CancelRequest(WebDataServiceBase::Handle h) { 130 void WebDatabaseService::CancelRequest(WebDataServiceBase::Handle h) {
147 if (!wds_backend_.get()) 131 if (!wds_backend_)
148 return; 132 return;
149 wds_backend_->request_manager()->CancelRequest(h); 133 wds_backend_->request_manager()->CancelRequest(h);
150 } 134 }
151 135
152 void WebDatabaseService::RegisterDBLoadedCallback( 136 void WebDatabaseService::RegisterDBLoadedCallback(
153 const DBLoadedCallback& callback) { 137 const DBLoadedCallback& callback) {
154 loaded_callbacks_.push_back(callback); 138 loaded_callbacks_.push_back(callback);
155 } 139 }
156 140
157 void WebDatabaseService::RegisterDBErrorCallback( 141 void WebDatabaseService::RegisterDBErrorCallback(
(...skipping 14 matching lines...) Expand all
172 } else { 156 } else {
173 // Notify that the database load failed. 157 // Notify that the database load failed.
174 for (size_t i = 0; i < error_callbacks_.size(); i++) { 158 for (size_t i = 0; i < error_callbacks_.size(); i++) {
175 if (!error_callbacks_[i].is_null()) 159 if (!error_callbacks_[i].is_null())
176 error_callbacks_[i].Run(status); 160 error_callbacks_[i].Run(status);
177 } 161 }
178 162
179 error_callbacks_.clear(); 163 error_callbacks_.clear();
180 } 164 }
181 } 165 }
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