Merge "Remove support for the WebView stub."

This commit is contained in:
TreeHugger Robot
2019-04-01 16:44:26 +00:00
committed by Android (Google) Code Review
2 changed files with 3 additions and 89 deletions

View File

@@ -321,45 +321,6 @@ public final class WebViewFactory {
}
}
/**
* If the ApplicationInfo provided is for a stub WebView, fix up the object to include the
* required values from the donor package. If the ApplicationInfo is for a full WebView,
* leave it alone. Throws MissingWebViewPackageException if the donor is missing.
*/
private static void fixupStubApplicationInfo(ApplicationInfo ai, PackageManager pm)
throws MissingWebViewPackageException {
String donorPackageName = null;
if (ai.metaData != null) {
donorPackageName = ai.metaData.getString("com.android.webview.WebViewDonorPackage");
}
if (donorPackageName != null) {
PackageInfo donorPackage;
try {
donorPackage = pm.getPackageInfo(
donorPackageName,
PackageManager.GET_SHARED_LIBRARY_FILES
| PackageManager.MATCH_DEBUG_TRIAGED_MISSING
| PackageManager.MATCH_UNINSTALLED_PACKAGES
| PackageManager.MATCH_FACTORY_ONLY);
} catch (PackageManager.NameNotFoundException e) {
throw new MissingWebViewPackageException("Failed to find donor package: " +
donorPackageName);
}
ApplicationInfo donorInfo = donorPackage.applicationInfo;
// Replace the stub's code locations with the donor's.
ai.sourceDir = donorInfo.sourceDir;
ai.splitSourceDirs = donorInfo.splitSourceDirs;
ai.nativeLibraryDir = donorInfo.nativeLibraryDir;
ai.secondaryNativeLibraryDir = donorInfo.secondaryNativeLibraryDir;
// Copy the donor's primary and secondary ABIs, since the stub doesn't have native code
// and so they are unset.
ai.primaryCpuAbi = donorInfo.primaryCpuAbi;
ai.secondaryCpuAbi = donorInfo.secondaryCpuAbi;
}
}
@UnsupportedAppUsage
private static Context getWebViewContextAndSetProvider() throws MissingWebViewPackageException {
Application initialApplication = AppGlobals.getInitialApplication();
@@ -411,7 +372,6 @@ public final class WebViewFactory {
verifyPackageInfo(response.packageInfo, newPackageInfo);
ApplicationInfo ai = newPackageInfo.applicationInfo;
fixupStubApplicationInfo(ai, pm);
Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW,
"initialApplication.createApplicationContext");
@@ -494,18 +454,14 @@ public final class WebViewFactory {
*/
public static int onWebViewProviderChanged(PackageInfo packageInfo) {
int startedRelroProcesses = 0;
ApplicationInfo originalAppInfo = new ApplicationInfo(packageInfo.applicationInfo);
try {
fixupStubApplicationInfo(packageInfo.applicationInfo,
AppGlobals.getInitialApplication().getPackageManager());
startedRelroProcesses = WebViewLibraryLoader.prepareNativeLibraries(packageInfo);
} catch (Throwable t) {
// Log and discard errors at this stage as we must not crash the system server.
Log.e(LOGTAG, "error preparing webview native library", t);
}
WebViewZygote.onWebViewProviderChanged(packageInfo, originalAppInfo);
WebViewZygote.onWebViewProviderChanged(packageInfo);
return startedRelroProcesses;
}

View File

@@ -16,8 +16,6 @@
package android.webkit;
import android.app.LoadedApk;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.os.AsyncTask;
import android.os.Build;
@@ -29,10 +27,6 @@ import android.util.Log;
import com.android.internal.annotations.GuardedBy;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/** @hide */
public class WebViewZygote {
private static final String LOGTAG = "WebViewZygote";
@@ -55,13 +49,6 @@ public class WebViewZygote {
@GuardedBy("sLock")
private static PackageInfo sPackage;
/**
* Original ApplicationInfo for the selected WebView package before stub fixup. This is set from
* #onWebViewProviderChanged().
*/
@GuardedBy("sLock")
private static ApplicationInfo sPackageOriginalAppInfo;
/**
* Flag for whether multi-process WebView is enabled. If this is {@code false}, the zygote
* will not be started.
@@ -110,11 +97,9 @@ public class WebViewZygote {
}
}
public static void onWebViewProviderChanged(PackageInfo packageInfo,
ApplicationInfo originalAppInfo) {
static void onWebViewProviderChanged(PackageInfo packageInfo) {
synchronized (sLock) {
sPackage = packageInfo;
sPackageOriginalAppInfo = originalAppInfo;
// If multi-process is not enabled, then do not start the zygote service.
if (!sMultiprocessEnabled) {
@@ -165,34 +150,7 @@ public class WebViewZygote {
Process.FIRST_ISOLATED_UID,
Integer.MAX_VALUE); // TODO(b/123615476) deal with user-id ranges properly
ZygoteProcess.waitForConnectionToZygote(sZygote.getPrimarySocketAddress());
if (sPackageOriginalAppInfo.sourceDir.equals(sPackage.applicationInfo.sourceDir)) {
// No stub WebView is involved here, so we can preload the package the "clean" way
// using the ApplicationInfo.
sZygote.preloadApp(sPackage.applicationInfo, abi);
} else {
// Legacy path to support the stub WebView.
// Reuse the logic from LoadedApk to determine the correct paths and pass them to
// the zygote as strings.
final List<String> zipPaths = new ArrayList<>(10);
final List<String> libPaths = new ArrayList<>(10);
LoadedApk.makePaths(null, false, sPackage.applicationInfo, zipPaths, libPaths);
final String librarySearchPath = TextUtils.join(File.pathSeparator, libPaths);
final String zip = (zipPaths.size() == 1) ? zipPaths.get(0) :
TextUtils.join(File.pathSeparator, zipPaths);
String libFileName = WebViewFactory.getWebViewLibrary(sPackage.applicationInfo);
// Use the original ApplicationInfo to determine what the original classpath would
// have been to use as a cache key.
LoadedApk.makePaths(null, false, sPackageOriginalAppInfo, zipPaths, null);
final String cacheKey = (zipPaths.size() == 1) ? zipPaths.get(0) :
TextUtils.join(File.pathSeparator, zipPaths);
Log.d(LOGTAG, "Preloading package " + zip + " " + librarySearchPath);
sZygote.preloadPackageForAbi(zip, librarySearchPath, libFileName, cacheKey,
Build.SUPPORTED_ABIS[0]);
}
sZygote.preloadApp(sPackage.applicationInfo, abi);
} catch (Exception e) {
Log.e(LOGTAG, "Error connecting to webview zygote", e);
stopZygoteLocked();