Chromium Code Reviews| 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 96120eabb8d59acc5f29df72cee5096f9eee9f32..c658071a2289930b6bd2adb8a941dd86933f9564 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 |
| @@ -36,12 +36,15 @@ import org.chromium.android_webview.AwContentsClient; |
| import org.chromium.android_webview.AwContentsStatics; |
| import org.chromium.android_webview.AwCookieManager; |
| import org.chromium.android_webview.AwDevToolsServer; |
| +import org.chromium.android_webview.AwGeolocationPermissions; |
| import org.chromium.android_webview.AwNetworkChangeNotifierRegistrationPolicy; |
| import org.chromium.android_webview.AwQuotaManagerBridge; |
| import org.chromium.android_webview.AwResource; |
| import org.chromium.android_webview.AwSettings; |
| +import org.chromium.android_webview.HttpAuthDatabase; |
| import org.chromium.android_webview.R; |
| import org.chromium.android_webview.ResourcesContextWrapperFactory; |
| +import org.chromium.base.BuildConfig; |
| import org.chromium.base.CommandLine; |
| import org.chromium.base.ContextUtils; |
| import org.chromium.base.MemoryPressureListener; |
| @@ -379,15 +382,14 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { |
| } |
| } |
| - AwBrowserContext getBrowserContext() { |
| - synchronized (mLock) { |
| - return getBrowserContextLocked(); |
| + // Only on UI thread. |
| + AwBrowserContext getBrowserContextOnUiThread() { |
| + assert mStarted; |
| + if (BuildConfig.DCHECK_IS_ON && !ThreadUtils.runningOnUiThread()) { |
| + throw new RuntimeException( |
| + "getBrowserContextOnUiThread called on " + Thread.currentThread()); |
| } |
| - } |
| - private AwBrowserContext getBrowserContextLocked() { |
| - assert Thread.holdsLock(mLock); |
| - assert mStarted; |
| if (mBrowserContext == null) { |
| mBrowserContext = |
| new AwBrowserContext(mWebViewPrefs, ContextUtils.getApplicationContext()); |
| @@ -481,8 +483,16 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { |
| synchronized (mLock) { |
| if (mGeolocationPermissions == null) { |
| ensureChromiumStartedLocked(true); |
| - mGeolocationPermissions = new GeolocationPermissionsAdapter( |
| - getBrowserContextLocked().getGeolocationPermissions()); |
| + AwGeolocationPermissions awGelocationPermissions = ThreadUtils.runningOnUiThread() |
| + ? getBrowserContextOnUiThread().getGeolocationPermissions() |
|
Torne
2016/07/29 11:24:26
minor thing: seems like it might be preferable to
boliu
2016/07/29 13:23:55
I guess we don't do that in WebVIewChromium becaus
|
| + : runOnUiThreadBlocking(new Callable<AwGeolocationPermissions>() { |
| + @Override |
| + public AwGeolocationPermissions call() { |
| + return getBrowserContextOnUiThread().getGeolocationPermissions(); |
| + } |
| + }); |
| + mGeolocationPermissions = |
| + new GeolocationPermissionsAdapter(awGelocationPermissions); |
| } |
| } |
| return mGeolocationPermissions; |
| @@ -514,20 +524,34 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { |
| synchronized (mLock) { |
| if (mWebStorage == null) { |
| ensureChromiumStartedLocked(true); |
| - mWebStorage = new WebStorageAdapter(AwQuotaManagerBridge.getInstance()); |
| + AwQuotaManagerBridge awQuotaManager = ThreadUtils.runningOnUiThread() |
| + ? AwQuotaManagerBridge.getInstance() |
| + : runOnUiThreadBlocking(new Callable<AwQuotaManagerBridge>() { |
| + @Override |
| + public AwQuotaManagerBridge call() { |
| + return AwQuotaManagerBridge.getInstance(); |
| + } |
| + }); |
| + mWebStorage = new WebStorageAdapter(awQuotaManager); |
| } |
| } |
| return mWebStorage; |
| } |
| @Override |
| - public WebViewDatabase getWebViewDatabase(Context context) { |
| + public WebViewDatabase getWebViewDatabase(final Context context) { |
| synchronized (mLock) { |
| if (mWebViewDatabase == null) { |
| ensureChromiumStartedLocked(true); |
| - AwBrowserContext browserContext = getBrowserContextLocked(); |
| - mWebViewDatabase = new WebViewDatabaseAdapter( |
| - browserContext.getHttpAuthDatabase(context)); |
| + HttpAuthDatabase awDatabase = ThreadUtils.runningOnUiThread() |
| + ? getBrowserContextOnUiThread().getHttpAuthDatabase(context) |
| + : runOnUiThreadBlocking(new Callable<HttpAuthDatabase>() { |
| + @Override |
| + public HttpAuthDatabase call() { |
| + return getBrowserContextOnUiThread().getHttpAuthDatabase(context); |
| + } |
| + }); |
| + mWebViewDatabase = new WebViewDatabaseAdapter(awDatabase); |
| } |
| } |
| return mWebViewDatabase; |