tile_service_factory.cc 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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_service_factory.h"
  5. #include "base/memory/singleton.h"
  6. #include "base/strings/stringprintf.h"
  7. #include "base/version.h"
  8. #include "build/build_config.h"
  9. #include "chrome/browser/image_fetcher/image_fetcher_service_factory.h"
  10. #include "chrome/browser/net/system_network_context_manager.h"
  11. #include "chrome/browser/profiles/profile.h"
  12. #include "chrome/browser/profiles/profile_key.h"
  13. #include "chrome/browser/query_tiles/query_tile_utils.h"
  14. #include "chrome/common/channel_info.h"
  15. #include "chrome/common/chrome_constants.h"
  16. #include "components/background_task_scheduler/background_task_scheduler.h"
  17. #include "components/background_task_scheduler/background_task_scheduler_factory.h"
  18. #include "components/image_fetcher/core/image_fetcher_service.h"
  19. #include "components/keyed_service/core/simple_dependency_manager.h"
  20. #include "components/language/core/browser/locale_util.h"
  21. #include "components/language/core/browser/pref_names.h"
  22. #include "components/prefs/pref_service.h"
  23. #include "components/query_tiles/tile_service_factory_helper.h"
  24. #include "components/version_info/version_info.h"
  25. #include "google_apis/google_api_keys.h"
  26. #include "services/network/public/cpp/shared_url_loader_factory.h"
  27. #if BUILDFLAG(IS_ANDROID)
  28. #include "base/android/jni_android.h"
  29. #include "base/android/jni_string.h"
  30. #include "base/android/scoped_java_ref.h"
  31. #include "chrome/android/chrome_jni_headers/TileServiceUtils_jni.h"
  32. #endif
  33. namespace query_tiles {
  34. namespace {
  35. std::string GetGoogleAPIKey() {
  36. bool is_stable_channel =
  37. chrome::GetChannel() == version_info::Channel::STABLE;
  38. return is_stable_channel ? google_apis::GetAPIKey()
  39. : google_apis::GetNonStableAPIKey();
  40. }
  41. } // namespace
  42. // static
  43. TileServiceFactory* TileServiceFactory::GetInstance() {
  44. return base::Singleton<TileServiceFactory>::get();
  45. }
  46. // static
  47. TileService* TileServiceFactory::GetForKey(SimpleFactoryKey* key) {
  48. return static_cast<TileService*>(
  49. GetInstance()->GetServiceForKey(key, /*create=*/true));
  50. }
  51. TileServiceFactory::TileServiceFactory()
  52. : SimpleKeyedServiceFactory("TileService",
  53. SimpleDependencyManager::GetInstance()) {
  54. DependsOn(ImageFetcherServiceFactory::GetInstance());
  55. DependsOn(background_task::BackgroundTaskSchedulerFactory::GetInstance());
  56. }
  57. TileServiceFactory::~TileServiceFactory() {}
  58. std::unique_ptr<KeyedService> TileServiceFactory::BuildServiceInstanceFor(
  59. SimpleFactoryKey* key) const {
  60. auto* image_fetcher_service = ImageFetcherServiceFactory::GetForKey(key);
  61. auto* db_provider =
  62. ProfileKey::FromSimpleFactoryKey(key)->GetProtoDatabaseProvider();
  63. // |storage_dir| is not actually used since we are using the shared leveldb.
  64. base::FilePath storage_dir =
  65. ProfileKey::FromSimpleFactoryKey(key)->GetPath().Append(
  66. chrome::kQueryTileStorageDirname);
  67. auto* background_task_scheduler =
  68. background_task::BackgroundTaskSchedulerFactory::GetForKey(key);
  69. std::string accept_languanges =
  70. ProfileKey::FromSimpleFactoryKey(key)->GetPrefs()->GetString(
  71. language::prefs::kAcceptLanguages);
  72. auto url_loader_factory =
  73. SystemNetworkContextManager::GetInstance()->GetSharedURLLoaderFactory();
  74. base::Version version = version_info::GetVersion();
  75. std::string channel_name =
  76. chrome::GetChannelName(chrome::WithExtendedStable(true));
  77. std::string client_version =
  78. base::StringPrintf("%d.%d.%d.%s.chrome",
  79. version.components()[0], // Major
  80. version.components()[2], // Build
  81. version.components()[3], // Patch
  82. channel_name.c_str());
  83. std::string default_server_url;
  84. #if BUILDFLAG(IS_ANDROID)
  85. JNIEnv* env = base::android::AttachCurrentThread();
  86. base::android::ScopedJavaLocalRef<jstring> j_server_url =
  87. Java_TileServiceUtils_getDefaultServerUrl(env);
  88. default_server_url =
  89. base::android::ConvertJavaStringToUTF8(env, j_server_url);
  90. #endif
  91. return CreateTileService(image_fetcher_service, db_provider, storage_dir,
  92. background_task_scheduler, accept_languanges,
  93. GetCountryCode(), GetGoogleAPIKey(), client_version,
  94. default_server_url, url_loader_factory,
  95. ProfileKey::FromSimpleFactoryKey(key)->GetPrefs());
  96. }
  97. } // namespace query_tiles