Index: chrome/browser/history/history_service.cc |
diff --git a/chrome/browser/history/history_service.cc b/chrome/browser/history/history_service.cc |
index cb4d16040149ac4635d1710007f80d001182b822..74b9c1fdb5fb9ff6929a63cea1f48717ff006283 100644 |
--- a/chrome/browser/history/history_service.cc |
+++ b/chrome/browser/history/history_service.cc |
@@ -378,13 +378,21 @@ void HistoryService::URLsNoLongerBookmarked(const std::set<GURL>& urls) { |
urls); |
} |
-void HistoryService::ScheduleDBTask(history::HistoryDBTask* task, |
- CancelableRequestConsumerBase* consumer) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- history::HistoryDBTaskRequest* request = new history::HistoryDBTaskRequest( |
- base::Bind(&history::HistoryDBTask::DoneRunOnMainThread, task)); |
- request->value = task; // The value is the task to execute. |
- Schedule(PRIORITY_UI, &HistoryBackend::ProcessDBTask, consumer, request); |
+void HistoryService::ScheduleDBTask(scoped_refptr<history::HistoryDBTask> task, |
+ base::CancelableTaskTracker* tracker) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ base::CancelableTaskTracker::IsCanceledCallback is_canceled; |
+ tracker->NewTrackedTaskId(&is_canceled); |
+ // Use base::ThreadTaskRunnerHandler::Get() to get a message loop proxy to |
+ // the current message loop so that we can forward the call to the method |
+ // HistoryDBTask::DoneRunOnMainThread in the correct thread. |
+ thread_->message_loop_proxy()->PostTask( |
+ FROM_HERE, |
+ base::Bind(&HistoryBackend::ProcessDBTask, |
+ history_backend_.get(), |
+ task, |
+ base::ThreadTaskRunnerHandle::Get(), |
+ is_canceled)); |
} |
void HistoryService::FlushForTest(const base::Closure& flushed) { |