tile_background_task.cc 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "chrome/browser/query_tiles/tile_background_task.h"
  5. #include "base/feature_list.h"
  6. #include "chrome/browser/profiles/profile.h"
  7. #include "chrome/browser/profiles/profile_key.h"
  8. #include "chrome/browser/query_tiles/query_tile_utils.h"
  9. #include "chrome/browser/query_tiles/tile_service_factory.h"
  10. #include "chrome/browser/search_engines/template_url_service_factory.h"
  11. #include "components/query_tiles/switches.h"
  12. #include "components/search_engines/template_url.h"
  13. #include "components/search_engines/template_url_service.h"
  14. namespace query_tiles {
  15. namespace {
  16. bool IsSearchEngineSupported(TemplateURLService* template_url_service) {
  17. // Could be first start case, return true by default.
  18. if (!template_url_service)
  19. return true;
  20. const TemplateURL* default_search_provider =
  21. template_url_service->GetDefaultSearchProvider();
  22. return default_search_provider &&
  23. default_search_provider->url_ref().HasGoogleBaseURLs(
  24. template_url_service->search_terms_data());
  25. }
  26. } // namespace
  27. TileBackgroundTask::TileBackgroundTask() = default;
  28. TileBackgroundTask::~TileBackgroundTask() = default;
  29. void TileBackgroundTask::OnStartTaskInReducedMode(
  30. const TaskParameters& task_params,
  31. TaskFinishedCallback callback,
  32. SimpleFactoryKey* key) {
  33. callback_ = std::move(callback);
  34. }
  35. void TileBackgroundTask::OnStartTaskWithFullBrowser(
  36. const TaskParameters& task_params,
  37. TaskFinishedCallback callback,
  38. content::BrowserContext* browser_context) {
  39. StartFetchTask(browser_context, std::move(callback));
  40. }
  41. void TileBackgroundTask::OnFullBrowserLoaded(
  42. content::BrowserContext* browser_context) {
  43. StartFetchTask(browser_context, std::move(callback_));
  44. }
  45. bool TileBackgroundTask::OnStopTask(const TaskParameters& task_params) {
  46. // Don't reschedule.
  47. return false;
  48. }
  49. void TileBackgroundTask::StartFetchTask(
  50. content::BrowserContext* browser_context,
  51. TaskFinishedCallback callback) {
  52. auto* profile_key =
  53. Profile::FromBrowserContext(browser_context)->GetProfileKey();
  54. TemplateURLService* template_url_service =
  55. TemplateURLServiceFactory::GetForProfile(
  56. Profile::FromBrowserContext(browser_context));
  57. auto* tile_service =
  58. TileServiceFactory::GetInstance()->GetForKey(profile_key);
  59. DCHECK(tile_service);
  60. if (IsQueryTilesEnabled() && IsSearchEngineSupported(template_url_service)) {
  61. tile_service->StartFetchForTiles(false, std::move(callback));
  62. } else {
  63. tile_service->CancelTask();
  64. }
  65. }
  66. } // namespace query_tiles