Index: android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java |
diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java |
index 5a2dcb749deabab5ca94652ccc6999ca9c28fbe5..8770d3a777725d80ca9e4cd8be905d9fa0410ee8 100644 |
--- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java |
+++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java |
@@ -86,6 +86,7 @@ |
private WebStorageAdapter mWebStorage; |
private WebViewDatabaseAdapter mWebViewDatabase; |
private AwDevToolsServer mDevToolsServer; |
+ private Context mWrappedAppContext; |
private ArrayList<WeakReference<WebViewChromium>> mWebViewsToStart = |
new ArrayList<WeakReference<WebViewChromium>>(); |
@@ -114,11 +115,6 @@ |
@SuppressFBWarnings("DMI_HARDCODED_ABSOLUTE_FILENAME") |
private void initialize(WebViewDelegate webViewDelegate) { |
mWebViewDelegate = webViewDelegate; |
- |
- // WebView needs to make sure to always use the wrapped application context. |
- ContextUtils.initApplicationContext( |
- ResourcesContextWrapperFactory.get(mWebViewDelegate.getApplication())); |
- |
if (isBuildDebuggable()) { |
// Suppress the StrictMode violation as this codepath is only hit on debugglable builds. |
StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); |
@@ -130,7 +126,7 @@ |
ThreadUtils.setWillOverrideUiThread(); |
// Load chromium library. |
- AwBrowserProcess.loadLibrary(ContextUtils.getApplicationContext()); |
+ AwBrowserProcess.loadLibrary(getWrappedCurrentApplicationContext()); |
final PackageInfo packageInfo = WebViewFactory.getLoadedPackageInfo(); |
@@ -244,7 +240,7 @@ |
return; |
} |
- Context context = ContextUtils.getApplicationContext(); |
+ Context context = getWrappedCurrentApplicationContext(); |
try { |
LibraryLoader.get(LibraryProcessType.PROCESS_WEBVIEW).ensureInitialized(context); |
} catch (ProcessInitException e) { |
@@ -302,6 +298,14 @@ |
} |
} |
+ private Context getWrappedCurrentApplicationContext() { |
+ if (mWrappedAppContext == null) { |
+ mWrappedAppContext = ResourcesContextWrapperFactory.get( |
+ mWebViewDelegate.getApplication()); |
+ } |
+ return mWrappedAppContext; |
+ } |
+ |
AwBrowserContext getBrowserContext() { |
synchronized (mLock) { |
return getBrowserContextLocked(); |
@@ -313,7 +317,7 @@ |
assert mStarted; |
if (mBrowserContext == null) { |
mBrowserContext = |
- new AwBrowserContext(mWebViewPrefs, ContextUtils.getApplicationContext()); |
+ new AwBrowserContext(mWebViewPrefs, getWrappedCurrentApplicationContext()); |
} |
return mBrowserContext; |
} |
@@ -423,6 +427,13 @@ |
public CookieManager getCookieManager() { |
synchronized (mLock) { |
if (mCookieManager == null) { |
+ if (!mStarted) { |
+ // We can use CookieManager without starting Chromium; the native code |
+ // will bring up just the parts it needs to make this work on a temporary |
+ // basis until Chromium is started for real. The temporary cookie manager |
+ // needs the application context to have been set. |
+ ContextUtils.initApplicationContext(getWrappedCurrentApplicationContext()); |
+ } |
mCookieManager = new CookieManagerAdapter(new AwCookieManager()); |
} |
} |