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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java

Issue 2242473002: Add an about:flag to control WebApk enablement. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nbuild ch Created 4 years, 4 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/webapps/ChromeWebApkHost.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
index dd7c4a392bbdf2d4fb1c20cc37e642c7255461fd..7a888adad09146411f2099dac4bf824e7f4c83cf 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
@@ -4,14 +4,25 @@
package org.chromium.chrome.browser.webapps;
+import android.os.StrictMode;
+
+import org.chromium.base.CommandLine;
+import org.chromium.base.ContextUtils;
+import org.chromium.base.FieldTrialList;
+import org.chromium.base.Log;
+import org.chromium.chrome.browser.ChromeSwitches;
+import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.webapk.lib.client.WebApkValidator;
/**
* Contains functionality needed for Chrome to host WebAPKs.
*/
public class ChromeWebApkHost {
- // The public key to verify whether a WebAPK is signed by WebAPK Minting Server.
- // TODO(hanxi): Update {@link EXPECTED_SIGNATURE} when the real signature is available.
+ // The public key to verify whether a WebAPK is signed by WebAPK Minting
+ // Server.
+ // TODO(hanxi): Update {@link EXPECTED_SIGNATURE} when the real signature is
+ // available.
+ // TODO(yfriedman): Move this to resoures (so it can vary by channel)
private static final byte[] EXPECTED_SIGNATURE = new byte[] {
48, -126, 3, -121, 48, -126, 2, 111, -96, 3, 2, 1, 2, 2, 4, 20, -104, -66, -126, 48, 13,
6, 9, 42, -122, 72, -122, -9, 13, 1, 1, 11, 5, 0, 48, 116, 49, 11, 48, 9, 6, 3, 85, 4,
@@ -61,7 +72,62 @@ public class ChromeWebApkHost {
-125, -31, -18, -52, 49, -73
};
+ private static final String TAG = "ChromeWebApkHost";
+
+ /** Finch experiment name. */
+ private static final String WEBAPK_DISABLE_EXPERIMENT_NAME = "WebApkKillSwitch";
+
+ /** Finch experiment group which forces WebAPKs off. */
+ private static final String WEBAPK_RUNTIME_DISABLED = "Disabled";
+
+ private static Boolean sEnabledForTesting;
+
public static void init() {
WebApkValidator.initWithBrowserHostSignature(EXPECTED_SIGNATURE);
}
+
+ public static void initForTesting(boolean enabled) {
+ sEnabledForTesting = enabled;
+ }
+
+ public static boolean isEnabled() {
+ if (sEnabledForTesting != null) return sEnabledForTesting;
+
+ return isEnabledInPrefs();
+ }
+
+ /**
+ * Check the cached value to figure out if the feature is enabled. We have
+ * to use the cached value because native library may not yet been loaded.
+ *
+ * @return Whether the feature is enabled.
+ */
+ private static boolean isEnabledInPrefs() {
+ // Will go away once the feature is enabled for everyone by default.
+ StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads();
+ try {
+ return ChromePreferenceManager.getInstance(
+ ContextUtils.getApplicationContext()).getCachedWebApkRuntimeEnabled();
+ } finally {
+ StrictMode.setThreadPolicy(oldPolicy);
+ }
+ }
+
+ /**
+ * Once native is loaded we can consult the command-line (set via about:flags) and also finch
+ * state to see if we should enable WebAPKs.
+ */
+ public static void cacheEnabledStateForNextLaunch() {
+ boolean wasEnabled = isEnabledInPrefs();
+ CommandLine instance = CommandLine.getInstance();
+ String experiment = FieldTrialList.findFullName(WEBAPK_DISABLE_EXPERIMENT_NAME);
+ boolean isEnabled = (!WEBAPK_RUNTIME_DISABLED.equals(experiment)
+ && instance.hasSwitch(ChromeSwitches.ENABLE_WEBAPK));
+
+ if (isEnabled != wasEnabled) {
+ Log.d(TAG, "WebApk setting changed (%s => %s)", wasEnabled, isEnabled);
+ ChromePreferenceManager.getInstance(ContextUtils.getApplicationContext())
+ .setCachedWebApkRuntimeEnabled(isEnabled);
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698