OSDN Git Service

Load the WebView Java code via createPackageContext.
authorTorne (Richard Coles) <torne@google.com>
Thu, 24 Jul 2014 15:10:59 +0000 (16:10 +0100)
committerMarcin Kosiba <mkosiba@google.com>
Tue, 5 Aug 2014 08:26:58 +0000 (09:26 +0100)
Bug: 16329371
Change-Id: I94b4bb0df46a373454eb8ee9742413e13ce1e6a8

core/java/android/webkit/WebViewFactory.java

index f694c2f..732518d 100644 (file)
@@ -16,6 +16,9 @@
 
 package android.webkit;
 
+import android.app.AppGlobals;
+import android.content.Context;
+import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.StrictMode;
 import android.os.SystemProperties;
@@ -92,6 +95,16 @@ public final class WebViewFactory {
     }
 
     private static Class<WebViewFactoryProvider> getFactoryClass() throws ClassNotFoundException {
-        return (Class<WebViewFactoryProvider>) Class.forName(CHROMIUM_WEBVIEW_FACTORY);
+        try {
+            Context webViewContext = AppGlobals.getInitialApplication().createPackageContext(
+                    getWebViewPackageName(),
+                    Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
+            ClassLoader clazzLoader = webViewContext.getClassLoader();
+            return (Class<WebViewFactoryProvider>) Class.forName(CHROMIUM_WEBVIEW_FACTORY, true,
+                                                                 clazzLoader);
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.e(LOGTAG, "Chromium WebView package does not exist");
+            return (Class<WebViewFactoryProvider>) Class.forName(NULL_WEBVIEW_FACTORY);
+        }
     }
 }