| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/android/chrome_feature_list.h" | 5 #include "chrome/browser/android/chrome_feature_list.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/android/jni_string.h" | 11 #include "base/android/jni_string.h" |
| 12 #include "base/feature_list.h" | 12 #include "base/feature_list.h" |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/metrics/field_trial_params.h" | 14 #include "base/metrics/field_trial_params.h" |
| 15 #include "chrome/common/chrome_features.h" | 15 #include "chrome/common/chrome_features.h" |
| 16 #include "components/autofill/core/browser/autofill_experiments.h" | 16 #include "components/autofill/core/browser/autofill_experiments.h" |
| 17 #include "components/ntp_snippets/features.h" | 17 #include "components/ntp_snippets/features.h" |
| 18 #include "components/offline_pages/core/offline_page_feature.h" | 18 #include "components/offline_pages/core/offline_page_feature.h" |
| 19 #include "components/password_manager/core/common/password_manager_features.h" | 19 #include "components/password_manager/core/common/password_manager_features.h" |
| 20 #include "content/public/common/content_features.h" | 20 #include "content/public/common/content_features.h" |
| 21 #include "jni/ChromeFeatureList_jni.h" | 21 #include "jni/ChromeFeatureList_jni.h" |
| 22 | 22 |
| 23 using base::android::ConvertJavaStringToUTF8; | 23 using base::android::ConvertJavaStringToUTF8; |
| 24 using base::android::ConvertUTF8ToJavaString; |
| 24 using base::android::JavaParamRef; | 25 using base::android::JavaParamRef; |
| 26 using base::android::ScopedJavaLocalRef; |
| 25 | 27 |
| 26 namespace chrome { | 28 namespace chrome { |
| 27 namespace android { | 29 namespace android { |
| 28 | 30 |
| 29 namespace { | 31 namespace { |
| 30 | 32 |
| 31 // Array of features exposed through the Java ChromeFeatureList API. Entries in | 33 // Array of features exposed through the Java ChromeFeatureList API. Entries in |
| 32 // this array may either refer to features defined in the header of this file or | 34 // this array may either refer to features defined in the header of this file or |
| 33 // in other locations in the code base (e.g. chrome/, components/, etc). | 35 // in other locations in the code base (e.g. chrome/, components/, etc). |
| 34 const base::Feature* kFeaturesExposedToJava[] = { | 36 const base::Feature* kFeaturesExposedToJava[] = { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 &ntp_snippets::kIncreasedVisibility, | 69 &ntp_snippets::kIncreasedVisibility, |
| 68 &ntp_snippets::kForeignSessionsSuggestionsFeature, | 70 &ntp_snippets::kForeignSessionsSuggestionsFeature, |
| 69 &ntp_snippets::kOfflineBadgeFeature, | 71 &ntp_snippets::kOfflineBadgeFeature, |
| 70 &ntp_snippets::kSaveToOfflineFeature, | 72 &ntp_snippets::kSaveToOfflineFeature, |
| 71 &offline_pages::kBackgroundLoaderForDownloadsFeature, | 73 &offline_pages::kBackgroundLoaderForDownloadsFeature, |
| 72 &offline_pages::kOfflinePagesCTFeature, // See crbug.com/620421. | 74 &offline_pages::kOfflinePagesCTFeature, // See crbug.com/620421. |
| 73 &offline_pages::kOfflinePagesSharingFeature, | 75 &offline_pages::kOfflinePagesSharingFeature, |
| 74 &password_manager::features::kViewPasswords, | 76 &password_manager::features::kViewPasswords, |
| 75 }; | 77 }; |
| 76 | 78 |
| 79 const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) { |
| 80 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { |
| 81 if (kFeaturesExposedToJava[i]->name == feature_name) |
| 82 return kFeaturesExposedToJava[i]; |
| 83 } |
| 84 NOTREACHED() << "Features queried via ChromeFeatureList must be present in " |
| 85 "|kFeaturesExposedToJava|."; |
| 86 return nullptr; |
| 87 } |
| 88 |
| 77 } // namespace | 89 } // namespace |
| 78 | 90 |
| 79 // Alphabetical: | 91 // Alphabetical: |
| 80 const base::Feature kAndroidPayIntegrationV1{"AndroidPayIntegrationV1", | 92 const base::Feature kAndroidPayIntegrationV1{"AndroidPayIntegrationV1", |
| 81 base::FEATURE_ENABLED_BY_DEFAULT}; | 93 base::FEATURE_ENABLED_BY_DEFAULT}; |
| 82 | 94 |
| 83 const base::Feature kAndroidPayIntegrationV2{"AndroidPayIntegrationV2", | 95 const base::Feature kAndroidPayIntegrationV2{"AndroidPayIntegrationV2", |
| 84 base::FEATURE_DISABLED_BY_DEFAULT}; | 96 base::FEATURE_DISABLED_BY_DEFAULT}; |
| 85 | 97 |
| 86 const base::Feature kAndroidPaymentApps{"AndroidPaymentApps", | 98 const base::Feature kAndroidPaymentApps{"AndroidPaymentApps", |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 | 164 |
| 153 const base::Feature kWebPaymentsSingleAppUiSkip{ | 165 const base::Feature kWebPaymentsSingleAppUiSkip{ |
| 154 "WebPaymentsSingleAppUiSkip", base::FEATURE_ENABLED_BY_DEFAULT}; | 166 "WebPaymentsSingleAppUiSkip", base::FEATURE_ENABLED_BY_DEFAULT}; |
| 155 | 167 |
| 156 const base::Feature kWebVRCardboardSupport{ | 168 const base::Feature kWebVRCardboardSupport{ |
| 157 "WebVRCardboardSupport", base::FEATURE_ENABLED_BY_DEFAULT}; | 169 "WebVRCardboardSupport", base::FEATURE_ENABLED_BY_DEFAULT}; |
| 158 | 170 |
| 159 static jboolean IsEnabled(JNIEnv* env, | 171 static jboolean IsEnabled(JNIEnv* env, |
| 160 const JavaParamRef<jclass>& clazz, | 172 const JavaParamRef<jclass>& clazz, |
| 161 const JavaParamRef<jstring>& jfeature_name) { | 173 const JavaParamRef<jstring>& jfeature_name) { |
| 162 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); | 174 const base::Feature* feature = |
| 163 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { | 175 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name)); |
| 164 if (kFeaturesExposedToJava[i]->name == feature_name) | 176 return base::FeatureList::IsEnabled(*feature); |
| 165 return base::FeatureList::IsEnabled(*kFeaturesExposedToJava[i]); | 177 } |
| 166 } | 178 |
| 167 // Features queried via this API must be present in |kFeaturesExposedToJava|. | 179 static ScopedJavaLocalRef<jstring> GetFieldTrialParamByFeature( |
| 168 NOTREACHED(); | 180 JNIEnv* env, |
| 169 return false; | 181 const JavaParamRef<jclass>& clazz, |
| 182 const JavaParamRef<jstring>& jfeature_name, |
| 183 const JavaParamRef<jstring>& jparam_name) { |
| 184 const base::Feature* feature = |
| 185 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name)); |
| 186 const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name); |
| 187 const std::string& param_value = |
| 188 base::GetFieldTrialParamValueByFeature(*feature, param_name); |
| 189 return ConvertUTF8ToJavaString(env, param_value); |
| 170 } | 190 } |
| 171 | 191 |
| 172 static jint GetFieldTrialParamByFeatureAsInt( | 192 static jint GetFieldTrialParamByFeatureAsInt( |
| 173 JNIEnv* env, | 193 JNIEnv* env, |
| 174 const JavaParamRef<jclass>& clazz, | 194 const JavaParamRef<jclass>& clazz, |
| 175 const JavaParamRef<jstring>& jfeature_name, | 195 const JavaParamRef<jstring>& jfeature_name, |
| 176 const JavaParamRef<jstring>& jparam_name, | 196 const JavaParamRef<jstring>& jparam_name, |
| 177 const jint jdefault_value) { | 197 const jint jdefault_value) { |
| 178 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); | 198 const base::Feature* feature = |
| 179 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); | 199 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name)); |
| 180 int default_value = static_cast<int>(jdefault_value); | 200 const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name); |
| 201 return base::GetFieldTrialParamByFeatureAsInt(*feature, param_name, |
| 202 jdefault_value); |
| 203 } |
| 181 | 204 |
| 182 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { | 205 static jdouble GetFieldTrialParamByFeatureAsDouble( |
| 183 if (kFeaturesExposedToJava[i]->name == feature_name) | 206 JNIEnv* env, |
| 184 return base::GetFieldTrialParamByFeatureAsInt( | 207 const JavaParamRef<jclass>& clazz, |
| 185 *kFeaturesExposedToJava[i], param_name, default_value); | 208 const JavaParamRef<jstring>& jfeature_name, |
| 186 } | 209 const JavaParamRef<jstring>& jparam_name, |
| 187 // Features queried via this API must be present in |kFeaturesExposedToJava|. | 210 const jdouble jdefault_value) { |
| 188 NOTREACHED(); | 211 const base::Feature* feature = |
| 189 return jdefault_value; | 212 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name)); |
| 213 const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name); |
| 214 return base::GetFieldTrialParamByFeatureAsDouble(*feature, param_name, |
| 215 jdefault_value); |
| 216 } |
| 217 |
| 218 static jboolean GetFieldTrialParamByFeatureAsBoolean( |
| 219 JNIEnv* env, |
| 220 const JavaParamRef<jclass>& clazz, |
| 221 const JavaParamRef<jstring>& jfeature_name, |
| 222 const JavaParamRef<jstring>& jparam_name, |
| 223 const jboolean jdefault_value) { |
| 224 const base::Feature* feature = |
| 225 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name)); |
| 226 const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name); |
| 227 return base::GetFieldTrialParamByFeatureAsBool(*feature, param_name, |
| 228 jdefault_value); |
| 190 } | 229 } |
| 191 | 230 |
| 192 bool RegisterChromeFeatureListJni(JNIEnv* env) { | 231 bool RegisterChromeFeatureListJni(JNIEnv* env) { |
| 193 return RegisterNativesImpl(env); | 232 return RegisterNativesImpl(env); |
| 194 } | 233 } |
| 195 | 234 |
| 196 } // namespace android | 235 } // namespace android |
| 197 } // namespace chrome | 236 } // namespace chrome |
| OLD | NEW |