1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "net/base/net_errors.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <string> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/check_op.h" 10*6777b538SAndroid Build Coastguard Worker #include "base/files/file.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/logging.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/notreached.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/quic_error_codes.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace net { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker // Validate all error values in net_error_list.h are negative. 18*6777b538SAndroid Build Coastguard Worker #define NET_ERROR(label, value) \ 19*6777b538SAndroid Build Coastguard Worker static_assert(value < 0, "ERR_" #label " should be negative"); 20*6777b538SAndroid Build Coastguard Worker #include "net/base/net_error_list.h" 21*6777b538SAndroid Build Coastguard Worker #undef NET_ERROR 22*6777b538SAndroid Build Coastguard Worker ErrorToString(int error)23*6777b538SAndroid Build Coastguard Workerstd::string ErrorToString(int error) { 24*6777b538SAndroid Build Coastguard Worker return "net::" + ErrorToShortString(error); 25*6777b538SAndroid Build Coastguard Worker } 26*6777b538SAndroid Build Coastguard Worker ExtendedErrorToString(int error,int extended_error_code)27*6777b538SAndroid Build Coastguard Workerstd::string ExtendedErrorToString(int error, int extended_error_code) { 28*6777b538SAndroid Build Coastguard Worker if (error == ERR_QUIC_PROTOCOL_ERROR && extended_error_code != 0) { 29*6777b538SAndroid Build Coastguard Worker return std::string("net::ERR_QUIC_PROTOCOL_ERROR.") + 30*6777b538SAndroid Build Coastguard Worker QuicErrorCodeToString( 31*6777b538SAndroid Build Coastguard Worker static_cast<quic::QuicErrorCode>(extended_error_code)); 32*6777b538SAndroid Build Coastguard Worker } 33*6777b538SAndroid Build Coastguard Worker return ErrorToString(error); 34*6777b538SAndroid Build Coastguard Worker } 35*6777b538SAndroid Build Coastguard Worker ErrorToShortString(int error)36*6777b538SAndroid Build Coastguard Workerstd::string ErrorToShortString(int error) { 37*6777b538SAndroid Build Coastguard Worker if (error == OK) 38*6777b538SAndroid Build Coastguard Worker return "OK"; 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker const char* error_string; 41*6777b538SAndroid Build Coastguard Worker switch (error) { 42*6777b538SAndroid Build Coastguard Worker #define NET_ERROR(label, value) \ 43*6777b538SAndroid Build Coastguard Worker case ERR_ ## label: \ 44*6777b538SAndroid Build Coastguard Worker error_string = # label; \ 45*6777b538SAndroid Build Coastguard Worker break; 46*6777b538SAndroid Build Coastguard Worker #include "net/base/net_error_list.h" 47*6777b538SAndroid Build Coastguard Worker #undef NET_ERROR 48*6777b538SAndroid Build Coastguard Worker default: 49*6777b538SAndroid Build Coastguard Worker // TODO(crbug.com/1439949): Figure out why this is firing, fix and upgrade 50*6777b538SAndroid Build Coastguard Worker // this to be fatal. 51*6777b538SAndroid Build Coastguard Worker DUMP_WILL_BE_NOTREACHED_NORETURN() << error; 52*6777b538SAndroid Build Coastguard Worker error_string = "<unknown>"; 53*6777b538SAndroid Build Coastguard Worker } 54*6777b538SAndroid Build Coastguard Worker return std::string("ERR_") + error_string; 55*6777b538SAndroid Build Coastguard Worker } 56*6777b538SAndroid Build Coastguard Worker IsCertificateError(int error)57*6777b538SAndroid Build Coastguard Workerbool IsCertificateError(int error) { 58*6777b538SAndroid Build Coastguard Worker // Certificate errors are negative integers from net::ERR_CERT_BEGIN 59*6777b538SAndroid Build Coastguard Worker // (inclusive) to net::ERR_CERT_END (exclusive) in *decreasing* order. 60*6777b538SAndroid Build Coastguard Worker // ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN is currently an exception to this 61*6777b538SAndroid Build Coastguard Worker // rule. 62*6777b538SAndroid Build Coastguard Worker return (error <= ERR_CERT_BEGIN && error > ERR_CERT_END) || 63*6777b538SAndroid Build Coastguard Worker (error == ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN); 64*6777b538SAndroid Build Coastguard Worker } 65*6777b538SAndroid Build Coastguard Worker IsClientCertificateError(int error)66*6777b538SAndroid Build Coastguard Workerbool IsClientCertificateError(int error) { 67*6777b538SAndroid Build Coastguard Worker switch (error) { 68*6777b538SAndroid Build Coastguard Worker case ERR_BAD_SSL_CLIENT_AUTH_CERT: 69*6777b538SAndroid Build Coastguard Worker case ERR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED: 70*6777b538SAndroid Build Coastguard Worker case ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY: 71*6777b538SAndroid Build Coastguard Worker case ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED: 72*6777b538SAndroid Build Coastguard Worker case ERR_SSL_CLIENT_AUTH_NO_COMMON_ALGORITHMS: 73*6777b538SAndroid Build Coastguard Worker return true; 74*6777b538SAndroid Build Coastguard Worker default: 75*6777b538SAndroid Build Coastguard Worker return false; 76*6777b538SAndroid Build Coastguard Worker } 77*6777b538SAndroid Build Coastguard Worker } 78*6777b538SAndroid Build Coastguard Worker IsHostnameResolutionError(int error)79*6777b538SAndroid Build Coastguard Workerbool IsHostnameResolutionError(int error) { 80*6777b538SAndroid Build Coastguard Worker DCHECK_NE(ERR_NAME_RESOLUTION_FAILED, error); 81*6777b538SAndroid Build Coastguard Worker return error == ERR_NAME_NOT_RESOLVED; 82*6777b538SAndroid Build Coastguard Worker } 83*6777b538SAndroid Build Coastguard Worker IsRequestBlockedError(int error)84*6777b538SAndroid Build Coastguard Workerbool IsRequestBlockedError(int error) { 85*6777b538SAndroid Build Coastguard Worker switch (error) { 86*6777b538SAndroid Build Coastguard Worker case ERR_BLOCKED_BY_CLIENT: 87*6777b538SAndroid Build Coastguard Worker case ERR_BLOCKED_BY_ADMINISTRATOR: 88*6777b538SAndroid Build Coastguard Worker case ERR_BLOCKED_BY_CSP: 89*6777b538SAndroid Build Coastguard Worker return true; 90*6777b538SAndroid Build Coastguard Worker default: 91*6777b538SAndroid Build Coastguard Worker return false; 92*6777b538SAndroid Build Coastguard Worker } 93*6777b538SAndroid Build Coastguard Worker } 94*6777b538SAndroid Build Coastguard Worker FileErrorToNetError(base::File::Error file_error)95*6777b538SAndroid Build Coastguard WorkerError FileErrorToNetError(base::File::Error file_error) { 96*6777b538SAndroid Build Coastguard Worker switch (file_error) { 97*6777b538SAndroid Build Coastguard Worker case base::File::FILE_OK: 98*6777b538SAndroid Build Coastguard Worker return OK; 99*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_EXISTS: 100*6777b538SAndroid Build Coastguard Worker return ERR_FILE_EXISTS; 101*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_NOT_FOUND: 102*6777b538SAndroid Build Coastguard Worker return ERR_FILE_NOT_FOUND; 103*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_ACCESS_DENIED: 104*6777b538SAndroid Build Coastguard Worker return ERR_ACCESS_DENIED; 105*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_NO_MEMORY: 106*6777b538SAndroid Build Coastguard Worker return ERR_OUT_OF_MEMORY; 107*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_NO_SPACE: 108*6777b538SAndroid Build Coastguard Worker return ERR_FILE_NO_SPACE; 109*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_INVALID_OPERATION: 110*6777b538SAndroid Build Coastguard Worker return ERR_INVALID_ARGUMENT; 111*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_ABORT: 112*6777b538SAndroid Build Coastguard Worker return ERR_ABORTED; 113*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_INVALID_URL: 114*6777b538SAndroid Build Coastguard Worker return ERR_INVALID_URL; 115*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_TOO_MANY_OPENED: 116*6777b538SAndroid Build Coastguard Worker return ERR_INSUFFICIENT_RESOURCES; 117*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_SECURITY: 118*6777b538SAndroid Build Coastguard Worker return ERR_ACCESS_DENIED; 119*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_MAX: 120*6777b538SAndroid Build Coastguard Worker NOTREACHED(); 121*6777b538SAndroid Build Coastguard Worker [[fallthrough]]; 122*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_NOT_A_DIRECTORY: 123*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_NOT_A_FILE: 124*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_NOT_EMPTY: 125*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_IO: 126*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_IN_USE: 127*6777b538SAndroid Build Coastguard Worker // No good mappings for these, so just fallthrough to generic fail. 128*6777b538SAndroid Build Coastguard Worker case base::File::FILE_ERROR_FAILED: 129*6777b538SAndroid Build Coastguard Worker return ERR_FAILED; 130*6777b538SAndroid Build Coastguard Worker } 131*6777b538SAndroid Build Coastguard Worker NOTREACHED(); 132*6777b538SAndroid Build Coastguard Worker return ERR_FAILED; 133*6777b538SAndroid Build Coastguard Worker } 134*6777b538SAndroid Build Coastguard Worker 135*6777b538SAndroid Build Coastguard Worker } // namespace net 136