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