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

Side by Side Diff: chrome/browser/history/history_backend.cc

Issue 14113053: chrome: Use base::MessageLoop. (Part 3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/history/history_backend.h" 5 #include "chrome/browser/history/history_backend.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 virtual int OnError(int error, 221 virtual int OnError(int error,
222 sql::Connection* connection, 222 sql::Connection* connection,
223 sql::Statement* stmt) OVERRIDE { 223 sql::Statement* stmt) OVERRIDE {
224 // Do not schedule killing database more than once. If the first time 224 // Do not schedule killing database more than once. If the first time
225 // failed, it is unlikely that a second time will be successful. 225 // failed, it is unlikely that a second time will be successful.
226 if (!scheduled_killing_database_ && sql::IsErrorCatastrophic(error)) { 226 if (!scheduled_killing_database_ && sql::IsErrorCatastrophic(error)) {
227 scheduled_killing_database_ = true; 227 scheduled_killing_database_ = true;
228 228
229 // Don't just do the close/delete here, as we are being called by |db| and 229 // Don't just do the close/delete here, as we are being called by |db| and
230 // that seems dangerous. 230 // that seems dangerous.
231 MessageLoop::current()->PostTask( 231 base::MessageLoop::current()->PostTask(
232 FROM_HERE, 232 FROM_HERE,
233 base::Bind(&HistoryBackend::KillHistoryDatabase, backend_)); 233 base::Bind(&HistoryBackend::KillHistoryDatabase, backend_));
234 } 234 }
235 235
236 return error; 236 return error;
237 } 237 }
238 238
239 // Returns true if the delegate has previously scheduled killing the database. 239 // Returns true if the delegate has previously scheduled killing the database.
240 bool scheduled_killing_database() const { 240 bool scheduled_killing_database() const {
241 return scheduled_killing_database_; 241 return scheduled_killing_database_;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 file_util::Delete(GetAndroidCacheFileName(), false); 291 file_util::Delete(GetAndroidCacheFileName(), false);
292 #endif 292 #endif
293 } 293 }
294 294
295 void HistoryBackend::Init(const std::string& languages, bool force_fail) { 295 void HistoryBackend::Init(const std::string& languages, bool force_fail) {
296 if (!force_fail) 296 if (!force_fail)
297 InitImpl(languages); 297 InitImpl(languages);
298 delegate_->DBLoaded(id_); 298 delegate_->DBLoaded(id_);
299 } 299 }
300 300
301 void HistoryBackend::SetOnBackendDestroyTask(MessageLoop* message_loop, 301 void HistoryBackend::SetOnBackendDestroyTask(base::MessageLoop* message_loop,
302 const base::Closure& task) { 302 const base::Closure& task) {
303 if (!backend_destroy_task_.is_null()) 303 if (!backend_destroy_task_.is_null())
304 DLOG(WARNING) << "Setting more than one destroy task, overriding"; 304 DLOG(WARNING) << "Setting more than one destroy task, overriding";
305 backend_destroy_message_loop_ = message_loop; 305 backend_destroy_message_loop_ = message_loop;
306 backend_destroy_task_ = task; 306 backend_destroy_task_ = task;
307 } 307 }
308 308
309 void HistoryBackend::Closing() { 309 void HistoryBackend::Closing() {
310 // Any scheduled commit will have a reference to us, we must make it 310 // Any scheduled commit will have a reference to us, we must make it
311 // release that reference before we can be destroyed. 311 // release that reference before we can be destroyed.
(...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 return; 1191 return;
1192 1192
1193 if (db_.get()) { 1193 if (db_.get()) {
1194 db_->QuerySegmentUsage(from_time, max_result_count, &request->value.get()); 1194 db_->QuerySegmentUsage(from_time, max_result_count, &request->value.get());
1195 1195
1196 // If this is the first time we query segments, invoke 1196 // If this is the first time we query segments, invoke
1197 // DeleteOldSegmentData asynchronously. We do this to cleanup old 1197 // DeleteOldSegmentData asynchronously. We do this to cleanup old
1198 // entries. 1198 // entries.
1199 if (!segment_queried_) { 1199 if (!segment_queried_) {
1200 segment_queried_ = true; 1200 segment_queried_ = true;
1201 MessageLoop::current()->PostTask( 1201 base::MessageLoop::current()->PostTask(
1202 FROM_HERE, 1202 FROM_HERE, base::Bind(&HistoryBackend::DeleteOldSegmentData, this));
1203 base::Bind(&HistoryBackend::DeleteOldSegmentData, this));
1204 } 1203 }
1205 } 1204 }
1206 request->ForwardResult(request->handle(), &request->value.get()); 1205 request->ForwardResult(request->handle(), &request->value.get());
1207 } 1206 }
1208 1207
1209 void HistoryBackend::IncreaseSegmentDuration(const GURL& url, 1208 void HistoryBackend::IncreaseSegmentDuration(const GURL& url,
1210 base::Time time, 1209 base::Time time,
1211 base::TimeDelta delta) { 1210 base::TimeDelta delta) {
1212 if (!db_.get()) 1211 if (!db_.get())
1213 return; 1212 return;
(...skipping 1407 matching lines...) Expand 10 before | Expand all | Expand 10 after
2621 if (text_database_.get()) { 2620 if (text_database_.get()) {
2622 text_database_->CommitTransaction(); 2621 text_database_->CommitTransaction();
2623 text_database_->BeginTransaction(); 2622 text_database_->BeginTransaction();
2624 } 2623 }
2625 } 2624 }
2626 2625
2627 void HistoryBackend::ScheduleCommit() { 2626 void HistoryBackend::ScheduleCommit() {
2628 if (scheduled_commit_.get()) 2627 if (scheduled_commit_.get())
2629 return; 2628 return;
2630 scheduled_commit_ = new CommitLaterTask(this); 2629 scheduled_commit_ = new CommitLaterTask(this);
2631 MessageLoop::current()->PostDelayedTask( 2630 base::MessageLoop::current()->PostDelayedTask(
2632 FROM_HERE, 2631 FROM_HERE,
2633 base::Bind(&CommitLaterTask::RunCommit, scheduled_commit_.get()), 2632 base::Bind(&CommitLaterTask::RunCommit, scheduled_commit_.get()),
2634 base::TimeDelta::FromSeconds(kCommitIntervalSeconds)); 2633 base::TimeDelta::FromSeconds(kCommitIntervalSeconds));
2635 } 2634 }
2636 2635
2637 void HistoryBackend::CancelScheduledCommit() { 2636 void HistoryBackend::CancelScheduledCommit() {
2638 if (scheduled_commit_) { 2637 if (scheduled_commit_) {
2639 scheduled_commit_->Cancel(); 2638 scheduled_commit_->Cancel();
2640 scheduled_commit_ = NULL; 2639 scheduled_commit_ = NULL;
2641 } 2640 }
(...skipping 19 matching lines...) Expand all
2661 db_task_requests_.pop_front(); 2660 db_task_requests_.pop_front();
2662 if (request->value->RunOnDBThread(this, db_.get())) { 2661 if (request->value->RunOnDBThread(this, db_.get())) {
2663 // The task is done. Notify the callback. 2662 // The task is done. Notify the callback.
2664 request->ForwardResult(); 2663 request->ForwardResult();
2665 // We AddRef'd the request before adding, need to release it now. 2664 // We AddRef'd the request before adding, need to release it now.
2666 request->Release(); 2665 request->Release();
2667 } else { 2666 } else {
2668 // Tasks wants to run some more. Schedule it at the end of current tasks. 2667 // Tasks wants to run some more. Schedule it at the end of current tasks.
2669 db_task_requests_.push_back(request); 2668 db_task_requests_.push_back(request);
2670 // And process it after an invoke later. 2669 // And process it after an invoke later.
2671 MessageLoop::current()->PostTask( 2670 base::MessageLoop::current()->PostTask(
2672 FROM_HERE, base::Bind(&HistoryBackend::ProcessDBTaskImpl, this)); 2671 FROM_HERE, base::Bind(&HistoryBackend::ProcessDBTaskImpl, this));
2673 } 2672 }
2674 } 2673 }
2675 2674
2676 void HistoryBackend::ReleaseDBTasks() { 2675 void HistoryBackend::ReleaseDBTasks() {
2677 for (std::list<HistoryDBTaskRequest*>::iterator i = 2676 for (std::list<HistoryDBTaskRequest*>::iterator i =
2678 db_task_requests_.begin(); i != db_task_requests_.end(); ++i) { 2677 db_task_requests_.begin(); i != db_task_requests_.end(); ++i) {
2679 (*i)->Release(); 2678 (*i)->Release();
2680 } 2679 }
2681 db_task_requests_.clear(); 2680 db_task_requests_.clear();
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
3067 info.url_id = visit.url_id; 3066 info.url_id = visit.url_id;
3068 info.time = visit.visit_time; 3067 info.time = visit.visit_time;
3069 info.transition = visit.transition; 3068 info.transition = visit.transition;
3070 // If we don't have a delegate yet during setup or shutdown, we will drop 3069 // If we don't have a delegate yet during setup or shutdown, we will drop
3071 // these notifications. 3070 // these notifications.
3072 if (delegate_.get()) 3071 if (delegate_.get())
3073 delegate_->NotifyVisitDBObserversOnAddVisit(info); 3072 delegate_->NotifyVisitDBObserversOnAddVisit(info);
3074 } 3073 }
3075 3074
3076 } // namespace history 3075 } // namespace history
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698