Merge "Remove WebView fallback logic migration code."

This commit is contained in:
TreeHugger Robot
2020-10-22 00:01:57 +00:00
committed by Android (Google) Code Review
8 changed files with 28 additions and 119 deletions

View File

@@ -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).

View File

@@ -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);

View File

@@ -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,

View File

@@ -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);

View File

@@ -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();

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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);
}
/**