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 // TODO(crbug.com/1439949): Figure out why this is firing, fix and upgrade 50 // this to be fatal. 51 DUMP_WILL_BE_NOTREACHED_NORETURN() << error; 52 error_string = "<unknown>"; 53 } 54 return std::string("ERR_") + error_string; 55 } 56 IsCertificateError(int error)57bool IsCertificateError(int error) { 58 // Certificate errors are negative integers from net::ERR_CERT_BEGIN 59 // (inclusive) to net::ERR_CERT_END (exclusive) in *decreasing* order. 60 // ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN is currently an exception to this 61 // rule. 62 return (error <= ERR_CERT_BEGIN && error > ERR_CERT_END) || 63 (error == ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN); 64 } 65 IsClientCertificateError(int error)66bool IsClientCertificateError(int error) { 67 switch (error) { 68 case ERR_BAD_SSL_CLIENT_AUTH_CERT: 69 case ERR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED: 70 case ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY: 71 case ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED: 72 case ERR_SSL_CLIENT_AUTH_NO_COMMON_ALGORITHMS: 73 return true; 74 default: 75 return false; 76 } 77 } 78 IsHostnameResolutionError(int error)79bool IsHostnameResolutionError(int error) { 80 DCHECK_NE(ERR_NAME_RESOLUTION_FAILED, error); 81 return error == ERR_NAME_NOT_RESOLVED; 82 } 83 IsRequestBlockedError(int error)84bool IsRequestBlockedError(int error) { 85 switch (error) { 86 case ERR_BLOCKED_BY_CLIENT: 87 case ERR_BLOCKED_BY_ADMINISTRATOR: 88 case ERR_BLOCKED_BY_CSP: 89 return true; 90 default: 91 return false; 92 } 93 } 94 FileErrorToNetError(base::File::Error file_error)95Error FileErrorToNetError(base::File::Error file_error) { 96 switch (file_error) { 97 case base::File::FILE_OK: 98 return OK; 99 case base::File::FILE_ERROR_EXISTS: 100 return ERR_FILE_EXISTS; 101 case base::File::FILE_ERROR_NOT_FOUND: 102 return ERR_FILE_NOT_FOUND; 103 case base::File::FILE_ERROR_ACCESS_DENIED: 104 return ERR_ACCESS_DENIED; 105 case base::File::FILE_ERROR_NO_MEMORY: 106 return ERR_OUT_OF_MEMORY; 107 case base::File::FILE_ERROR_NO_SPACE: 108 return ERR_FILE_NO_SPACE; 109 case base::File::FILE_ERROR_INVALID_OPERATION: 110 return ERR_INVALID_ARGUMENT; 111 case base::File::FILE_ERROR_ABORT: 112 return ERR_ABORTED; 113 case base::File::FILE_ERROR_INVALID_URL: 114 return ERR_INVALID_URL; 115 case base::File::FILE_ERROR_TOO_MANY_OPENED: 116 return ERR_INSUFFICIENT_RESOURCES; 117 case base::File::FILE_ERROR_SECURITY: 118 return ERR_ACCESS_DENIED; 119 case base::File::FILE_ERROR_MAX: 120 NOTREACHED(); 121 [[fallthrough]]; 122 case base::File::FILE_ERROR_NOT_A_DIRECTORY: 123 case base::File::FILE_ERROR_NOT_A_FILE: 124 case base::File::FILE_ERROR_NOT_EMPTY: 125 case base::File::FILE_ERROR_IO: 126 case base::File::FILE_ERROR_IN_USE: 127 // No good mappings for these, so just fallthrough to generic fail. 128 case base::File::FILE_ERROR_FAILED: 129 return ERR_FAILED; 130 } 131 NOTREACHED(); 132 return ERR_FAILED; 133 } 134 135 } // namespace net 136