Chromium Code Reviews| 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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 150 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); | 152 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); |
| 151 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { | 153 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { |
| 152 if (kFeaturesExposedToJava[i]->name == feature_name) | 154 if (kFeaturesExposedToJava[i]->name == feature_name) |
| 153 return base::FeatureList::IsEnabled(*kFeaturesExposedToJava[i]); | 155 return base::FeatureList::IsEnabled(*kFeaturesExposedToJava[i]); |
| 154 } | 156 } |
| 155 // Features queried via this API must be present in |kFeaturesExposedToJava|. | 157 // Features queried via this API must be present in |kFeaturesExposedToJava|. |
| 156 NOTREACHED(); | 158 NOTREACHED(); |
| 157 return false; | 159 return false; |
| 158 } | 160 } |
| 159 | 161 |
| 162 static ScopedJavaLocalRef<jstring> GetFieldTrialParamByFeature( | |
| 163 JNIEnv* env, | |
| 164 const JavaParamRef<jclass>& clazz, | |
| 165 const JavaParamRef<jstring>& jfeature_name, | |
| 166 const JavaParamRef<jstring>& jparam_name) { | |
| 167 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); | |
| 168 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); | |
| 169 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!
| |
| 170 if (kFeaturesExposedToJava[i]->name == feature_name) { | |
| 171 std::string param_value = base::GetFieldTrialParamValueByFeature( | |
| 172 *kFeaturesExposedToJava[i], param_name); | |
| 173 return ConvertUTF8ToJavaString(env, param_value); | |
| 174 } | |
| 175 } | |
| 176 // Features queried via this API must be present in |kFeaturesExposedToJava|. | |
| 177 NOTREACHED(); | |
| 178 return ConvertUTF8ToJavaString(env, std::string()); | |
| 179 } | |
| 180 | |
| 160 static jint GetFieldTrialParamByFeatureAsInt( | 181 static jint GetFieldTrialParamByFeatureAsInt( |
| 161 JNIEnv* env, | 182 JNIEnv* env, |
| 162 const JavaParamRef<jclass>& clazz, | 183 const JavaParamRef<jclass>& clazz, |
| 163 const JavaParamRef<jstring>& jfeature_name, | 184 const JavaParamRef<jstring>& jfeature_name, |
| 164 const JavaParamRef<jstring>& jparam_name, | 185 const JavaParamRef<jstring>& jparam_name, |
| 165 const jint jdefault_value) { | 186 const jint jdefault_value) { |
| 166 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); | 187 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); |
| 167 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); | 188 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); |
| 168 int default_value = static_cast<int>(jdefault_value); | 189 int default_value = static_cast<int>(jdefault_value); |
| 169 | 190 |
| 170 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { | 191 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { |
| 171 if (kFeaturesExposedToJava[i]->name == feature_name) | 192 if (kFeaturesExposedToJava[i]->name == feature_name) |
| 172 return base::GetFieldTrialParamByFeatureAsInt( | 193 return base::GetFieldTrialParamByFeatureAsInt( |
| 173 *kFeaturesExposedToJava[i], param_name, default_value); | 194 *kFeaturesExposedToJava[i], param_name, default_value); |
| 174 } | 195 } |
| 175 // Features queried via this API must be present in |kFeaturesExposedToJava|. | 196 // Features queried via this API must be present in |kFeaturesExposedToJava|. |
| 176 NOTREACHED(); | 197 NOTREACHED(); |
| 177 return jdefault_value; | 198 return jdefault_value; |
| 178 } | 199 } |
| 179 | 200 |
| 201 static jdouble GetFieldTrialParamByFeatureAsDouble( | |
| 202 JNIEnv* env, | |
| 203 const JavaParamRef<jclass>& clazz, | |
| 204 const JavaParamRef<jstring>& jfeature_name, | |
| 205 const JavaParamRef<jstring>& jparam_name, | |
| 206 const jdouble jdefault_value) { | |
| 207 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); | |
| 208 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); | |
| 209 double default_value = static_cast<double>(jdefault_value); | |
| 210 | |
| 211 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { | |
| 212 if (kFeaturesExposedToJava[i]->name == feature_name) | |
| 213 return base::GetFieldTrialParamByFeatureAsDouble( | |
| 214 *kFeaturesExposedToJava[i], param_name, default_value); | |
| 215 } | |
| 216 // Features queried via this API must be present in |kFeaturesExposedToJava|. | |
| 217 NOTREACHED(); | |
| 218 return jdefault_value; | |
| 219 } | |
| 220 | |
| 221 static jboolean GetFieldTrialParamByFeatureAsBoolean( | |
| 222 JNIEnv* env, | |
| 223 const JavaParamRef<jclass>& clazz, | |
| 224 const JavaParamRef<jstring>& jfeature_name, | |
| 225 const JavaParamRef<jstring>& jparam_name, | |
| 226 const jboolean jdefault_value) { | |
| 227 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); | |
| 228 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); | |
| 229 bool default_value = static_cast<bool>(jdefault_value); | |
| 230 | |
| 231 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { | |
| 232 if (kFeaturesExposedToJava[i]->name == feature_name) | |
| 233 return base::GetFieldTrialParamByFeatureAsBool( | |
| 234 *kFeaturesExposedToJava[i], param_name, default_value); | |
| 235 } | |
| 236 // Features queried via this API must be present in |kFeaturesExposedToJava|. | |
| 237 NOTREACHED(); | |
| 238 return jdefault_value; | |
| 239 } | |
| 240 | |
| 180 bool RegisterChromeFeatureListJni(JNIEnv* env) { | 241 bool RegisterChromeFeatureListJni(JNIEnv* env) { |
| 181 return RegisterNativesImpl(env); | 242 return RegisterNativesImpl(env); |
| 182 } | 243 } |
| 183 | 244 |
| 184 } // namespace android | 245 } // namespace android |
| 185 } // namespace chrome | 246 } // namespace chrome |
| OLD | NEW |