Merge "Remove WebView fallback logic migration code."
This commit is contained in:
committed by
Android (Google) Code Review
commit
f1764cc21f
@@ -10433,14 +10433,6 @@ public final class Settings {
|
||||
public static final String WEBVIEW_DATA_REDUCTION_PROXY_KEY =
|
||||
"webview_data_reduction_proxy_key";
|
||||
|
||||
/**
|
||||
* Whether or not the WebView fallback mechanism should be enabled.
|
||||
* 0=disabled, 1=enabled.
|
||||
* @hide
|
||||
*/
|
||||
public static final String WEBVIEW_FALLBACK_LOGIC_ENABLED =
|
||||
"webview_fallback_logic_enabled";
|
||||
|
||||
/**
|
||||
* Name of the package used as WebView provider (if unset the provider is instead determined
|
||||
* by the system).
|
||||
|
||||
@@ -1493,9 +1493,6 @@ class SettingsProtoDumpUtil {
|
||||
dumpSetting(s, p,
|
||||
Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY,
|
||||
GlobalSettingsProto.Webview.DATA_REDUCTION_PROXY_KEY);
|
||||
dumpSetting(s, p,
|
||||
Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED,
|
||||
GlobalSettingsProto.Webview.FALLBACK_LOGIC_ENABLED);
|
||||
dumpSetting(s, p,
|
||||
Settings.Global.WEBVIEW_PROVIDER,
|
||||
GlobalSettingsProto.Webview.PROVIDER);
|
||||
|
||||
@@ -526,7 +526,6 @@ public class SettingsBackupTest {
|
||||
Settings.Global.NETWORK_ACCESS_TIMEOUT_MS,
|
||||
Settings.Global.WARNING_TEMPERATURE,
|
||||
Settings.Global.WEBVIEW_DATA_REDUCTION_PROXY_KEY,
|
||||
Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED,
|
||||
Settings.Global.WEBVIEW_MULTIPROCESS,
|
||||
Settings.Global.WEBVIEW_PROVIDER,
|
||||
Settings.Global.WFC_IMS_ENABLED,
|
||||
|
||||
@@ -196,19 +196,6 @@ public class SystemImpl implements SystemInterface {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isFallbackLogicEnabled() {
|
||||
// Note that this is enabled by default (i.e. if the setting hasn't been set).
|
||||
return Settings.Global.getInt(AppGlobals.getInitialApplication().getContentResolver(),
|
||||
Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED, 1) == 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableFallbackLogic(boolean enable) {
|
||||
Settings.Global.putInt(AppGlobals.getInitialApplication().getContentResolver(),
|
||||
Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED, enable ? 1 : 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enablePackageForAllUsers(Context context, String packageName, boolean enable) {
|
||||
UserManager userManager = (UserManager)context.getSystemService(Context.USER_SERVICE);
|
||||
|
||||
@@ -41,9 +41,6 @@ public interface SystemInterface {
|
||||
public void updateUserSetting(Context context, String newProviderName);
|
||||
public void killPackageDependents(String packageName);
|
||||
|
||||
public boolean isFallbackLogicEnabled();
|
||||
public void enableFallbackLogic(boolean enable);
|
||||
|
||||
public void enablePackageForAllUsers(Context context, String packageName, boolean enable);
|
||||
|
||||
public boolean systemIsDebuggable();
|
||||
|
||||
@@ -43,8 +43,7 @@ import java.io.PrintWriter;
|
||||
* as the WebView preparation class.
|
||||
* 2. The SystemServer calls WebViewUpdateService.prepareWebViewInSystemServer. This happens at boot
|
||||
* and the WebViewUpdateService should not have been accessed before this call. In this call we
|
||||
* migrate away from the old fallback logic if necessary and then choose WebView implementation for
|
||||
* the first time.
|
||||
* choose WebView implementation for the first time.
|
||||
* 3. The update service listens for Intents related to package installs and removals. These intents
|
||||
* are received and processed on the UI thread. Each intent can result in changing WebView
|
||||
* implementation.
|
||||
@@ -80,7 +79,6 @@ public class WebViewUpdateServiceImpl {
|
||||
}
|
||||
|
||||
void prepareWebViewInSystemServer() {
|
||||
migrateFallbackStateOnBoot();
|
||||
mWebViewUpdater.prepareWebViewInSystemServer();
|
||||
if (getCurrentWebViewPackage() == null) {
|
||||
// We didn't find a valid WebView implementation. Try explicitly re-enabling the
|
||||
@@ -158,27 +156,6 @@ public class WebViewUpdateServiceImpl {
|
||||
return mWebViewUpdater.getCurrentWebViewPackage();
|
||||
}
|
||||
|
||||
/**
|
||||
* If the fallback logic is enabled, re-enable any fallback package for all users, then
|
||||
* disable the fallback logic.
|
||||
*
|
||||
* This migrates away from the old fallback mechanism to the new state where packages are never
|
||||
* automatically enableenableisabled.
|
||||
*/
|
||||
private void migrateFallbackStateOnBoot() {
|
||||
if (!mSystemInterface.isFallbackLogicEnabled()) return;
|
||||
|
||||
WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages();
|
||||
WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders);
|
||||
if (fallbackProvider != null) {
|
||||
Slog.i(TAG, "One-time migration: enabling " + fallbackProvider.packageName);
|
||||
mSystemInterface.enablePackageForAllUsers(mContext, fallbackProvider.packageName, true);
|
||||
} else {
|
||||
Slog.i(TAG, "Skipping one-time migration: no fallback provider");
|
||||
}
|
||||
mSystemInterface.enableFallbackLogic(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the only fallback provider in the set of given packages, or null if there is none.
|
||||
*/
|
||||
@@ -217,8 +194,6 @@ public class WebViewUpdateServiceImpl {
|
||||
*/
|
||||
void dumpState(PrintWriter pw) {
|
||||
pw.println("Current WebView Update Service state");
|
||||
pw.println(String.format(" Fallback logic enabled: %b",
|
||||
mSystemInterface.isFallbackLogicEnabled()));
|
||||
pw.println(String.format(" Multiprocess enabled: %b", isMultiProcessEnabled()));
|
||||
mWebViewUpdater.dumpState(pw);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,6 @@ public class TestSystemImpl implements SystemInterface {
|
||||
List<Integer> mUsers = new ArrayList<>();
|
||||
// Package -> [user, package]
|
||||
Map<String, Map<Integer, PackageInfo>> mPackages = new HashMap();
|
||||
private boolean mFallbackLogicEnabled;
|
||||
private final int mNumRelros;
|
||||
private final boolean mIsDebuggable;
|
||||
private int mMultiProcessSetting;
|
||||
@@ -42,10 +41,9 @@ public class TestSystemImpl implements SystemInterface {
|
||||
|
||||
public static final int PRIMARY_USER_ID = 0;
|
||||
|
||||
public TestSystemImpl(WebViewProviderInfo[] packageConfigs, boolean fallbackLogicEnabled,
|
||||
int numRelros, boolean isDebuggable, boolean multiProcessDefault) {
|
||||
public TestSystemImpl(WebViewProviderInfo[] packageConfigs, int numRelros, boolean isDebuggable,
|
||||
boolean multiProcessDefault) {
|
||||
mPackageConfigs = packageConfigs;
|
||||
mFallbackLogicEnabled = fallbackLogicEnabled;
|
||||
mNumRelros = numRelros;
|
||||
mIsDebuggable = isDebuggable;
|
||||
mUsers.add(PRIMARY_USER_ID);
|
||||
@@ -77,16 +75,6 @@ public class TestSystemImpl implements SystemInterface {
|
||||
@Override
|
||||
public void killPackageDependents(String packageName) {}
|
||||
|
||||
@Override
|
||||
public boolean isFallbackLogicEnabled() {
|
||||
return mFallbackLogicEnabled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enableFallbackLogic(boolean enable) {
|
||||
mFallbackLogicEnabled = enable;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void enablePackageForAllUsers(Context context, String packageName, boolean enable) {
|
||||
for(int userId : mUsers) {
|
||||
|
||||
@@ -67,36 +67,30 @@ public class WebViewUpdateServiceTest {
|
||||
}
|
||||
|
||||
private void setupWithPackages(WebViewProviderInfo[] packages) {
|
||||
setupWithAllParameters(packages, false /* fallbackLogicEnabled */, 1 /* numRelros */,
|
||||
true /* isDebuggable */, false /* multiProcessDefault */);
|
||||
}
|
||||
|
||||
private void setupWithPackagesAndFallbackLogic(WebViewProviderInfo[] packages) {
|
||||
setupWithAllParameters(packages, true /* fallbackLogicEnabled */, 1 /* numRelros */,
|
||||
true /* isDebuggable */, false /* multiProcessDefault */);
|
||||
setupWithAllParameters(packages, 1 /* numRelros */, true /* isDebuggable */,
|
||||
false /* multiProcessDefault */);
|
||||
}
|
||||
|
||||
private void setupWithPackagesAndRelroCount(WebViewProviderInfo[] packages, int numRelros) {
|
||||
setupWithAllParameters(packages, false /* fallbackLogicEnabled */, numRelros,
|
||||
true /* isDebuggable */, false /* multiProcessDefault */);
|
||||
setupWithAllParameters(packages, numRelros, true /* isDebuggable */,
|
||||
false /* multiProcessDefault */);
|
||||
}
|
||||
|
||||
private void setupWithPackagesNonDebuggable(WebViewProviderInfo[] packages) {
|
||||
setupWithAllParameters(packages, false /* fallbackLogicEnabled */, 1 /* numRelros */,
|
||||
false /* isDebuggable */, false /* multiProcessDefault */);
|
||||
setupWithAllParameters(packages, 1 /* numRelros */, false /* isDebuggable */,
|
||||
false /* multiProcessDefault */);
|
||||
}
|
||||
|
||||
private void setupWithPackagesAndMultiProcess(WebViewProviderInfo[] packages,
|
||||
boolean multiProcessDefault) {
|
||||
setupWithAllParameters(packages, false /* fallbackLogicEnabled */, 1 /* numRelros */,
|
||||
true /* isDebuggable */, multiProcessDefault);
|
||||
setupWithAllParameters(packages, 1 /* numRelros */, true /* isDebuggable */,
|
||||
multiProcessDefault);
|
||||
}
|
||||
|
||||
private void setupWithAllParameters(WebViewProviderInfo[] packages,
|
||||
boolean fallbackLogicEnabled, int numRelros, boolean isDebuggable,
|
||||
boolean multiProcessDefault) {
|
||||
TestSystemImpl testing = new TestSystemImpl(packages, fallbackLogicEnabled, numRelros,
|
||||
isDebuggable, multiProcessDefault);
|
||||
private void setupWithAllParameters(WebViewProviderInfo[] packages, int numRelros,
|
||||
boolean isDebuggable, boolean multiProcessDefault) {
|
||||
TestSystemImpl testing = new TestSystemImpl(packages, numRelros, isDebuggable,
|
||||
multiProcessDefault);
|
||||
mTestSystemImpl = Mockito.spy(testing);
|
||||
mWebViewUpdateServiceImpl =
|
||||
new WebViewUpdateServiceImpl(null /*Context*/, mTestSystemImpl);
|
||||
@@ -514,49 +508,29 @@ public class WebViewUpdateServiceTest {
|
||||
}
|
||||
|
||||
/**
|
||||
* Scenario for testing migrating away from the fallback logic.
|
||||
* We start with a primary package that's a disabled fallback, and an enabled secondary,
|
||||
* so that the fallback being re-enabled will cause a provider switch, as that covers
|
||||
* the most complex case.
|
||||
* Scenario for testing re-enabling a fallback package.
|
||||
*/
|
||||
@Test
|
||||
public void testFallbackLogicMigration() {
|
||||
String primaryPackage = "primary";
|
||||
String secondaryPackage = "secondary";
|
||||
public void testFallbackPackageEnabling() {
|
||||
String testPackage = "testFallback";
|
||||
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
|
||||
new WebViewProviderInfo(
|
||||
primaryPackage, "", true /* default available */, true /* fallback */, null),
|
||||
new WebViewProviderInfo(
|
||||
secondaryPackage, "", true /* default available */, false /* fallback */,
|
||||
null)};
|
||||
setupWithPackagesAndFallbackLogic(packages);
|
||||
testPackage, "", true /* default available */, true /* fallback */, null)};
|
||||
setupWithPackages(packages);
|
||||
mTestSystemImpl.setPackageInfo(
|
||||
createPackageInfo(primaryPackage, false /* enabled */ , true /* valid */,
|
||||
true /* installed */));
|
||||
mTestSystemImpl.setPackageInfo(
|
||||
createPackageInfo(secondaryPackage, true /* enabled */ , true /* valid */,
|
||||
createPackageInfo(testPackage, false /* enabled */ , true /* valid */,
|
||||
true /* installed */));
|
||||
|
||||
// Check that the boot time logic re-enables and chooses the primary, and disables the
|
||||
// fallback logic.
|
||||
// Check that the boot time logic re-enables the fallback package.
|
||||
runWebViewBootPreparationOnMainSync();
|
||||
Mockito.verify(mTestSystemImpl).enablePackageForAllUsers(
|
||||
Matchers.anyObject(), Mockito.eq(primaryPackage), Mockito.eq(true));
|
||||
checkPreparationPhasesForPackage(primaryPackage, 1);
|
||||
assertFalse(mTestSystemImpl.isFallbackLogicEnabled());
|
||||
Matchers.anyObject(), Mockito.eq(testPackage), Mockito.eq(true));
|
||||
|
||||
// Disable primary again
|
||||
mTestSystemImpl.setPackageInfo(createPackageInfo(primaryPackage, false /* enabled */,
|
||||
true /* valid */, true /* installed */));
|
||||
mWebViewUpdateServiceImpl.packageStateChanged(primaryPackage,
|
||||
WebViewUpdateService.PACKAGE_CHANGED, TestSystemImpl.PRIMARY_USER_ID);
|
||||
checkPreparationPhasesForPackage(secondaryPackage, 1);
|
||||
|
||||
// Run boot logic again and check that we didn't re-enable the primary a second time.
|
||||
runWebViewBootPreparationOnMainSync();
|
||||
Mockito.verify(mTestSystemImpl, Mockito.times(1)).enablePackageForAllUsers(
|
||||
Matchers.anyObject(), Mockito.eq(primaryPackage), Mockito.eq(true));
|
||||
checkPreparationPhasesForPackage(secondaryPackage, 2);
|
||||
// Fake the message about the enabling having changed the package state,
|
||||
// and check we now use that package.
|
||||
mWebViewUpdateServiceImpl.packageStateChanged(
|
||||
testPackage, WebViewUpdateService.PACKAGE_CHANGED, TestSystemImpl.PRIMARY_USER_ID);
|
||||
checkPreparationPhasesForPackage(testPackage, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user