OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_job.h" | 5 #include "net/websockets/websocket_job.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 #include "testing/platform_test.h" | 37 #include "testing/platform_test.h" |
38 | 38 |
39 using namespace net::test_spdy2; | 39 using namespace net::test_spdy2; |
40 | 40 |
41 namespace { | 41 namespace { |
42 | 42 |
43 class MockSocketStream : public net::SocketStream { | 43 class MockSocketStream : public net::SocketStream { |
44 public: | 44 public: |
45 MockSocketStream(const GURL& url, net::SocketStream::Delegate* delegate) | 45 MockSocketStream(const GURL& url, net::SocketStream::Delegate* delegate) |
46 : SocketStream(url, delegate) {} | 46 : SocketStream(url, delegate) {} |
47 virtual ~MockSocketStream() {} | |
48 | 47 |
49 virtual void Connect() OVERRIDE {} | 48 virtual void Connect() OVERRIDE {} |
50 virtual bool SendData(const char* data, int len) OVERRIDE { | 49 virtual bool SendData(const char* data, int len) OVERRIDE { |
51 sent_data_ += std::string(data, len); | 50 sent_data_ += std::string(data, len); |
52 return true; | 51 return true; |
53 } | 52 } |
54 | 53 |
55 virtual void Close() OVERRIDE {} | 54 virtual void Close() OVERRIDE {} |
56 virtual void RestartWithAuth( | 55 virtual void RestartWithAuth( |
57 const net::AuthCredentials& credentials) OVERRIDE { | 56 const net::AuthCredentials& credentials) OVERRIDE { |
58 } | 57 } |
59 | 58 |
60 virtual void DetachDelegate() OVERRIDE { | 59 virtual void DetachDelegate() OVERRIDE { |
61 delegate_ = NULL; | 60 delegate_ = NULL; |
62 } | 61 } |
63 | 62 |
64 const std::string& sent_data() const { | 63 const std::string& sent_data() const { |
65 return sent_data_; | 64 return sent_data_; |
66 } | 65 } |
67 | 66 |
| 67 protected: |
| 68 virtual ~MockSocketStream() {} |
| 69 |
68 private: | 70 private: |
69 std::string sent_data_; | 71 std::string sent_data_; |
70 }; | 72 }; |
71 | 73 |
72 class MockSocketStreamDelegate : public net::SocketStream::Delegate { | 74 class MockSocketStreamDelegate : public net::SocketStream::Delegate { |
73 public: | 75 public: |
74 MockSocketStreamDelegate() | 76 MockSocketStreamDelegate() |
75 : amount_sent_(0), allow_all_cookies_(true) {} | 77 : amount_sent_(0), allow_all_cookies_(true) {} |
76 void set_allow_all_cookies(bool allow_all_cookies) { | 78 void set_allow_all_cookies(bool allow_all_cookies) { |
77 allow_all_cookies_ = allow_all_cookies; | 79 allow_all_cookies_ = allow_all_cookies; |
78 } | 80 } |
79 virtual ~MockSocketStreamDelegate() {} | 81 virtual ~MockSocketStreamDelegate() {} |
80 | 82 |
81 void SetOnStartOpenConnection(const base::Closure& callback) { | 83 void SetOnStartOpenConnection(const base::Closure& callback) { |
82 on_start_open_connection_ = callback; | 84 on_start_open_connection_ = callback; |
83 } | 85 } |
84 void SetOnConnected(const base::Closure& callback) { | 86 void SetOnConnected(const base::Closure& callback) { |
85 on_connected_ = callback; | 87 on_connected_ = callback; |
86 } | 88 } |
87 void SetOnSentData(const base::Closure& callback) { | 89 void SetOnSentData(const base::Closure& callback) { |
88 on_sent_data_ = callback; | 90 on_sent_data_ = callback; |
89 } | 91 } |
90 void SetOnReceivedData(const base::Closure& callback) { | 92 void SetOnReceivedData(const base::Closure& callback) { |
91 on_received_data_ = callback; | 93 on_received_data_ = callback; |
92 } | 94 } |
93 void SetOnClose(const base::Closure& callback) { | 95 void SetOnClose(const base::Closure& callback) { |
94 on_close_ = callback; | 96 on_close_ = callback; |
95 } | 97 } |
96 | 98 |
97 virtual int OnStartOpenConnection(net::SocketStream* socket, | 99 virtual int OnStartOpenConnection( |
98 const net::CompletionCallback& callback) { | 100 net::SocketStream* socket, |
| 101 const net::CompletionCallback& callback) OVERRIDE { |
99 if (!on_start_open_connection_.is_null()) | 102 if (!on_start_open_connection_.is_null()) |
100 on_start_open_connection_.Run(); | 103 on_start_open_connection_.Run(); |
101 return net::OK; | 104 return net::OK; |
102 } | 105 } |
103 virtual void OnConnected(net::SocketStream* socket, | 106 virtual void OnConnected(net::SocketStream* socket, |
104 int max_pending_send_allowed) { | 107 int max_pending_send_allowed) OVERRIDE { |
105 if (!on_connected_.is_null()) | 108 if (!on_connected_.is_null()) |
106 on_connected_.Run(); | 109 on_connected_.Run(); |
107 } | 110 } |
108 virtual void OnSentData(net::SocketStream* socket, int amount_sent) { | 111 virtual void OnSentData(net::SocketStream* socket, |
| 112 int amount_sent) OVERRIDE { |
109 amount_sent_ += amount_sent; | 113 amount_sent_ += amount_sent; |
110 if (!on_sent_data_.is_null()) | 114 if (!on_sent_data_.is_null()) |
111 on_sent_data_.Run(); | 115 on_sent_data_.Run(); |
112 } | 116 } |
113 virtual void OnReceivedData(net::SocketStream* socket, | 117 virtual void OnReceivedData(net::SocketStream* socket, |
114 const char* data, int len) { | 118 const char* data, int len) OVERRIDE { |
115 received_data_ += std::string(data, len); | 119 received_data_ += std::string(data, len); |
116 if (!on_received_data_.is_null()) | 120 if (!on_received_data_.is_null()) |
117 on_received_data_.Run(); | 121 on_received_data_.Run(); |
118 } | 122 } |
119 virtual void OnClose(net::SocketStream* socket) { | 123 virtual void OnClose(net::SocketStream* socket) { |
120 if (!on_close_.is_null()) | 124 if (!on_close_.is_null()) |
121 on_close_.Run(); | 125 on_close_.Run(); |
122 } | 126 } |
123 virtual bool CanGetCookies(net::SocketStream* socket, const GURL& url) { | 127 virtual bool CanGetCookies(net::SocketStream* socket, |
| 128 const GURL& url) OVERRIDE { |
124 return allow_all_cookies_; | 129 return allow_all_cookies_; |
125 } | 130 } |
126 virtual bool CanSetCookie(net::SocketStream* request, | 131 virtual bool CanSetCookie(net::SocketStream* request, |
127 const GURL& url, | 132 const GURL& url, |
128 const std::string& cookie_line, | 133 const std::string& cookie_line, |
129 net::CookieOptions* options) { | 134 net::CookieOptions* options) OVERRIDE { |
130 return allow_all_cookies_; | 135 return allow_all_cookies_; |
131 } | 136 } |
132 | 137 |
133 size_t amount_sent() const { return amount_sent_; } | 138 size_t amount_sent() const { return amount_sent_; } |
134 const std::string& received_data() const { return received_data_; } | 139 const std::string& received_data() const { return received_data_; } |
135 | 140 |
136 private: | 141 private: |
137 int amount_sent_; | 142 int amount_sent_; |
138 bool allow_all_cookies_; | 143 bool allow_all_cookies_; |
139 std::string received_data_; | 144 std::string received_data_; |
140 base::Closure on_start_open_connection_; | 145 base::Closure on_start_open_connection_; |
141 base::Closure on_connected_; | 146 base::Closure on_connected_; |
142 base::Closure on_sent_data_; | 147 base::Closure on_sent_data_; |
143 base::Closure on_received_data_; | 148 base::Closure on_received_data_; |
144 base::Closure on_close_; | 149 base::Closure on_close_; |
145 }; | 150 }; |
146 | 151 |
147 class MockCookieStore : public net::CookieStore { | 152 class MockCookieStore : public net::CookieStore { |
148 public: | 153 public: |
149 struct Entry { | 154 struct Entry { |
150 GURL url; | 155 GURL url; |
151 std::string cookie_line; | 156 std::string cookie_line; |
152 net::CookieOptions options; | 157 net::CookieOptions options; |
153 }; | 158 }; |
| 159 |
154 MockCookieStore() {} | 160 MockCookieStore() {} |
155 | 161 |
156 virtual bool SetCookieWithOptions(const GURL& url, | 162 bool SetCookieWithOptions(const GURL& url, |
157 const std::string& cookie_line, | 163 const std::string& cookie_line, |
158 const net::CookieOptions& options) { | 164 const net::CookieOptions& options) { |
159 Entry entry; | 165 Entry entry; |
160 entry.url = url; | 166 entry.url = url; |
161 entry.cookie_line = cookie_line; | 167 entry.cookie_line = cookie_line; |
162 entry.options = options; | 168 entry.options = options; |
163 entries_.push_back(entry); | 169 entries_.push_back(entry); |
164 return true; | 170 return true; |
165 } | 171 } |
166 | 172 |
167 virtual void SetCookieWithOptionsAsync( | 173 std::string GetCookiesWithOptions(const GURL& url, |
168 const GURL& url, | 174 const net::CookieOptions& options) { |
169 const std::string& cookie_line, | |
170 const net::CookieOptions& options, | |
171 const SetCookiesCallback& callback) { | |
172 bool result = SetCookieWithOptions(url, cookie_line, options); | |
173 if (!callback.is_null()) | |
174 callback.Run(result); | |
175 } | |
176 virtual std::string GetCookiesWithOptions( | |
177 const GURL& url, | |
178 const net::CookieOptions& options) { | |
179 std::string result; | 175 std::string result; |
180 for (size_t i = 0; i < entries_.size(); i++) { | 176 for (size_t i = 0; i < entries_.size(); i++) { |
181 Entry &entry = entries_[i]; | 177 Entry &entry = entries_[i]; |
182 if (url == entry.url) { | 178 if (url == entry.url) { |
183 if (!result.empty()) { | 179 if (!result.empty()) { |
184 result += "; "; | 180 result += "; "; |
185 } | 181 } |
186 result += entry.cookie_line; | 182 result += entry.cookie_line; |
187 } | 183 } |
188 } | 184 } |
189 return result; | 185 return result; |
190 } | 186 } |
| 187 |
| 188 // CookieStore: |
| 189 virtual void SetCookieWithOptionsAsync( |
| 190 const GURL& url, |
| 191 const std::string& cookie_line, |
| 192 const net::CookieOptions& options, |
| 193 const SetCookiesCallback& callback) OVERRIDE { |
| 194 bool result = SetCookieWithOptions(url, cookie_line, options); |
| 195 if (!callback.is_null()) |
| 196 callback.Run(result); |
| 197 } |
| 198 |
191 virtual void GetCookiesWithOptionsAsync( | 199 virtual void GetCookiesWithOptionsAsync( |
192 const GURL& url, | 200 const GURL& url, |
193 const net::CookieOptions& options, | 201 const net::CookieOptions& options, |
194 const GetCookiesCallback& callback) { | 202 const GetCookiesCallback& callback) OVERRIDE { |
195 if (!callback.is_null()) | 203 if (!callback.is_null()) |
196 callback.Run(GetCookiesWithOptions(url, options)); | 204 callback.Run(GetCookiesWithOptions(url, options)); |
197 } | 205 } |
198 virtual void GetCookiesWithInfo(const GURL& url, | 206 |
199 const net::CookieOptions& options, | |
200 std::string* cookie_line, | |
201 std::vector<CookieInfo>* cookie_infos) { | |
202 ADD_FAILURE(); | |
203 } | |
204 virtual void GetCookiesWithInfoAsync( | 207 virtual void GetCookiesWithInfoAsync( |
205 const GURL& url, | 208 const GURL& url, |
206 const net::CookieOptions& options, | 209 const net::CookieOptions& options, |
207 const GetCookieInfoCallback& callback) { | 210 const GetCookieInfoCallback& callback) OVERRIDE { |
208 ADD_FAILURE(); | |
209 } | |
210 virtual void DeleteCookie(const GURL& url, | |
211 const std::string& cookie_name) { | |
212 ADD_FAILURE(); | |
213 } | |
214 virtual void DeleteCookieAsync(const GURL& url, | |
215 const std::string& cookie_name, | |
216 const base::Closure& callback) { | |
217 ADD_FAILURE(); | |
218 } | |
219 virtual void DeleteAllCreatedBetweenAsync(const base::Time& delete_begin, | |
220 const base::Time& delete_end, | |
221 const DeleteCallback& callback) { | |
222 ADD_FAILURE(); | |
223 } | |
224 virtual void DeleteSessionCookiesAsync(const DeleteCallback&) { | |
225 ADD_FAILURE(); | 211 ADD_FAILURE(); |
226 } | 212 } |
227 | 213 |
228 virtual net::CookieMonster* GetCookieMonster() { return NULL; } | 214 virtual void DeleteCookieAsync(const GURL& url, |
| 215 const std::string& cookie_name, |
| 216 const base::Closure& callback) OVERRIDE { |
| 217 ADD_FAILURE(); |
| 218 } |
| 219 |
| 220 virtual void DeleteAllCreatedBetweenAsync( |
| 221 const base::Time& delete_begin, |
| 222 const base::Time& delete_end, |
| 223 const DeleteCallback& callback) OVERRIDE { |
| 224 ADD_FAILURE(); |
| 225 } |
| 226 |
| 227 virtual void DeleteSessionCookiesAsync(const DeleteCallback&) OVERRIDE { |
| 228 ADD_FAILURE(); |
| 229 } |
| 230 |
| 231 virtual net::CookieMonster* GetCookieMonster() OVERRIDE { return NULL; } |
229 | 232 |
230 const std::vector<Entry>& entries() const { return entries_; } | 233 const std::vector<Entry>& entries() const { return entries_; } |
231 | 234 |
232 private: | 235 private: |
233 friend class base::RefCountedThreadSafe<MockCookieStore>; | 236 friend class base::RefCountedThreadSafe<MockCookieStore>; |
234 virtual ~MockCookieStore() {} | 237 virtual ~MockCookieStore() {} |
235 | 238 |
236 std::vector<Entry> entries_; | 239 std::vector<Entry> entries_; |
237 }; | 240 }; |
238 | 241 |
239 class MockSSLConfigService : public net::SSLConfigService { | 242 class MockSSLConfigService : public net::SSLConfigService { |
240 public: | 243 public: |
241 virtual void GetSSLConfig(net::SSLConfig* config) {}; | 244 virtual void GetSSLConfig(net::SSLConfig* config) OVERRIDE {} |
| 245 |
| 246 protected: |
| 247 virtual ~MockSSLConfigService() {} |
242 }; | 248 }; |
243 | 249 |
244 class MockURLRequestContext : public net::URLRequestContext { | 250 class MockURLRequestContext : public net::URLRequestContext { |
245 public: | 251 public: |
246 explicit MockURLRequestContext(net::CookieStore* cookie_store) | 252 explicit MockURLRequestContext(net::CookieStore* cookie_store) |
247 : transport_security_state_(std::string()) { | 253 : transport_security_state_(std::string()) { |
248 set_cookie_store(cookie_store); | 254 set_cookie_store(cookie_store); |
249 set_transport_security_state(&transport_security_state_); | 255 set_transport_security_state(&transport_security_state_); |
250 net::TransportSecurityState::DomainState state; | 256 net::TransportSecurityState::DomainState state; |
251 state.expiry = base::Time::Now() + base::TimeDelta::FromSeconds(1000); | 257 state.expiry = base::Time::Now() + base::TimeDelta::FromSeconds(1000); |
252 transport_security_state_.EnableHost("upgrademe.com", state); | 258 transport_security_state_.EnableHost("upgrademe.com", state); |
253 } | 259 } |
254 | 260 |
255 private: | 261 protected: |
256 friend class base::RefCountedThreadSafe<MockURLRequestContext>; | 262 friend class base::RefCountedThreadSafe<MockURLRequestContext>; |
257 virtual ~MockURLRequestContext() {} | 263 virtual ~MockURLRequestContext() {} |
258 | 264 |
| 265 private: |
259 net::TransportSecurityState transport_security_state_; | 266 net::TransportSecurityState transport_security_state_; |
260 }; | 267 }; |
261 | 268 |
262 class MockHttpTransactionFactory : public net::HttpTransactionFactory { | 269 class MockHttpTransactionFactory : public net::HttpTransactionFactory { |
263 public: | 270 public: |
264 MockHttpTransactionFactory(net::OrderedSocketData* data) { | 271 MockHttpTransactionFactory(net::OrderedSocketData* data) { |
265 data_ = data; | 272 data_ = data; |
266 net::MockConnect connect_data(net::SYNCHRONOUS, net::OK); | 273 net::MockConnect connect_data(net::SYNCHRONOUS, net::OK); |
267 data_->set_connect_data(connect_data); | 274 data_->set_connect_data(connect_data); |
268 session_deps_.reset(new SpdySessionDependencies); | 275 session_deps_.reset(new SpdySessionDependencies); |
(...skipping 19 matching lines...) Expand all Loading... |
288 net::ClientSocketHandle* connection = new net::ClientSocketHandle; | 295 net::ClientSocketHandle* connection = new net::ClientSocketHandle; |
289 EXPECT_EQ(net::OK, | 296 EXPECT_EQ(net::OK, |
290 connection->Init(host_port_pair_.ToString(), transport_params_, | 297 connection->Init(host_port_pair_.ToString(), transport_params_, |
291 net::MEDIUM, net::CompletionCallback(), | 298 net::MEDIUM, net::CompletionCallback(), |
292 http_session_->GetTransportSocketPool( | 299 http_session_->GetTransportSocketPool( |
293 net::HttpNetworkSession::NORMAL_SOCKET_POOL), | 300 net::HttpNetworkSession::NORMAL_SOCKET_POOL), |
294 net::BoundNetLog())); | 301 net::BoundNetLog())); |
295 EXPECT_EQ(net::OK, | 302 EXPECT_EQ(net::OK, |
296 session_->InitializeWithSocket(connection, false, net::OK)); | 303 session_->InitializeWithSocket(connection, false, net::OK)); |
297 } | 304 } |
298 virtual int CreateTransaction(scoped_ptr<net::HttpTransaction>* trans) { | 305 |
| 306 virtual int CreateTransaction( |
| 307 scoped_ptr<net::HttpTransaction>* trans) OVERRIDE { |
299 NOTREACHED(); | 308 NOTREACHED(); |
300 return net::ERR_UNEXPECTED; | 309 return net::ERR_UNEXPECTED; |
301 } | 310 } |
302 virtual net::HttpCache* GetCache() { | 311 |
| 312 virtual net::HttpCache* GetCache() OVERRIDE { |
303 NOTREACHED(); | 313 NOTREACHED(); |
304 return NULL; | 314 return NULL; |
305 } | 315 } |
306 virtual net::HttpNetworkSession* GetSession() { | 316 |
| 317 virtual net::HttpNetworkSession* GetSession() OVERRIDE { |
307 return http_session_.get(); | 318 return http_session_.get(); |
308 } | 319 } |
| 320 |
309 private: | 321 private: |
310 net::OrderedSocketData* data_; | 322 net::OrderedSocketData* data_; |
311 scoped_ptr<SpdySessionDependencies> session_deps_; | 323 scoped_ptr<SpdySessionDependencies> session_deps_; |
312 scoped_refptr<net::HttpNetworkSession> http_session_; | 324 scoped_refptr<net::HttpNetworkSession> http_session_; |
313 scoped_refptr<net::TransportSocketParams> transport_params_; | 325 scoped_refptr<net::TransportSocketParams> transport_params_; |
314 scoped_refptr<net::SpdySession> session_; | 326 scoped_refptr<net::SpdySession> session_; |
315 net::HostPortPair host_port_pair_; | 327 net::HostPortPair host_port_pair_; |
316 net::HostPortProxyPair host_port_proxy_pair_; | 328 net::HostPortProxyPair host_port_proxy_pair_; |
317 }; | 329 }; |
318 } // namespace | 330 } // namespace |
319 | 331 |
320 namespace net { | 332 namespace net { |
321 | 333 |
322 class WebSocketJobSpdy2Test : public PlatformTest { | 334 class WebSocketJobSpdy2Test : public PlatformTest { |
323 public: | 335 public: |
324 virtual void SetUp() { | 336 virtual void SetUp() OVERRIDE { |
325 SpdySession::set_default_protocol(kProtoSPDY2); | 337 SpdySession::set_default_protocol(kProtoSPDY2); |
326 stream_type_ = STREAM_INVALID; | 338 stream_type_ = STREAM_INVALID; |
327 cookie_store_ = new MockCookieStore; | 339 cookie_store_ = new MockCookieStore; |
328 context_ = new MockURLRequestContext(cookie_store_.get()); | 340 context_ = new MockURLRequestContext(cookie_store_.get()); |
329 } | 341 } |
330 virtual void TearDown() { | 342 virtual void TearDown() OVERRIDE { |
331 cookie_store_ = NULL; | 343 cookie_store_ = NULL; |
332 context_ = NULL; | 344 context_ = NULL; |
333 websocket_ = NULL; | 345 websocket_ = NULL; |
334 socket_ = NULL; | 346 socket_ = NULL; |
335 } | 347 } |
336 void DoSendRequest() { | 348 void DoSendRequest() { |
337 EXPECT_TRUE(websocket_->SendData(kHandshakeRequestWithoutCookie, | 349 EXPECT_TRUE(websocket_->SendData(kHandshakeRequestWithoutCookie, |
338 kHandshakeRequestWithoutCookieLength)); | 350 kHandshakeRequestWithoutCookieLength)); |
339 } | 351 } |
340 void DoSendData() { | 352 void DoSendData() { |
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1097 | 1109 |
1098 TEST_F(WebSocketJobSpdy2Test, ThrottlingSpdySpdyEnabled) { | 1110 TEST_F(WebSocketJobSpdy2Test, ThrottlingSpdySpdyEnabled) { |
1099 WebSocketJob::set_websocket_over_spdy_enabled(true); | 1111 WebSocketJob::set_websocket_over_spdy_enabled(true); |
1100 TestConnectBySpdy(SPDY_ON, THROTTLING_ON); | 1112 TestConnectBySpdy(SPDY_ON, THROTTLING_ON); |
1101 } | 1113 } |
1102 | 1114 |
1103 // TODO(toyoshim): Add tests to verify throttling, SPDY stream limitation. | 1115 // TODO(toyoshim): Add tests to verify throttling, SPDY stream limitation. |
1104 // TODO(toyoshim,yutak): Add tests to verify closing handshake. | 1116 // TODO(toyoshim,yutak): Add tests to verify closing handshake. |
1105 | 1117 |
1106 } // namespace net | 1118 } // namespace net |
OLD | NEW |