weblayer_dependencies.cc 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // Copyright 2022 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 "weblayer/browser/autofill_assistant/weblayer_dependencies.h"
  5. #include "base/android/jni_string.h"
  6. #include "base/android/locale_utils.h"
  7. #include "components/autofill_assistant/browser/android/dependencies_android.h"
  8. #include "components/autofill_assistant/browser/common_dependencies.h"
  9. #include "components/autofill_assistant/browser/dependencies_util.h"
  10. #include "components/autofill_assistant/browser/platform_dependencies.h"
  11. #include "components/keyed_service/core/simple_factory_key.h"
  12. #include "components/version_info/android/channel_getter.h"
  13. #include "weblayer/browser/autofill_assistant/weblayer_assistant_field_trial_util.h"
  14. #include "weblayer/browser/browser_context_impl.h"
  15. #include "weblayer/browser/feature_list_creator.h"
  16. #include "weblayer/browser/java/jni/WebLayerAssistantStaticDependencies_jni.h"
  17. #include "weblayer/browser/profile_impl.h"
  18. using ::autofill_assistant::CommonDependencies;
  19. using ::autofill_assistant::DependenciesAndroid;
  20. using ::autofill_assistant::PlatformDependencies;
  21. using ::base::android::AttachCurrentThread;
  22. using ::base::android::ConvertJavaStringToUTF8;
  23. using ::base::android::JavaParamRef;
  24. using ::base::android::ScopedJavaLocalRef;
  25. namespace weblayer {
  26. static jlong JNI_WebLayerAssistantStaticDependencies_Init(
  27. JNIEnv* env,
  28. const JavaParamRef<jobject>& jstatic_dependencies) {
  29. // The dynamic_cast is necessary here to safely cast the resulting intptr back
  30. // to DependenciesAndroid using reinterpret_cast.
  31. return reinterpret_cast<intptr_t>(dynamic_cast<DependenciesAndroid*>(
  32. new WebLayerDependencies(env, jstatic_dependencies)));
  33. }
  34. static ScopedJavaLocalRef<jobject>
  35. JNI_WebLayerAssistantStaticDependencies_GetJavaProfile(
  36. JNIEnv* env,
  37. const JavaParamRef<jobject>& java_web_contents) {
  38. content::WebContents* web_contents =
  39. content::WebContents::FromJavaWebContents(java_web_contents);
  40. if (!web_contents) {
  41. return nullptr;
  42. }
  43. return ScopedJavaLocalRef<jobject>(
  44. ProfileImpl::FromBrowserContext(web_contents->GetBrowserContext())
  45. ->GetJavaProfile());
  46. }
  47. static jlong JNI_WebLayerAssistantStaticDependencies_GetSimpleFactoryKey(
  48. JNIEnv* env,
  49. jlong browser_context_ptr) {
  50. content::BrowserContext* browser_context =
  51. reinterpret_cast<content::BrowserContext*>(browser_context_ptr);
  52. if (!browser_context) {
  53. return 0;
  54. }
  55. SimpleFactoryKey* key =
  56. static_cast<BrowserContextImpl*>(browser_context)->simple_factory_key();
  57. return reinterpret_cast<intptr_t>(key);
  58. }
  59. WebLayerDependencies::WebLayerDependencies(
  60. JNIEnv* env,
  61. const JavaParamRef<jobject>& jstatic_dependencies)
  62. : DependenciesAndroid(env, jstatic_dependencies) {}
  63. const CommonDependencies* WebLayerDependencies::GetCommonDependencies() const {
  64. return this;
  65. }
  66. const PlatformDependencies* WebLayerDependencies::GetPlatformDependencies()
  67. const {
  68. return this;
  69. }
  70. std::unique_ptr<::autofill_assistant::AssistantFieldTrialUtil>
  71. WebLayerDependencies::CreateFieldTrialUtil() const {
  72. return std::make_unique<WebLayerAssistantFieldTrialUtil>();
  73. }
  74. autofill::PersonalDataManager* WebLayerDependencies::GetPersonalDataManager(
  75. content::BrowserContext* browser_context) const {
  76. // TODO(b/222671580): Add NOTREACHED?
  77. return nullptr;
  78. }
  79. password_manager::PasswordManagerClient*
  80. WebLayerDependencies::GetPasswordManagerClient(
  81. content::WebContents* web_contents) const {
  82. // TODO(b/222671580): Add NOTREACHED?
  83. return nullptr;
  84. }
  85. std::string WebLayerDependencies::GetSignedInEmail(
  86. content::BrowserContext* browser_context) const {
  87. DCHECK(browser_context);
  88. ProfileImpl* profile = ProfileImpl::FromBrowserContext(browser_context);
  89. const ScopedJavaLocalRef<jstring> email =
  90. Java_WebLayerAssistantStaticDependencies_getEmailOrNull(
  91. AttachCurrentThread(), jstatic_dependencies_,
  92. profile->GetJavaProfile());
  93. return email.is_null() ? "" : ConvertJavaStringToUTF8(email);
  94. }
  95. bool WebLayerDependencies::IsSupervisedUser(
  96. content::BrowserContext* browser_context) const {
  97. // WebLayer does not support supervised users.
  98. return false;
  99. }
  100. std::string WebLayerDependencies::GetLocale() const {
  101. return base::android::GetDefaultLocaleString();
  102. }
  103. std::string WebLayerDependencies::GetCountryCode() const {
  104. return autofill_assistant::dependencies_util::GetCountryCode(
  105. FeatureListCreator::GetInstance()->variations_service());
  106. }
  107. ::autofill_assistant::AnnotateDomModelService*
  108. WebLayerDependencies::GetOrCreateAnnotateDomModelService(
  109. content::BrowserContext* browser_context) const {
  110. // TODO(b/222671580): Add NOTREACHED?
  111. return nullptr;
  112. }
  113. bool WebLayerDependencies::IsCustomTab(
  114. const content::WebContents& web_contents) const {
  115. return false;
  116. }
  117. bool WebLayerDependencies::IsWebLayer() const {
  118. return true;
  119. }
  120. signin::IdentityManager* WebLayerDependencies::GetIdentityManager(
  121. content::BrowserContext* browser_context) const {
  122. // TODO(b/222671580): implement.
  123. return nullptr;
  124. }
  125. version_info::Channel WebLayerDependencies::GetChannel() const {
  126. return version_info::android::GetChannel();
  127. }
  128. } // namespace weblayer