Index: android_webview/java/src/org/chromium/android_webview/ErrorCodeConversionHelper.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/ErrorCodeConversionHelper.java b/android_webview/java/src/org/chromium/android_webview/ErrorCodeConversionHelper.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..903927e434e7f2ee0a57d63fa4847abac9b3c7b5 |
--- /dev/null |
+++ b/android_webview/java/src/org/chromium/android_webview/ErrorCodeConversionHelper.java |
@@ -0,0 +1,143 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.android_webview; |
+ |
+import org.chromium.net.NetError; |
+ |
+/** |
+ * This is a helper class to map native error code about loading a page to Android specific ones. |
+ */ |
+class ErrorCodeConversionHelper { |
+ // Success |
+ public static final int ERROR_OK = 0; |
+ // Generic error |
+ public static final int ERROR_UNKNOWN = -1; |
+ // Server or proxy hostname lookup failed |
+ public static final int ERROR_HOST_LOOKUP = -2; |
+ // Unsupported authentication scheme (not basic or digest) |
+ public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; |
+ // User authentication failed on server |
+ public static final int ERROR_AUTHENTICATION = -4; |
+ // User authentication failed on proxy |
+ public static final int ERROR_PROXY_AUTHENTICATION = -5; |
+ // Failed to connect to the server |
+ public static final int ERROR_CONNECT = -6; |
+ // Failed to read or write to the server |
+ public static final int ERROR_IO = -7; |
+ // Connection timed out |
+ public static final int ERROR_TIMEOUT = -8; |
+ // Too many redirects |
+ public static final int ERROR_REDIRECT_LOOP = -9; |
+ // Unsupported URI scheme |
+ public static final int ERROR_UNSUPPORTED_SCHEME = -10; |
+ // Failed to perform SSL handshake |
+ public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; |
+ // Malformed URL |
+ public static final int ERROR_BAD_URL = -12; |
+ // Generic file error |
+ public static final int ERROR_FILE = -13; |
+ // File not found |
+ public static final int ERROR_FILE_NOT_FOUND = -14; |
+ // Too many requests during this load |
+ public static final int ERROR_TOO_MANY_REQUESTS = -15; |
+ |
+ static int convertErrorCode(int netError) { |
+ // Note: many NetError.Error constants don't have an obvious mapping. |
+ // These will be handled by the default case, ERROR_UNKNOWN. |
+ switch (netError) { |
+ case NetError.ERR_UNSUPPORTED_AUTH_SCHEME: |
+ return ERROR_UNSUPPORTED_AUTH_SCHEME; |
+ |
+ case NetError.ERR_INVALID_AUTH_CREDENTIALS: |
+ case NetError.ERR_MISSING_AUTH_CREDENTIALS: |
+ case NetError.ERR_MISCONFIGURED_AUTH_ENVIRONMENT: |
+ return ERROR_AUTHENTICATION; |
+ |
+ case NetError.ERR_TOO_MANY_REDIRECTS: |
+ return ERROR_REDIRECT_LOOP; |
+ |
+ case NetError.ERR_UPLOAD_FILE_CHANGED: |
+ return ERROR_FILE_NOT_FOUND; |
+ |
+ case NetError.ERR_INVALID_URL: |
+ return ERROR_BAD_URL; |
+ |
+ case NetError.ERR_DISALLOWED_URL_SCHEME: |
+ case NetError.ERR_UNKNOWN_URL_SCHEME: |
+ return ERROR_UNSUPPORTED_SCHEME; |
+ |
+ case NetError.ERR_IO_PENDING: |
+ case NetError.ERR_NETWORK_IO_SUSPENDED: |
+ return ERROR_IO; |
+ |
+ case NetError.ERR_CONNECTION_TIMED_OUT: |
+ case NetError.ERR_TIMED_OUT: |
+ return ERROR_TIMEOUT; |
+ |
+ case NetError.ERR_FILE_TOO_BIG: |
+ return ERROR_FILE; |
+ |
+ case NetError.ERR_HOST_RESOLVER_QUEUE_TOO_LARGE: |
+ case NetError.ERR_INSUFFICIENT_RESOURCES: |
+ case NetError.ERR_OUT_OF_MEMORY: |
+ return ERROR_TOO_MANY_REQUESTS; |
+ |
+ case NetError.ERR_CONNECTION_CLOSED: |
+ case NetError.ERR_CONNECTION_RESET: |
+ case NetError.ERR_CONNECTION_REFUSED: |
+ case NetError.ERR_CONNECTION_ABORTED: |
+ case NetError.ERR_CONNECTION_FAILED: |
+ case NetError.ERR_SOCKET_NOT_CONNECTED: |
+ return ERROR_CONNECT; |
+ |
+ case NetError.ERR_INTERNET_DISCONNECTED: |
+ case NetError.ERR_ADDRESS_INVALID: |
+ case NetError.ERR_ADDRESS_UNREACHABLE: |
+ case NetError.ERR_NAME_NOT_RESOLVED: |
+ case NetError.ERR_NAME_RESOLUTION_FAILED: |
+ return ERROR_HOST_LOOKUP; |
+ |
+ case NetError.ERR_SSL_PROTOCOL_ERROR: |
+ case NetError.ERR_SSL_CLIENT_AUTH_CERT_NEEDED: |
+ case NetError.ERR_TUNNEL_CONNECTION_FAILED: |
+ case NetError.ERR_NO_SSL_VERSIONS_ENABLED: |
+ case NetError.ERR_SSL_VERSION_OR_CIPHER_MISMATCH: |
+ case NetError.ERR_SSL_RENEGOTIATION_REQUESTED: |
+ case NetError.ERR_CERT_ERROR_IN_SSL_RENEGOTIATION: |
+ case NetError.ERR_BAD_SSL_CLIENT_AUTH_CERT: |
+ case NetError.ERR_SSL_NO_RENEGOTIATION: |
+ case NetError.ERR_SSL_DECOMPRESSION_FAILURE_ALERT: |
+ case NetError.ERR_SSL_BAD_RECORD_MAC_ALERT: |
+ case NetError.ERR_SSL_UNSAFE_NEGOTIATION: |
+ case NetError.ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY: |
+ case NetError.ERR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED: |
+ case NetError.ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY: |
+ return ERROR_FAILED_SSL_HANDSHAKE; |
+ |
+ case NetError.ERR_PROXY_AUTH_UNSUPPORTED: |
+ case NetError.ERR_PROXY_AUTH_REQUESTED: |
+ case NetError.ERR_PROXY_CONNECTION_FAILED: |
+ case NetError.ERR_UNEXPECTED_PROXY_AUTH: |
+ return ERROR_PROXY_AUTHENTICATION; |
+ |
+ // The certificate errors are handled by onReceivedSslError |
+ // and don't need to be reported here. |
+ case NetError.ERR_CERT_COMMON_NAME_INVALID: |
+ case NetError.ERR_CERT_DATE_INVALID: |
+ case NetError.ERR_CERT_AUTHORITY_INVALID: |
+ case NetError.ERR_CERT_CONTAINS_ERRORS: |
+ case NetError.ERR_CERT_NO_REVOCATION_MECHANISM: |
+ case NetError.ERR_CERT_UNABLE_TO_CHECK_REVOCATION: |
+ case NetError.ERR_CERT_REVOKED: |
+ case NetError.ERR_CERT_INVALID: |
+ case NetError.ERR_CERT_WEAK_SIGNATURE_ALGORITHM: |
+ case NetError.ERR_CERT_NON_UNIQUE_NAME: |
+ return ERROR_OK; |
+ |
+ default: |
+ return ERROR_UNKNOWN; |
+ } |
+ } |
+} |