| 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 <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <iostream> | 9 #include <iostream> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 MOCK_METHOD0(Close, void()); | 673 MOCK_METHOD0(Close, void()); |
| 674 MOCK_CONST_METHOD0(GetSubProtocol, std::string()); | 674 MOCK_CONST_METHOD0(GetSubProtocol, std::string()); |
| 675 MOCK_CONST_METHOD0(GetExtensions, std::string()); | 675 MOCK_CONST_METHOD0(GetExtensions, std::string()); |
| 676 MOCK_METHOD0(AsWebSocketStream, WebSocketStream*()); | 676 MOCK_METHOD0(AsWebSocketStream, WebSocketStream*()); |
| 677 }; | 677 }; |
| 678 | 678 |
| 679 struct ArgumentCopyingWebSocketStreamCreator { | 679 struct ArgumentCopyingWebSocketStreamCreator { |
| 680 scoped_ptr<WebSocketStreamRequest> Create( | 680 scoped_ptr<WebSocketStreamRequest> Create( |
| 681 const GURL& socket_url, | 681 const GURL& socket_url, |
| 682 const std::vector<std::string>& requested_subprotocols, | 682 const std::vector<std::string>& requested_subprotocols, |
| 683 const GURL& origin, | 683 const std::string& origin, |
| 684 URLRequestContext* url_request_context, | 684 URLRequestContext* url_request_context, |
| 685 const BoundNetLog& net_log, | 685 const BoundNetLog& net_log, |
| 686 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate) { | 686 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate) { |
| 687 this->socket_url = socket_url; | 687 this->socket_url = socket_url; |
| 688 this->requested_subprotocols = requested_subprotocols; | 688 this->requested_subprotocols = requested_subprotocols; |
| 689 this->origin = origin; | 689 this->origin = origin; |
| 690 this->url_request_context = url_request_context; | 690 this->url_request_context = url_request_context; |
| 691 this->net_log = net_log; | 691 this->net_log = net_log; |
| 692 this->connect_delegate = connect_delegate.Pass(); | 692 this->connect_delegate = connect_delegate.Pass(); |
| 693 return make_scoped_ptr(new WebSocketStreamRequest); | 693 return make_scoped_ptr(new WebSocketStreamRequest); |
| 694 } | 694 } |
| 695 | 695 |
| 696 GURL socket_url; | 696 GURL socket_url; |
| 697 GURL origin; | 697 std::string origin; |
| 698 std::vector<std::string> requested_subprotocols; | 698 std::vector<std::string> requested_subprotocols; |
| 699 URLRequestContext* url_request_context; | 699 URLRequestContext* url_request_context; |
| 700 BoundNetLog net_log; | 700 BoundNetLog net_log; |
| 701 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate; | 701 scoped_ptr<WebSocketStream::ConnectDelegate> connect_delegate; |
| 702 }; | 702 }; |
| 703 | 703 |
| 704 // Converts a std::string to a std::vector<char>. For test purposes, it is | 704 // Converts a std::string to a std::vector<char>. For test purposes, it is |
| 705 // convenient to be able to specify data as a string, but the | 705 // convenient to be able to specify data as a string, but the |
| 706 // WebSocketEventInterface requires the vector<char> type. | 706 // WebSocketEventInterface requires the vector<char> type. |
| 707 std::vector<char> AsVector(const std::string& s) { | 707 std::vector<char> AsVector(const std::string& s) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 747 void set_stream(scoped_ptr<T> stream) { | 747 void set_stream(scoped_ptr<T> stream) { |
| 748 // Since the definition of "PassAs" depends on the type T, the C++ standard | 748 // Since the definition of "PassAs" depends on the type T, the C++ standard |
| 749 // requires the "template" keyword to indicate that "PassAs" should be | 749 // requires the "template" keyword to indicate that "PassAs" should be |
| 750 // parsed as a template method. | 750 // parsed as a template method. |
| 751 stream_ = stream.template PassAs<WebSocketStream>(); | 751 stream_ = stream.template PassAs<WebSocketStream>(); |
| 752 } | 752 } |
| 753 | 753 |
| 754 // A struct containing the data that will be used to connect the channel. | 754 // A struct containing the data that will be used to connect the channel. |
| 755 // Grouped for readability. | 755 // Grouped for readability. |
| 756 struct ConnectData { | 756 struct ConnectData { |
| 757 ConnectData() : socket_url("ws://ws/"), origin("http://ws/") {} | 757 ConnectData() : socket_url("ws://ws/"), origin("http://ws") {} |
| 758 | 758 |
| 759 // URLRequestContext object. | 759 // URLRequestContext object. |
| 760 URLRequestContext url_request_context; | 760 URLRequestContext url_request_context; |
| 761 | 761 |
| 762 // URL to (pretend to) connect to. | 762 // URL to (pretend to) connect to. |
| 763 GURL socket_url; | 763 GURL socket_url; |
| 764 // Requested protocols for the request. | 764 // Requested protocols for the request. |
| 765 std::vector<std::string> requested_subprotocols; | 765 std::vector<std::string> requested_subprotocols; |
| 766 // Origin of the request | 766 // Origin of the request |
| 767 GURL origin; | 767 std::string origin; |
| 768 | 768 |
| 769 // A fake WebSocketStreamCreator that just records its arguments. | 769 // A fake WebSocketStreamCreator that just records its arguments. |
| 770 ArgumentCopyingWebSocketStreamCreator creator; | 770 ArgumentCopyingWebSocketStreamCreator creator; |
| 771 }; | 771 }; |
| 772 ConnectData connect_data_; | 772 ConnectData connect_data_; |
| 773 | 773 |
| 774 // The channel we are testing. Not initialised until SetChannel() is called. | 774 // The channel we are testing. Not initialised until SetChannel() is called. |
| 775 scoped_ptr<WebSocketChannel> channel_; | 775 scoped_ptr<WebSocketChannel> channel_; |
| 776 | 776 |
| 777 // A mock or fake stream for tests that need one. | 777 // A mock or fake stream for tests that need one. |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 952 // whether these methods are called or not. | 952 // whether these methods are called or not. |
| 953 EXPECT_CALL(*mock_stream_, GetSubProtocol()).Times(AnyNumber()); | 953 EXPECT_CALL(*mock_stream_, GetSubProtocol()).Times(AnyNumber()); |
| 954 EXPECT_CALL(*mock_stream_, GetExtensions()).Times(AnyNumber()); | 954 EXPECT_CALL(*mock_stream_, GetExtensions()).Times(AnyNumber()); |
| 955 } | 955 } |
| 956 }; | 956 }; |
| 957 | 957 |
| 958 // Simple test that everything that should be passed to the creator function is | 958 // Simple test that everything that should be passed to the creator function is |
| 959 // passed to the creator function. | 959 // passed to the creator function. |
| 960 TEST_F(WebSocketChannelTest, EverythingIsPassedToTheCreatorFunction) { | 960 TEST_F(WebSocketChannelTest, EverythingIsPassedToTheCreatorFunction) { |
| 961 connect_data_.socket_url = GURL("ws://example.com/test"); | 961 connect_data_.socket_url = GURL("ws://example.com/test"); |
| 962 connect_data_.origin = GURL("http://example.com/test"); | 962 connect_data_.origin = "http://example.com"; |
| 963 connect_data_.requested_subprotocols.push_back("Sinbad"); | 963 connect_data_.requested_subprotocols.push_back("Sinbad"); |
| 964 | 964 |
| 965 CreateChannelAndConnect(); | 965 CreateChannelAndConnect(); |
| 966 | 966 |
| 967 const ArgumentCopyingWebSocketStreamCreator& actual = connect_data_.creator; | 967 const ArgumentCopyingWebSocketStreamCreator& actual = connect_data_.creator; |
| 968 | 968 |
| 969 EXPECT_EQ(&connect_data_.url_request_context, actual.url_request_context); | 969 EXPECT_EQ(&connect_data_.url_request_context, actual.url_request_context); |
| 970 | 970 |
| 971 EXPECT_EQ(connect_data_.socket_url, actual.socket_url); | 971 EXPECT_EQ(connect_data_.socket_url, actual.socket_url); |
| 972 EXPECT_EQ(connect_data_.requested_subprotocols, | 972 EXPECT_EQ(connect_data_.requested_subprotocols, |
| (...skipping 2083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3056 channel_->StartClosingHandshake(kWebSocketNormalClosure, "OK"); | 3056 channel_->StartClosingHandshake(kWebSocketNormalClosure, "OK"); |
| 3057 ASSERT_TRUE(read_frames); | 3057 ASSERT_TRUE(read_frames); |
| 3058 // Provide the "Close" message from the server. | 3058 // Provide the "Close" message from the server. |
| 3059 *read_frames = CreateFrameVector(frames); | 3059 *read_frames = CreateFrameVector(frames); |
| 3060 read_callback.Run(OK); | 3060 read_callback.Run(OK); |
| 3061 completion.WaitForResult(); | 3061 completion.WaitForResult(); |
| 3062 } | 3062 } |
| 3063 | 3063 |
| 3064 } // namespace | 3064 } // namespace |
| 3065 } // namespace net | 3065 } // namespace net |
| OLD | NEW |