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

Side by Side Diff: components/history/core/browser/history_service.cc

Issue 2283373002: Remove unneeded scoped_refptr<>::get() on method binding (Closed)
Patch Set: Created 4 years, 3 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
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 // The history system runs on a background thread so that potentially slow 5 // The history system runs on a background thread so that potentially slow
6 // database operations don't delay the browser. This backend processing is 6 // database operations don't delay the browser. This backend processing is
7 // represented by HistoryBackend. The HistoryService's job is to dispatch to 7 // represented by HistoryBackend. The HistoryService's job is to dispatch to
8 // that thread. 8 // that thread.
9 // 9 //
10 // Main thread History thread 10 // Main thread History thread
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 base::MakeCriticalClosure(base::Bind( 219 base::MakeCriticalClosure(base::Bind(
220 &HistoryBackend::PersistState, history_backend_.get()))); 220 &HistoryBackend::PersistState, history_backend_.get())));
221 } 221 }
222 #endif 222 #endif
223 223
224 void HistoryService::ClearCachedDataForContextID(ContextID context_id) { 224 void HistoryService::ClearCachedDataForContextID(ContextID context_id) {
225 DCHECK(thread_) << "History service being called after cleanup"; 225 DCHECK(thread_) << "History service being called after cleanup";
226 DCHECK(thread_checker_.CalledOnValidThread()); 226 DCHECK(thread_checker_.CalledOnValidThread());
227 ScheduleTask(PRIORITY_NORMAL, 227 ScheduleTask(PRIORITY_NORMAL,
228 base::Bind(&HistoryBackend::ClearCachedDataForContextID, 228 base::Bind(&HistoryBackend::ClearCachedDataForContextID,
229 history_backend_.get(), context_id)); 229 history_backend_, context_id));
230 } 230 }
231 231
232 URLDatabase* HistoryService::InMemoryDatabase() { 232 URLDatabase* HistoryService::InMemoryDatabase() {
233 DCHECK(thread_checker_.CalledOnValidThread()); 233 DCHECK(thread_checker_.CalledOnValidThread());
234 return in_memory_backend_ ? in_memory_backend_->db() : nullptr; 234 return in_memory_backend_ ? in_memory_backend_->db() : nullptr;
235 } 235 }
236 236
237 TypedUrlSyncableService* HistoryService::GetTypedUrlSyncableService() const { 237 TypedUrlSyncableService* HistoryService::GetTypedUrlSyncableService() const {
238 return history_backend_->GetTypedUrlSyncableService(); 238 return history_backend_->GetTypedUrlSyncableService();
239 } 239 }
240 240
241 void HistoryService::Shutdown() { 241 void HistoryService::Shutdown() {
242 DCHECK(thread_checker_.CalledOnValidThread()); 242 DCHECK(thread_checker_.CalledOnValidThread());
243 Cleanup(); 243 Cleanup();
244 } 244 }
245 245
246 void HistoryService::SetKeywordSearchTermsForURL(const GURL& url, 246 void HistoryService::SetKeywordSearchTermsForURL(const GURL& url,
247 KeywordID keyword_id, 247 KeywordID keyword_id,
248 const base::string16& term) { 248 const base::string16& term) {
249 DCHECK(thread_) << "History service being called after cleanup"; 249 DCHECK(thread_) << "History service being called after cleanup";
250 DCHECK(thread_checker_.CalledOnValidThread()); 250 DCHECK(thread_checker_.CalledOnValidThread());
251 ScheduleTask(PRIORITY_UI, 251 ScheduleTask(PRIORITY_UI,
252 base::Bind(&HistoryBackend::SetKeywordSearchTermsForURL, 252 base::Bind(&HistoryBackend::SetKeywordSearchTermsForURL,
253 history_backend_.get(), url, keyword_id, term)); 253 history_backend_, url, keyword_id, term));
254 } 254 }
255 255
256 void HistoryService::DeleteAllSearchTermsForKeyword(KeywordID keyword_id) { 256 void HistoryService::DeleteAllSearchTermsForKeyword(KeywordID keyword_id) {
257 DCHECK(thread_) << "History service being called after cleanup"; 257 DCHECK(thread_) << "History service being called after cleanup";
258 DCHECK(thread_checker_.CalledOnValidThread()); 258 DCHECK(thread_checker_.CalledOnValidThread());
259 259
260 if (in_memory_backend_) 260 if (in_memory_backend_)
261 in_memory_backend_->DeleteAllSearchTermsForKeyword(keyword_id); 261 in_memory_backend_->DeleteAllSearchTermsForKeyword(keyword_id);
262 262
263 ScheduleTask(PRIORITY_UI, 263 ScheduleTask(PRIORITY_UI,
264 base::Bind(&HistoryBackend::DeleteAllSearchTermsForKeyword, 264 base::Bind(&HistoryBackend::DeleteAllSearchTermsForKeyword,
265 history_backend_.get(), keyword_id)); 265 history_backend_, keyword_id));
266 } 266 }
267 267
268 void HistoryService::DeleteKeywordSearchTermForURL(const GURL& url) { 268 void HistoryService::DeleteKeywordSearchTermForURL(const GURL& url) {
269 DCHECK(thread_) << "History service being called after cleanup"; 269 DCHECK(thread_) << "History service being called after cleanup";
270 DCHECK(thread_checker_.CalledOnValidThread()); 270 DCHECK(thread_checker_.CalledOnValidThread());
271 ScheduleTask(PRIORITY_UI, 271 ScheduleTask(PRIORITY_UI,
272 base::Bind(&HistoryBackend::DeleteKeywordSearchTermForURL, 272 base::Bind(&HistoryBackend::DeleteKeywordSearchTermForURL,
273 history_backend_.get(), url)); 273 history_backend_, url));
274 } 274 }
275 275
276 void HistoryService::DeleteMatchingURLsForKeyword(KeywordID keyword_id, 276 void HistoryService::DeleteMatchingURLsForKeyword(KeywordID keyword_id,
277 const base::string16& term) { 277 const base::string16& term) {
278 DCHECK(thread_) << "History service being called after cleanup"; 278 DCHECK(thread_) << "History service being called after cleanup";
279 DCHECK(thread_checker_.CalledOnValidThread()); 279 DCHECK(thread_checker_.CalledOnValidThread());
280 ScheduleTask(PRIORITY_UI, 280 ScheduleTask(PRIORITY_UI,
281 base::Bind(&HistoryBackend::DeleteMatchingURLsForKeyword, 281 base::Bind(&HistoryBackend::DeleteMatchingURLsForKeyword,
282 history_backend_.get(), keyword_id, term)); 282 history_backend_, keyword_id, term));
283 } 283 }
284 284
285 void HistoryService::URLsNoLongerBookmarked(const std::set<GURL>& urls) { 285 void HistoryService::URLsNoLongerBookmarked(const std::set<GURL>& urls) {
286 DCHECK(thread_) << "History service being called after cleanup"; 286 DCHECK(thread_) << "History service being called after cleanup";
287 DCHECK(thread_checker_.CalledOnValidThread()); 287 DCHECK(thread_checker_.CalledOnValidThread());
288 ScheduleTask(PRIORITY_NORMAL, 288 ScheduleTask(PRIORITY_NORMAL,
289 base::Bind(&HistoryBackend::URLsNoLongerBookmarked, 289 base::Bind(&HistoryBackend::URLsNoLongerBookmarked,
290 history_backend_.get(), urls)); 290 history_backend_, urls));
291 } 291 }
292 292
293 void HistoryService::AddObserver(HistoryServiceObserver* observer) { 293 void HistoryService::AddObserver(HistoryServiceObserver* observer) {
294 DCHECK(thread_checker_.CalledOnValidThread()); 294 DCHECK(thread_checker_.CalledOnValidThread());
295 observers_.AddObserver(observer); 295 observers_.AddObserver(observer);
296 } 296 }
297 297
298 void HistoryService::RemoveObserver(HistoryServiceObserver* observer) { 298 void HistoryService::RemoveObserver(HistoryServiceObserver* observer) {
299 DCHECK(thread_checker_.CalledOnValidThread()); 299 DCHECK(thread_checker_.CalledOnValidThread());
300 observers_.RemoveObserver(observer); 300 observers_.RemoveObserver(observer);
301 } 301 }
302 302
303 base::CancelableTaskTracker::TaskId HistoryService::ScheduleDBTask( 303 base::CancelableTaskTracker::TaskId HistoryService::ScheduleDBTask(
304 std::unique_ptr<HistoryDBTask> task, 304 std::unique_ptr<HistoryDBTask> task,
305 base::CancelableTaskTracker* tracker) { 305 base::CancelableTaskTracker* tracker) {
306 DCHECK(thread_) << "History service being called after cleanup"; 306 DCHECK(thread_) << "History service being called after cleanup";
307 DCHECK(thread_checker_.CalledOnValidThread()); 307 DCHECK(thread_checker_.CalledOnValidThread());
308 base::CancelableTaskTracker::IsCanceledCallback is_canceled; 308 base::CancelableTaskTracker::IsCanceledCallback is_canceled;
309 base::CancelableTaskTracker::TaskId task_id = 309 base::CancelableTaskTracker::TaskId task_id =
310 tracker->NewTrackedTaskId(&is_canceled); 310 tracker->NewTrackedTaskId(&is_canceled);
311 // Use base::ThreadTaskRunnerHandler::Get() to get a task runner for 311 // Use base::ThreadTaskRunnerHandler::Get() to get a task runner for
312 // the current message loop so that we can forward the call to the method 312 // the current message loop so that we can forward the call to the method
313 // HistoryDBTask::DoneRunOnMainThread() in the correct thread. 313 // HistoryDBTask::DoneRunOnMainThread() in the correct thread.
314 thread_->task_runner()->PostTask( 314 thread_->task_runner()->PostTask(
315 FROM_HERE, base::Bind(&HistoryBackend::ProcessDBTask, 315 FROM_HERE, base::Bind(&HistoryBackend::ProcessDBTask,
316 history_backend_.get(), base::Passed(&task), 316 history_backend_, base::Passed(&task),
317 base::ThreadTaskRunnerHandle::Get(), is_canceled)); 317 base::ThreadTaskRunnerHandle::Get(), is_canceled));
318 return task_id; 318 return task_id;
319 } 319 }
320 320
321 void HistoryService::FlushForTest(const base::Closure& flushed) { 321 void HistoryService::FlushForTest(const base::Closure& flushed) {
322 thread_->task_runner()->PostTaskAndReply( 322 thread_->task_runner()->PostTaskAndReply(
323 FROM_HERE, base::Bind(&base::DoNothing), flushed); 323 FROM_HERE, base::Bind(&base::DoNothing), flushed);
324 } 324 }
325 325
326 void HistoryService::SetOnBackendDestroyTask(const base::Closure& task) { 326 void HistoryService::SetOnBackendDestroyTask(const base::Closure& task) {
327 DCHECK(thread_) << "History service being called after cleanup"; 327 DCHECK(thread_) << "History service being called after cleanup";
328 DCHECK(thread_checker_.CalledOnValidThread()); 328 DCHECK(thread_checker_.CalledOnValidThread());
329 ScheduleTask( 329 ScheduleTask(
330 PRIORITY_NORMAL, 330 PRIORITY_NORMAL,
331 base::Bind(&HistoryBackend::SetOnBackendDestroyTask, 331 base::Bind(&HistoryBackend::SetOnBackendDestroyTask,
332 history_backend_.get(), base::MessageLoop::current(), task)); 332 history_backend_, base::MessageLoop::current(), task));
333 } 333 }
334 334
335 void HistoryService::TopHosts(size_t num_hosts, 335 void HistoryService::TopHosts(size_t num_hosts,
336 const TopHostsCallback& callback) const { 336 const TopHostsCallback& callback) const {
337 DCHECK(thread_) << "History service being called after cleanup"; 337 DCHECK(thread_) << "History service being called after cleanup";
338 DCHECK(thread_checker_.CalledOnValidThread()); 338 DCHECK(thread_checker_.CalledOnValidThread());
339 PostTaskAndReplyWithResult( 339 PostTaskAndReplyWithResult(
340 thread_->task_runner().get(), FROM_HERE, 340 thread_->task_runner().get(), FROM_HERE,
341 base::Bind(&HistoryBackend::TopHosts, history_backend_.get(), num_hosts), 341 base::Bind(&HistoryBackend::TopHosts, history_backend_, num_hosts),
342 callback); 342 callback);
343 } 343 }
344 344
345 void HistoryService::GetCountsAndLastVisitForOrigins( 345 void HistoryService::GetCountsAndLastVisitForOrigins(
346 const std::set<GURL>& origins, 346 const std::set<GURL>& origins,
347 const GetCountsAndLastVisitForOriginsCallback& callback) const { 347 const GetCountsAndLastVisitForOriginsCallback& callback) const {
348 DCHECK(thread_) << "History service being called after cleanup"; 348 DCHECK(thread_) << "History service being called after cleanup";
349 DCHECK(thread_checker_.CalledOnValidThread()); 349 DCHECK(thread_checker_.CalledOnValidThread());
350 PostTaskAndReplyWithResult( 350 PostTaskAndReplyWithResult(
351 thread_->task_runner().get(), FROM_HERE, 351 thread_->task_runner().get(), FROM_HERE,
352 base::Bind(&HistoryBackend::GetCountsAndLastVisitForOrigins, 352 base::Bind(&HistoryBackend::GetCountsAndLastVisitForOrigins,
353 history_backend_.get(), origins), 353 history_backend_, origins),
354 callback); 354 callback);
355 } 355 }
356 356
357 void HistoryService::HostRankIfAvailable( 357 void HistoryService::HostRankIfAvailable(
358 const GURL& url, 358 const GURL& url,
359 const base::Callback<void(int)>& callback) const { 359 const base::Callback<void(int)>& callback) const {
360 DCHECK(thread_) << "History service being called after cleanup"; 360 DCHECK(thread_) << "History service being called after cleanup";
361 DCHECK(thread_checker_.CalledOnValidThread()); 361 DCHECK(thread_checker_.CalledOnValidThread());
362 PostTaskAndReplyWithResult(thread_->task_runner().get(), FROM_HERE, 362 PostTaskAndReplyWithResult(thread_->task_runner().get(), FROM_HERE,
363 base::Bind(&HistoryBackend::HostRankIfAvailable, 363 base::Bind(&HistoryBackend::HostRankIfAvailable,
364 history_backend_.get(), url), 364 history_backend_, url),
365 callback); 365 callback);
366 } 366 }
367 367
368 void HistoryService::AddPage(const GURL& url, 368 void HistoryService::AddPage(const GURL& url,
369 Time time, 369 Time time,
370 ContextID context_id, 370 ContextID context_id,
371 int nav_entry_id, 371 int nav_entry_id,
372 const GURL& referrer, 372 const GURL& referrer,
373 const RedirectList& redirects, 373 const RedirectList& redirects,
374 ui::PageTransition transition, 374 ui::PageTransition transition,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 // add_page_args.redirects which mean we can use VisitDelegate::AddURLs() 407 // add_page_args.redirects which mean we can use VisitDelegate::AddURLs()
408 // with the whole array. 408 // with the whole array.
409 DCHECK_EQ(add_page_args.url, add_page_args.redirects.back()); 409 DCHECK_EQ(add_page_args.url, add_page_args.redirects.back());
410 visit_delegate_->AddURLs(add_page_args.redirects); 410 visit_delegate_->AddURLs(add_page_args.redirects);
411 } else { 411 } else {
412 visit_delegate_->AddURL(add_page_args.url); 412 visit_delegate_->AddURL(add_page_args.url);
413 } 413 }
414 } 414 }
415 415
416 ScheduleTask(PRIORITY_NORMAL, 416 ScheduleTask(PRIORITY_NORMAL,
417 base::Bind(&HistoryBackend::AddPage, history_backend_.get(), 417 base::Bind(&HistoryBackend::AddPage, history_backend_,
418 add_page_args)); 418 add_page_args));
419 } 419 }
420 420
421 void HistoryService::AddPageNoVisitForBookmark(const GURL& url, 421 void HistoryService::AddPageNoVisitForBookmark(const GURL& url,
422 const base::string16& title) { 422 const base::string16& title) {
423 DCHECK(thread_) << "History service being called after cleanup"; 423 DCHECK(thread_) << "History service being called after cleanup";
424 DCHECK(thread_checker_.CalledOnValidThread()); 424 DCHECK(thread_checker_.CalledOnValidThread());
425 if (history_client_ && !history_client_->CanAddURL(url)) 425 if (history_client_ && !history_client_->CanAddURL(url))
426 return; 426 return;
427 427
428 ScheduleTask(PRIORITY_NORMAL, 428 ScheduleTask(PRIORITY_NORMAL,
429 base::Bind(&HistoryBackend::AddPageNoVisitForBookmark, 429 base::Bind(&HistoryBackend::AddPageNoVisitForBookmark,
430 history_backend_.get(), url, title)); 430 history_backend_, url, title));
431 } 431 }
432 432
433 void HistoryService::SetPageTitle(const GURL& url, 433 void HistoryService::SetPageTitle(const GURL& url,
434 const base::string16& title) { 434 const base::string16& title) {
435 DCHECK(thread_) << "History service being called after cleanup"; 435 DCHECK(thread_) << "History service being called after cleanup";
436 DCHECK(thread_checker_.CalledOnValidThread()); 436 DCHECK(thread_checker_.CalledOnValidThread());
437 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::SetPageTitle, 437 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::SetPageTitle,
438 history_backend_.get(), url, title)); 438 history_backend_, url, title));
439 } 439 }
440 440
441 void HistoryService::UpdateWithPageEndTime(ContextID context_id, 441 void HistoryService::UpdateWithPageEndTime(ContextID context_id,
442 int nav_entry_id, 442 int nav_entry_id,
443 const GURL& url, 443 const GURL& url,
444 Time end_ts) { 444 Time end_ts) {
445 DCHECK(thread_) << "History service being called after cleanup"; 445 DCHECK(thread_) << "History service being called after cleanup";
446 DCHECK(thread_checker_.CalledOnValidThread()); 446 DCHECK(thread_checker_.CalledOnValidThread());
447 ScheduleTask( 447 ScheduleTask(
448 PRIORITY_NORMAL, 448 PRIORITY_NORMAL,
449 base::Bind(&HistoryBackend::UpdateWithPageEndTime, history_backend_.get(), 449 base::Bind(&HistoryBackend::UpdateWithPageEndTime, history_backend_,
450 context_id, nav_entry_id, url, end_ts)); 450 context_id, nav_entry_id, url, end_ts));
451 } 451 }
452 452
453 void HistoryService::AddPageWithDetails(const GURL& url, 453 void HistoryService::AddPageWithDetails(const GURL& url,
454 const base::string16& title, 454 const base::string16& title,
455 int visit_count, 455 int visit_count,
456 int typed_count, 456 int typed_count,
457 Time last_visit, 457 Time last_visit,
458 bool hidden, 458 bool hidden,
459 VisitSource visit_source) { 459 VisitSource visit_source) {
(...skipping 12 matching lines...) Expand all
472 row.set_visit_count(visit_count); 472 row.set_visit_count(visit_count);
473 row.set_typed_count(typed_count); 473 row.set_typed_count(typed_count);
474 row.set_last_visit(last_visit); 474 row.set_last_visit(last_visit);
475 row.set_hidden(hidden); 475 row.set_hidden(hidden);
476 476
477 URLRows rows; 477 URLRows rows;
478 rows.push_back(row); 478 rows.push_back(row);
479 479
480 ScheduleTask(PRIORITY_NORMAL, 480 ScheduleTask(PRIORITY_NORMAL,
481 base::Bind(&HistoryBackend::AddPagesWithDetails, 481 base::Bind(&HistoryBackend::AddPagesWithDetails,
482 history_backend_.get(), rows, visit_source)); 482 history_backend_, rows, visit_source));
483 } 483 }
484 484
485 void HistoryService::AddPagesWithDetails(const URLRows& info, 485 void HistoryService::AddPagesWithDetails(const URLRows& info,
486 VisitSource visit_source) { 486 VisitSource visit_source) {
487 DCHECK(thread_) << "History service being called after cleanup"; 487 DCHECK(thread_) << "History service being called after cleanup";
488 DCHECK(thread_checker_.CalledOnValidThread()); 488 DCHECK(thread_checker_.CalledOnValidThread());
489 489
490 // Inform the VisitDelegate of the URLs 490 // Inform the VisitDelegate of the URLs
491 if (!info.empty() && visit_delegate_) { 491 if (!info.empty() && visit_delegate_) {
492 std::vector<GURL> urls; 492 std::vector<GURL> urls;
493 urls.reserve(info.size()); 493 urls.reserve(info.size());
494 for (const auto& row : info) 494 for (const auto& row : info)
495 urls.push_back(row.url()); 495 urls.push_back(row.url());
496 visit_delegate_->AddURLs(urls); 496 visit_delegate_->AddURLs(urls);
497 } 497 }
498 498
499 ScheduleTask(PRIORITY_NORMAL, 499 ScheduleTask(PRIORITY_NORMAL,
500 base::Bind(&HistoryBackend::AddPagesWithDetails, 500 base::Bind(&HistoryBackend::AddPagesWithDetails,
501 history_backend_.get(), info, visit_source)); 501 history_backend_, info, visit_source));
502 } 502 }
503 503
504 base::CancelableTaskTracker::TaskId HistoryService::GetFavicons( 504 base::CancelableTaskTracker::TaskId HistoryService::GetFavicons(
505 const std::vector<GURL>& icon_urls, 505 const std::vector<GURL>& icon_urls,
506 int icon_types, 506 int icon_types,
507 const std::vector<int>& desired_sizes, 507 const std::vector<int>& desired_sizes,
508 const favicon_base::FaviconResultsCallback& callback, 508 const favicon_base::FaviconResultsCallback& callback,
509 base::CancelableTaskTracker* tracker) { 509 base::CancelableTaskTracker* tracker) {
510 DCHECK(thread_) << "History service being called after cleanup"; 510 DCHECK(thread_) << "History service being called after cleanup";
511 DCHECK(thread_checker_.CalledOnValidThread()); 511 DCHECK(thread_checker_.CalledOnValidThread());
512 std::vector<favicon_base::FaviconRawBitmapResult>* results = 512 std::vector<favicon_base::FaviconRawBitmapResult>* results =
513 new std::vector<favicon_base::FaviconRawBitmapResult>(); 513 new std::vector<favicon_base::FaviconRawBitmapResult>();
514 return tracker->PostTaskAndReply( 514 return tracker->PostTaskAndReply(
515 thread_->task_runner().get(), FROM_HERE, 515 thread_->task_runner().get(), FROM_HERE,
516 base::Bind(&HistoryBackend::GetFavicons, history_backend_.get(), 516 base::Bind(&HistoryBackend::GetFavicons, history_backend_,
517 icon_urls, icon_types, desired_sizes, results), 517 icon_urls, icon_types, desired_sizes, results),
518 base::Bind(&RunWithFaviconResults, callback, base::Owned(results))); 518 base::Bind(&RunWithFaviconResults, callback, base::Owned(results)));
519 } 519 }
520 520
521 base::CancelableTaskTracker::TaskId HistoryService::GetFaviconsForURL( 521 base::CancelableTaskTracker::TaskId HistoryService::GetFaviconsForURL(
522 const GURL& page_url, 522 const GURL& page_url,
523 int icon_types, 523 int icon_types,
524 const std::vector<int>& desired_sizes, 524 const std::vector<int>& desired_sizes,
525 const favicon_base::FaviconResultsCallback& callback, 525 const favicon_base::FaviconResultsCallback& callback,
526 base::CancelableTaskTracker* tracker) { 526 base::CancelableTaskTracker* tracker) {
527 DCHECK(thread_) << "History service being called after cleanup"; 527 DCHECK(thread_) << "History service being called after cleanup";
528 DCHECK(thread_checker_.CalledOnValidThread()); 528 DCHECK(thread_checker_.CalledOnValidThread());
529 std::vector<favicon_base::FaviconRawBitmapResult>* results = 529 std::vector<favicon_base::FaviconRawBitmapResult>* results =
530 new std::vector<favicon_base::FaviconRawBitmapResult>(); 530 new std::vector<favicon_base::FaviconRawBitmapResult>();
531 return tracker->PostTaskAndReply( 531 return tracker->PostTaskAndReply(
532 thread_->task_runner().get(), FROM_HERE, 532 thread_->task_runner().get(), FROM_HERE,
533 base::Bind(&HistoryBackend::GetFaviconsForURL, history_backend_.get(), 533 base::Bind(&HistoryBackend::GetFaviconsForURL, history_backend_,
534 page_url, icon_types, desired_sizes, results), 534 page_url, icon_types, desired_sizes, results),
535 base::Bind(&RunWithFaviconResults, callback, base::Owned(results))); 535 base::Bind(&RunWithFaviconResults, callback, base::Owned(results)));
536 } 536 }
537 537
538 base::CancelableTaskTracker::TaskId HistoryService::GetLargestFaviconForURL( 538 base::CancelableTaskTracker::TaskId HistoryService::GetLargestFaviconForURL(
539 const GURL& page_url, 539 const GURL& page_url,
540 const std::vector<int>& icon_types, 540 const std::vector<int>& icon_types,
541 int minimum_size_in_pixels, 541 int minimum_size_in_pixels,
542 const favicon_base::FaviconRawBitmapCallback& callback, 542 const favicon_base::FaviconRawBitmapCallback& callback,
543 base::CancelableTaskTracker* tracker) { 543 base::CancelableTaskTracker* tracker) {
544 DCHECK(thread_) << "History service being called after cleanup"; 544 DCHECK(thread_) << "History service being called after cleanup";
545 DCHECK(thread_checker_.CalledOnValidThread()); 545 DCHECK(thread_checker_.CalledOnValidThread());
546 favicon_base::FaviconRawBitmapResult* result = 546 favicon_base::FaviconRawBitmapResult* result =
547 new favicon_base::FaviconRawBitmapResult(); 547 new favicon_base::FaviconRawBitmapResult();
548 return tracker->PostTaskAndReply( 548 return tracker->PostTaskAndReply(
549 thread_->task_runner().get(), FROM_HERE, 549 thread_->task_runner().get(), FROM_HERE,
550 base::Bind(&HistoryBackend::GetLargestFaviconForURL, 550 base::Bind(&HistoryBackend::GetLargestFaviconForURL,
551 history_backend_.get(), page_url, icon_types, 551 history_backend_, page_url, icon_types,
552 minimum_size_in_pixels, result), 552 minimum_size_in_pixels, result),
553 base::Bind(&RunWithFaviconResult, callback, base::Owned(result))); 553 base::Bind(&RunWithFaviconResult, callback, base::Owned(result)));
554 } 554 }
555 555
556 base::CancelableTaskTracker::TaskId HistoryService::GetFaviconForID( 556 base::CancelableTaskTracker::TaskId HistoryService::GetFaviconForID(
557 favicon_base::FaviconID favicon_id, 557 favicon_base::FaviconID favicon_id,
558 int desired_size, 558 int desired_size,
559 const favicon_base::FaviconResultsCallback& callback, 559 const favicon_base::FaviconResultsCallback& callback,
560 base::CancelableTaskTracker* tracker) { 560 base::CancelableTaskTracker* tracker) {
561 DCHECK(thread_) << "History service being called after cleanup"; 561 DCHECK(thread_) << "History service being called after cleanup";
562 DCHECK(thread_checker_.CalledOnValidThread()); 562 DCHECK(thread_checker_.CalledOnValidThread());
563 std::vector<favicon_base::FaviconRawBitmapResult>* results = 563 std::vector<favicon_base::FaviconRawBitmapResult>* results =
564 new std::vector<favicon_base::FaviconRawBitmapResult>(); 564 new std::vector<favicon_base::FaviconRawBitmapResult>();
565 return tracker->PostTaskAndReply( 565 return tracker->PostTaskAndReply(
566 thread_->task_runner().get(), FROM_HERE, 566 thread_->task_runner().get(), FROM_HERE,
567 base::Bind(&HistoryBackend::GetFaviconForID, history_backend_.get(), 567 base::Bind(&HistoryBackend::GetFaviconForID, history_backend_,
568 favicon_id, desired_size, results), 568 favicon_id, desired_size, results),
569 base::Bind(&RunWithFaviconResults, callback, base::Owned(results))); 569 base::Bind(&RunWithFaviconResults, callback, base::Owned(results)));
570 } 570 }
571 571
572 base::CancelableTaskTracker::TaskId 572 base::CancelableTaskTracker::TaskId
573 HistoryService::UpdateFaviconMappingsAndFetch( 573 HistoryService::UpdateFaviconMappingsAndFetch(
574 const GURL& page_url, 574 const GURL& page_url,
575 const std::vector<GURL>& icon_urls, 575 const std::vector<GURL>& icon_urls,
576 int icon_types, 576 int icon_types,
577 const std::vector<int>& desired_sizes, 577 const std::vector<int>& desired_sizes,
578 const favicon_base::FaviconResultsCallback& callback, 578 const favicon_base::FaviconResultsCallback& callback,
579 base::CancelableTaskTracker* tracker) { 579 base::CancelableTaskTracker* tracker) {
580 DCHECK(thread_) << "History service being called after cleanup"; 580 DCHECK(thread_) << "History service being called after cleanup";
581 DCHECK(thread_checker_.CalledOnValidThread()); 581 DCHECK(thread_checker_.CalledOnValidThread());
582 std::vector<favicon_base::FaviconRawBitmapResult>* results = 582 std::vector<favicon_base::FaviconRawBitmapResult>* results =
583 new std::vector<favicon_base::FaviconRawBitmapResult>(); 583 new std::vector<favicon_base::FaviconRawBitmapResult>();
584 return tracker->PostTaskAndReply( 584 return tracker->PostTaskAndReply(
585 thread_->task_runner().get(), FROM_HERE, 585 thread_->task_runner().get(), FROM_HERE,
586 base::Bind(&HistoryBackend::UpdateFaviconMappingsAndFetch, 586 base::Bind(&HistoryBackend::UpdateFaviconMappingsAndFetch,
587 history_backend_.get(), page_url, icon_urls, icon_types, 587 history_backend_, page_url, icon_urls, icon_types,
588 desired_sizes, results), 588 desired_sizes, results),
589 base::Bind(&RunWithFaviconResults, callback, base::Owned(results))); 589 base::Bind(&RunWithFaviconResults, callback, base::Owned(results)));
590 } 590 }
591 591
592 void HistoryService::MergeFavicon( 592 void HistoryService::MergeFavicon(
593 const GURL& page_url, 593 const GURL& page_url,
594 const GURL& icon_url, 594 const GURL& icon_url,
595 favicon_base::IconType icon_type, 595 favicon_base::IconType icon_type,
596 scoped_refptr<base::RefCountedMemory> bitmap_data, 596 scoped_refptr<base::RefCountedMemory> bitmap_data,
597 const gfx::Size& pixel_size) { 597 const gfx::Size& pixel_size) {
598 DCHECK(thread_) << "History service being called after cleanup"; 598 DCHECK(thread_) << "History service being called after cleanup";
599 DCHECK(thread_checker_.CalledOnValidThread()); 599 DCHECK(thread_checker_.CalledOnValidThread());
600 if (history_client_ && !history_client_->CanAddURL(page_url)) 600 if (history_client_ && !history_client_->CanAddURL(page_url))
601 return; 601 return;
602 602
603 ScheduleTask( 603 ScheduleTask(
604 PRIORITY_NORMAL, 604 PRIORITY_NORMAL,
605 base::Bind(&HistoryBackend::MergeFavicon, history_backend_.get(), 605 base::Bind(&HistoryBackend::MergeFavicon, history_backend_,
606 page_url, icon_url, icon_type, bitmap_data, pixel_size)); 606 page_url, icon_url, icon_type, bitmap_data, pixel_size));
607 } 607 }
608 608
609 void HistoryService::SetFavicons(const GURL& page_url, 609 void HistoryService::SetFavicons(const GURL& page_url,
610 favicon_base::IconType icon_type, 610 favicon_base::IconType icon_type,
611 const GURL& icon_url, 611 const GURL& icon_url,
612 const std::vector<SkBitmap>& bitmaps) { 612 const std::vector<SkBitmap>& bitmaps) {
613 DCHECK(thread_) << "History service being called after cleanup"; 613 DCHECK(thread_) << "History service being called after cleanup";
614 DCHECK(thread_checker_.CalledOnValidThread()); 614 DCHECK(thread_checker_.CalledOnValidThread());
615 if (history_client_ && !history_client_->CanAddURL(page_url)) 615 if (history_client_ && !history_client_->CanAddURL(page_url))
616 return; 616 return;
617 617
618 ScheduleTask(PRIORITY_NORMAL, 618 ScheduleTask(PRIORITY_NORMAL,
619 base::Bind(&HistoryBackend::SetFavicons, history_backend_.get(), 619 base::Bind(&HistoryBackend::SetFavicons, history_backend_,
620 page_url, icon_type, icon_url, bitmaps)); 620 page_url, icon_type, icon_url, bitmaps));
621 } 621 }
622 622
623 void HistoryService::SetFaviconsOutOfDateForPage(const GURL& page_url) { 623 void HistoryService::SetFaviconsOutOfDateForPage(const GURL& page_url) {
624 DCHECK(thread_) << "History service being called after cleanup"; 624 DCHECK(thread_) << "History service being called after cleanup";
625 DCHECK(thread_checker_.CalledOnValidThread()); 625 DCHECK(thread_checker_.CalledOnValidThread());
626 ScheduleTask(PRIORITY_NORMAL, 626 ScheduleTask(PRIORITY_NORMAL,
627 base::Bind(&HistoryBackend::SetFaviconsOutOfDateForPage, 627 base::Bind(&HistoryBackend::SetFaviconsOutOfDateForPage,
628 history_backend_.get(), page_url)); 628 history_backend_, page_url));
629 } 629 }
630 630
631 void HistoryService::SetImportedFavicons( 631 void HistoryService::SetImportedFavicons(
632 const favicon_base::FaviconUsageDataList& favicon_usage) { 632 const favicon_base::FaviconUsageDataList& favicon_usage) {
633 DCHECK(thread_) << "History service being called after cleanup"; 633 DCHECK(thread_) << "History service being called after cleanup";
634 DCHECK(thread_checker_.CalledOnValidThread()); 634 DCHECK(thread_checker_.CalledOnValidThread());
635 ScheduleTask(PRIORITY_NORMAL, 635 ScheduleTask(PRIORITY_NORMAL,
636 base::Bind(&HistoryBackend::SetImportedFavicons, 636 base::Bind(&HistoryBackend::SetImportedFavicons,
637 history_backend_.get(), favicon_usage)); 637 history_backend_, favicon_usage));
638 } 638 }
639 639
640 base::CancelableTaskTracker::TaskId HistoryService::QueryURL( 640 base::CancelableTaskTracker::TaskId HistoryService::QueryURL(
641 const GURL& url, 641 const GURL& url,
642 bool want_visits, 642 bool want_visits,
643 const QueryURLCallback& callback, 643 const QueryURLCallback& callback,
644 base::CancelableTaskTracker* tracker) { 644 base::CancelableTaskTracker* tracker) {
645 DCHECK(thread_) << "History service being called after cleanup"; 645 DCHECK(thread_) << "History service being called after cleanup";
646 DCHECK(thread_checker_.CalledOnValidThread()); 646 DCHECK(thread_checker_.CalledOnValidThread());
647 QueryURLResult* query_url_result = new QueryURLResult(); 647 QueryURLResult* query_url_result = new QueryURLResult();
648 return tracker->PostTaskAndReply( 648 return tracker->PostTaskAndReply(
649 thread_->task_runner().get(), FROM_HERE, 649 thread_->task_runner().get(), FROM_HERE,
650 base::Bind(&HistoryBackend::QueryURL, history_backend_.get(), url, 650 base::Bind(&HistoryBackend::QueryURL, history_backend_, url,
651 want_visits, base::Unretained(query_url_result)), 651 want_visits, base::Unretained(query_url_result)),
652 base::Bind(&RunWithQueryURLResult, callback, 652 base::Bind(&RunWithQueryURLResult, callback,
653 base::Owned(query_url_result))); 653 base::Owned(query_url_result)));
654 } 654 }
655 655
656 // Statistics ------------------------------------------------------------------ 656 // Statistics ------------------------------------------------------------------
657 657
658 base::CancelableTaskTracker::TaskId HistoryService::GetHistoryCount( 658 base::CancelableTaskTracker::TaskId HistoryService::GetHistoryCount(
659 const Time& begin_time, 659 const Time& begin_time,
660 const Time& end_time, 660 const Time& end_time,
661 const GetHistoryCountCallback& callback, 661 const GetHistoryCountCallback& callback,
662 base::CancelableTaskTracker* tracker) { 662 base::CancelableTaskTracker* tracker) {
663 DCHECK(thread_) << "History service being called after cleanup"; 663 DCHECK(thread_) << "History service being called after cleanup";
664 DCHECK(thread_checker_.CalledOnValidThread()); 664 DCHECK(thread_checker_.CalledOnValidThread());
665 665
666 return tracker->PostTaskAndReplyWithResult( 666 return tracker->PostTaskAndReplyWithResult(
667 thread_->task_runner().get(), FROM_HERE, 667 thread_->task_runner().get(), FROM_HERE,
668 base::Bind(&HistoryBackend::GetHistoryCount, 668 base::Bind(&HistoryBackend::GetHistoryCount,
669 history_backend_.get(), 669 history_backend_,
670 begin_time, 670 begin_time,
671 end_time), 671 end_time),
672 callback); 672 callback);
673 } 673 }
674 674
675 // Downloads ------------------------------------------------------------------- 675 // Downloads -------------------------------------------------------------------
676 676
677 // Handle creation of a download by creating an entry in the history service's 677 // Handle creation of a download by creating an entry in the history service's
678 // 'downloads' table. 678 // 'downloads' table.
679 void HistoryService::CreateDownload( 679 void HistoryService::CreateDownload(
680 const DownloadRow& create_info, 680 const DownloadRow& create_info,
681 const HistoryService::DownloadCreateCallback& callback) { 681 const HistoryService::DownloadCreateCallback& callback) {
682 DCHECK(thread_) << "History service being called after cleanup"; 682 DCHECK(thread_) << "History service being called after cleanup";
683 DCHECK(thread_checker_.CalledOnValidThread()); 683 DCHECK(thread_checker_.CalledOnValidThread());
684 PostTaskAndReplyWithResult(thread_->task_runner().get(), FROM_HERE, 684 PostTaskAndReplyWithResult(thread_->task_runner().get(), FROM_HERE,
685 base::Bind(&HistoryBackend::CreateDownload, 685 base::Bind(&HistoryBackend::CreateDownload,
686 history_backend_.get(), create_info), 686 history_backend_, create_info),
687 callback); 687 callback);
688 } 688 }
689 689
690 void HistoryService::GetNextDownloadId(const DownloadIdCallback& callback) { 690 void HistoryService::GetNextDownloadId(const DownloadIdCallback& callback) {
691 DCHECK(thread_) << "History service being called after cleanup"; 691 DCHECK(thread_) << "History service being called after cleanup";
692 DCHECK(thread_checker_.CalledOnValidThread()); 692 DCHECK(thread_checker_.CalledOnValidThread());
693 PostTaskAndReplyWithResult( 693 PostTaskAndReplyWithResult(
694 thread_->task_runner().get(), FROM_HERE, 694 thread_->task_runner().get(), FROM_HERE,
695 base::Bind(&HistoryBackend::GetNextDownloadId, history_backend_.get()), 695 base::Bind(&HistoryBackend::GetNextDownloadId, history_backend_),
696 callback); 696 callback);
697 } 697 }
698 698
699 // Handle queries for a list of all downloads in the history database's 699 // Handle queries for a list of all downloads in the history database's
700 // 'downloads' table. 700 // 'downloads' table.
701 void HistoryService::QueryDownloads(const DownloadQueryCallback& callback) { 701 void HistoryService::QueryDownloads(const DownloadQueryCallback& callback) {
702 DCHECK(thread_) << "History service being called after cleanup"; 702 DCHECK(thread_) << "History service being called after cleanup";
703 DCHECK(thread_checker_.CalledOnValidThread()); 703 DCHECK(thread_checker_.CalledOnValidThread());
704 std::vector<DownloadRow>* rows = new std::vector<DownloadRow>(); 704 std::vector<DownloadRow>* rows = new std::vector<DownloadRow>();
705 std::unique_ptr<std::vector<DownloadRow>> scoped_rows(rows); 705 std::unique_ptr<std::vector<DownloadRow>> scoped_rows(rows);
706 // Beware! The first Bind() does not simply |scoped_rows.get()| because 706 // Beware! The first Bind() does not simply |scoped_rows.get()| because
707 // base::Passed(&scoped_rows) nullifies |scoped_rows|, and compilers do not 707 // base::Passed(&scoped_rows) nullifies |scoped_rows|, and compilers do not
708 // guarantee that the first Bind's arguments are evaluated before the second 708 // guarantee that the first Bind's arguments are evaluated before the second
709 // Bind's arguments. 709 // Bind's arguments.
710 thread_->task_runner()->PostTaskAndReply( 710 thread_->task_runner()->PostTaskAndReply(
711 FROM_HERE, 711 FROM_HERE,
712 base::Bind(&HistoryBackend::QueryDownloads, history_backend_.get(), rows), 712 base::Bind(&HistoryBackend::QueryDownloads, history_backend_, rows),
713 base::Bind(callback, base::Passed(&scoped_rows))); 713 base::Bind(callback, base::Passed(&scoped_rows)));
714 } 714 }
715 715
716 // Handle updates for a particular download. This is a 'fire and forget' 716 // Handle updates for a particular download. This is a 'fire and forget'
717 // operation, so we don't need to be called back. 717 // operation, so we don't need to be called back.
718 void HistoryService::UpdateDownload(const DownloadRow& data) { 718 void HistoryService::UpdateDownload(const DownloadRow& data) {
719 DCHECK(thread_) << "History service being called after cleanup"; 719 DCHECK(thread_) << "History service being called after cleanup";
720 DCHECK(thread_checker_.CalledOnValidThread()); 720 DCHECK(thread_checker_.CalledOnValidThread());
721 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::UpdateDownload, 721 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::UpdateDownload,
722 history_backend_.get(), data)); 722 history_backend_, data));
723 } 723 }
724 724
725 void HistoryService::RemoveDownloads(const std::set<uint32_t>& ids) { 725 void HistoryService::RemoveDownloads(const std::set<uint32_t>& ids) {
726 DCHECK(thread_) << "History service being called after cleanup"; 726 DCHECK(thread_) << "History service being called after cleanup";
727 DCHECK(thread_checker_.CalledOnValidThread()); 727 DCHECK(thread_checker_.CalledOnValidThread());
728 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::RemoveDownloads, 728 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::RemoveDownloads,
729 history_backend_.get(), ids)); 729 history_backend_, ids));
730 } 730 }
731 731
732 base::CancelableTaskTracker::TaskId HistoryService::QueryHistory( 732 base::CancelableTaskTracker::TaskId HistoryService::QueryHistory(
733 const base::string16& text_query, 733 const base::string16& text_query,
734 const QueryOptions& options, 734 const QueryOptions& options,
735 const QueryHistoryCallback& callback, 735 const QueryHistoryCallback& callback,
736 base::CancelableTaskTracker* tracker) { 736 base::CancelableTaskTracker* tracker) {
737 DCHECK(thread_) << "History service being called after cleanup"; 737 DCHECK(thread_) << "History service being called after cleanup";
738 DCHECK(thread_checker_.CalledOnValidThread()); 738 DCHECK(thread_checker_.CalledOnValidThread());
739 QueryResults* query_results = new QueryResults(); 739 QueryResults* query_results = new QueryResults();
740 return tracker->PostTaskAndReply( 740 return tracker->PostTaskAndReply(
741 thread_->task_runner().get(), FROM_HERE, 741 thread_->task_runner().get(), FROM_HERE,
742 base::Bind(&HistoryBackend::QueryHistory, history_backend_.get(), 742 base::Bind(&HistoryBackend::QueryHistory, history_backend_,
743 text_query, options, base::Unretained(query_results)), 743 text_query, options, base::Unretained(query_results)),
744 base::Bind(callback, base::Owned(query_results))); 744 base::Bind(callback, base::Owned(query_results)));
745 } 745 }
746 746
747 base::CancelableTaskTracker::TaskId HistoryService::QueryRedirectsFrom( 747 base::CancelableTaskTracker::TaskId HistoryService::QueryRedirectsFrom(
748 const GURL& from_url, 748 const GURL& from_url,
749 const QueryRedirectsCallback& callback, 749 const QueryRedirectsCallback& callback,
750 base::CancelableTaskTracker* tracker) { 750 base::CancelableTaskTracker* tracker) {
751 DCHECK(thread_) << "History service being called after cleanup"; 751 DCHECK(thread_) << "History service being called after cleanup";
752 DCHECK(thread_checker_.CalledOnValidThread()); 752 DCHECK(thread_checker_.CalledOnValidThread());
753 RedirectList* result = new RedirectList(); 753 RedirectList* result = new RedirectList();
754 return tracker->PostTaskAndReply( 754 return tracker->PostTaskAndReply(
755 thread_->task_runner().get(), FROM_HERE, 755 thread_->task_runner().get(), FROM_HERE,
756 base::Bind(&HistoryBackend::QueryRedirectsFrom, history_backend_.get(), 756 base::Bind(&HistoryBackend::QueryRedirectsFrom, history_backend_,
757 from_url, base::Unretained(result)), 757 from_url, base::Unretained(result)),
758 base::Bind(callback, base::Owned(result))); 758 base::Bind(callback, base::Owned(result)));
759 } 759 }
760 760
761 base::CancelableTaskTracker::TaskId HistoryService::QueryRedirectsTo( 761 base::CancelableTaskTracker::TaskId HistoryService::QueryRedirectsTo(
762 const GURL& to_url, 762 const GURL& to_url,
763 const QueryRedirectsCallback& callback, 763 const QueryRedirectsCallback& callback,
764 base::CancelableTaskTracker* tracker) { 764 base::CancelableTaskTracker* tracker) {
765 DCHECK(thread_) << "History service being called after cleanup"; 765 DCHECK(thread_) << "History service being called after cleanup";
766 DCHECK(thread_checker_.CalledOnValidThread()); 766 DCHECK(thread_checker_.CalledOnValidThread());
767 RedirectList* result = new RedirectList(); 767 RedirectList* result = new RedirectList();
768 return tracker->PostTaskAndReply( 768 return tracker->PostTaskAndReply(
769 thread_->task_runner().get(), FROM_HERE, 769 thread_->task_runner().get(), FROM_HERE,
770 base::Bind(&HistoryBackend::QueryRedirectsTo, history_backend_.get(), 770 base::Bind(&HistoryBackend::QueryRedirectsTo, history_backend_,
771 to_url, base::Unretained(result)), 771 to_url, base::Unretained(result)),
772 base::Bind(callback, base::Owned(result))); 772 base::Bind(callback, base::Owned(result)));
773 } 773 }
774 774
775 base::CancelableTaskTracker::TaskId HistoryService::GetVisibleVisitCountToHost( 775 base::CancelableTaskTracker::TaskId HistoryService::GetVisibleVisitCountToHost(
776 const GURL& url, 776 const GURL& url,
777 const GetVisibleVisitCountToHostCallback& callback, 777 const GetVisibleVisitCountToHostCallback& callback,
778 base::CancelableTaskTracker* tracker) { 778 base::CancelableTaskTracker* tracker) {
779 DCHECK(thread_) << "History service being called after cleanup"; 779 DCHECK(thread_) << "History service being called after cleanup";
780 DCHECK(thread_checker_.CalledOnValidThread()); 780 DCHECK(thread_checker_.CalledOnValidThread());
781 VisibleVisitCountToHostResult* result = new VisibleVisitCountToHostResult(); 781 VisibleVisitCountToHostResult* result = new VisibleVisitCountToHostResult();
782 return tracker->PostTaskAndReply( 782 return tracker->PostTaskAndReply(
783 thread_->task_runner().get(), FROM_HERE, 783 thread_->task_runner().get(), FROM_HERE,
784 base::Bind(&HistoryBackend::GetVisibleVisitCountToHost, 784 base::Bind(&HistoryBackend::GetVisibleVisitCountToHost,
785 history_backend_.get(), url, base::Unretained(result)), 785 history_backend_, url, base::Unretained(result)),
786 base::Bind(&RunWithVisibleVisitCountToHostResult, callback, 786 base::Bind(&RunWithVisibleVisitCountToHostResult, callback,
787 base::Owned(result))); 787 base::Owned(result)));
788 } 788 }
789 789
790 base::CancelableTaskTracker::TaskId HistoryService::QueryMostVisitedURLs( 790 base::CancelableTaskTracker::TaskId HistoryService::QueryMostVisitedURLs(
791 int result_count, 791 int result_count,
792 int days_back, 792 int days_back,
793 const QueryMostVisitedURLsCallback& callback, 793 const QueryMostVisitedURLsCallback& callback,
794 base::CancelableTaskTracker* tracker) { 794 base::CancelableTaskTracker* tracker) {
795 DCHECK(thread_) << "History service being called after cleanup"; 795 DCHECK(thread_) << "History service being called after cleanup";
796 DCHECK(thread_checker_.CalledOnValidThread()); 796 DCHECK(thread_checker_.CalledOnValidThread());
797 MostVisitedURLList* result = new MostVisitedURLList(); 797 MostVisitedURLList* result = new MostVisitedURLList();
798 return tracker->PostTaskAndReply( 798 return tracker->PostTaskAndReply(
799 thread_->task_runner().get(), FROM_HERE, 799 thread_->task_runner().get(), FROM_HERE,
800 base::Bind(&HistoryBackend::QueryMostVisitedURLs, history_backend_.get(), 800 base::Bind(&HistoryBackend::QueryMostVisitedURLs, history_backend_,
801 result_count, days_back, base::Unretained(result)), 801 result_count, days_back, base::Unretained(result)),
802 base::Bind(callback, base::Owned(result))); 802 base::Bind(callback, base::Owned(result)));
803 } 803 }
804 804
805 void HistoryService::Cleanup() { 805 void HistoryService::Cleanup() {
806 DCHECK(thread_checker_.CalledOnValidThread()); 806 DCHECK(thread_checker_.CalledOnValidThread());
807 if (!thread_) { 807 if (!thread_) {
808 // We've already cleaned up. 808 // We've already cleaned up.
809 return; 809 return;
810 } 810 }
(...skipping 26 matching lines...) Expand all
837 // 837 //
838 // Therefore, we create a closure to run the Closing operation first. This 838 // Therefore, we create a closure to run the Closing operation first. This
839 // holds a reference to the backend. Then we release our reference, then we 839 // holds a reference to the backend. Then we release our reference, then we
840 // schedule the task to run. After the task runs, it will delete its 840 // schedule the task to run. After the task runs, it will delete its
841 // reference from the history thread, ensuring everything works properly. 841 // reference from the history thread, ensuring everything works properly.
842 // 842 //
843 // TODO(ajwong): Cleanup HistoryBackend lifetime issues. 843 // TODO(ajwong): Cleanup HistoryBackend lifetime issues.
844 // See http://crbug.com/99767. 844 // See http://crbug.com/99767.
845 history_backend_->AddRef(); 845 history_backend_->AddRef();
846 base::Closure closing_task = 846 base::Closure closing_task =
847 base::Bind(&HistoryBackend::Closing, history_backend_.get()); 847 base::Bind(&HistoryBackend::Closing, history_backend_);
848 ScheduleTask(PRIORITY_NORMAL, closing_task); 848 ScheduleTask(PRIORITY_NORMAL, closing_task);
849 closing_task.Reset(); 849 closing_task.Reset();
850 HistoryBackend* raw_ptr = history_backend_.get(); 850 HistoryBackend* raw_ptr = history_backend_.get();
851 history_backend_ = nullptr; 851 history_backend_ = nullptr;
852 thread_->task_runner()->ReleaseSoon(FROM_HERE, raw_ptr); 852 thread_->task_runner()->ReleaseSoon(FROM_HERE, raw_ptr);
853 } 853 }
854 854
855 // Delete the thread, which joins with the background thread. We defensively 855 // Delete the thread, which joins with the background thread. We defensively
856 // nullptr the pointer before deleting it in case somebody tries to use it 856 // nullptr the pointer before deleting it in case somebody tries to use it
857 // during shutdown, but this shouldn't happen. 857 // during shutdown, but this shouldn't happen.
(...skipping 19 matching lines...) Expand all
877 877
878 // Create the history backend. 878 // Create the history backend.
879 scoped_refptr<HistoryBackend> backend(new HistoryBackend( 879 scoped_refptr<HistoryBackend> backend(new HistoryBackend(
880 new BackendDelegate(weak_ptr_factory_.GetWeakPtr(), 880 new BackendDelegate(weak_ptr_factory_.GetWeakPtr(),
881 base::ThreadTaskRunnerHandle::Get()), 881 base::ThreadTaskRunnerHandle::Get()),
882 history_client_ ? history_client_->CreateBackendClient() : nullptr, 882 history_client_ ? history_client_->CreateBackendClient() : nullptr,
883 thread_->task_runner())); 883 thread_->task_runner()));
884 history_backend_.swap(backend); 884 history_backend_.swap(backend);
885 885
886 ScheduleTask(PRIORITY_UI, 886 ScheduleTask(PRIORITY_UI,
887 base::Bind(&HistoryBackend::Init, history_backend_.get(), 887 base::Bind(&HistoryBackend::Init, history_backend_,
888 no_db, history_database_params)); 888 no_db, history_database_params));
889 889
890 if (visit_delegate_ && !visit_delegate_->Init(this)) 890 if (visit_delegate_ && !visit_delegate_->Init(this))
891 return false; 891 return false;
892 892
893 if (history_client_) 893 if (history_client_)
894 history_client_->OnHistoryServiceCreated(this); 894 history_client_->OnHistoryServiceCreated(this);
895 895
896 return true; 896 return true;
897 } 897 }
898 898
899 void HistoryService::ScheduleAutocomplete( 899 void HistoryService::ScheduleAutocomplete(
900 const base::Callback<void(HistoryBackend*, URLDatabase*)>& callback) { 900 const base::Callback<void(HistoryBackend*, URLDatabase*)>& callback) {
901 DCHECK(thread_checker_.CalledOnValidThread()); 901 DCHECK(thread_checker_.CalledOnValidThread());
902 ScheduleTask(PRIORITY_UI, base::Bind(&HistoryBackend::ScheduleAutocomplete, 902 ScheduleTask(PRIORITY_UI, base::Bind(&HistoryBackend::ScheduleAutocomplete,
903 history_backend_.get(), callback)); 903 history_backend_, callback));
904 } 904 }
905 905
906 void HistoryService::ScheduleTask(SchedulePriority priority, 906 void HistoryService::ScheduleTask(SchedulePriority priority,
907 const base::Closure& task) { 907 const base::Closure& task) {
908 DCHECK(thread_checker_.CalledOnValidThread()); 908 DCHECK(thread_checker_.CalledOnValidThread());
909 CHECK(thread_); 909 CHECK(thread_);
910 CHECK(thread_->message_loop()); 910 CHECK(thread_->message_loop());
911 // TODO(brettw): Do prioritization. 911 // TODO(brettw): Do prioritization.
912 thread_->task_runner()->PostTask(FROM_HERE, task); 912 thread_->task_runner()->PostTask(FROM_HERE, task);
913 } 913 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 DCHECK(thread_checker_.CalledOnValidThread()); 972 DCHECK(thread_checker_.CalledOnValidThread());
973 if (history_client_) 973 if (history_client_)
974 history_client_->NotifyProfileError(init_status, diagnostics); 974 history_client_->NotifyProfileError(init_status, diagnostics);
975 } 975 }
976 976
977 void HistoryService::DeleteURL(const GURL& url) { 977 void HistoryService::DeleteURL(const GURL& url) {
978 DCHECK(thread_) << "History service being called after cleanup"; 978 DCHECK(thread_) << "History service being called after cleanup";
979 DCHECK(thread_checker_.CalledOnValidThread()); 979 DCHECK(thread_checker_.CalledOnValidThread());
980 // We will update the visited links when we observe the delete notifications. 980 // We will update the visited links when we observe the delete notifications.
981 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::DeleteURL, 981 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::DeleteURL,
982 history_backend_.get(), url)); 982 history_backend_, url));
983 } 983 }
984 984
985 void HistoryService::DeleteURLsForTest(const std::vector<GURL>& urls) { 985 void HistoryService::DeleteURLsForTest(const std::vector<GURL>& urls) {
986 DCHECK(thread_) << "History service being called after cleanup"; 986 DCHECK(thread_) << "History service being called after cleanup";
987 DCHECK(thread_checker_.CalledOnValidThread()); 987 DCHECK(thread_checker_.CalledOnValidThread());
988 // We will update the visited links when we observe the delete 988 // We will update the visited links when we observe the delete
989 // notifications. 989 // notifications.
990 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::DeleteURLs, 990 ScheduleTask(PRIORITY_NORMAL, base::Bind(&HistoryBackend::DeleteURLs,
991 history_backend_.get(), urls)); 991 history_backend_, urls));
992 } 992 }
993 993
994 void HistoryService::ExpireHistoryBetween( 994 void HistoryService::ExpireHistoryBetween(
995 const std::set<GURL>& restrict_urls, 995 const std::set<GURL>& restrict_urls,
996 Time begin_time, 996 Time begin_time,
997 Time end_time, 997 Time end_time,
998 const base::Closure& callback, 998 const base::Closure& callback,
999 base::CancelableTaskTracker* tracker) { 999 base::CancelableTaskTracker* tracker) {
1000 DCHECK(thread_) << "History service being called after cleanup"; 1000 DCHECK(thread_) << "History service being called after cleanup";
1001 DCHECK(thread_checker_.CalledOnValidThread()); 1001 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
1134 return favicon_changed_callback_list_.Add(callback); 1134 return favicon_changed_callback_list_.Add(callback);
1135 } 1135 }
1136 1136
1137 void HistoryService::NotifyFaviconsChanged(const std::set<GURL>& page_urls, 1137 void HistoryService::NotifyFaviconsChanged(const std::set<GURL>& page_urls,
1138 const GURL& icon_url) { 1138 const GURL& icon_url) {
1139 DCHECK(thread_checker_.CalledOnValidThread()); 1139 DCHECK(thread_checker_.CalledOnValidThread());
1140 favicon_changed_callback_list_.Notify(page_urls, icon_url); 1140 favicon_changed_callback_list_.Notify(page_urls, icon_url);
1141 } 1141 }
1142 1142
1143 } // namespace history 1143 } // namespace history
OLDNEW
« no previous file with comments | « components/history/core/browser/history_backend.cc ('k') | components/invalidation/impl/non_blocking_invalidator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698