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 |