Merge "Add info on each WebView package in webviewupdate-dumpsys."

This commit is contained in:
TreeHugger Robot
2017-03-10 13:02:56 +00:00
committed by Android (Google) Code Review

View File

@@ -625,26 +625,52 @@ public class WebViewUpdateServiceImpl {
return v1 >= v2;
}
/**
* Returns whether this provider is valid for use as a WebView provider.
*/
public boolean isValidProvider(WebViewProviderInfo configInfo,
PackageInfo packageInfo) {
private final static int VALIDITY_OK = 0;
private final static int VALIDITY_INCORRECT_SDK_VERSION = 1;
private final static int VALIDITY_INCORRECT_VERSION_CODE = 2;
private final static int VALIDITY_INCORRECT_SIGNATURE = 3;
private final static int VALIDITY_NO_LIBRARY_FLAG = 4;
private static String getInvalidityReason(int invalidityReason) {
switch (invalidityReason) {
case VALIDITY_INCORRECT_SDK_VERSION:
return "SDK version too low";
case VALIDITY_INCORRECT_VERSION_CODE:
return "Version code too low";
case VALIDITY_INCORRECT_SIGNATURE:
return "Incorrect signature";
case VALIDITY_NO_LIBRARY_FLAG:
return "No WebView-library manifest flag";
default:
return "Unexcepted validity-reason";
}
}
private int validityResult(WebViewProviderInfo configInfo, PackageInfo packageInfo) {
// Ensure the provider targets this framework release (or a later one).
if (!UserPackage.hasCorrectTargetSdkVersion(packageInfo)) {
return false;
return VALIDITY_INCORRECT_SDK_VERSION;
}
if (!versionCodeGE(packageInfo.versionCode, getMinimumVersionCode())
&& !mSystemInterface.systemIsDebuggable()) {
// Webview providers may be downgraded arbitrarily low, prevent that by enforcing
// minimum version code. This check is only enforced for user builds.
return false;
return VALIDITY_INCORRECT_VERSION_CODE;
}
if (providerHasValidSignature(configInfo, packageInfo, mSystemInterface) &&
WebViewFactory.getWebViewLibrary(packageInfo.applicationInfo) != null) {
return true;
if (!providerHasValidSignature(configInfo, packageInfo, mSystemInterface)) {
return VALIDITY_INCORRECT_SIGNATURE;
}
return false;
if (WebViewFactory.getWebViewLibrary(packageInfo.applicationInfo) == null) {
return VALIDITY_NO_LIBRARY_FLAG;
}
return VALIDITY_OK;
}
/**
* Returns whether this provider is valid for use as a WebView provider.
*/
public boolean isValidProvider(WebViewProviderInfo configInfo, PackageInfo packageInfo) {
return VALIDITY_OK == validityResult(configInfo, packageInfo);
}
/**
@@ -699,6 +725,53 @@ public class WebViewUpdateServiceImpl {
pw.println(String.format(" WebView package dirty: %b", mWebViewPackageDirty));
pw.println(String.format(" Any WebView package installed: %b",
mAnyWebViewInstalled));
try {
PackageInfo preferredWebViewPackage = findPreferredWebViewPackage();
pw.println(String.format(
" Preferred WebView package (name, version): (%s, %s)",
preferredWebViewPackage.packageName,
preferredWebViewPackage.versionName));
} catch (WebViewPackageMissingException e) {
pw.println(String.format(" Preferred WebView package: none"));
}
dumpAllPackageInformationLocked(pw);
}
}
private void dumpAllPackageInformationLocked(PrintWriter pw) {
WebViewProviderInfo[] allProviders = mSystemInterface.getWebViewPackages();
pw.println(" WebView packages:");
for (WebViewProviderInfo provider : allProviders) {
List<UserPackage> userPackages =
mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider);
PackageInfo systemUserPackageInfo =
userPackages.get(UserHandle.USER_SYSTEM).getPackageInfo();
if (systemUserPackageInfo == null) {
continue;
}
int validity = validityResult(provider, systemUserPackageInfo);
String packageDetails = String.format(
"versionName: %s, versionCode: %d, targetSdkVersion: %d",
systemUserPackageInfo.versionName,
systemUserPackageInfo.versionCode,
systemUserPackageInfo.applicationInfo.targetSdkVersion);
if (validity == VALIDITY_OK) {
boolean installedForAllUsers = isInstalledAndEnabledForAllUsers(
mSystemInterface.getPackageInfoForProviderAllUsers(mContext, provider));
pw.println(String.format(
" Valid package %s (%s) is %s installed/enabled for all users",
systemUserPackageInfo.packageName,
packageDetails,
installedForAllUsers ? "" : "NOT"));
} else {
pw.println(String.format(" Invalid package %s (%s), reason: %s",
systemUserPackageInfo.packageName,
packageDetails,
getInvalidityReason(validity)));
}
}
}