1// Copyright 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 5package org.chromium.android_webview; 6 7import 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 */ 12public 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} 144