Merge "Remove support for the WebView stub."
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index 4413585..678a252 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -321,45 +321,6 @@
         }
     }
 
-    /**
-     * 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 @@
             verifyPackageInfo(response.packageInfo, newPackageInfo);
 
             ApplicationInfo ai = newPackageInfo.applicationInfo;
-            fixupStubApplicationInfo(ai, pm);
 
             Trace.traceBegin(Trace.TRACE_TAG_WEBVIEW,
                     "initialApplication.createApplicationContext");
@@ -494,18 +454,14 @@
      */
     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;
     }
diff --git a/core/java/android/webkit/WebViewZygote.java b/core/java/android/webkit/WebViewZygote.java
index 09aa066..62f54b9 100644
--- a/core/java/android/webkit/WebViewZygote.java
+++ b/core/java/android/webkit/WebViewZygote.java
@@ -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 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";
@@ -56,13 +50,6 @@
     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 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 @@
                     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();