Index: android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java |
index e431139e1558c0a9ff273a36d264bc74fc806451..d298c25bf14f3e98a7d2b647aaf88b6006ad65e2 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsIoThreadClient.java |
@@ -8,6 +8,7 @@ import org.chromium.base.CalledByNative; |
import org.chromium.base.JNINamespace; |
import java.util.HashMap; |
+import java.util.Map; |
/** |
* Delegate for handling callbacks. All methods are called on the IO thread. |
@@ -42,6 +43,9 @@ public abstract class AwContentsIoThreadClient { |
public abstract AwWebResourceResponse shouldInterceptRequest( |
AwContentsClient.AwWebResourceRequest request); |
+ public abstract void onReceivedHttpError(AwContentsClient.AwWebResourceRequest request, |
+ AwWebResourceResponse response); |
+ |
// Protected methods --------------------------------------------------------------------------- |
@CalledByNative |
@@ -60,4 +64,42 @@ public abstract class AwContentsIoThreadClient { |
} |
return shouldInterceptRequest(request); |
} |
+ |
+ @CalledByNative |
+ protected void onReceivedHttpError( |
+ // WebResourceRequest |
+ String url, boolean isMainFrame, boolean hasUserGesture, String method, |
+ String[] requestHeaderNames, String[] requestHeaderValues, |
+ // WebResourceResponse |
+ String mimeType, String encoding, int statusCode, String reasonPhrase, |
+ String[] responseHeaderNames, String[] responseHeaderValues) { |
+ AwContentsClient.AwWebResourceRequest request = |
+ new AwContentsClient.AwWebResourceRequest(); |
+ request.url = url; |
+ request.isMainFrame = isMainFrame; |
+ request.hasUserGesture = hasUserGesture; |
+ request.method = method; |
+ request.requestHeaders = new HashMap<String, String>(requestHeaderNames.length); |
+ for (int i = 0; i < requestHeaderNames.length; ++i) { |
+ request.requestHeaders.put(requestHeaderNames[i], requestHeaderValues[i]); |
+ } |
+ Map<String, String> responseHeaders = |
+ new HashMap<String, String>(responseHeaderNames.length); |
+ // Note that we receive un-coalesced response header lines, thus we need to combine |
sgurun-gerrit only
2015/03/06 18:12:57
I think not all headers can be coalesced safely. M
|
+ // values for the same header. |
+ for (int i = 0; i < responseHeaderNames.length; ++i) { |
+ if (!responseHeaders.containsKey(responseHeaderNames[i])) { |
+ responseHeaders.put(responseHeaderNames[i], responseHeaderValues[i]); |
+ } else if (!responseHeaderValues[i].isEmpty()) { |
+ String currentValue = responseHeaders.get(responseHeaderNames[i]); |
+ if (!currentValue.isEmpty()) { |
+ currentValue += ", "; |
+ } |
+ responseHeaders.put(responseHeaderNames[i], currentValue + responseHeaderValues[i]); |
+ } |
+ } |
+ AwWebResourceResponse response = new AwWebResourceResponse( |
+ mimeType, encoding, null, statusCode, reasonPhrase, responseHeaders); |
+ onReceivedHttpError(request, response); |
+ } |
} |