aw_feature_list.cc 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2018 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 <string>
  5. #include "android_webview/browser_jni_headers/AwFeatureList_jni.h"
  6. #include "android_webview/common/aw_features.h"
  7. #include "base/android/jni_string.h"
  8. #include "base/feature_list.h"
  9. #include "base/metrics/field_trial_params.h"
  10. #include "base/notreached.h"
  11. #include "components/safe_browsing/core/common/features.h"
  12. #include "content/public/common/content_features.h"
  13. #include "third_party/blink/public/common/features.h"
  14. using base::android::ConvertJavaStringToUTF8;
  15. using base::android::JavaParamRef;
  16. namespace android_webview {
  17. namespace {
  18. // Array of features exposed through the Java AwFeatureList API. Entries in
  19. // this array may either refer to features defined in the header of this file or
  20. // in other locations in the code base (e.g. content/, components/, etc).
  21. const base::Feature* const kFeaturesExposedToJava[] = {
  22. &blink::features::kInitialNavigationEntry,
  23. &features::kWebViewConnectionlessSafeBrowsing,
  24. &features::kWebViewDisplayCutout,
  25. &features::kWebViewMixedContentAutoupgrades,
  26. &features::kWebViewTestFeature,
  27. &features::kWebViewMeasureScreenCoverage,
  28. &features::kWebViewJavaJsBridgeMojo,
  29. &features::kWebViewUseMetricsUploadService,
  30. &features::kWebViewXRequestedWithHeader,
  31. &features::kWebViewSynthesizePageLoadOnlyOnInitialMainDocumentAccess,
  32. };
  33. const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) {
  34. for (const base::Feature* feature : kFeaturesExposedToJava) {
  35. if (feature->name == feature_name)
  36. return feature;
  37. }
  38. NOTREACHED() << "Queried feature cannot be found in AwFeatureList: "
  39. << feature_name;
  40. return nullptr;
  41. }
  42. } // namespace
  43. static jboolean JNI_AwFeatureList_IsEnabled(
  44. JNIEnv* env,
  45. const JavaParamRef<jstring>& jfeature_name) {
  46. const base::Feature* feature =
  47. FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
  48. return base::FeatureList::IsEnabled(*feature);
  49. }
  50. static jint JNI_AwFeatureList_GetFeatureParamValueAsInt(
  51. JNIEnv* env,
  52. const JavaParamRef<jstring>& jfeature_name,
  53. const JavaParamRef<jstring>& jparameter_name,
  54. const jint defaultValue) {
  55. const base::Feature* feature =
  56. FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
  57. return base::GetFieldTrialParamByFeatureAsInt(
  58. *feature, ConvertJavaStringToUTF8(env, jparameter_name), defaultValue);
  59. }
  60. } // namespace android_webview