summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/IWebViewUpdateService.aidl5
-rw-r--r--services/core/java/com/android/server/webkit/SystemImpl.java36
-rw-r--r--services/core/java/com/android/server/webkit/SystemInterface.java3
-rw-r--r--services/core/java/com/android/server/webkit/WebViewUpdateService.java23
-rw-r--r--services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java133
-rw-r--r--services/core/java/com/android/server/webkit/WebViewUpdateServiceShellCommand.java18
-rw-r--r--services/core/java/com/android/server/webkit/WebViewUpdater.java28
-rw-r--r--services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java8
-rw-r--r--services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java390
9 files changed, 147 insertions, 497 deletions
diff --git a/core/java/android/webkit/IWebViewUpdateService.aidl b/core/java/android/webkit/IWebViewUpdateService.aidl
index 10cfea166abd..6e3887fa7381 100644
--- a/core/java/android/webkit/IWebViewUpdateService.aidl
+++ b/core/java/android/webkit/IWebViewUpdateService.aidl
@@ -78,11 +78,6 @@ interface IWebViewUpdateService {
boolean isFallbackPackage(String packageName);
/**
- * Enable or disable the WebView package fallback mechanism.
- */
- void enableFallbackLogic(boolean enable);
-
- /**
* Used by Settings to determine whether multiprocess is enabled.
*/
boolean isMultiProcessEnabled();
diff --git a/services/core/java/com/android/server/webkit/SystemImpl.java b/services/core/java/com/android/server/webkit/SystemImpl.java
index 4aa2b3722749..56a6c3cb99b2 100644
--- a/services/core/java/com/android/server/webkit/SystemImpl.java
+++ b/services/core/java/com/android/server/webkit/SystemImpl.java
@@ -19,19 +19,15 @@ package com.android.server.webkit;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageDeleteObserver;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
import android.content.res.XmlResourceParser;
-import android.database.ContentObserver;
import android.os.Build;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
-import android.provider.Settings.Global;
import android.provider.Settings;
import android.util.AndroidRuntimeException;
import android.util.Log;
@@ -42,12 +38,12 @@ import android.webkit.WebViewZygote;
import com.android.internal.util.XmlUtils;
+import org.xmlpull.v1.XmlPullParserException;
+
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
-import org.xmlpull.v1.XmlPullParserException;
-
/**
* Default implementation for the WebView preparation Utility interface.
* @hide
@@ -77,7 +73,6 @@ public class SystemImpl implements SystemInterface {
private SystemImpl() {
int numFallbackPackages = 0;
int numAvailableByDefaultPackages = 0;
- int numAvByDefaultAndNotFallback = 0;
XmlResourceParser parser = null;
List<WebViewProviderInfo> webViewProviders = new ArrayList<WebViewProviderInfo>();
try {
@@ -121,9 +116,6 @@ public class SystemImpl implements SystemInterface {
}
if (currentProvider.availableByDefault) {
numAvailableByDefaultPackages++;
- if (!currentProvider.isFallback) {
- numAvByDefaultAndNotFallback++;
- }
}
webViewProviders.add(currentProvider);
}
@@ -140,10 +132,6 @@ public class SystemImpl implements SystemInterface {
throw new AndroidRuntimeException("There must be at least one WebView package "
+ "that is available by default");
}
- if (numAvByDefaultAndNotFallback == 0) {
- throw new AndroidRuntimeException("There must be at least one WebView package "
- + "that is available by default and not a fallback");
- }
mWebViewProviderPackages =
webViewProviders.toArray(new WebViewProviderInfo[webViewProviders.size()]);
}
@@ -222,23 +210,6 @@ public class SystemImpl implements SystemInterface {
}
@Override
- public void uninstallAndDisablePackageForAllUsers(Context context, String packageName) {
- enablePackageForAllUsers(context, packageName, false);
- try {
- PackageManager pm = AppGlobals.getInitialApplication().getPackageManager();
- ApplicationInfo applicationInfo = pm.getApplicationInfo(packageName, 0);
- if (applicationInfo != null && applicationInfo.isUpdatedSystemApp()) {
- pm.deletePackage(packageName, new IPackageDeleteObserver.Stub() {
- public void packageDeleted(String packageName, int returnCode) {
- enablePackageForAllUsers(context, packageName, false);
- }
- }, PackageManager.DELETE_SYSTEM_APP | PackageManager.DELETE_ALL_USERS);
- }
- } catch (NameNotFoundException e) {
- }
- }
-
- @Override
public void enablePackageForAllUsers(Context context, String packageName, boolean enable) {
UserManager userManager = (UserManager)context.getSystemService(Context.USER_SERVICE);
for(UserInfo userInfo : userManager.getUsers()) {
@@ -246,8 +217,7 @@ public class SystemImpl implements SystemInterface {
}
}
- @Override
- public void enablePackageForUser(String packageName, boolean enable, int userId) {
+ private void enablePackageForUser(String packageName, boolean enable, int userId) {
try {
AppGlobals.getPackageManager().setApplicationEnabledSetting(
packageName,
diff --git a/services/core/java/com/android/server/webkit/SystemInterface.java b/services/core/java/com/android/server/webkit/SystemInterface.java
index 405fe7d41e61..3fb52790621a 100644
--- a/services/core/java/com/android/server/webkit/SystemInterface.java
+++ b/services/core/java/com/android/server/webkit/SystemInterface.java
@@ -19,7 +19,6 @@ package com.android.server.webkit;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
-import android.database.ContentObserver;
import android.webkit.UserPackage;
import android.webkit.WebViewProviderInfo;
@@ -45,9 +44,7 @@ public interface SystemInterface {
public boolean isFallbackLogicEnabled();
public void enableFallbackLogic(boolean enable);
- public void uninstallAndDisablePackageForAllUsers(Context context, String packageName);
public void enablePackageForAllUsers(Context context, String packageName, boolean enable);
- public void enablePackageForUser(String packageName, boolean enable, int userId);
public boolean systemIsDebuggable();
public PackageInfo getPackageInfoForProvider(WebViewProviderInfo configInfo)
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateService.java b/services/core/java/com/android/server/webkit/WebViewUpdateService.java
index d7458f2f6e1a..359b32544013 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdateService.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateService.java
@@ -242,28 +242,7 @@ public class WebViewUpdateService extends SystemService {
@Override // Binder call
public boolean isFallbackPackage(String packageName) {
- return WebViewUpdateService.this.mImpl.isFallbackPackage(packageName);
- }
-
- @Override // Binder call
- public void enableFallbackLogic(boolean enable) {
- if (getContext().checkCallingPermission(
- android.Manifest.permission.WRITE_SECURE_SETTINGS)
- != PackageManager.PERMISSION_GRANTED) {
- String msg = "Permission Denial: enableFallbackLogic() from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " requires " + android.Manifest.permission.WRITE_SECURE_SETTINGS;
- Slog.w(TAG, msg);
- throw new SecurityException(msg);
- }
-
- long callingId = Binder.clearCallingIdentity();
- try {
- WebViewUpdateService.this.mImpl.enableFallbackLogic(enable);
- } finally {
- Binder.restoreCallingIdentity(callingId);
- }
+ return false;
}
@Override // Binder call
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
index d4949b6893d7..f704c30402d3 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java
@@ -16,48 +16,36 @@
package com.android.server.webkit;
import android.content.Context;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
-import android.content.pm.Signature;
import android.os.UserHandle;
-import android.util.Slog;
-import android.webkit.UserPackage;
import android.webkit.WebViewProviderInfo;
import android.webkit.WebViewProviderResponse;
import java.io.PrintWriter;
-import java.lang.Integer;
-import java.util.List;
/**
* Implementation of the WebViewUpdateService.
* This class doesn't depend on the android system like the actual Service does and can be used
* directly by tests (as long as they implement a SystemInterface).
*
- * This class implements two main features - handling WebView fallback packages and keeping track
- * of, and preparing, the current WebView implementation. The fallback mechanism is meant to be
- * uncoupled from the rest of the WebView preparation and does not store any state. The code for
- * choosing and preparing a WebView implementation needs to keep track of a couple of different
- * things such as what package is used as WebView implementation.
+ * This class keeps track of and prepares the current WebView implementation, and needs to keep
+ * track of a couple of different things such as what package is used as WebView implementation.
*
* The public methods in this class are accessed from WebViewUpdateService either on the UI thread
- * or on one of multiple Binder threads. This means that the code in this class needs to be
- * thread-safe. The fallback mechanism shares (almost) no information between threads which makes
- * it easier to argue about thread-safety (in theory, if timed badly, the fallback mechanism can
- * incorrectly enable/disable a fallback package but that fault will be corrected when we later
- * receive an intent for that enabling/disabling). On the other hand, the WebView preparation code
- * shares state between threads meaning that code that chooses a new WebView implementation or
- * checks which implementation is being used needs to hold a lock.
+ * or on one of multiple Binder threads. The WebView preparation code shares state between threads
+ * meaning that code that chooses a new WebView implementation or checks which implementation is
+ * being used needs to hold a lock.
*
* The WebViewUpdateService can be accessed in a couple of different ways.
* 1. It is started from the SystemServer at boot - at that point we just initiate some state such
* 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
- * enable/disable fallback packages and then choose WebView implementation for the first time.
+ * migrate away from the old fallback logic if necessary and then 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 enabling/disabling
- * fallback packages and changing WebView implementation.
+ * are received and processed on the UI thread. Each intent can result in changing WebView
+ * implementation.
* 4. The update service can be reached through Binder calls which are handled on specific binder
* threads. These calls can be made from any process. Generally they are used for changing WebView
* implementation (from Settings), getting information about the current WebView implementation (for
@@ -86,35 +74,15 @@ public class WebViewUpdateServiceImpl {
// We don't early out here in different cases where we could potentially early-out (e.g. if
// we receive PACKAGE_CHANGED for another user than the system user) since that would
// complicate this logic further and open up for more edge cases.
- updateFallbackStateOnPackageChange(packageName, changedState);
mWebViewUpdater.packageStateChanged(packageName, changedState);
}
void prepareWebViewInSystemServer() {
- updateFallbackStateOnBoot();
+ migrateFallbackStateOnBoot();
mWebViewUpdater.prepareWebViewInSystemServer();
mSystemInterface.notifyZygote(isMultiProcessEnabled());
}
- private boolean existsValidNonFallbackProvider(WebViewProviderInfo[] providers) {
- for (WebViewProviderInfo provider : providers) {
- if (provider.availableByDefault && !provider.isFallback) {
- // userPackages can contain null objects.
- List<UserPackage> userPackages =
- mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider);
- if (WebViewUpdater.isInstalledAndEnabledForAllUsers(userPackages) &&
- // Checking validity of the package for the system user (rather than all
- // users) since package validity depends not on the user but on the package
- // itself.
- mWebViewUpdater.isValidProvider(provider,
- userPackages.get(UserHandle.USER_SYSTEM).getPackageInfo())) {
- return true;
- }
- }
- }
- return false;
- }
-
void handleNewUser(int userId) {
// The system user is always started at boot, and by that point we have already run one
// round of the package-changing logic (through prepareWebViewInSystemServer()), so early
@@ -128,14 +96,11 @@ public class WebViewUpdateServiceImpl {
}
/**
- * Called when a user was added or removed to ensure fallback logic and WebView preparation are
- * triggered. This has to be done since the WebView package we use depends on the enabled-state
+ * Called when a user was added or removed to ensure WebView preparation is triggered.
+ * This has to be done since the WebView package we use depends on the enabled-state
* of packages for all users (so adding or removing a user might cause us to change package).
*/
private void handleUserChange() {
- if (mSystemInterface.isFallbackLogicEnabled()) {
- updateFallbackState(mSystemInterface.getWebViewPackages());
- }
// Potentially trigger package-changing logic.
mWebViewUpdater.updateCurrentWebViewPackage(null);
}
@@ -164,60 +129,22 @@ public class WebViewUpdateServiceImpl {
return mWebViewUpdater.getCurrentWebViewPackage();
}
- void enableFallbackLogic(boolean enable) {
- mSystemInterface.enableFallbackLogic(enable);
- }
-
- private void updateFallbackStateOnBoot() {
- if (!mSystemInterface.isFallbackLogicEnabled()) return;
-
- WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages();
- updateFallbackState(webviewProviders);
- }
-
/**
- * Handle the enabled-state of our fallback package, i.e. if there exists some non-fallback
- * package that is valid (and available by default) then disable the fallback package,
- * otherwise, enable the fallback package.
+ * 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 updateFallbackStateOnPackageChange(String changedPackage, int changedState) {
+ private void migrateFallbackStateOnBoot() {
if (!mSystemInterface.isFallbackLogicEnabled()) return;
WebViewProviderInfo[] webviewProviders = mSystemInterface.getWebViewPackages();
-
- // A package was changed / updated / downgraded, early out if it is not one of the
- // webview packages that are available by default.
- boolean changedPackageAvailableByDefault = false;
- for (WebViewProviderInfo provider : webviewProviders) {
- if (provider.packageName.equals(changedPackage)) {
- if (provider.availableByDefault) {
- changedPackageAvailableByDefault = true;
- }
- break;
- }
- }
- if (!changedPackageAvailableByDefault) return;
- updateFallbackState(webviewProviders);
- }
-
- private void updateFallbackState(WebViewProviderInfo[] webviewProviders) {
- // If there exists a valid and enabled non-fallback package - disable the fallback
- // package, otherwise, enable it.
WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders);
- if (fallbackProvider == null) return;
- boolean existsValidNonFallbackProvider = existsValidNonFallbackProvider(webviewProviders);
-
- List<UserPackage> userPackages =
- mSystemInterface.getPackageInfoForProviderAllUsers(mContext, fallbackProvider);
- if (existsValidNonFallbackProvider && !isDisabledForAllUsers(userPackages)) {
- mSystemInterface.uninstallAndDisablePackageForAllUsers(mContext,
- fallbackProvider.packageName);
- } else if (!existsValidNonFallbackProvider
- && !WebViewUpdater.isInstalledAndEnabledForAllUsers(userPackages)) {
- // Enable the fallback package for all users.
- mSystemInterface.enablePackageForAllUsers(mContext,
- fallbackProvider.packageName, true);
+ if (fallbackProvider != null) {
+ mSystemInterface.enablePackageForAllUsers(mContext, fallbackProvider.packageName, true);
}
+ mSystemInterface.enableFallbackLogic(false);
}
/**
@@ -232,15 +159,6 @@ public class WebViewUpdateServiceImpl {
return null;
}
- boolean isFallbackPackage(String packageName) {
- if (packageName == null || !mSystemInterface.isFallbackLogicEnabled()) return false;
-
- WebViewProviderInfo[] webviewPackages = mSystemInterface.getWebViewPackages();
- WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewPackages);
- return (fallbackProvider != null
- && packageName.equals(fallbackProvider.packageName));
- }
-
boolean isMultiProcessEnabled() {
int settingValue = mSystemInterface.getMultiProcessSetting(mContext);
if (mSystemInterface.isMultiProcessDefaultEnabled()) {
@@ -262,15 +180,6 @@ public class WebViewUpdateServiceImpl {
}
}
- private static boolean isDisabledForAllUsers(List<UserPackage> userPackages) {
- for (UserPackage userPackage : userPackages) {
- if (userPackage.getPackageInfo() != null && userPackage.isEnabledPackage()) {
- return false;
- }
- }
- return true;
- }
-
/**
* Dump the state of this Service.
*/
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceShellCommand.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceShellCommand.java
index 3199ed47503e..7529c4157101 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceShellCommand.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceShellCommand.java
@@ -37,10 +37,6 @@ class WebViewUpdateServiceShellCommand extends ShellCommand {
final PrintWriter pw = getOutPrintWriter();
try {
switch(cmd) {
- case "enable-redundant-packages":
- return enableFallbackLogic(false);
- case "disable-redundant-packages":
- return enableFallbackLogic(true);
case "set-webview-implementation":
return setWebViewImplementation();
case "enable-multiprocess":
@@ -56,13 +52,6 @@ class WebViewUpdateServiceShellCommand extends ShellCommand {
return -1;
}
- private int enableFallbackLogic(boolean enable) throws RemoteException {
- final PrintWriter pw = getOutPrintWriter();
- mInterface.enableFallbackLogic(enable);
- pw.println("Success");
- return 0;
- }
-
private int setWebViewImplementation() throws RemoteException {
final PrintWriter pw = getOutPrintWriter();
String shellChosenPackage = getNextArg();
@@ -104,13 +93,6 @@ class WebViewUpdateServiceShellCommand extends ShellCommand {
pw.println(" help");
pw.println(" Print this help text.");
pw.println("");
- pw.println(" enable-redundant-packages");
- pw.println(" Allow a fallback package to be installed and enabled even when a");
- pw.println(" more-preferred package is available. This command is useful when testing");
- pw.println(" fallback packages.");
- pw.println(" disable-redundant-packages");
- pw.println(" Disallow installing and enabling fallback packages when a more-preferred");
- pw.println(" package is available.");
helpSetWebViewImplementation();
pw.println(" enable-multiprocess");
pw.println(" Enable multi-process mode for WebView");
diff --git a/services/core/java/com/android/server/webkit/WebViewUpdater.java b/services/core/java/com/android/server/webkit/WebViewUpdater.java
index f270715175b2..a460040d0a60 100644
--- a/services/core/java/com/android/server/webkit/WebViewUpdater.java
+++ b/services/core/java/com/android/server/webkit/WebViewUpdater.java
@@ -20,7 +20,6 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.os.UserHandle;
-import android.util.Base64;
import android.util.Slog;
import android.webkit.UserPackage;
import android.webkit.WebViewFactory;
@@ -29,7 +28,6 @@ import android.webkit.WebViewProviderResponse;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
/**
@@ -140,13 +138,17 @@ class WebViewUpdater {
try {
synchronized(mLock) {
mCurrentWebViewPackage = findPreferredWebViewPackage();
- // Don't persist the user-chosen setting across boots if the package being
- // chosen is not used (could be disabled or uninstalled) so that the user won't
- // be surprised by the device switching to using a certain webview package,
- // that was uninstalled/disabled a long time ago, if it is installed/enabled
- // again.
- mSystemInterface.updateUserSetting(mContext,
- mCurrentWebViewPackage.packageName);
+ String userSetting = mSystemInterface.getUserChosenWebViewProvider(mContext);
+ if (userSetting != null
+ && !userSetting.equals(mCurrentWebViewPackage.packageName)) {
+ // Don't persist the user-chosen setting across boots if the package being
+ // chosen is not used (could be disabled or uninstalled) so that the user won't
+ // be surprised by the device switching to using a certain webview package,
+ // that was uninstalled/disabled a long time ago, if it is installed/enabled
+ // again.
+ mSystemInterface.updateUserSetting(mContext,
+ mCurrentWebViewPackage.packageName);
+ }
onWebViewProviderChanged(mCurrentWebViewPackage);
}
} catch (Throwable t) {
@@ -470,9 +472,9 @@ class WebViewUpdater {
/**
* Gets the minimum version code allowed for a valid provider. It is the minimum versionCode
- * of all available-by-default and non-fallback WebView provider packages. If there is no
- * such WebView provider package on the system, then return -1, which means all positive
- * versionCode WebView packages are accepted.
+ * of all available-by-default WebView provider packages. If there is no such WebView provider
+ * package on the system, then return -1, which means all positive versionCode WebView packages
+ * are accepted.
*
* Note that this is a private method in WebViewUpdater that handles a variable
* (mMinimumVersionCode) which is shared between threads. Furthermore, this method does not
@@ -485,7 +487,7 @@ class WebViewUpdater {
long minimumVersionCode = -1;
for (WebViewProviderInfo provider : mSystemInterface.getWebViewPackages()) {
- if (provider.availableByDefault && !provider.isFallback) {
+ if (provider.availableByDefault) {
try {
long versionCode =
mSystemInterface.getFactoryPackageVersion(provider.packageName);
diff --git a/services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java b/services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java
index 26853a9a7fa5..3f687c81ad29 100644
--- a/services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java
+++ b/services/tests/servicestests/src/com/android/server/webkit/TestSystemImpl.java
@@ -88,19 +88,13 @@ public class TestSystemImpl implements SystemInterface {
}
@Override
- public void uninstallAndDisablePackageForAllUsers(Context context, String packageName) {
- enablePackageForAllUsers(context, packageName, false);
- }
-
- @Override
public void enablePackageForAllUsers(Context context, String packageName, boolean enable) {
for(int userId : mUsers) {
enablePackageForUser(packageName, enable, userId);
}
}
- @Override
- public void enablePackageForUser(String packageName, boolean enable, int userId) {
+ private void enablePackageForUser(String packageName, boolean enable, int userId) {
Map<Integer, PackageInfo> userPackages = mPackages.get(packageName);
if (userPackages == null) {
throw new IllegalArgumentException("There is no package called " + packageName);
diff --git a/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java b/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java
index bf89cd064812..2e60866b9a5b 100644
--- a/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java
@@ -41,7 +41,6 @@ import org.mockito.ArgumentMatcher;
import org.mockito.Matchers;
import org.mockito.Mockito;
-import java.lang.Integer;
import java.util.concurrent.CountDownLatch;
/**
@@ -68,27 +67,32 @@ public class WebViewUpdateServiceTest {
}
private void setupWithPackages(WebViewProviderInfo[] packages) {
- setupWithPackages(packages, true);
+ setupWithAllParameters(packages, false /* fallbackLogicEnabled */, 1 /* numRelros */,
+ true /* isDebuggable */, false /* multiProcessDefault */);
}
- private void setupWithPackages(WebViewProviderInfo[] packages,
- boolean fallbackLogicEnabled) {
- setupWithPackages(packages, fallbackLogicEnabled, 1);
+ private void setupWithPackagesAndFallbackLogic(WebViewProviderInfo[] packages) {
+ setupWithAllParameters(packages, true /* fallbackLogicEnabled */, 1 /* numRelros */,
+ true /* isDebuggable */, false /* multiProcessDefault */);
}
- private void setupWithPackages(WebViewProviderInfo[] packages,
- boolean fallbackLogicEnabled, int numRelros) {
- setupWithPackages(packages, fallbackLogicEnabled, numRelros,
- true /* isDebuggable == true -> don't check package signatures */);
+ private void setupWithPackagesAndRelroCount(WebViewProviderInfo[] packages, int numRelros) {
+ setupWithAllParameters(packages, false /* fallbackLogicEnabled */, numRelros,
+ true /* isDebuggable */, false /* multiProcessDefault */);
}
- private void setupWithPackages(WebViewProviderInfo[] packages,
- boolean fallbackLogicEnabled, int numRelros, boolean isDebuggable) {
- setupWithPackages(packages, fallbackLogicEnabled, numRelros, isDebuggable,
- false /* multiProcessDefault */);
+ private void setupWithPackagesNonDebuggable(WebViewProviderInfo[] packages) {
+ setupWithAllParameters(packages, false /* fallbackLogicEnabled */, 1 /* numRelros */,
+ false /* isDebuggable */, false /* multiProcessDefault */);
}
- private void setupWithPackages(WebViewProviderInfo[] packages,
+ private void setupWithPackagesAndMultiProcess(WebViewProviderInfo[] packages,
+ boolean multiProcessDefault) {
+ setupWithAllParameters(packages, false /* fallbackLogicEnabled */, 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,
@@ -119,7 +123,7 @@ public class WebViewUpdateServiceTest {
private void checkCertainPackageUsedAfterWebViewBootPreparation(String expectedProviderName,
WebViewProviderInfo[] webviewPackages, int numRelros) {
- setupWithPackages(webviewPackages, true, numRelros);
+ setupWithPackagesAndRelroCount(webviewPackages, numRelros);
// Add (enabled and valid) package infos for each provider
setEnabledAndValidPackageInfos(webviewPackages);
@@ -289,8 +293,7 @@ public class WebViewUpdateServiceTest {
Base64.encodeToString(
validSignature.toByteArray(), Base64.DEFAULT)})
};
- setupWithPackages(packages, true /* fallback logic enabled */, 1 /* numRelros */,
- false /* isDebuggable */);
+ setupWithPackagesNonDebuggable(packages);
mTestSystemImpl.setPackageInfo(createPackageInfo(invalidPackage, true /* enabled */,
true /* valid */, true /* installed */, new Signature[]{invalidPackageSignature}
, 0 /* updateTime */));
@@ -510,82 +513,75 @@ 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.
+ */
@Test
- public void testRunFallbackLogicIfEnabled() {
- checkFallbackLogicBeingRun(true);
- }
-
- @Test
- public void testDontRunFallbackLogicIfDisabled() {
- checkFallbackLogicBeingRun(false);
- }
-
- private void checkFallbackLogicBeingRun(boolean fallbackLogicEnabled) {
+ public void testFallbackLogicMigration() {
String primaryPackage = "primary";
- String fallbackPackage = "fallback";
+ String secondaryPackage = "secondary";
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(
- primaryPackage, "", true /* default available */, false /* fallback */, null),
+ primaryPackage, "", true /* default available */, true /* fallback */, null),
new WebViewProviderInfo(
- fallbackPackage, "", true /* default available */, true /* fallback */, null)};
- setupWithPackages(packages, fallbackLogicEnabled);
- setEnabledAndValidPackageInfos(packages);
+ secondaryPackage, "", true /* default available */, false /* fallback */,
+ null)};
+ setupWithPackagesAndFallbackLogic(packages);
+ mTestSystemImpl.setPackageInfo(
+ createPackageInfo(primaryPackage, false /* enabled */ , true /* valid */,
+ true /* installed */));
+ mTestSystemImpl.setPackageInfo(
+ createPackageInfo(secondaryPackage, true /* enabled */ , true /* valid */,
+ true /* installed */));
+ // Check that the boot time logic re-enables and chooses the primary, and disables the
+ // fallback logic.
runWebViewBootPreparationOnMainSync();
- // Verify that we disable the fallback package if fallback logic enabled, and don't disable
- // the fallback package if that logic is disabled
- if (fallbackLogicEnabled) {
- Mockito.verify(mTestSystemImpl).uninstallAndDisablePackageForAllUsers(
- Matchers.anyObject(), Mockito.eq(fallbackPackage));
- } else {
- Mockito.verify(mTestSystemImpl, Mockito.never()).uninstallAndDisablePackageForAllUsers(
- Matchers.anyObject(), Matchers.anyObject());
- }
- Mockito.verify(mTestSystemImpl).onWebViewProviderChanged(
- Mockito.argThat(new IsPackageInfoWithName(primaryPackage)));
+ Mockito.verify(mTestSystemImpl).enablePackageForAllUsers(
+ Matchers.anyObject(), Mockito.eq(primaryPackage), Mockito.eq(true));
+ checkPreparationPhasesForPackage(primaryPackage, 1);
+ assertFalse(mTestSystemImpl.isFallbackLogicEnabled());
- // Enable fallback package
- mTestSystemImpl.setPackageInfo(createPackageInfo(fallbackPackage, true /* enabled */,
+ // Disable primary again
+ mTestSystemImpl.setPackageInfo(createPackageInfo(primaryPackage, false /* enabled */,
true /* valid */, true /* installed */));
- mWebViewUpdateServiceImpl.packageStateChanged(
- fallbackPackage, WebViewUpdateService.PACKAGE_CHANGED, TestSystemImpl.PRIMARY_USER_ID);
+ mWebViewUpdateServiceImpl.packageStateChanged(primaryPackage,
+ WebViewUpdateService.PACKAGE_CHANGED, TestSystemImpl.PRIMARY_USER_ID);
+ checkPreparationPhasesForPackage(secondaryPackage, 1);
- if (fallbackLogicEnabled) {
- // Check that we have now disabled the fallback package twice
- Mockito.verify(mTestSystemImpl, Mockito.times(2)).uninstallAndDisablePackageForAllUsers(
- Matchers.anyObject(), Mockito.eq(fallbackPackage));
- } else {
- // Check that we still haven't disabled any package
- Mockito.verify(mTestSystemImpl, Mockito.never()).uninstallAndDisablePackageForAllUsers(
- Matchers.anyObject(), Matchers.anyObject());
- }
+ // 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);
}
/**
- * Scenario for installing primary package when fallback enabled.
- * 1. Start with only fallback installed
- * 2. Install non-fallback
- * 3. Fallback should be disabled
+ * Scenario for installing primary package when secondary in use.
+ * 1. Start with only secondary installed
+ * 2. Install primary
+ * 3. Primary should be used
*/
@Test
- public void testInstallingNonFallbackPackage() {
+ public void testInstallingPrimaryPackage() {
String primaryPackage = "primary";
- String fallbackPackage = "fallback";
+ String secondaryPackage = "secondary";
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(
primaryPackage, "", true /* default available */, false /* fallback */, null),
new WebViewProviderInfo(
- fallbackPackage, "", true /* default available */, true /* fallback */, null)};
- setupWithPackages(packages, true /* isFallbackLogicEnabled */);
+ secondaryPackage, "", true /* default available */, false /* fallback */,
+ null)};
+ setupWithPackages(packages);
mTestSystemImpl.setPackageInfo(
- createPackageInfo(fallbackPackage, true /* enabled */ , true /* valid */,
+ createPackageInfo(secondaryPackage, true /* enabled */ , true /* valid */,
true /* installed */));
runWebViewBootPreparationOnMainSync();
- Mockito.verify(mTestSystemImpl, Mockito.never()).uninstallAndDisablePackageForAllUsers(
- Matchers.anyObject(), Matchers.anyObject());
-
- checkPreparationPhasesForPackage(fallbackPackage,
+ checkPreparationPhasesForPackage(secondaryPackage,
1 /* first preparation for this package*/);
// Install primary package
@@ -595,24 +591,22 @@ public class WebViewUpdateServiceTest {
mWebViewUpdateServiceImpl.packageStateChanged(primaryPackage,
WebViewUpdateService.PACKAGE_ADDED_REPLACED, TestSystemImpl.PRIMARY_USER_ID);
- // Verify fallback disabled, primary package used as provider, and fallback package killed
- Mockito.verify(mTestSystemImpl).uninstallAndDisablePackageForAllUsers(
- Matchers.anyObject(), Mockito.eq(fallbackPackage));
+ // Verify primary package used as provider, and secondary package killed
checkPreparationPhasesForPackage(primaryPackage, 1 /* first preparation for this package*/);
- Mockito.verify(mTestSystemImpl).killPackageDependents(Mockito.eq(fallbackPackage));
+ Mockito.verify(mTestSystemImpl).killPackageDependents(Mockito.eq(secondaryPackage));
}
@Test
- public void testFallbackChangesEnabledStateSingleUser() {
+ public void testRemovingPrimarySelectsSecondarySingleUser() {
for (PackageRemovalType removalType : REMOVAL_TYPES) {
- checkFallbackChangesEnabledState(false /* multiUser */, removalType);
+ checkRemovingPrimarySelectsSecondary(false /* multiUser */, removalType);
}
}
@Test
- public void testFallbackChangesEnabledStateMultiUser() {
+ public void testRemovingPrimarySelectsSecondaryMultiUser() {
for (PackageRemovalType removalType : REMOVAL_TYPES) {
- checkFallbackChangesEnabledState(true /* multiUser */, removalType);
+ checkRemovingPrimarySelectsSecondary(true /* multiUser */, removalType);
}
}
@@ -626,16 +620,17 @@ public class WebViewUpdateServiceTest {
private PackageRemovalType[] REMOVAL_TYPES = PackageRemovalType.class.getEnumConstants();
- public void checkFallbackChangesEnabledState(boolean multiUser,
+ public void checkRemovingPrimarySelectsSecondary(boolean multiUser,
PackageRemovalType removalType) {
String primaryPackage = "primary";
- String fallbackPackage = "fallback";
+ String secondaryPackage = "secondary";
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(
primaryPackage, "", true /* default available */, false /* fallback */, null),
new WebViewProviderInfo(
- fallbackPackage, "", true /* default available */, true /* fallback */, null)};
- setupWithPackages(packages, true /* fallbackLogicEnabled */);
+ secondaryPackage, "", true /* default available */, false /* fallback */,
+ null)};
+ setupWithPackages(packages);
int secondaryUserId = 10;
int userIdToChangePackageFor = multiUser ? secondaryUserId : TestSystemImpl.PRIMARY_USER_ID;
if (multiUser) {
@@ -645,18 +640,12 @@ public class WebViewUpdateServiceTest {
setEnabledAndValidPackageInfosForUser(TestSystemImpl.PRIMARY_USER_ID, packages);
runWebViewBootPreparationOnMainSync();
-
- // Verify fallback disabled at boot when primary package enabled
- checkEnablePackageForUserCalled(fallbackPackage, false, multiUser
- ? new int[] {TestSystemImpl.PRIMARY_USER_ID, secondaryUserId}
- : new int[] {TestSystemImpl.PRIMARY_USER_ID}, 1 /* numUsages */);
-
checkPreparationPhasesForPackage(primaryPackage, 1);
boolean enabled = !(removalType == PackageRemovalType.DISABLE);
boolean installed = !(removalType == PackageRemovalType.UNINSTALL);
boolean hidden = (removalType == PackageRemovalType.HIDE);
- // Disable primary package and ensure fallback becomes enabled and used
+ // Disable primary package and ensure secondary becomes used
mTestSystemImpl.setPackageInfoForUser(userIdToChangePackageFor,
createPackageInfo(primaryPackage, enabled /* enabled */, true /* valid */,
installed /* installed */, null /* signature */, 0 /* updateTime */,
@@ -665,15 +654,9 @@ public class WebViewUpdateServiceTest {
removalType == PackageRemovalType.DISABLE
? WebViewUpdateService.PACKAGE_CHANGED : WebViewUpdateService.PACKAGE_REMOVED,
userIdToChangePackageFor); // USER ID
+ checkPreparationPhasesForPackage(secondaryPackage, 1);
- checkEnablePackageForUserCalled(fallbackPackage, true, multiUser
- ? new int[] {TestSystemImpl.PRIMARY_USER_ID, secondaryUserId}
- : new int[] {TestSystemImpl.PRIMARY_USER_ID}, 1 /* numUsages */);
-
- checkPreparationPhasesForPackage(fallbackPackage, 1);
-
-
- // Again enable primary package and verify primary is used and fallback becomes disabled
+ // Again enable primary package and verify primary is used
mTestSystemImpl.setPackageInfoForUser(userIdToChangePackageFor,
createPackageInfo(primaryPackage, true /* enabled */, true /* valid */,
true /* installed */));
@@ -681,60 +664,9 @@ public class WebViewUpdateServiceTest {
removalType == PackageRemovalType.DISABLE
? WebViewUpdateService.PACKAGE_CHANGED : WebViewUpdateService.PACKAGE_ADDED,
userIdToChangePackageFor);
-
- // Verify fallback is disabled a second time when primary package becomes enabled
- checkEnablePackageForUserCalled(fallbackPackage, false, multiUser
- ? new int[] {TestSystemImpl.PRIMARY_USER_ID, secondaryUserId}
- : new int[] {TestSystemImpl.PRIMARY_USER_ID}, 2 /* numUsages */);
-
checkPreparationPhasesForPackage(primaryPackage, 2);
}
- private void checkEnablePackageForUserCalled(String packageName, boolean expectEnabled,
- int[] userIds, int numUsages) {
- for (int userId : userIds) {
- Mockito.verify(mTestSystemImpl, Mockito.times(numUsages)).enablePackageForUser(
- Mockito.eq(packageName), Mockito.eq(expectEnabled), Mockito.eq(userId));
- }
- }
-
- @Test
- public void testAddUserWhenFallbackLogicEnabled() {
- checkAddingNewUser(true);
- }
-
- @Test
- public void testAddUserWhenFallbackLogicDisabled() {
- checkAddingNewUser(false);
- }
-
- public void checkAddingNewUser(boolean fallbackLogicEnabled) {
- String primaryPackage = "primary";
- String fallbackPackage = "fallback";
- WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
- new WebViewProviderInfo(
- primaryPackage, "", true /* default available */, false /* fallback */, null),
- new WebViewProviderInfo(
- fallbackPackage, "", true /* default available */, true /* fallback */, null)};
- setupWithPackages(packages, fallbackLogicEnabled);
- setEnabledAndValidPackageInfosForUser(TestSystemImpl.PRIMARY_USER_ID, packages);
- int newUser = 100;
- mTestSystemImpl.addUser(newUser);
- setEnabledAndValidPackageInfosForUser(newUser, packages);
- mWebViewUpdateServiceImpl.handleNewUser(newUser);
- if (fallbackLogicEnabled) {
- // Verify fallback package becomes disabled for new user
- Mockito.verify(mTestSystemImpl).enablePackageForUser(
- Mockito.eq(fallbackPackage), Mockito.eq(false) /* enable */,
- Mockito.eq(newUser));
- } else {
- // Verify that we don't disable fallback for new user
- Mockito.verify(mTestSystemImpl, Mockito.never()).enablePackageForUser(
- Mockito.anyObject(), Matchers.anyBoolean() /* enable */,
- Matchers.anyInt() /* user */);
- }
- }
-
/**
* Ensures that adding a new user for which the current WebView package is uninstalled causes a
* change of WebView provider.
@@ -742,13 +674,14 @@ public class WebViewUpdateServiceTest {
@Test
public void testAddingNewUserWithUninstalledPackage() {
String primaryPackage = "primary";
- String fallbackPackage = "fallback";
+ String secondaryPackage = "secondary";
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(
primaryPackage, "", true /* default available */, false /* fallback */, null),
new WebViewProviderInfo(
- fallbackPackage, "", true /* default available */, true /* fallback */, null)};
- setupWithPackages(packages, true /* fallbackLogicEnabled */);
+ secondaryPackage, "", true /* default available */, false /* fallback */,
+ null)};
+ setupWithPackages(packages);
setEnabledAndValidPackageInfosForUser(TestSystemImpl.PRIMARY_USER_ID, packages);
int newUser = 100;
mTestSystemImpl.addUser(newUser);
@@ -757,18 +690,10 @@ public class WebViewUpdateServiceTest {
createPackageInfo(primaryPackage, true /* enabled */, true /* valid */,
false /* installed */));
mTestSystemImpl.setPackageInfoForUser(newUser,
- createPackageInfo(fallbackPackage, false /* enabled */, true /* valid */,
+ createPackageInfo(secondaryPackage, true /* enabled */, true /* valid */,
true /* installed */));
mWebViewUpdateServiceImpl.handleNewUser(newUser);
- // Verify fallback package doesn't become disabled for the primary user.
- Mockito.verify(mTestSystemImpl, Mockito.never()).enablePackageForUser(
- Mockito.anyObject(), Mockito.eq(false) /* enable */,
- Mockito.eq(TestSystemImpl.PRIMARY_USER_ID) /* user */);
- // Verify that we enable the fallback package for the secondary user.
- Mockito.verify(mTestSystemImpl, Mockito.times(1)).enablePackageForUser(
- Mockito.eq(fallbackPackage), Mockito.eq(true) /* enable */,
- Mockito.eq(newUser) /* user */);
- checkPreparationPhasesForPackage(fallbackPackage, 1 /* numRelros */);
+ checkPreparationPhasesForPackage(secondaryPackage, 1 /* numRelros */);
}
/**
@@ -874,7 +799,8 @@ public class WebViewUpdateServiceTest {
setupWithPackages(packages);
// Only 'install' nonChosenPackage
mTestSystemImpl.setPackageInfo(
- createPackageInfo(nonChosenPackage, true /* enabled */, true /* valid */, true /* installed */));
+ createPackageInfo(nonChosenPackage, true /* enabled */, true /* valid */,
+ true /* installed */));
// Set user-chosen package
mTestSystemImpl.updateUserSetting(null, chosenPackage);
@@ -1024,7 +950,8 @@ public class WebViewUpdateServiceTest {
checkPreparationPhasesForPackage(thirdPackage, 1);
mTestSystemImpl.setPackageInfo(
- createPackageInfo(secondPackage, true /* enabled */, false /* valid */, true /* installed */));
+ createPackageInfo(secondPackage, true /* enabled */, false /* valid */,
+ true /* installed */));
// Try to switch to the invalid second package, this should result in switching to the first
// package, since that is more preferred than the third one.
@@ -1084,40 +1011,17 @@ public class WebViewUpdateServiceTest {
100000 /* candidate version */, false /* expected validity */);
}
- @Test
- public void testMinimumSystemVersionUsedFallbackIgnored() {
- checkPackageVersions(new int[]{300000, 400000, 500000, 600000, 700000} /* system versions */,
- 200000 /* candidate version */, false /* expected validity */, true /* add fallback */,
- 100000 /* fallback version */, false /* expected validity of fallback */);
- }
-
- @Test
- public void testFallbackValid() {
- checkPackageVersions(new int[]{300000, 400000, 500000, 600000, 700000} /* system versions */,
- 200000/* candidate version */, false /* expected validity */, true /* add fallback */,
- 300000 /* fallback version */, true /* expected validity of fallback */);
- }
-
- private void checkPackageVersions(int[] systemVersions, int candidateVersion,
- boolean candidateShouldBeValid) {
- checkPackageVersions(systemVersions, candidateVersion, candidateShouldBeValid,
- false, 0, false);
- }
-
/**
* Utility method for checking that package version restriction works as it should.
* I.e. that a package with lower version than the system-default is not valid and that a
* package with greater than or equal version code is considered valid.
*/
private void checkPackageVersions(int[] systemVersions, int candidateVersion,
- boolean candidateShouldBeValid, boolean addFallback, int fallbackVersion,
- boolean fallbackShouldBeValid) {
+ boolean candidateShouldBeValid) {
int numSystemPackages = systemVersions.length;
- int numFallbackPackages = (addFallback ? 1 : 0);
- int numPackages = systemVersions.length + 1 + numFallbackPackages;
+ int numPackages = systemVersions.length + 1;
String candidatePackage = "candidatePackage";
String systemPackage = "systemPackage";
- String fallbackPackage = "fallbackPackage";
// Each package needs a valid signature since we set isDebuggable to false
Signature signature = new Signature("11");
@@ -1126,8 +1030,7 @@ public class WebViewUpdateServiceTest {
// Set up config
// 1. candidatePackage
- // 2-N. default available non-fallback packages
- // N+1. default available fallback package
+ // 2-N. default available packages
WebViewProviderInfo[] packages = new WebViewProviderInfo[numPackages];
packages[0] = new WebViewProviderInfo(candidatePackage, "",
false /* available by default */, false /* fallback */,
@@ -1137,14 +1040,7 @@ public class WebViewUpdateServiceTest {
true /* available by default */, false /* fallback */,
new String[]{encodedSignatureString});
}
- if (addFallback) {
- packages[packages.length-1] = new WebViewProviderInfo(fallbackPackage, "",
- true /* available by default */, true /* fallback */,
- new String[]{encodedSignatureString});
- }
-
- setupWithPackages(packages, true /* fallback logic enabled */, 1 /* numRelros */,
- false /* isDebuggable */);
+ setupWithPackagesNonDebuggable(packages);
// Set package infos
mTestSystemImpl.setPackageInfo(
@@ -1157,12 +1053,6 @@ public class WebViewUpdateServiceTest {
true /* installed */, new Signature[]{signature}, 0 /* updateTime */,
false /* hidden */, systemVersions[n-1], true /* isSystemApp */));
}
- if (addFallback) {
- mTestSystemImpl.setPackageInfo(
- createPackageInfo(fallbackPackage, true /* enabled */, true /* valid */,
- true /* installed */, new Signature[]{signature}, 0 /* updateTime */,
- false /* hidden */, fallbackVersion, true /* isSystemApp */));
- }
WebViewProviderInfo[] validPackages = mWebViewUpdateServiceImpl.getValidWebViewPackages();
int expectedNumValidPackages = numSystemPackages;
@@ -1175,15 +1065,6 @@ public class WebViewUpdateServiceTest {
}
}
- if (fallbackShouldBeValid) {
- expectedNumValidPackages += numFallbackPackages;
- } else {
- // Ensure the fallback package is not one of the valid packages
- for(int n = 0; n < validPackages.length; n++) {
- assertFalse(fallbackPackage.equals(validPackages[n].packageName));
- }
- }
-
assertEquals(expectedNumValidPackages, validPackages.length);
runWebViewBootPreparationOnMainSync();
@@ -1212,7 +1093,7 @@ public class WebViewUpdateServiceTest {
WebViewProviderInfo[] webviewPackages = new WebViewProviderInfo[] {
new WebViewProviderInfo(testPackageName, "",
true /*default available*/, false /* fallback */, null)};
- setupWithPackages(webviewPackages, true /* fallback logic enabled */, 1 /* numRelros */);
+ setupWithPackages(webviewPackages);
mTestSystemImpl.setPackageInfo(createPackageInfo(testPackageName, true /* enabled */,
true /* valid */, false /* installed */));
@@ -1250,7 +1131,7 @@ public class WebViewUpdateServiceTest {
new WebViewProviderInfo(installedPackage, "", true /* available by default */,
false /* fallback */, null)};
- setupWithPackages(webviewPackages, true /* fallback logic enabled */, 1 /* numRelros */);
+ setupWithPackages(webviewPackages);
int secondaryUserId = 5;
if (multiUser) {
mTestSystemImpl.addUser(secondaryUserId);
@@ -1301,7 +1182,7 @@ public class WebViewUpdateServiceTest {
new WebViewProviderInfo(installedPackage, "", true /* available by default */,
false /* fallback */, null)};
- setupWithPackages(webviewPackages, true /* fallback logic enabled */, 1 /* numRelros */);
+ setupWithPackages(webviewPackages);
int secondaryUserId = 412;
mTestSystemImpl.addUser(secondaryUserId);
@@ -1356,7 +1237,7 @@ public class WebViewUpdateServiceTest {
new WebViewProviderInfo(installedPackage, "", true /* available by default */,
false /* fallback */, null)};
- setupWithPackages(webviewPackages, true /* fallback logic enabled */, 1 /* numRelros */);
+ setupWithPackages(webviewPackages);
int secondaryUserId = 4;
mTestSystemImpl.addUser(secondaryUserId);
@@ -1377,78 +1258,25 @@ public class WebViewUpdateServiceTest {
}
@Test
- public void testFallbackEnabledIfPrimaryUninstalledSingleUser() {
- checkFallbackEnabledIfPrimaryUninstalled(false /* multiUser */);
- }
-
- @Test
- public void testFallbackEnabledIfPrimaryUninstalledMultiUser() {
- checkFallbackEnabledIfPrimaryUninstalled(true /* multiUser */);
- }
-
- /**
- * Ensures that fallback becomes enabled at boot if the primary package is uninstalled for some
- * user.
- */
- private void checkFallbackEnabledIfPrimaryUninstalled(boolean multiUser) {
- String primaryPackage = "primary";
- String fallbackPackage = "fallback";
- WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
- new WebViewProviderInfo(
- primaryPackage, "", true /* default available */, false /* fallback */, null),
- new WebViewProviderInfo(
- fallbackPackage, "", true /* default available */, true /* fallback */, null)};
- setupWithPackages(packages, true /* fallback logic enabled */);
- int secondaryUserId = 5;
- if (multiUser) {
- mTestSystemImpl.addUser(secondaryUserId);
- // Install all packages for the primary user.
- setEnabledAndValidPackageInfosForUser(TestSystemImpl.PRIMARY_USER_ID, packages);
- // Only install fallback package for secondary user.
- mTestSystemImpl.setPackageInfoForUser(secondaryUserId,
- createPackageInfo(primaryPackage, true /* enabled */,
- true /* valid */, false /* installed */));
- mTestSystemImpl.setPackageInfoForUser(secondaryUserId,
- createPackageInfo(fallbackPackage, false /* enabled */,
- true /* valid */, true /* installed */));
- } else {
- mTestSystemImpl.setPackageInfo(createPackageInfo(primaryPackage, true /* enabled */,
- true /* valid */, false /* installed */));
- mTestSystemImpl.setPackageInfo(createPackageInfo(fallbackPackage, false /* enabled */,
- true /* valid */, true /* installed */));
- }
-
- runWebViewBootPreparationOnMainSync();
- // Verify that we enable the fallback package
- Mockito.verify(mTestSystemImpl).enablePackageForAllUsers(
- Mockito.anyObject(), Mockito.eq(fallbackPackage), Mockito.eq(true) /* enable */);
-
- checkPreparationPhasesForPackage(fallbackPackage, 1 /* first preparation phase */);
- }
-
- @Test
public void testPreparationRunsIffNewPackage() {
String primaryPackage = "primary";
- String fallbackPackage = "fallback";
+ String secondaryPackage = "secondary";
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(
primaryPackage, "", true /* default available */, false /* fallback */, null),
new WebViewProviderInfo(
- fallbackPackage, "", true /* default available */, true /* fallback */, null)};
- setupWithPackages(packages, true /* fallback logic enabled */);
+ secondaryPackage, "", true /* default available */, false /* fallback */,
+ null)};
+ setupWithPackages(packages);
mTestSystemImpl.setPackageInfo(createPackageInfo(primaryPackage, true /* enabled */,
true /* valid */, true /* installed */, null /* signatures */,
10 /* lastUpdateTime*/ ));
- mTestSystemImpl.setPackageInfo(createPackageInfo(fallbackPackage, true /* enabled */,
+ mTestSystemImpl.setPackageInfo(createPackageInfo(secondaryPackage, true /* enabled */,
true /* valid */, true /* installed */));
runWebViewBootPreparationOnMainSync();
checkPreparationPhasesForPackage(primaryPackage, 1 /* first preparation phase */);
- Mockito.verify(mTestSystemImpl, Mockito.times(1)).enablePackageForUser(
- Mockito.eq(fallbackPackage), Mockito.eq(false) /* enable */,
- Matchers.anyInt() /* user */);
-
mWebViewUpdateServiceImpl.packageStateChanged(primaryPackage,
WebViewUpdateService.PACKAGE_ADDED_REPLACED, 0 /* userId */);
@@ -1459,9 +1287,6 @@ public class WebViewUpdateServiceTest {
// package still has the same update-time so we shouldn't run preparation here
Mockito.verify(mTestSystemImpl, Mockito.times(1)).onWebViewProviderChanged(
Mockito.argThat(new IsPackageInfoWithName(primaryPackage)));
- Mockito.verify(mTestSystemImpl, Mockito.times(1)).enablePackageForUser(
- Mockito.eq(fallbackPackage), Mockito.eq(false) /* enable */,
- Matchers.anyInt() /* user */);
// Ensure we can still load the package
WebViewProviderResponse response = mWebViewUpdateServiceImpl.waitForAndGetProvider();
@@ -1496,7 +1321,7 @@ public class WebViewUpdateServiceTest {
firstPackage.versionName = "first package version";
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(firstPackage.packageName, "", true, false, null)};
- setupWithPackages(packages, true);
+ setupWithPackages(packages);
mTestSystemImpl.setPackageInfo(firstPackage);
runWebViewBootPreparationOnMainSync();
@@ -1542,9 +1367,7 @@ public class WebViewUpdateServiceTest {
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(
primaryPackage, "", true /* default available */, false /* fallback */, null)};
- setupWithPackages(packages, true /* fallback logic enabled */, 1 /* numRelros */,
- true /* debuggable */,
- enabledByDefault /* not multiprocess by default */);
+ setupWithPackagesAndMultiProcess(packages, enabledByDefault);
mTestSystemImpl.setPackageInfo(createPackageInfo(primaryPackage, true /* enabled */,
true /* valid */, true /* installed */, null /* signatures */,
10 /* lastUpdateTime*/, false /* not hidden */, 1000 /* versionCode */,
@@ -1599,8 +1422,7 @@ public class WebViewUpdateServiceTest {
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(
primaryPackage, "", true /* default available */, false /* fallback */, null)};
- setupWithPackages(packages, true /* fallback logic enabled */, 1 /* numRelros */,
- true /* debuggable */, enabledByDefault /* multiprocess by default */);
+ setupWithPackagesAndMultiProcess(packages, enabledByDefault);
mTestSystemImpl.setPackageInfo(createPackageInfo(primaryPackage, true /* enabled */,
true /* valid */, true /* installed */, null /* signatures */,
10 /* lastUpdateTime*/, false /* not hidden */, 1000 /* versionCode */,
@@ -1638,7 +1460,7 @@ public class WebViewUpdateServiceTest {
WebViewProviderInfo[] packages = new WebViewProviderInfo[] {
new WebViewProviderInfo(oldSdkPackage.packageName, "", true, false, null),
currentSdkProviderInfo, newSdkProviderInfo};
- setupWithPackages(packages, true);
+ setupWithPackages(packages);
;
mTestSystemImpl.setPackageInfo(newSdkPackage);
mTestSystemImpl.setPackageInfo(currentSdkPackage);