weblayer_impl_android.cc 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // Copyright 2019 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/weblayer_impl_android.h"
  5. #include "base/android/jni_android.h"
  6. #include "base/android/jni_array.h"
  7. #include "base/android/jni_string.h"
  8. #include "components/component_updater/android/component_loader_policy.h"
  9. #include "components/crash/core/common/crash_key.h"
  10. #include "components/embedder_support/user_agent_utils.h"
  11. #include "components/page_info/android/page_info_client.h"
  12. #include "components/variations/variations_ids_provider.h"
  13. #include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h"
  14. #include "weblayer/browser/component_updater/registration.h"
  15. #include "weblayer/browser/devtools_server_android.h"
  16. #include "weblayer/browser/java/jni/WebLayerImpl_jni.h"
  17. #include "weblayer/browser/url_bar/page_info_client_impl.h"
  18. #include "weblayer/common/crash_reporter/crash_keys.h"
  19. using base::android::JavaParamRef;
  20. namespace weblayer {
  21. static void JNI_WebLayerImpl_SetRemoteDebuggingEnabled(JNIEnv* env,
  22. jboolean enabled) {
  23. DevToolsServerAndroid::SetRemoteDebuggingEnabled(enabled);
  24. }
  25. static jboolean JNI_WebLayerImpl_IsRemoteDebuggingEnabled(JNIEnv* env) {
  26. return DevToolsServerAndroid::GetRemoteDebuggingEnabled();
  27. }
  28. static void JNI_WebLayerImpl_SetIsWebViewCompatMode(JNIEnv* env,
  29. jboolean value) {
  30. static crash_reporter::CrashKeyString<1> crash_key(
  31. crash_keys::kWeblayerWebViewCompatMode);
  32. crash_key.Set(value ? "1" : "0");
  33. }
  34. static base::android::ScopedJavaLocalRef<jstring>
  35. JNI_WebLayerImpl_GetUserAgentString(JNIEnv* env) {
  36. return base::android::ConvertUTF8ToJavaString(
  37. base::android::AttachCurrentThread(), embedder_support::GetUserAgent());
  38. }
  39. static void JNI_WebLayerImpl_RegisterExternalExperimentIDs(
  40. JNIEnv* env,
  41. const JavaParamRef<jintArray>& jexperiment_ids) {
  42. std::vector<int> experiment_ids;
  43. // A null |jexperiment_ids| is the same as an empty list.
  44. if (jexperiment_ids) {
  45. base::android::JavaIntArrayToIntVector(env, jexperiment_ids,
  46. &experiment_ids);
  47. }
  48. WebLayerMetricsServiceClient::GetInstance()->RegisterExternalExperiments(
  49. experiment_ids);
  50. }
  51. static base::android::ScopedJavaLocalRef<jstring>
  52. JNI_WebLayerImpl_GetXClientDataHeader(JNIEnv* env) {
  53. std::string header;
  54. auto headers =
  55. variations::VariationsIdsProvider::GetInstance()->GetClientDataHeaders(
  56. false /* is_signed_in */);
  57. if (headers)
  58. header =
  59. headers->headers_map.at(variations::mojom::GoogleWebVisibility::ANY);
  60. return base::android::ConvertUTF8ToJavaString(env, header);
  61. }
  62. std::u16string GetClientApplicationName() {
  63. JNIEnv* env = base::android::AttachCurrentThread();
  64. return base::android::ConvertJavaStringToUTF16(
  65. env, Java_WebLayerImpl_getEmbedderName(env));
  66. }
  67. static base::android::ScopedJavaLocalRef<jobjectArray>
  68. JNI_WebLayerImpl_GetComponentLoaderPolicies(JNIEnv* env) {
  69. return component_updater::AndroidComponentLoaderPolicy::
  70. ToJavaArrayOfAndroidComponentLoaderPolicy(env,
  71. GetComponentLoaderPolicies());
  72. }
  73. } // namespace weblayer