aw_contents_statics.cc 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. // Copyright 2014 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 "android_webview/browser/aw_browser_process.h"
  5. #include "android_webview/browser/aw_content_browser_client.h"
  6. #include "android_webview/browser/aw_contents.h"
  7. #include "android_webview/browser/aw_contents_io_thread_client.h"
  8. #include "android_webview/browser/safe_browsing/aw_safe_browsing_allowlist_manager.h"
  9. #include "android_webview/browser_jni_headers/AwContentsStatics_jni.h"
  10. #include "base/android/jni_array.h"
  11. #include "base/android/jni_string.h"
  12. #include "base/android/scoped_java_ref.h"
  13. #include "base/bind.h"
  14. #include "base/callback.h"
  15. #include "base/command_line.h"
  16. #include "components/flags_ui/flags_ui_metrics.h"
  17. #include "components/google/core/common/google_util.h"
  18. #include "components/security_interstitials/core/urls.h"
  19. #include "components/variations/variations_ids_provider.h"
  20. #include "components/version_info/version_info.h"
  21. #include "content/public/browser/browser_task_traits.h"
  22. #include "content/public/browser/browser_thread.h"
  23. #include "content/public/browser/render_process_host.h"
  24. #include "content/public/browser/storage_partition.h"
  25. #include "content/public/common/url_constants.h"
  26. #include "net/cert/cert_database.h"
  27. using base::android::AttachCurrentThread;
  28. using base::android::ConvertJavaStringToUTF8;
  29. using base::android::JavaParamRef;
  30. using base::android::JavaRef;
  31. using base::android::ScopedJavaGlobalRef;
  32. using base::android::ScopedJavaLocalRef;
  33. using content::BrowserThread;
  34. namespace android_webview {
  35. namespace {
  36. void ClientCertificatesCleared(const JavaRef<jobject>& callback) {
  37. DCHECK_CURRENTLY_ON(BrowserThread::UI);
  38. JNIEnv* env = AttachCurrentThread();
  39. Java_AwContentsStatics_clientCertificatesCleared(env, callback);
  40. }
  41. void NotifyClientCertificatesChanged() {
  42. DCHECK_CURRENTLY_ON(BrowserThread::IO);
  43. net::CertDatabase::GetInstance()->NotifyObserversCertDBChanged();
  44. }
  45. void SafeBrowsingAllowlistAssigned(const JavaRef<jobject>& callback,
  46. bool success) {
  47. DCHECK_CURRENTLY_ON(BrowserThread::UI);
  48. JNIEnv* env = AttachCurrentThread();
  49. Java_AwContentsStatics_safeBrowsingAllowlistAssigned(env, callback, success);
  50. }
  51. } // namespace
  52. // static
  53. ScopedJavaLocalRef<jstring>
  54. JNI_AwContentsStatics_GetSafeBrowsingPrivacyPolicyUrl(JNIEnv* env) {
  55. DCHECK_CURRENTLY_ON(BrowserThread::UI);
  56. GURL privacy_policy_url(
  57. security_interstitials::kSafeBrowsingPrivacyPolicyUrl);
  58. std::string locale =
  59. AwBrowserProcess::GetInstance()->GetSafeBrowsingUIManager()->app_locale();
  60. privacy_policy_url =
  61. google_util::AppendGoogleLocaleParam(privacy_policy_url, locale);
  62. return base::android::ConvertUTF8ToJavaString(env, privacy_policy_url.spec());
  63. }
  64. // static
  65. void JNI_AwContentsStatics_ClearClientCertPreferences(
  66. JNIEnv* env,
  67. const JavaParamRef<jobject>& callback) {
  68. DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
  69. content::GetIOThreadTaskRunner({})->PostTaskAndReply(
  70. FROM_HERE, base::BindOnce(&NotifyClientCertificatesChanged),
  71. base::BindOnce(&ClientCertificatesCleared,
  72. ScopedJavaGlobalRef<jobject>(env, callback)));
  73. }
  74. // static
  75. ScopedJavaLocalRef<jstring> JNI_AwContentsStatics_GetUnreachableWebDataUrl(
  76. JNIEnv* env) {
  77. return base::android::ConvertUTF8ToJavaString(
  78. env, content::kUnreachableWebDataURL);
  79. }
  80. // static
  81. ScopedJavaLocalRef<jstring> JNI_AwContentsStatics_GetProductVersion(
  82. JNIEnv* env) {
  83. return base::android::ConvertUTF8ToJavaString(
  84. env, version_info::GetVersionNumber());
  85. }
  86. // static
  87. void JNI_AwContentsStatics_SetSafeBrowsingAllowlist(
  88. JNIEnv* env,
  89. const JavaParamRef<jobjectArray>& jrules,
  90. const JavaParamRef<jobject>& callback) {
  91. std::vector<std::string> rules;
  92. base::android::AppendJavaStringArrayToStringVector(env, jrules, &rules);
  93. AwSafeBrowsingAllowlistManager* allowlist_manager =
  94. AwBrowserProcess::GetInstance()->GetSafeBrowsingAllowlistManager();
  95. allowlist_manager->SetAllowlistOnUIThread(
  96. std::move(rules),
  97. base::BindOnce(&SafeBrowsingAllowlistAssigned,
  98. ScopedJavaGlobalRef<jobject>(env, callback)));
  99. }
  100. // static
  101. void JNI_AwContentsStatics_SetServiceWorkerIoThreadClient(
  102. JNIEnv* env,
  103. const base::android::JavaParamRef<jobject>& io_thread_client,
  104. const base::android::JavaParamRef<jobject>& browser_context) {
  105. AwContentsIoThreadClient::SetServiceWorkerIoThreadClient(io_thread_client,
  106. browser_context);
  107. }
  108. // static
  109. void JNI_AwContentsStatics_SetCheckClearTextPermitted(
  110. JNIEnv* env,
  111. jboolean permitted) {
  112. AwContentBrowserClient::set_check_cleartext_permitted(permitted);
  113. }
  114. // static
  115. void JNI_AwContentsStatics_LogCommandLineForDebugging(JNIEnv* env) {
  116. // Note: this should only be called for debugging purposes, since this is
  117. // *very* spammy.
  118. const base::CommandLine& command_line =
  119. *base::CommandLine::ForCurrentProcess();
  120. for (const auto& pair : command_line.GetSwitches()) {
  121. const std::string& key = pair.first;
  122. const base::CommandLine::StringType& value = pair.second;
  123. LOG(INFO) << "WebViewCommandLine '" << key << "': '" << value << "'";
  124. }
  125. }
  126. // static
  127. void JNI_AwContentsStatics_LogFlagMetrics(
  128. JNIEnv* env,
  129. const JavaParamRef<jobjectArray>& jswitches,
  130. const JavaParamRef<jobjectArray>& jfeatures) {
  131. std::set<std::string> switches;
  132. for (const auto& jswitch : jswitches.ReadElements<jstring>()) {
  133. switches.insert(ConvertJavaStringToUTF8(jswitch));
  134. }
  135. std::set<std::string> features;
  136. for (const auto& jfeature : jfeatures.ReadElements<jstring>()) {
  137. features.insert(ConvertJavaStringToUTF8(jfeature));
  138. }
  139. flags_ui::ReportAboutFlagsHistogram("Launch.FlagsAtStartup", switches,
  140. features);
  141. }
  142. // static
  143. jboolean JNI_AwContentsStatics_IsMultiProcessEnabled(JNIEnv* env) {
  144. return !content::RenderProcessHost::run_renderer_in_process();
  145. }
  146. // static
  147. ScopedJavaLocalRef<jstring> JNI_AwContentsStatics_GetVariationsHeader(
  148. JNIEnv* env) {
  149. const bool is_signed_in = false;
  150. auto headers =
  151. variations::VariationsIdsProvider::GetInstance()->GetClientDataHeaders(
  152. is_signed_in);
  153. if (!headers)
  154. return base::android::ConvertUTF8ToJavaString(env, "");
  155. return base::android::ConvertUTF8ToJavaString(
  156. env,
  157. headers->headers_map.at(variations::mojom::GoogleWebVisibility::ANY));
  158. }
  159. } // namespace android_webview