| Index: android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
|
| diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
|
| index b415e9516b374490dae9b32ecd65e295e8620296..a294913efc1270ead695e6a680faae6726f85b01 100644
|
| --- a/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
|
| +++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClientBridge.java
|
| @@ -14,11 +14,14 @@ import org.chromium.base.ThreadUtils;
|
| import org.chromium.base.annotations.CalledByNative;
|
| import org.chromium.base.annotations.CalledByNativeUnchecked;
|
| import org.chromium.base.annotations.JNINamespace;
|
| +import org.chromium.net.NetError;
|
|
|
| import java.security.Principal;
|
| import java.security.PrivateKey;
|
| import java.security.cert.CertificateEncodingException;
|
| import java.security.cert.X509Certificate;
|
| +import java.util.HashMap;
|
| +import java.util.Map;
|
|
|
| import javax.security.auth.x500.X500Principal;
|
|
|
| @@ -259,10 +262,90 @@ public class AwContentsClientBridge {
|
| }
|
|
|
| @CalledByNative
|
| - public void newLoginRequest(String realm, String account, String args) {
|
| + private void newLoginRequest(String realm, String account, String args) {
|
| mClient.getCallbackHelper().postOnReceivedLoginRequest(realm, account, args);
|
| }
|
|
|
| + @CalledByNative
|
| + private void onReceivedError(
|
| + // WebResourceRequest
|
| + String url, boolean isMainFrame, boolean hasUserGesture, String method,
|
| + String[] requestHeaderNames, String[] requestHeaderValues,
|
| + // WebResourceError
|
| + int errorCode, String description) {
|
| + 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]);
|
| + }
|
| + AwContentsClient.AwWebResourceError error = new AwContentsClient.AwWebResourceError();
|
| + error.errorCode = errorCode;
|
| + error.description = description;
|
| +
|
| + String unreachableWebDataUrl = AwContentsStatics.getUnreachableWebDataUrl();
|
| + boolean isErrorUrl =
|
| + unreachableWebDataUrl != null && unreachableWebDataUrl.equals(request.url);
|
| +
|
| + if (!isErrorUrl && error.errorCode != NetError.ERR_ABORTED) {
|
| + // NetError.ERR_ABORTED error code is generated for the following reasons:
|
| + // - WebView.stopLoading is called;
|
| + // - the navigation is intercepted by the embedder via shouldOverrideUrlLoading;
|
| + // - server returned 204 status (no content).
|
| + //
|
| + // Android WebView does not notify the embedder of these situations using
|
| + // this error code with the WebViewClient.onReceivedError callback.
|
| + error.errorCode = ErrorCodeConversionHelper.convertErrorCode(error.errorCode);
|
| + mClient.getCallbackHelper().postOnReceivedError(request, error);
|
| + if (request.isMainFrame) {
|
| + // Need to call onPageFinished after onReceivedError for backwards compatibility
|
| + // with the classic webview. See also AwWebContentsObserver.didFailLoad which is
|
| + // used when we want to send onPageFinished alone.
|
| + mClient.getCallbackHelper().postOnPageFinished(request.url);
|
| + }
|
| + }
|
| + }
|
| +
|
| + @CalledByNative
|
| + private 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
|
| + // 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);
|
| + mClient.getCallbackHelper().postOnReceivedHttpError(request, response);
|
| + }
|
| +
|
| @CalledByNativeUnchecked
|
| private boolean shouldOverrideUrlLoading(
|
| String url, boolean hasUserGesture, boolean isRedirect, boolean isMainFrame) {
|
|
|