Chromium Code Reviews| Index: chrome/browser/android/chrome_feature_list.cc |
| diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc |
| index 44db12e45b0a2ee53ff076d1de20d206b417d051..13899d98653d1f9b0459f3698934b4afcf973411 100644 |
| --- a/chrome/browser/android/chrome_feature_list.cc |
| +++ b/chrome/browser/android/chrome_feature_list.cc |
| @@ -21,7 +21,9 @@ |
| #include "jni/ChromeFeatureList_jni.h" |
| using base::android::ConvertJavaStringToUTF8; |
| +using base::android::ConvertUTF8ToJavaString; |
| using base::android::JavaParamRef; |
| +using base::android::ScopedJavaLocalRef; |
| namespace chrome { |
| namespace android { |
| @@ -157,6 +159,25 @@ static jboolean IsEnabled(JNIEnv* env, |
| return false; |
| } |
| +static ScopedJavaLocalRef<jstring> GetFieldTrialParamByFeature( |
| + JNIEnv* env, |
| + const JavaParamRef<jclass>& clazz, |
| + const JavaParamRef<jstring>& jfeature_name, |
| + const JavaParamRef<jstring>& jparam_name) { |
| + const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); |
| + const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); |
| + for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { |
|
Alexei Svitkine (slow)
2017/02/08 16:36:00
Nit: Since we loop over features in all of these f
jkrcal
2017/02/09 10:00:45
Good point, done!
|
| + if (kFeaturesExposedToJava[i]->name == feature_name) { |
| + std::string param_value = base::GetFieldTrialParamValueByFeature( |
| + *kFeaturesExposedToJava[i], param_name); |
| + return ConvertUTF8ToJavaString(env, param_value); |
| + } |
| + } |
| + // Features queried via this API must be present in |kFeaturesExposedToJava|. |
| + NOTREACHED(); |
| + return ConvertUTF8ToJavaString(env, std::string()); |
| +} |
| + |
| static jint GetFieldTrialParamByFeatureAsInt( |
| JNIEnv* env, |
| const JavaParamRef<jclass>& clazz, |
| @@ -177,6 +198,46 @@ static jint GetFieldTrialParamByFeatureAsInt( |
| return jdefault_value; |
| } |
| +static jdouble GetFieldTrialParamByFeatureAsDouble( |
| + JNIEnv* env, |
| + const JavaParamRef<jclass>& clazz, |
| + const JavaParamRef<jstring>& jfeature_name, |
| + const JavaParamRef<jstring>& jparam_name, |
| + const jdouble jdefault_value) { |
| + const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); |
| + const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); |
| + double default_value = static_cast<double>(jdefault_value); |
| + |
| + for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { |
| + if (kFeaturesExposedToJava[i]->name == feature_name) |
| + return base::GetFieldTrialParamByFeatureAsDouble( |
| + *kFeaturesExposedToJava[i], param_name, default_value); |
| + } |
| + // Features queried via this API must be present in |kFeaturesExposedToJava|. |
| + NOTREACHED(); |
| + return jdefault_value; |
| +} |
| + |
| +static jboolean GetFieldTrialParamByFeatureAsBoolean( |
| + JNIEnv* env, |
| + const JavaParamRef<jclass>& clazz, |
| + const JavaParamRef<jstring>& jfeature_name, |
| + const JavaParamRef<jstring>& jparam_name, |
| + const jboolean jdefault_value) { |
| + const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); |
| + const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); |
| + bool default_value = static_cast<bool>(jdefault_value); |
| + |
| + for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { |
| + if (kFeaturesExposedToJava[i]->name == feature_name) |
| + return base::GetFieldTrialParamByFeatureAsBool( |
| + *kFeaturesExposedToJava[i], param_name, default_value); |
| + } |
| + // Features queried via this API must be present in |kFeaturesExposedToJava|. |
| + NOTREACHED(); |
| + return jdefault_value; |
| +} |
| + |
| bool RegisterChromeFeatureListJni(JNIEnv* env) { |
| return RegisterNativesImpl(env); |
| } |