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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java

Issue 1716313002: [Herb] Set up field trial for UI prototypes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: startsWith Created 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
index 2089a3bc9ad737432c59f35c72ed42cf48fd8fc8..f1cdf1305105a9f049a61f07b8edf2595770e3d7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
@@ -12,13 +12,20 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.os.Bundle;
+import android.os.StrictMode;
import android.os.UserManager;
import android.speech.RecognizerIntent;
+import android.text.TextUtils;
+import org.chromium.base.ApplicationStatus;
import org.chromium.base.CommandLine;
+import org.chromium.base.FieldTrialList;
+import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.browser.ChromeSwitches;
+import org.chromium.chrome.browser.ChromeVersionInfo;
+import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.preferences.DocumentModeManager;
import org.chromium.sync.signin.AccountManagerHelper;
import org.chromium.ui.base.DeviceFormFactor;
@@ -30,9 +37,17 @@ import java.util.List;
* this device.
*/
public class FeatureUtilities {
+ private static final String TAG = "FeatureUtilities";
+ private static final String HERB_EXPERIMENT_NAME = "TabManagementExperiment";
+ private static final String HERB_EXPERIMENT_FLAVOR_PARAM = "type";
+
private static Boolean sHasGoogleAccountAuthenticator;
private static Boolean sHasRecognitionIntentHandler;
private static Boolean sDocumentModeDisabled;
+
+ private static String sCachedHerbFlavor;
+ private static boolean sIsHerbFlavorCached;
+
/** Used to track if cached command line flags should be refreshed. */
private static CommandLine.ResetListener sResetListener = null;
@@ -171,6 +186,83 @@ public class FeatureUtilities {
CommandLine.addResetListener(sResetListener);
}
+ /**
+ * @return Which flavor of Herb is being tested. See {@link ChromeSwitches#HERB_FLAVOR_ANISE}
+ * and its related switches.
+ */
+ public static String getHerbFlavor() {
+ if (!sIsHerbFlavorCached) {
+ sCachedHerbFlavor = null;
+
+ Context context = ApplicationStatus.getApplicationContext();
+ if (isDocumentMode(context) || ChromeVersionInfo.isStableBuild()
+ || ChromeVersionInfo.isBetaBuild() || DeviceFormFactor.isTablet(context)) {
+ // Disable Herb.
+ sCachedHerbFlavor = ChromeSwitches.HERB_FLAVOR_DISABLED;
+ } else {
+ // Allowing disk access for preferences while prototyping.
+ StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
+ try {
+ sCachedHerbFlavor =
+ ChromePreferenceManager.getInstance(context).getCachedHerbFlavor();
+ } finally {
+ StrictMode.setThreadPolicy(oldPolicy);
+ }
+ }
+
+ sIsHerbFlavorCached = true;
+ Log.d(TAG, "Retrieved cached Herb flavor: " + sCachedHerbFlavor);
+ }
+
+ return sCachedHerbFlavor;
+ }
+
+ /**
+ * Caches which flavor of Herb the user prefers from native.
+ */
+ public static void cacheHerbFlavor() {
+ String oldFlavor = getHerbFlavor();
+
+ // Check the experiment value before the command line to put the user in the correct group.
+ // The first clause does the null checks so so we can freely use the startsWith() function.
+ String newFlavor = FieldTrialList.findFullName(HERB_EXPERIMENT_NAME);
+ Log.d(TAG, "Experiment flavor: " + newFlavor);
+ if (TextUtils.isEmpty(newFlavor)
+ || newFlavor.startsWith(ChromeSwitches.HERB_FLAVOR_CONTROL)
+ || newFlavor.startsWith(ChromeSwitches.HERB_FLAVOR_DEFAULT)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_DISABLED;
+ } else if (newFlavor.startsWith(ChromeSwitches.HERB_FLAVOR_ANISE)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_ANISE;
+ } else if (newFlavor.startsWith(ChromeSwitches.HERB_FLAVOR_BASIL)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_BASIL;
+ } else if (newFlavor.startsWith(ChromeSwitches.HERB_FLAVOR_CHIVE)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_CHIVE;
+ } else if (newFlavor.startsWith(ChromeSwitches.HERB_FLAVOR_DILL)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_DILL;
+ }
+
+ CommandLine instance = CommandLine.getInstance();
+ if (instance.hasSwitch(ChromeSwitches.HERB_FLAVOR_DISABLED_SWITCH)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_DISABLED;
+ } else if (instance.hasSwitch(ChromeSwitches.HERB_FLAVOR_ANISE_SWITCH)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_ANISE;
+ } else if (instance.hasSwitch(ChromeSwitches.HERB_FLAVOR_BASIL_SWITCH)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_BASIL;
+ } else if (instance.hasSwitch(ChromeSwitches.HERB_FLAVOR_CHIVE_SWITCH)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_CHIVE;
+ } else if (instance.hasSwitch(ChromeSwitches.HERB_FLAVOR_DILL_SWITCH)) {
+ newFlavor = ChromeSwitches.HERB_FLAVOR_DILL;
+ }
+
+ Log.d(TAG, "Caching flavor: " + newFlavor);
+ sCachedHerbFlavor = newFlavor;
+
+ if (!TextUtils.equals(oldFlavor, newFlavor)) {
+ Context context = ApplicationStatus.getApplicationContext();
+ ChromePreferenceManager.getInstance(context).setCachedHerbFlavor(newFlavor);
+ }
+ }
+
private static native void nativeSetDocumentModeEnabled(boolean enabled);
private static native void nativeSetCustomTabVisible(boolean visible);
public static native void nativeSetSqlMmapDisabledByDefault();
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarPhone.java ('k') | chrome/browser/about_flags.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698