| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 package org.chromium.chrome.browser.webapps; | 5 package org.chromium.chrome.browser.webapps; |
| 6 | 6 |
| 7 import android.os.StrictMode; | 7 import android.os.StrictMode; |
| 8 | 8 |
| 9 import org.chromium.base.CommandLine; |
| 9 import org.chromium.base.ContextUtils; | 10 import org.chromium.base.ContextUtils; |
| 10 import org.chromium.base.Log; | 11 import org.chromium.base.Log; |
| 11 import org.chromium.base.annotations.CalledByNative; | 12 import org.chromium.base.annotations.CalledByNative; |
| 12 import org.chromium.base.library_loader.LibraryLoader; | 13 import org.chromium.base.library_loader.LibraryLoader; |
| 13 import org.chromium.chrome.browser.AppHooks; | 14 import org.chromium.chrome.browser.AppHooks; |
| 14 import org.chromium.chrome.browser.ChromeFeatureList; | 15 import org.chromium.chrome.browser.ChromeFeatureList; |
| 16 import org.chromium.chrome.browser.ChromeSwitches; |
| 15 import org.chromium.chrome.browser.GooglePlayInstallState; | 17 import org.chromium.chrome.browser.GooglePlayInstallState; |
| 16 import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; | 18 import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; |
| 17 import org.chromium.chrome.browser.externalauth.UserRecoverableErrorHandler; | 19 import org.chromium.chrome.browser.externalauth.UserRecoverableErrorHandler; |
| 18 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; | 20 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; |
| 19 import org.chromium.webapk.lib.client.WebApkValidator; | 21 import org.chromium.webapk.lib.client.WebApkValidator; |
| 20 | 22 |
| 21 /** | 23 /** |
| 22 * Contains functionality needed for Chrome to host WebAPKs. | 24 * Contains functionality needed for Chrome to host WebAPKs. |
| 23 */ | 25 */ |
| 24 public class ChromeWebApkHost { | 26 public class ChromeWebApkHost { |
| 25 private static final String TAG = "ChromeWebApkHost"; | 27 private static final String TAG = "ChromeWebApkHost"; |
| 26 | 28 |
| 27 /** Whether installing WebAPks from Google Play is possible. */ | 29 /** Whether installing WebAPks from Google Play is possible. */ |
| 28 private static Integer sGooglePlayInstallState; | 30 private static Integer sGooglePlayInstallState; |
| 29 | 31 |
| 30 private static Boolean sEnabledForTesting; | 32 private static Boolean sEnabledForTesting; |
| 31 | 33 |
| 32 public static void init() { | 34 public static void init() { |
| 33 WebApkValidator.initWithBrowserHostSignature(ChromeWebApkHostSignature.E
XPECTED_SIGNATURE); | 35 WebApkValidator.init(isAnyPackageNameEnabledInPrefs(), |
| 36 ChromeWebApkHostSignature.EXPECTED_SIGNATURE, ChromeWebApkHostSi
gnature.PUBLIC_KEY); |
| 34 } | 37 } |
| 35 | 38 |
| 36 public static void initForTesting(boolean enabled) { | 39 public static void initForTesting(boolean enabled) { |
| 37 sEnabledForTesting = enabled; | 40 sEnabledForTesting = enabled; |
| 38 sGooglePlayInstallState = enabled ? GooglePlayInstallState.SUPPORTED | 41 sGooglePlayInstallState = enabled ? GooglePlayInstallState.SUPPORTED |
| 39 : GooglePlayInstallState.NO_PLAY_SERVI
CES; | 42 : GooglePlayInstallState.NO_PLAY_SERVI
CES; |
| 40 } | 43 } |
| 41 | 44 |
| 42 public static boolean isEnabled() { | 45 public static boolean isEnabled() { |
| 43 if (sEnabledForTesting != null) return sEnabledForTesting; | 46 if (sEnabledForTesting != null) return sEnabledForTesting; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 // Will go away once the feature is enabled for everyone by default. | 94 // Will go away once the feature is enabled for everyone by default. |
| 92 StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); | 95 StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); |
| 93 try { | 96 try { |
| 94 return ChromePreferenceManager.getInstance().getCachedWebApkRuntimeE
nabled(); | 97 return ChromePreferenceManager.getInstance().getCachedWebApkRuntimeE
nabled(); |
| 95 } finally { | 98 } finally { |
| 96 StrictMode.setThreadPolicy(oldPolicy); | 99 StrictMode.setThreadPolicy(oldPolicy); |
| 97 } | 100 } |
| 98 } | 101 } |
| 99 | 102 |
| 100 /** | 103 /** |
| 104 * Check the cached value to figure out if any WebAPK package name may be us
ed. We have to use |
| 105 * the cached value because native library may not yet been loaded. |
| 106 * @return Whether the feature is enabled. |
| 107 */ |
| 108 private static boolean isAnyPackageNameEnabledInPrefs() { |
| 109 // Will go away once the feature is enabled for everyone by default. |
| 110 StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); |
| 111 try { |
| 112 return ChromePreferenceManager.getInstance().getCachedWebApkAnyPacka
geName(); |
| 113 } finally { |
| 114 StrictMode.setThreadPolicy(oldPolicy); |
| 115 } |
| 116 } |
| 117 |
| 118 /** |
| 101 * Once native is loaded we can consult the command-line (set via about:flag
s) and also finch | 119 * Once native is loaded we can consult the command-line (set via about:flag
s) and also finch |
| 102 * state to see if we should enable WebAPKs. | 120 * state to see if we should enable WebAPKs. |
| 103 */ | 121 */ |
| 104 public static void cacheEnabledStateForNextLaunch() { | 122 public static void cacheEnabledStateForNextLaunch() { |
| 105 ChromePreferenceManager preferenceManager = ChromePreferenceManager.getI
nstance(); | 123 ChromePreferenceManager preferenceManager = ChromePreferenceManager.getI
nstance(); |
| 106 | 124 |
| 107 boolean wasEnabled = isEnabledInPrefs(); | 125 boolean wasEnabled = isEnabledInPrefs(); |
| 108 boolean isEnabled = ChromeFeatureList.isEnabled(ChromeFeatureList.IMPROV
ED_A2HS); | 126 boolean isEnabled = ChromeFeatureList.isEnabled(ChromeFeatureList.IMPROV
ED_A2HS); |
| 109 if (isEnabled != wasEnabled) { | 127 if (isEnabled != wasEnabled) { |
| 110 Log.d(TAG, "WebApk setting changed (%s => %s)", wasEnabled, isEnable
d); | 128 Log.d(TAG, "WebApk setting changed (%s => %s)", wasEnabled, isEnable
d); |
| 111 preferenceManager.setCachedWebApkRuntimeEnabled(isEnabled); | 129 preferenceManager.setCachedWebApkRuntimeEnabled(isEnabled); |
| 112 } | 130 } |
| 131 |
| 132 boolean wasAnyPackageNameEnabled = isAnyPackageNameEnabledInPrefs(); |
| 133 boolean isAnyPackageNameEnabled = |
| 134 CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_ANY_WE
BAPK_PACKAGE_NAME); |
| 135 if (wasAnyPackageNameEnabled != isAnyPackageNameEnabled) { |
| 136 Log.d(TAG, "WebApk Any Package name setting changed (%s => %s)", |
| 137 wasAnyPackageNameEnabled, isAnyPackageNameEnabled); |
| 138 preferenceManager.setCachedWebApkAnyPackageNameEnabled(isAnyPackageN
ameEnabled); |
| 139 } |
| 113 } | 140 } |
| 114 | 141 |
| 115 private static native boolean nativeCanLaunchRendererInWebApkProcess(); | 142 private static native boolean nativeCanLaunchRendererInWebApkProcess(); |
| 116 } | 143 } |
| OLD | NEW |