Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(853)

Side by Side Diff: chrome/browser/android/chrome_feature_list.cc

Issue 2686763003: [Field trial params] Getting field trial params by feature name in Java. (Closed)
Patch Set: Alexei's comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 30 matching lines...) Expand all
65 &ntp_snippets::kIncreasedVisibility, 67 &ntp_snippets::kIncreasedVisibility,
66 &ntp_snippets::kForeignSessionsSuggestionsFeature, 68 &ntp_snippets::kForeignSessionsSuggestionsFeature,
67 &ntp_snippets::kOfflineBadgeFeature, 69 &ntp_snippets::kOfflineBadgeFeature,
68 &ntp_snippets::kSaveToOfflineFeature, 70 &ntp_snippets::kSaveToOfflineFeature,
69 &offline_pages::kBackgroundLoaderForDownloadsFeature, 71 &offline_pages::kBackgroundLoaderForDownloadsFeature,
70 &offline_pages::kOfflinePagesCTFeature, // See crbug.com/620421. 72 &offline_pages::kOfflinePagesCTFeature, // See crbug.com/620421.
71 &offline_pages::kOfflinePagesSharingFeature, 73 &offline_pages::kOfflinePagesSharingFeature,
72 &password_manager::features::kViewPasswords, 74 &password_manager::features::kViewPasswords,
73 }; 75 };
74 76
77 const base::Feature* FindFeatureExposedToJava(const std::string& feature_name) {
78 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) {
79 if (kFeaturesExposedToJava[i]->name == feature_name)
80 return kFeaturesExposedToJava[i];
81 }
82 return nullptr;
83 }
84
75 } // namespace 85 } // namespace
76 86
77 // Alphabetical: 87 // Alphabetical:
78 const base::Feature kAndroidPayIntegrationV1{"AndroidPayIntegrationV1", 88 const base::Feature kAndroidPayIntegrationV1{"AndroidPayIntegrationV1",
79 base::FEATURE_ENABLED_BY_DEFAULT}; 89 base::FEATURE_ENABLED_BY_DEFAULT};
80 90
81 const base::Feature kAndroidPayIntegrationV2{"AndroidPayIntegrationV2", 91 const base::Feature kAndroidPayIntegrationV2{"AndroidPayIntegrationV2",
82 base::FEATURE_DISABLED_BY_DEFAULT}; 92 base::FEATURE_DISABLED_BY_DEFAULT};
83 93
84 const base::Feature kAndroidPaymentApps{"AndroidPaymentApps", 94 const base::Feature kAndroidPaymentApps{"AndroidPaymentApps",
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 154
145 const base::Feature kWebPaymentsSingleAppUiSkip{ 155 const base::Feature kWebPaymentsSingleAppUiSkip{
146 "WebPaymentsSingleAppUiSkip", base::FEATURE_ENABLED_BY_DEFAULT}; 156 "WebPaymentsSingleAppUiSkip", base::FEATURE_ENABLED_BY_DEFAULT};
147 157
148 const base::Feature kWebVRCardboardSupport{ 158 const base::Feature kWebVRCardboardSupport{
149 "WebVRCardboardSupport", base::FEATURE_ENABLED_BY_DEFAULT}; 159 "WebVRCardboardSupport", base::FEATURE_ENABLED_BY_DEFAULT};
150 160
151 static jboolean IsEnabled(JNIEnv* env, 161 static jboolean IsEnabled(JNIEnv* env,
152 const JavaParamRef<jclass>& clazz, 162 const JavaParamRef<jclass>& clazz,
153 const JavaParamRef<jstring>& jfeature_name) { 163 const JavaParamRef<jstring>& jfeature_name) {
154 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); 164 const base::Feature* feature =
155 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { 165 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
156 if (kFeaturesExposedToJava[i]->name == feature_name) 166 if (feature != nullptr)
157 return base::FeatureList::IsEnabled(*kFeaturesExposedToJava[i]); 167 return base::FeatureList::IsEnabled(*feature);
168 // Features queried via this API must be present in |kFeaturesExposedToJava|.
169 NOTREACHED();
Bernhard Bauer 2017/02/09 17:04:29 The NOTREACHED() made sense in the old version whe
jkrcal 2017/02/09 19:10:40 Ah, sure! Thanks! I've moved the DCHECK into the
170 return false;
171 }
172
173 static ScopedJavaLocalRef<jstring> GetFieldTrialParamByFeature(
174 JNIEnv* env,
175 const JavaParamRef<jclass>& clazz,
176 const JavaParamRef<jstring>& jfeature_name,
177 const JavaParamRef<jstring>& jparam_name) {
178 const base::Feature* feature =
179 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
180 if (feature != nullptr) {
181 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name);
182 std::string param_value =
183 base::GetFieldTrialParamValueByFeature(*feature, param_name);
184 return ConvertUTF8ToJavaString(env, param_value);
158 } 185 }
159 // Features queried via this API must be present in |kFeaturesExposedToJava|. 186 // Features queried via this API must be present in |kFeaturesExposedToJava|.
160 NOTREACHED(); 187 NOTREACHED();
161 return false; 188 return ConvertUTF8ToJavaString(env, std::string());
162 } 189 }
163 190
164 static jint GetFieldTrialParamByFeatureAsInt( 191 static jint GetFieldTrialParamByFeatureAsInt(
165 JNIEnv* env, 192 JNIEnv* env,
166 const JavaParamRef<jclass>& clazz, 193 const JavaParamRef<jclass>& clazz,
167 const JavaParamRef<jstring>& jfeature_name, 194 const JavaParamRef<jstring>& jfeature_name,
168 const JavaParamRef<jstring>& jparam_name, 195 const JavaParamRef<jstring>& jparam_name,
169 const jint jdefault_value) { 196 const jint jdefault_value) {
170 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); 197 const base::Feature* feature =
171 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); 198 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
172 int default_value = static_cast<int>(jdefault_value); 199 if (feature != nullptr) {
173 200 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name);
174 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { 201 return base::GetFieldTrialParamByFeatureAsInt(*feature, param_name,
175 if (kFeaturesExposedToJava[i]->name == feature_name) 202 jdefault_value);
176 return base::GetFieldTrialParamByFeatureAsInt(
177 *kFeaturesExposedToJava[i], param_name, default_value);
178 } 203 }
179 // Features queried via this API must be present in |kFeaturesExposedToJava|. 204 // Features queried via this API must be present in |kFeaturesExposedToJava|.
180 NOTREACHED(); 205 NOTREACHED();
206 return jdefault_value;
207 }
208
209 static jdouble GetFieldTrialParamByFeatureAsDouble(
210 JNIEnv* env,
211 const JavaParamRef<jclass>& clazz,
212 const JavaParamRef<jstring>& jfeature_name,
213 const JavaParamRef<jstring>& jparam_name,
214 const jdouble jdefault_value) {
215 const base::Feature* feature =
216 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
217 if (feature != nullptr) {
218 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name);
219 return base::GetFieldTrialParamByFeatureAsDouble(*feature, param_name,
220 jdefault_value);
221 }
222 // Features queried via this API must be present in |kFeaturesExposedToJava|.
223 NOTREACHED();
224 return jdefault_value;
225 }
226
227 static jboolean GetFieldTrialParamByFeatureAsBoolean(
228 JNIEnv* env,
229 const JavaParamRef<jclass>& clazz,
230 const JavaParamRef<jstring>& jfeature_name,
231 const JavaParamRef<jstring>& jparam_name,
232 const jboolean jdefault_value) {
233 const base::Feature* feature =
234 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
235 if (feature != nullptr) {
236 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name);
237 return base::GetFieldTrialParamByFeatureAsBool(*feature, param_name,
238 jdefault_value);
239 }
240 // Features queried via this API must be present in |kFeaturesExposedToJava|.
241 NOTREACHED();
181 return jdefault_value; 242 return jdefault_value;
182 } 243 }
183 244
184 bool RegisterChromeFeatureListJni(JNIEnv* env) { 245 bool RegisterChromeFeatureListJni(JNIEnv* env) {
185 return RegisterNativesImpl(env); 246 return RegisterNativesImpl(env);
186 } 247 }
187 248
188 } // namespace android 249 } // namespace android
189 } // namespace chrome 250 } // namespace chrome
OLDNEW
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698