OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/websockets/websocket_channel.h" | 5 #include "net/websockets/websocket_channel.h" |
6 | 6 |
7 #include <limits.h> // for INT_MAX | 7 #include <limits.h> // for INT_MAX |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <deque> | 10 #include <deque> |
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 std::string message_copy = message; | 575 std::string message_copy = message; |
576 | 576 |
577 SetState(CLOSED); | 577 SetState(CLOSED); |
578 stream_request_.reset(); | 578 stream_request_.reset(); |
579 | 579 |
580 if (CHANNEL_DELETED == | 580 if (CHANNEL_DELETED == |
581 notification_sender_->SendImmediately(event_interface_.get())) { | 581 notification_sender_->SendImmediately(event_interface_.get())) { |
582 // |this| has been deleted. | 582 // |this| has been deleted. |
583 return; | 583 return; |
584 } | 584 } |
585 ignore_result(event_interface_->OnFailChannel(message_copy)); | 585 ChannelState result = event_interface_->OnFailChannel(message_copy); |
| 586 DCHECK_EQ(CHANNEL_DELETED, result); |
586 // |this| has been deleted. | 587 // |this| has been deleted. |
587 } | 588 } |
588 | 589 |
589 void WebSocketChannel::OnSSLCertificateError( | 590 void WebSocketChannel::OnSSLCertificateError( |
590 scoped_ptr<WebSocketEventInterface::SSLErrorCallbacks> ssl_error_callbacks, | 591 scoped_ptr<WebSocketEventInterface::SSLErrorCallbacks> ssl_error_callbacks, |
591 const SSLInfo& ssl_info, | 592 const SSLInfo& ssl_info, |
592 bool fatal) { | 593 bool fatal) { |
593 ignore_result(event_interface_->OnSSLCertificateError( | 594 ignore_result(event_interface_->OnSSLCertificateError( |
594 ssl_error_callbacks.Pass(), socket_url_, ssl_info, fatal)); | 595 ssl_error_callbacks.Pass(), socket_url_, ssl_info, fatal)); |
595 } | 596 } |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 if (state_ == CONNECTED) { | 994 if (state_ == CONNECTED) { |
994 if (SendClose(code, reason) == CHANNEL_DELETED) | 995 if (SendClose(code, reason) == CHANNEL_DELETED) |
995 return CHANNEL_DELETED; | 996 return CHANNEL_DELETED; |
996 } | 997 } |
997 | 998 |
998 // Careful study of RFC6455 section 7.1.7 and 7.1.1 indicates the browser | 999 // Careful study of RFC6455 section 7.1.7 and 7.1.1 indicates the browser |
999 // should close the connection itself without waiting for the closing | 1000 // should close the connection itself without waiting for the closing |
1000 // handshake. | 1001 // handshake. |
1001 stream_->Close(); | 1002 stream_->Close(); |
1002 SetState(CLOSED); | 1003 SetState(CLOSED); |
1003 return event_interface_->OnFailChannel(message); | 1004 ChannelState result = event_interface_->OnFailChannel(message); |
| 1005 DCHECK_EQ(CHANNEL_DELETED, result); |
| 1006 return result; |
1004 } | 1007 } |
1005 | 1008 |
1006 ChannelState WebSocketChannel::SendClose(uint16 code, | 1009 ChannelState WebSocketChannel::SendClose(uint16 code, |
1007 const std::string& reason) { | 1010 const std::string& reason) { |
1008 DCHECK(state_ == CONNECTED || state_ == RECV_CLOSED); | 1011 DCHECK(state_ == CONNECTED || state_ == RECV_CLOSED); |
1009 DCHECK_LE(reason.size(), kMaximumCloseReasonLength); | 1012 DCHECK_LE(reason.size(), kMaximumCloseReasonLength); |
1010 scoped_refptr<IOBuffer> body; | 1013 scoped_refptr<IOBuffer> body; |
1011 uint64 size = 0; | 1014 uint64 size = 0; |
1012 if (code == kWebSocketErrorNoStatusReceived) { | 1015 if (code == kWebSocketErrorNoStatusReceived) { |
1013 // Special case: translate kWebSocketErrorNoStatusReceived into a Close | 1016 // Special case: translate kWebSocketErrorNoStatusReceived into a Close |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1103 } | 1106 } |
1104 | 1107 |
1105 void WebSocketChannel::CloseTimeout() { | 1108 void WebSocketChannel::CloseTimeout() { |
1106 stream_->Close(); | 1109 stream_->Close(); |
1107 SetState(CLOSED); | 1110 SetState(CLOSED); |
1108 DoDropChannel(false, kWebSocketErrorAbnormalClosure, ""); | 1111 DoDropChannel(false, kWebSocketErrorAbnormalClosure, ""); |
1109 // |this| has been deleted. | 1112 // |this| has been deleted. |
1110 } | 1113 } |
1111 | 1114 |
1112 } // namespace net | 1115 } // namespace net |
OLD | NEW |