| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "net/base/net_errors.h" | |
| #include "net/third_party/quic/core/quic_error_codes.h" | |
| namespace net { | |
| std::string ErrorToString(int error) { | |
| return "net::" + ErrorToShortString(error); | |
| } | |
| std::string ExtendedErrorToString(int error, int extended_error_code) { | |
| if (error == ERR_QUIC_PROTOCOL_ERROR && extended_error_code != 0) { | |
| return std::string("net::ERR_QUIC_PROTOCOL_ERROR.") + | |
| QuicErrorCodeToString( | |
| static_cast<quic::QuicErrorCode>(extended_error_code)); | |
| } | |
| return ErrorToString(error); | |
| } | |
| std::string ErrorToShortString(int error) { | |
| if (error == 0) | |
| return "OK"; | |
| const char* error_string; | |
| switch (error) { | |
| #define NET_ERROR(label, value) \ | |
| case ERR_ ## label: \ | |
| error_string = # label; \ | |
| break; | |
| #include "net/base/net_error_list.h" | |
| #undef NET_ERROR | |
| default: | |
| NOTREACHED(); | |
| error_string = "<unknown>"; | |
| } | |
| return std::string("ERR_") + error_string; | |
| } | |
| bool IsCertificateError(int error) { | |
| // Certificate errors are negative integers from net::ERR_CERT_BEGIN | |
| // (inclusive) to net::ERR_CERT_END (exclusive) in *decreasing* order. | |
| // ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN is currently an exception to this | |
| // rule. | |
| return (error <= ERR_CERT_BEGIN && error > ERR_CERT_END) || | |
| (error == ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN); | |
| } | |
| bool IsClientCertificateError(int error) { | |
| switch (error) { | |
| case ERR_BAD_SSL_CLIENT_AUTH_CERT: | |
| case ERR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED: | |
| case ERR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY: | |
| case ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED: | |
| case ERR_SSL_CLIENT_AUTH_NO_COMMON_ALGORITHMS: | |
| return true; | |
| default: | |
| return false; | |
| } | |
| } | |
| bool IsDnsError(int error) { | |
| return (error == ERR_NAME_NOT_RESOLVED || | |
| error == ERR_NAME_RESOLUTION_FAILED); | |
| } | |
| Error FileErrorToNetError(base::File::Error file_error) { | |
| switch (file_error) { | |
| case base::File::FILE_OK: | |
| return OK; | |
| case base::File::FILE_ERROR_EXISTS: | |
| return ERR_FILE_EXISTS; | |
| case base::File::FILE_ERROR_NOT_FOUND: | |
| return ERR_FILE_NOT_FOUND; | |
| case base::File::FILE_ERROR_ACCESS_DENIED: | |
| return ERR_ACCESS_DENIED; | |
| case base::File::FILE_ERROR_NO_MEMORY: | |
| return ERR_OUT_OF_MEMORY; | |
| case base::File::FILE_ERROR_NO_SPACE: | |
| return ERR_FILE_NO_SPACE; | |
| case base::File::FILE_ERROR_INVALID_OPERATION: | |
| return ERR_INVALID_ARGUMENT; | |
| case base::File::FILE_ERROR_ABORT: | |
| return ERR_ABORTED; | |
| case base::File::FILE_ERROR_INVALID_URL: | |
| return ERR_INVALID_URL; | |
| case base::File::FILE_ERROR_TOO_MANY_OPENED: | |
| return ERR_INSUFFICIENT_RESOURCES; | |
| case base::File::FILE_ERROR_SECURITY: | |
| return ERR_ACCESS_DENIED; | |
| case base::File::FILE_ERROR_MAX: | |
| NOTREACHED(); | |
| FALLTHROUGH; | |
| case base::File::FILE_ERROR_NOT_A_DIRECTORY: | |
| case base::File::FILE_ERROR_NOT_A_FILE: | |
| case base::File::FILE_ERROR_NOT_EMPTY: | |
| case base::File::FILE_ERROR_IO: | |
| case base::File::FILE_ERROR_IN_USE: | |
| // No good mappings for these, so just fallthrough to generic fail. | |
| case base::File::FILE_ERROR_FAILED: | |
| return ERR_FAILED; | |
| } | |
| NOTREACHED(); | |
| return ERR_FAILED; | |
| } | |
| } // namespace net |