Chromium Code Reviews| 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); | 
| + } | 
| } |