Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwContents.java

Issue 1350553005: [Android WebView] Call shouldInterceptRequest on a background thread (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments addressed Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: android_webview/java/src/org/chromium/android_webview/AwContents.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 29c1e28c9eec017494071563fca0fd67cbab6cd5..fed22d70890c939725b9fb6e40e84f2b3b2f7561 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -224,6 +224,7 @@ public class AwContents implements SmartClipProvider,
private AwWebContentsObserver mWebContentsObserver;
private final AwContentsClientBridge mContentsClientBridge;
private final AwWebContentsDelegateAdapter mWebContentsDelegate;
+ private final AwContentsBackgroundThreadClient mBackgroundThreadClient;
private final AwContentsIoThreadClient mIoThreadClient;
private final InterceptNavigationDelegateImpl mInterceptNavigationDelegate;
private InternalAccessDelegate mInternalAccessAdapter;
@@ -381,30 +382,8 @@ public class AwContents implements SmartClipProvider,
}
@Override
- public AwWebResourceResponse shouldInterceptRequest(
- AwContentsClient.AwWebResourceRequest request) {
- String url = request.url;
- AwWebResourceResponse awWebResourceResponse;
- // Return the response directly if the url is default video poster url.
- awWebResourceResponse = mDefaultVideoPosterRequestHandler.shouldInterceptRequest(url);
- if (awWebResourceResponse != null) return awWebResourceResponse;
-
- awWebResourceResponse = mContentsClient.shouldInterceptRequest(request);
-
- if (awWebResourceResponse == null) {
- mContentsClient.getCallbackHelper().postOnLoadResource(url);
- }
-
- if (awWebResourceResponse != null && awWebResourceResponse.getData() == null) {
- // In this case the intercepted URLRequest job will simulate an empty response
- // which doesn't trigger the onReceivedError callback. For WebViewClassic
- // compatibility we synthesize that callback. http://crbug.com/180950
- mContentsClient.getCallbackHelper().postOnReceivedError(
- request,
- /* error description filled in by the glue layer */
- new AwContentsClient.AwWebResourceError());
- }
- return awWebResourceResponse;
+ public AwContentsBackgroundThreadClient getBackgroundThreadClient() {
+ return mBackgroundThreadClient;
}
@Override
@@ -471,6 +450,37 @@ public class AwContents implements SmartClipProvider,
}
}
+ private class BackgroundThreadClientImpl extends AwContentsBackgroundThreadClient {
+ // All methods are called on the background thread.
+
+ @Override
+ public AwWebResourceResponse shouldInterceptRequest(
+ AwContentsClient.AwWebResourceRequest request) {
+ String url = request.url;
+ AwWebResourceResponse awWebResourceResponse;
+ // Return the response directly if the url is default video poster url.
+ awWebResourceResponse = mDefaultVideoPosterRequestHandler.shouldInterceptRequest(url);
+ if (awWebResourceResponse != null) return awWebResourceResponse;
+
+ awWebResourceResponse = mContentsClient.shouldInterceptRequest(request);
+
+ if (awWebResourceResponse == null) {
+ mContentsClient.getCallbackHelper().postOnLoadResource(url);
+ }
+
+ if (awWebResourceResponse != null && awWebResourceResponse.getData() == null) {
+ // In this case the intercepted URLRequest job will simulate an empty response
+ // which doesn't trigger the onReceivedError callback. For WebViewClassic
+ // compatibility we synthesize that callback. http://crbug.com/180950
+ mContentsClient.getCallbackHelper().postOnReceivedError(
+ request,
+ /* error description filled in by the glue layer */
+ new AwContentsClient.AwWebResourceError());
+ }
+ return awWebResourceResponse;
+ }
+ }
+
//--------------------------------------------------------------------------------------------
// When the navigation is for a newly created WebView (i.e. a popup), intercept the navigation
// here for implementing shouldOverrideUrlLoading. This is to send the shouldOverrideUrlLoading
@@ -699,6 +709,7 @@ public class AwContents implements SmartClipProvider,
mContentsClientBridge = new AwContentsClientBridge(mContext, contentsClient,
mBrowserContext.getKeyStore(), AwContentsStatics.getClientCertLookupTable());
mZoomControls = new AwZoomControls(this);
+ mBackgroundThreadClient = new BackgroundThreadClientImpl();
mIoThreadClient = new IoThreadClientImpl();
mInterceptNavigationDelegate = new InterceptNavigationDelegateImpl();

Powered by Google App Engine
This is Rietveld 408576698