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

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: Bernhard's comments #2 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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