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

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: Minor fixes 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 NOTREACHED() << "Features queried via ChromeFeatureList must be present in "
83 "|kFeaturesExposedToJava|.";
84 return base::Feature("", base::FEATURE_DISABLED_BY_DEFAULT);
85 }
86
75 } // namespace 87 } // namespace
76 88
77 // Alphabetical: 89 // Alphabetical:
78 const base::Feature kAndroidPayIntegrationV1{"AndroidPayIntegrationV1", 90 const base::Feature kAndroidPayIntegrationV1{"AndroidPayIntegrationV1",
79 base::FEATURE_ENABLED_BY_DEFAULT}; 91 base::FEATURE_ENABLED_BY_DEFAULT};
80 92
81 const base::Feature kAndroidPayIntegrationV2{"AndroidPayIntegrationV2", 93 const base::Feature kAndroidPayIntegrationV2{"AndroidPayIntegrationV2",
82 base::FEATURE_DISABLED_BY_DEFAULT}; 94 base::FEATURE_DISABLED_BY_DEFAULT};
83 95
84 const base::Feature kAndroidPaymentApps{"AndroidPaymentApps", 96 const base::Feature kAndroidPaymentApps{"AndroidPaymentApps",
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 156
145 const base::Feature kWebPaymentsSingleAppUiSkip{ 157 const base::Feature kWebPaymentsSingleAppUiSkip{
146 "WebPaymentsSingleAppUiSkip", base::FEATURE_ENABLED_BY_DEFAULT}; 158 "WebPaymentsSingleAppUiSkip", base::FEATURE_ENABLED_BY_DEFAULT};
147 159
148 const base::Feature kWebVRCardboardSupport{ 160 const base::Feature kWebVRCardboardSupport{
149 "WebVRCardboardSupport", base::FEATURE_ENABLED_BY_DEFAULT}; 161 "WebVRCardboardSupport", base::FEATURE_ENABLED_BY_DEFAULT};
150 162
151 static jboolean IsEnabled(JNIEnv* env, 163 static jboolean IsEnabled(JNIEnv* env,
152 const JavaParamRef<jclass>& clazz, 164 const JavaParamRef<jclass>& clazz,
153 const JavaParamRef<jstring>& jfeature_name) { 165 const JavaParamRef<jstring>& jfeature_name) {
154 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); 166 const base::Feature& feature =
155 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { 167 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
Bernhard Bauer 2017/02/10 16:27:07 You are passing the returned feature by value, but
jkrcal 2017/02/10 16:53:44 Damn, I meant to return by reference. The point
Bernhard Bauer 2017/02/10 17:56:37 I don't have a problem with returning a reference
jkrcal 2017/02/13 07:57:27 Oh, clear! Thanks for bearing with me and explaini
156 if (kFeaturesExposedToJava[i]->name == feature_name) 168 return base::FeatureList::IsEnabled(feature);
157 return base::FeatureList::IsEnabled(*kFeaturesExposedToJava[i]); 169 }
158 } 170
159 // Features queried via this API must be present in |kFeaturesExposedToJava|. 171 static ScopedJavaLocalRef<jstring> GetFieldTrialParamByFeature(
160 NOTREACHED(); 172 JNIEnv* env,
161 return false; 173 const JavaParamRef<jclass>& clazz,
174 const JavaParamRef<jstring>& jfeature_name,
175 const JavaParamRef<jstring>& jparam_name) {
176 const base::Feature& feature =
177 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
178 const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name);
179 const std::string& param_value =
180 base::GetFieldTrialParamValueByFeature(feature, param_name);
181 return ConvertUTF8ToJavaString(env, param_value);
162 } 182 }
163 183
164 static jint GetFieldTrialParamByFeatureAsInt( 184 static jint GetFieldTrialParamByFeatureAsInt(
165 JNIEnv* env, 185 JNIEnv* env,
166 const JavaParamRef<jclass>& clazz, 186 const JavaParamRef<jclass>& clazz,
167 const JavaParamRef<jstring>& jfeature_name, 187 const JavaParamRef<jstring>& jfeature_name,
168 const JavaParamRef<jstring>& jparam_name, 188 const JavaParamRef<jstring>& jparam_name,
169 const jint jdefault_value) { 189 const jint jdefault_value) {
170 const std::string feature_name = ConvertJavaStringToUTF8(env, jfeature_name); 190 const base::Feature& feature =
171 const std::string param_name = ConvertJavaStringToUTF8(env, jparam_name); 191 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
172 int default_value = static_cast<int>(jdefault_value); 192 const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name);
193 return base::GetFieldTrialParamByFeatureAsInt(feature, param_name,
194 jdefault_value);
195 }
173 196
174 for (size_t i = 0; i < arraysize(kFeaturesExposedToJava); ++i) { 197 static jdouble GetFieldTrialParamByFeatureAsDouble(
175 if (kFeaturesExposedToJava[i]->name == feature_name) 198 JNIEnv* env,
176 return base::GetFieldTrialParamByFeatureAsInt( 199 const JavaParamRef<jclass>& clazz,
177 *kFeaturesExposedToJava[i], param_name, default_value); 200 const JavaParamRef<jstring>& jfeature_name,
178 } 201 const JavaParamRef<jstring>& jparam_name,
179 // Features queried via this API must be present in |kFeaturesExposedToJava|. 202 const jdouble jdefault_value) {
180 NOTREACHED(); 203 const base::Feature& feature =
181 return jdefault_value; 204 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
205 const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name);
206 return base::GetFieldTrialParamByFeatureAsDouble(feature, param_name,
207 jdefault_value);
208 }
209
210 static jboolean GetFieldTrialParamByFeatureAsBoolean(
211 JNIEnv* env,
212 const JavaParamRef<jclass>& clazz,
213 const JavaParamRef<jstring>& jfeature_name,
214 const JavaParamRef<jstring>& jparam_name,
215 const jboolean jdefault_value) {
216 const base::Feature& feature =
217 FindFeatureExposedToJava(ConvertJavaStringToUTF8(env, jfeature_name));
218 const std::string& param_name = ConvertJavaStringToUTF8(env, jparam_name);
219 return base::GetFieldTrialParamByFeatureAsBool(feature, param_name,
220 jdefault_value);
182 } 221 }
183 222
184 bool RegisterChromeFeatureListJni(JNIEnv* env) { 223 bool RegisterChromeFeatureListJni(JNIEnv* env) {
185 return RegisterNativesImpl(env); 224 return RegisterNativesImpl(env);
186 } 225 }
187 226
188 } // namespace android 227 } // namespace android
189 } // namespace chrome 228 } // 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