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> | 7 #include <limits.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include <iostream> | 10 #include <iostream> |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 // kDefaultSendQuotaLowWaterMark change. | 129 // kDefaultSendQuotaLowWaterMark change. |
130 const size_t kDefaultQuotaRefreshTrigger = (1 << 16) + 1; | 130 const size_t kDefaultQuotaRefreshTrigger = (1 << 16) + 1; |
131 | 131 |
132 const int kVeryBigTimeoutMillis = 60 * 60 * 24 * 1000; | 132 const int kVeryBigTimeoutMillis = 60 * 60 * 24 * 1000; |
133 | 133 |
134 // TestTimeouts::tiny_timeout() is 100ms! I could run halfway around the world | 134 // TestTimeouts::tiny_timeout() is 100ms! I could run halfway around the world |
135 // in that time! I would like my tests to run a bit quicker. | 135 // in that time! I would like my tests to run a bit quicker. |
136 const int kVeryTinyTimeoutMillis = 1; | 136 const int kVeryTinyTimeoutMillis = 1; |
137 | 137 |
138 // Enough quota to pass any test. | 138 // Enough quota to pass any test. |
139 const int64 kPlentyOfQuota = INT_MAX; | 139 const int64_t kPlentyOfQuota = INT_MAX; |
140 | 140 |
141 typedef WebSocketEventInterface::ChannelState ChannelState; | 141 typedef WebSocketEventInterface::ChannelState ChannelState; |
142 const ChannelState CHANNEL_ALIVE = WebSocketEventInterface::CHANNEL_ALIVE; | 142 const ChannelState CHANNEL_ALIVE = WebSocketEventInterface::CHANNEL_ALIVE; |
143 const ChannelState CHANNEL_DELETED = WebSocketEventInterface::CHANNEL_DELETED; | 143 const ChannelState CHANNEL_DELETED = WebSocketEventInterface::CHANNEL_DELETED; |
144 | 144 |
145 // This typedef mainly exists to avoid having to repeat the "NOLINT" incantation | 145 // This typedef mainly exists to avoid having to repeat the "NOLINT" incantation |
146 // all over the place. | 146 // all over the place. |
147 typedef StrictMock< MockFunction<void(int)> > Checkpoint; // NOLINT | 147 typedef StrictMock< MockFunction<void(int)> > Checkpoint; // NOLINT |
148 | 148 |
149 // This mock is for testing expectations about how the EventInterface is used. | 149 // This mock is for testing expectations about how the EventInterface is used. |
150 class MockWebSocketEventInterface : public WebSocketEventInterface { | 150 class MockWebSocketEventInterface : public WebSocketEventInterface { |
151 public: | 151 public: |
152 MockWebSocketEventInterface() {} | 152 MockWebSocketEventInterface() {} |
153 | 153 |
154 MOCK_METHOD2(OnAddChannelResponse, | 154 MOCK_METHOD2(OnAddChannelResponse, |
155 ChannelState(const std::string&, | 155 ChannelState(const std::string&, |
156 const std::string&)); // NOLINT | 156 const std::string&)); // NOLINT |
157 MOCK_METHOD3(OnDataFrame, | 157 MOCK_METHOD3(OnDataFrame, |
158 ChannelState(bool, | 158 ChannelState(bool, |
159 WebSocketMessageType, | 159 WebSocketMessageType, |
160 const std::vector<char>&)); // NOLINT | 160 const std::vector<char>&)); // NOLINT |
161 MOCK_METHOD1(OnFlowControl, ChannelState(int64)); // NOLINT | 161 MOCK_METHOD1(OnFlowControl, ChannelState(int64_t)); // NOLINT |
162 MOCK_METHOD0(OnClosingHandshake, ChannelState(void)); // NOLINT | 162 MOCK_METHOD0(OnClosingHandshake, ChannelState(void)); // NOLINT |
163 MOCK_METHOD1(OnFailChannel, ChannelState(const std::string&)); // NOLINT | 163 MOCK_METHOD1(OnFailChannel, ChannelState(const std::string&)); // NOLINT |
164 MOCK_METHOD3(OnDropChannel, | 164 MOCK_METHOD3(OnDropChannel, |
165 ChannelState(bool, uint16, const std::string&)); // NOLINT | 165 ChannelState(bool, uint16_t, const std::string&)); // NOLINT |
166 | 166 |
167 // We can't use GMock with scoped_ptr. | 167 // We can't use GMock with scoped_ptr. |
168 ChannelState OnStartOpeningHandshake( | 168 ChannelState OnStartOpeningHandshake( |
169 scoped_ptr<WebSocketHandshakeRequestInfo>) override { | 169 scoped_ptr<WebSocketHandshakeRequestInfo>) override { |
170 OnStartOpeningHandshakeCalled(); | 170 OnStartOpeningHandshakeCalled(); |
171 return CHANNEL_ALIVE; | 171 return CHANNEL_ALIVE; |
172 } | 172 } |
173 ChannelState OnFinishOpeningHandshake( | 173 ChannelState OnFinishOpeningHandshake( |
174 scoped_ptr<WebSocketHandshakeResponseInfo>) override { | 174 scoped_ptr<WebSocketHandshakeResponseInfo>) override { |
175 OnFinishOpeningHandshakeCalled(); | 175 OnFinishOpeningHandshakeCalled(); |
(...skipping 21 matching lines...) Expand all Loading... |
197 class FakeWebSocketEventInterface : public WebSocketEventInterface { | 197 class FakeWebSocketEventInterface : public WebSocketEventInterface { |
198 ChannelState OnAddChannelResponse(const std::string& selected_protocol, | 198 ChannelState OnAddChannelResponse(const std::string& selected_protocol, |
199 const std::string& extensions) override { | 199 const std::string& extensions) override { |
200 return CHANNEL_ALIVE; | 200 return CHANNEL_ALIVE; |
201 } | 201 } |
202 ChannelState OnDataFrame(bool fin, | 202 ChannelState OnDataFrame(bool fin, |
203 WebSocketMessageType type, | 203 WebSocketMessageType type, |
204 const std::vector<char>& data) override { | 204 const std::vector<char>& data) override { |
205 return CHANNEL_ALIVE; | 205 return CHANNEL_ALIVE; |
206 } | 206 } |
207 ChannelState OnFlowControl(int64 quota) override { return CHANNEL_ALIVE; } | 207 ChannelState OnFlowControl(int64_t quota) override { return CHANNEL_ALIVE; } |
208 ChannelState OnClosingHandshake() override { return CHANNEL_ALIVE; } | 208 ChannelState OnClosingHandshake() override { return CHANNEL_ALIVE; } |
209 ChannelState OnFailChannel(const std::string& message) override { | 209 ChannelState OnFailChannel(const std::string& message) override { |
210 return CHANNEL_DELETED; | 210 return CHANNEL_DELETED; |
211 } | 211 } |
212 ChannelState OnDropChannel(bool was_clean, | 212 ChannelState OnDropChannel(bool was_clean, |
213 uint16 code, | 213 uint16_t code, |
214 const std::string& reason) override { | 214 const std::string& reason) override { |
215 return CHANNEL_DELETED; | 215 return CHANNEL_DELETED; |
216 } | 216 } |
217 ChannelState OnStartOpeningHandshake( | 217 ChannelState OnStartOpeningHandshake( |
218 scoped_ptr<WebSocketHandshakeRequestInfo> request) override { | 218 scoped_ptr<WebSocketHandshakeRequestInfo> request) override { |
219 return CHANNEL_ALIVE; | 219 return CHANNEL_ALIVE; |
220 } | 220 } |
221 ChannelState OnFinishOpeningHandshake( | 221 ChannelState OnFinishOpeningHandshake( |
222 scoped_ptr<WebSocketHandshakeResponseInfo> response) override { | 222 scoped_ptr<WebSocketHandshakeResponseInfo> response) override { |
223 return CHANNEL_ALIVE; | 223 return CHANNEL_ALIVE; |
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 const std::string& extensions) override { | 849 const std::string& extensions) override { |
850 return fixture_->DeleteIfDeleting(EVENT_ON_ADD_CHANNEL_RESPONSE); | 850 return fixture_->DeleteIfDeleting(EVENT_ON_ADD_CHANNEL_RESPONSE); |
851 } | 851 } |
852 | 852 |
853 ChannelState OnDataFrame(bool fin, | 853 ChannelState OnDataFrame(bool fin, |
854 WebSocketMessageType type, | 854 WebSocketMessageType type, |
855 const std::vector<char>& data) override { | 855 const std::vector<char>& data) override { |
856 return fixture_->DeleteIfDeleting(EVENT_ON_DATA_FRAME); | 856 return fixture_->DeleteIfDeleting(EVENT_ON_DATA_FRAME); |
857 } | 857 } |
858 | 858 |
859 ChannelState OnFlowControl(int64 quota) override { | 859 ChannelState OnFlowControl(int64_t quota) override { |
860 return fixture_->DeleteIfDeleting(EVENT_ON_FLOW_CONTROL); | 860 return fixture_->DeleteIfDeleting(EVENT_ON_FLOW_CONTROL); |
861 } | 861 } |
862 | 862 |
863 ChannelState OnClosingHandshake() override { | 863 ChannelState OnClosingHandshake() override { |
864 return fixture_->DeleteIfDeleting(EVENT_ON_CLOSING_HANDSHAKE); | 864 return fixture_->DeleteIfDeleting(EVENT_ON_CLOSING_HANDSHAKE); |
865 } | 865 } |
866 | 866 |
867 ChannelState OnFailChannel(const std::string& message) override { | 867 ChannelState OnFailChannel(const std::string& message) override { |
868 return fixture_->DeleteIfDeleting(EVENT_ON_FAIL_CHANNEL); | 868 return fixture_->DeleteIfDeleting(EVENT_ON_FAIL_CHANNEL); |
869 } | 869 } |
870 | 870 |
871 ChannelState OnDropChannel(bool was_clean, | 871 ChannelState OnDropChannel(bool was_clean, |
872 uint16 code, | 872 uint16_t code, |
873 const std::string& reason) override { | 873 const std::string& reason) override { |
874 return fixture_->DeleteIfDeleting(EVENT_ON_DROP_CHANNEL); | 874 return fixture_->DeleteIfDeleting(EVENT_ON_DROP_CHANNEL); |
875 } | 875 } |
876 | 876 |
877 ChannelState OnStartOpeningHandshake( | 877 ChannelState OnStartOpeningHandshake( |
878 scoped_ptr<WebSocketHandshakeRequestInfo> request) override { | 878 scoped_ptr<WebSocketHandshakeRequestInfo> request) override { |
879 return fixture_->DeleteIfDeleting(EVENT_ON_START_OPENING_HANDSHAKE); | 879 return fixture_->DeleteIfDeleting(EVENT_ON_START_OPENING_HANDSHAKE); |
880 } | 880 } |
881 ChannelState OnFinishOpeningHandshake( | 881 ChannelState OnFinishOpeningHandshake( |
882 scoped_ptr<WebSocketHandshakeResponseInfo> response) override { | 882 scoped_ptr<WebSocketHandshakeResponseInfo> response) override { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
960 .Times(AnyNumber()); | 960 .Times(AnyNumber()); |
961 } | 961 } |
962 }; | 962 }; |
963 | 963 |
964 // Fixture for tests which test use of receive quota from the renderer. | 964 // Fixture for tests which test use of receive quota from the renderer. |
965 class WebSocketChannelFlowControlTest | 965 class WebSocketChannelFlowControlTest |
966 : public WebSocketChannelEventInterfaceTest { | 966 : public WebSocketChannelEventInterfaceTest { |
967 protected: | 967 protected: |
968 // Tests using this fixture should use CreateChannelAndConnectWithQuota() | 968 // Tests using this fixture should use CreateChannelAndConnectWithQuota() |
969 // instead of CreateChannelAndConnectSuccessfully(). | 969 // instead of CreateChannelAndConnectSuccessfully(). |
970 void CreateChannelAndConnectWithQuota(int64 quota) { | 970 void CreateChannelAndConnectWithQuota(int64_t quota) { |
971 CreateChannelAndConnect(); | 971 CreateChannelAndConnect(); |
972 channel_->SendFlowControl(quota); | 972 channel_->SendFlowControl(quota); |
973 connect_data_.creator.connect_delegate->OnSuccess(stream_.Pass()); | 973 connect_data_.creator.connect_delegate->OnSuccess(stream_.Pass()); |
974 } | 974 } |
975 | 975 |
976 virtual void CreateChannelAndConnectSuccesfully() { NOTREACHED(); } | 976 virtual void CreateChannelAndConnectSuccesfully() { NOTREACHED(); } |
977 }; | 977 }; |
978 | 978 |
979 // Fixture for tests which test UTF-8 validation of received Text frames using a | 979 // Fixture for tests which test UTF-8 validation of received Text frames using a |
980 // mock WebSocketStream. | 980 // mock WebSocketStream. |
(...skipping 2427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3408 channel_->StartClosingHandshake(kWebSocketNormalClosure, "OK"); | 3408 channel_->StartClosingHandshake(kWebSocketNormalClosure, "OK"); |
3409 ASSERT_TRUE(read_frames); | 3409 ASSERT_TRUE(read_frames); |
3410 // Provide the "Close" message from the server. | 3410 // Provide the "Close" message from the server. |
3411 *read_frames = CreateFrameVector(frames); | 3411 *read_frames = CreateFrameVector(frames); |
3412 read_callback.Run(OK); | 3412 read_callback.Run(OK); |
3413 completion.WaitForResult(); | 3413 completion.WaitForResult(); |
3414 } | 3414 } |
3415 | 3415 |
3416 } // namespace | 3416 } // namespace |
3417 } // namespace net | 3417 } // namespace net |
OLD | NEW |