| 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | package org.chromium.android_webview; |
| 6 | |
| 7 | import org.chromium.net.NetError; |
| 8 | |
| 9 | /** |
| 10 | * This is a helper class to map native error code about loading a page to Android specific ones. |
| 11 | */ |
| 12 | public abstract class ErrorCodeConversionHelper { |
| 13 | // Success |
| 14 | public static final int ERROR_OK = 0; |
| 15 | // Generic error |
| 16 | public static final int ERROR_UNKNOWN = -1; |
| 17 | // Server or proxy hostname lookup failed |
| 18 | public static final int ERROR_HOST_LOOKUP = -2; |
| 19 | // Unsupported authentication scheme (not basic or digest) |
| 20 | public static final int ERROR_UNSUPPORTED_AUTH_SCHEME = -3; |
| 21 | // User authentication failed on server |
| 22 | public static final int ERROR_AUTHENTICATION = -4; |
| 23 | // User authentication failed on proxy |
| 24 | public static final int ERROR_PROXY_AUTHENTICATION = -5; |
| 25 | // Failed to connect to the server |
| 26 | public static final int ERROR_CONNECT = -6; |
| 27 | // Failed to read or write to the server |
| 28 | public static final int ERROR_IO = -7; |
| 29 | // Connection timed out |
| 30 | public static final int ERROR_TIMEOUT = -8; |
| 31 | // Too many redirects |
| 32 | public static final int ERROR_REDIRECT_LOOP = -9; |
| 33 | // Unsupported URI scheme |
| 34 | public static final int ERROR_UNSUPPORTED_SCHEME = -10; |
| 35 | // Failed to perform SSL handshake |
| 36 | public static final int ERROR_FAILED_SSL_HANDSHAKE = -11; |
| 37 | // Malformed URL |
| 38 | public static final int ERROR_BAD_URL = -12; |
| 39 | // Generic file error |
| 40 | public static final int ERROR_FILE = -13; |
| 41 | // File not found |
| 42 | public static final int ERROR_FILE_NOT_FOUND = -14; |
| 43 | // Too many requests during this load |
| 44 | public static final int ERROR_TOO_MANY_REQUESTS = -15; |
| 45 | |
| 46 | static int convertErrorCode(int netError) { |
| 47 | // Note: many NetError.Error constants don't have an obvious mapping. |
| 48 | // These will be handled by the default case, ERROR_UNKNOWN. |
| 49 | switch (netError) { |
| 50 | case NetError.ERR_UNSUPPORTED_AUTH_SCHEME: |
| 51 | return ERROR_UNSUPPORTED_AUTH_SCHEME; |
| 52 | |
| 53 | case NetError.ERR_INVALID_AUTH_CREDENTIALS: |
| 54 | case NetError.ERR_MISSING_AUTH_CREDENTIALS: |
| 55 | case NetError.ERR_MISCONFIGURED_AUTH_ENVIRONMENT: |
| 56 | return ERROR_AUTHENTICATION; |
| 57 | |
| 58 | case NetError.ERR_TOO_MANY_REDIRECTS: |
| 59 | return ERROR_REDIRECT_LOOP; |
| 60 | |
| 61 | case NetError.ERR_UPLOAD_FILE_CHANGED: |
| 62 | return ERROR_FILE_NOT_FOUND; |
| 63 | |
| 64 | case NetError.ERR_INVALID_URL: |
| 65 | return ERROR_BAD_URL; |
| 66 | |
| 67 | case NetError.ERR_DISALLOWED_URL_SCHEME: |
| 68 | case NetError.ERR_UNKNOWN_URL_SCHEME: |
| 69 | return ERROR_UNSUPPORTED_SCHEME; |
| 70 | |
| 71 | case NetError.ERR_IO_PENDING: |
| 72 | case NetError.ERR_NETWORK_IO_SUSPENDED: |
| 73 | return ERROR_IO; |
| 74 | |
| 75 | case NetError.ERR_CONNECTION_TIMED_OUT: |
| 76 | case NetError.ERR_TIMED_OUT: |
| 77 | return ERROR_TIMEOUT; |
| 78 | |
| 79 | case NetError.ERR_FILE_TOO_BIG: |
| 80 | return ERROR_FILE; |
| 81 | |
| 82 | case NetError.ERR_HOST_RESOLVER_QUEUE_TOO_LARGE: |
| 83 | case NetError.ERR_INSUFFICIENT_RESOURCES: |
| 84 | case NetError.ERR_OUT_OF_MEMORY: |
| 85 | return ERROR_TOO_MANY_REQUESTS; |
| 86 | |
| 87 | case NetError.ERR_CONNECTION_CLOSED: |
| 88 | case NetError.ERR_CONNECTION_RESET: |
| 89 | case NetError.ERR_CONNECTION_REFUSED: |
| 90 | case NetError.ERR_CONNECTION_ABORTED: |
| 91 | case NetError.ERR_CONNECTION_FAILED: |
| 92 | case NetError.ERR_SOCKET_NOT_CONNECTED: |
| 93 | return ERROR_CONNECT; |
| 94 | |
| 95 | case NetError.ERR_INTERNET_DISCONNECTED: |
| 96 | case NetError.ERR_ADDRESS_INVALID: |
| 97 | case NetError.ERR_ADDRESS_UNREACHABLE: |
| 98 | case NetError.ERR_NAME_NOT_RESOLVED: |
| 99 | case NetError.ERR_NAME_RESOLUTION_FAILED: |
| 100 | return ERROR_HOST_LOOKUP; |
| 101 | |
| 102 | case NetError.ERR_SSL_PROTOCOL_ERROR: |
| 103 | case NetError.ERR_SSL_CLIENT_AUTH_CERT_NEEDED: |
| 104 | case NetError.ERR_TUNNEL_CONNECTION_FAILED: |
| 105 | case NetError.ERR_NO_SSL_VERSIONS_ENABLED: |
| 106 | case NetError.ERR_SSL_VERSION_OR_CIPHER_MISMATCH: |
| 107 | case NetError.ERR_SSL_RENEGOTIATION_REQUESTED: |
| 108 | case NetError.ERR_CERT_ERROR_IN_SSL_RENEGOTIATION: |
| 109 | case NetError.ERR_BAD_SSL_CLIENT_AUTH_CERT: |
| 110 | case NetError.ERR_SSL_NO_RENEGOTIATION: |
| 111 | case NetError.ERR_SSL_DECOMPRESSION_FAILURE_ALERT: |
| 112 | case NetError.ERR_SSL_BAD_RECORD_MAC_ALERT: |
| 113 | case NetError.ERR_SSL_UNSAFE_NEGOTIATION: |
| 114 | case NetError.ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY: |
| 115 | case NetError.ERR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED: |
| 116 | case NetError.ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY: |
| 117 | return ERROR_FAILED_SSL_HANDSHAKE; |
| 118 | |
| 119 | case NetError.ERR_PROXY_AUTH_UNSUPPORTED: |
| 120 | case NetError.ERR_PROXY_AUTH_REQUESTED: |
| 121 | case NetError.ERR_PROXY_CONNECTION_FAILED: |
| 122 | case NetError.ERR_UNEXPECTED_PROXY_AUTH: |
| 123 | return ERROR_PROXY_AUTHENTICATION; |
| 124 | |
| 125 | // The certificate errors are handled by onReceivedSslError |
| 126 | // and don't need to be reported here. |
| 127 | case NetError.ERR_CERT_COMMON_NAME_INVALID: |
| 128 | case NetError.ERR_CERT_DATE_INVALID: |
| 129 | case NetError.ERR_CERT_AUTHORITY_INVALID: |
| 130 | case NetError.ERR_CERT_CONTAINS_ERRORS: |
| 131 | case NetError.ERR_CERT_NO_REVOCATION_MECHANISM: |
| 132 | case NetError.ERR_CERT_UNABLE_TO_CHECK_REVOCATION: |
| 133 | case NetError.ERR_CERT_REVOKED: |
| 134 | case NetError.ERR_CERT_INVALID: |
| 135 | case NetError.ERR_CERT_WEAK_SIGNATURE_ALGORITHM: |
| 136 | case NetError.ERR_CERT_NON_UNIQUE_NAME: |
| 137 | return ERROR_OK; |
| 138 | |
| 139 | default: |
| 140 | return ERROR_UNKNOWN; |
| 141 | } |
| 142 | } |
| 143 | } |