Index: net/websockets/websocket_errors.cc |
diff --git a/net/websockets/websocket_errors.cc b/net/websockets/websocket_errors.cc |
index 0814dab4aeedd5ec9e60ff5397a7c7600a4738c3..b7c67e527041d9bfa03a8326454740bb8ac0738c 100644 |
--- a/net/websockets/websocket_errors.cc |
+++ b/net/websockets/websocket_errors.cc |
@@ -7,18 +7,70 @@ |
#include "base/logging.h" |
namespace net { |
+namespace { |
+ |
+// Return true if "error" is one of the codes defined by the multiplexing |
+// extension known to Chromium. |
+bool IsWebSocketMuxErrorCode(WebSocketError error) { |
+ switch (error) { |
+ case kWebSocketErrorPhysicalConnectionFailed: |
+ case kWebSocketErrorInvalidEncapsulatingMessage: |
+ case kWebSocketErrorChannelIdTruncated: |
+ case kWebSocketErrorEncapsulatedFrameIsTruncated: |
+ case kWebSocketErrorUnknownMuxOpcode: |
+ case kWebSocketErrorInvalidMuxControlBlock: |
+ case kWebSocketErrorChannelAlreadyExists: |
+ case kWebSocketErrorNewChannelSlotViolation: |
+ case kWebSocketErrorNewChannelSlotOverFlow: |
+ case kWebSocketErrorBadRequest: |
+ case kWebSocketErrorUnknownRequestEncoding: |
+ case kWebSocketErrorBadResponse: |
+ case kWebSocketErrorUnknownResponseEncoding: |
+ case kWebSocketErrorLogicalChannelFailed: |
+ case kWebSocketErrorSendQuotaViolation: |
+ case kWebSocketErrorSendQuotaOverflow: |
+ case kWebSocketErrorIdleTimeout: |
+ case kWebSocketErrorDropChannelAck: |
+ case kWebSocketErrorBadFragmentation: |
+ return true; |
+ |
+ default: |
+ return false; |
+ } |
+} |
+ |
+} // namespace |
Error WebSocketErrorToNetError(WebSocketError error) { |
switch (error) { |
- case WEB_SOCKET_OK: |
+ case kWebSocketNormalClosure: |
return OK; |
- case WEB_SOCKET_ERR_PROTOCOL_ERROR: |
+ |
+ case kWebSocketErrorGoingAway: // TODO(ricea): More specific code? |
+ case kWebSocketErrorProtocolError: |
+ case kWebSocketErrorUnsupportedData: |
+ case kWebSocketErrorInvalidFramePayloadData: |
+ case kWebSocketErrorPolicyViolation: |
+ case kWebSocketErrorMandatoryExtension: |
+ case kWebSocketErrorInternalServerError: |
return ERR_WS_PROTOCOL_ERROR; |
- case WEB_SOCKET_ERR_MESSAGE_TOO_BIG: |
+ |
+ case kWebSocketErrorNoStatusReceived: |
+ case kWebSocketErrorAbnormalClosure: |
+ return ERR_CONNECTION_CLOSED; |
+ |
+ case kWebSocketErrorTlsHandshake: |
+ // This error will probably be reported with more detail at a lower layer; |
+ // this is the best we can do at this layer. |
+ return ERR_SSL_PROTOCOL_ERROR; |
+ |
+ case kWebSocketErrorMessageTooBig: |
return ERR_MSG_TOO_BIG; |
+ |
default: |
- NOTREACHED(); |
- return ERR_UNEXPECTED; |
+ // Check for extension error codes which we may be generating internally. |
+ return IsWebSocketMuxErrorCode(error) ? ERR_WS_PROTOCOL_ERROR |
+ : ERR_UNEXPECTED; |
} |
} |