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_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 27 matching lines...) Expand all Loading... |
38 namespace net { | 38 namespace net { |
39 | 39 |
40 namespace { | 40 namespace { |
41 | 41 |
42 class MockSocketStream : public SocketStream { | 42 class MockSocketStream : public SocketStream { |
43 public: | 43 public: |
44 MockSocketStream(const GURL& url, SocketStream::Delegate* delegate, | 44 MockSocketStream(const GURL& url, SocketStream::Delegate* delegate, |
45 URLRequestContext* context, CookieStore* cookie_store) | 45 URLRequestContext* context, CookieStore* cookie_store) |
46 : SocketStream(url, delegate, context, cookie_store) {} | 46 : SocketStream(url, delegate, context, cookie_store) {} |
47 | 47 |
48 virtual void Connect() OVERRIDE {} | 48 virtual void Connect() override {} |
49 virtual bool SendData(const char* data, int len) OVERRIDE { | 49 virtual bool SendData(const char* data, int len) override { |
50 sent_data_ += std::string(data, len); | 50 sent_data_ += std::string(data, len); |
51 return true; | 51 return true; |
52 } | 52 } |
53 | 53 |
54 virtual void Close() OVERRIDE {} | 54 virtual void Close() override {} |
55 virtual void RestartWithAuth( | 55 virtual void RestartWithAuth( |
56 const AuthCredentials& credentials) OVERRIDE { | 56 const AuthCredentials& credentials) override { |
57 } | 57 } |
58 | 58 |
59 virtual void DetachDelegate() OVERRIDE { | 59 virtual void DetachDelegate() override { |
60 delegate_ = NULL; | 60 delegate_ = NULL; |
61 } | 61 } |
62 | 62 |
63 const std::string& sent_data() const { | 63 const std::string& sent_data() const { |
64 return sent_data_; | 64 return sent_data_; |
65 } | 65 } |
66 | 66 |
67 protected: | 67 protected: |
68 virtual ~MockSocketStream() {} | 68 virtual ~MockSocketStream() {} |
69 | 69 |
(...skipping 21 matching lines...) Expand all Loading... |
91 } | 91 } |
92 void SetOnReceivedData(const base::Closure& callback) { | 92 void SetOnReceivedData(const base::Closure& callback) { |
93 on_received_data_ = callback; | 93 on_received_data_ = callback; |
94 } | 94 } |
95 void SetOnClose(const base::Closure& callback) { | 95 void SetOnClose(const base::Closure& callback) { |
96 on_close_ = callback; | 96 on_close_ = callback; |
97 } | 97 } |
98 | 98 |
99 virtual int OnStartOpenConnection( | 99 virtual int OnStartOpenConnection( |
100 SocketStream* socket, | 100 SocketStream* socket, |
101 const CompletionCallback& callback) OVERRIDE { | 101 const CompletionCallback& callback) override { |
102 if (!on_start_open_connection_.is_null()) | 102 if (!on_start_open_connection_.is_null()) |
103 on_start_open_connection_.Run(); | 103 on_start_open_connection_.Run(); |
104 return OK; | 104 return OK; |
105 } | 105 } |
106 virtual void OnConnected(SocketStream* socket, | 106 virtual void OnConnected(SocketStream* socket, |
107 int max_pending_send_allowed) OVERRIDE { | 107 int max_pending_send_allowed) override { |
108 if (!on_connected_.is_null()) | 108 if (!on_connected_.is_null()) |
109 on_connected_.Run(); | 109 on_connected_.Run(); |
110 } | 110 } |
111 virtual void OnSentData(SocketStream* socket, | 111 virtual void OnSentData(SocketStream* socket, |
112 int amount_sent) OVERRIDE { | 112 int amount_sent) override { |
113 amount_sent_ += amount_sent; | 113 amount_sent_ += amount_sent; |
114 if (!on_sent_data_.is_null()) | 114 if (!on_sent_data_.is_null()) |
115 on_sent_data_.Run(); | 115 on_sent_data_.Run(); |
116 } | 116 } |
117 virtual void OnReceivedData(SocketStream* socket, | 117 virtual void OnReceivedData(SocketStream* socket, |
118 const char* data, int len) OVERRIDE { | 118 const char* data, int len) override { |
119 received_data_ += std::string(data, len); | 119 received_data_ += std::string(data, len); |
120 if (!on_received_data_.is_null()) | 120 if (!on_received_data_.is_null()) |
121 on_received_data_.Run(); | 121 on_received_data_.Run(); |
122 } | 122 } |
123 virtual void OnClose(SocketStream* socket) OVERRIDE { | 123 virtual void OnClose(SocketStream* socket) override { |
124 if (!on_close_.is_null()) | 124 if (!on_close_.is_null()) |
125 on_close_.Run(); | 125 on_close_.Run(); |
126 } | 126 } |
127 virtual bool CanGetCookies(SocketStream* socket, | 127 virtual bool CanGetCookies(SocketStream* socket, |
128 const GURL& url) OVERRIDE { | 128 const GURL& url) override { |
129 return allow_all_cookies_; | 129 return allow_all_cookies_; |
130 } | 130 } |
131 virtual bool CanSetCookie(SocketStream* request, | 131 virtual bool CanSetCookie(SocketStream* request, |
132 const GURL& url, | 132 const GURL& url, |
133 const std::string& cookie_line, | 133 const std::string& cookie_line, |
134 CookieOptions* options) OVERRIDE { | 134 CookieOptions* options) override { |
135 return allow_all_cookies_; | 135 return allow_all_cookies_; |
136 } | 136 } |
137 | 137 |
138 size_t amount_sent() const { return amount_sent_; } | 138 size_t amount_sent() const { return amount_sent_; } |
139 const std::string& received_data() const { return received_data_; } | 139 const std::string& received_data() const { return received_data_; } |
140 | 140 |
141 private: | 141 private: |
142 int amount_sent_; | 142 int amount_sent_; |
143 bool allow_all_cookies_; | 143 bool allow_all_cookies_; |
144 std::string received_data_; | 144 std::string received_data_; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 } | 183 } |
184 } | 184 } |
185 return result; | 185 return result; |
186 } | 186 } |
187 | 187 |
188 // CookieStore: | 188 // CookieStore: |
189 virtual void SetCookieWithOptionsAsync( | 189 virtual void SetCookieWithOptionsAsync( |
190 const GURL& url, | 190 const GURL& url, |
191 const std::string& cookie_line, | 191 const std::string& cookie_line, |
192 const CookieOptions& options, | 192 const CookieOptions& options, |
193 const SetCookiesCallback& callback) OVERRIDE { | 193 const SetCookiesCallback& callback) override { |
194 bool result = SetCookieWithOptions(url, cookie_line, options); | 194 bool result = SetCookieWithOptions(url, cookie_line, options); |
195 if (!callback.is_null()) | 195 if (!callback.is_null()) |
196 callback.Run(result); | 196 callback.Run(result); |
197 } | 197 } |
198 | 198 |
199 virtual void GetCookiesWithOptionsAsync( | 199 virtual void GetCookiesWithOptionsAsync( |
200 const GURL& url, | 200 const GURL& url, |
201 const CookieOptions& options, | 201 const CookieOptions& options, |
202 const GetCookiesCallback& callback) OVERRIDE { | 202 const GetCookiesCallback& callback) override { |
203 if (!callback.is_null()) | 203 if (!callback.is_null()) |
204 callback.Run(GetCookiesWithOptions(url, options)); | 204 callback.Run(GetCookiesWithOptions(url, options)); |
205 } | 205 } |
206 | 206 |
207 virtual void GetAllCookiesForURLAsync( | 207 virtual void GetAllCookiesForURLAsync( |
208 const GURL& url, | 208 const GURL& url, |
209 const GetCookieListCallback& callback) OVERRIDE { | 209 const GetCookieListCallback& callback) override { |
210 ADD_FAILURE(); | 210 ADD_FAILURE(); |
211 } | 211 } |
212 | 212 |
213 virtual void DeleteCookieAsync(const GURL& url, | 213 virtual void DeleteCookieAsync(const GURL& url, |
214 const std::string& cookie_name, | 214 const std::string& cookie_name, |
215 const base::Closure& callback) OVERRIDE { | 215 const base::Closure& callback) override { |
216 ADD_FAILURE(); | 216 ADD_FAILURE(); |
217 } | 217 } |
218 | 218 |
219 virtual void DeleteAllCreatedBetweenAsync( | 219 virtual void DeleteAllCreatedBetweenAsync( |
220 const base::Time& delete_begin, | 220 const base::Time& delete_begin, |
221 const base::Time& delete_end, | 221 const base::Time& delete_end, |
222 const DeleteCallback& callback) OVERRIDE { | 222 const DeleteCallback& callback) override { |
223 ADD_FAILURE(); | 223 ADD_FAILURE(); |
224 } | 224 } |
225 | 225 |
226 virtual void DeleteAllCreatedBetweenForHostAsync( | 226 virtual void DeleteAllCreatedBetweenForHostAsync( |
227 const base::Time delete_begin, | 227 const base::Time delete_begin, |
228 const base::Time delete_end, | 228 const base::Time delete_end, |
229 const GURL& url, | 229 const GURL& url, |
230 const DeleteCallback& callback) OVERRIDE { | 230 const DeleteCallback& callback) override { |
231 ADD_FAILURE(); | 231 ADD_FAILURE(); |
232 } | 232 } |
233 | 233 |
234 virtual void DeleteSessionCookiesAsync(const DeleteCallback&) OVERRIDE { | 234 virtual void DeleteSessionCookiesAsync(const DeleteCallback&) override { |
235 ADD_FAILURE(); | 235 ADD_FAILURE(); |
236 } | 236 } |
237 | 237 |
238 virtual CookieMonster* GetCookieMonster() OVERRIDE { return NULL; } | 238 virtual CookieMonster* GetCookieMonster() override { return NULL; } |
239 | 239 |
240 const std::vector<Entry>& entries() const { return entries_; } | 240 const std::vector<Entry>& entries() const { return entries_; } |
241 | 241 |
242 private: | 242 private: |
243 friend class base::RefCountedThreadSafe<MockCookieStore>; | 243 friend class base::RefCountedThreadSafe<MockCookieStore>; |
244 virtual ~MockCookieStore() {} | 244 virtual ~MockCookieStore() {} |
245 | 245 |
246 std::vector<Entry> entries_; | 246 std::vector<Entry> entries_; |
247 }; | 247 }; |
248 | 248 |
249 class MockSSLConfigService : public SSLConfigService { | 249 class MockSSLConfigService : public SSLConfigService { |
250 public: | 250 public: |
251 virtual void GetSSLConfig(SSLConfig* config) OVERRIDE {} | 251 virtual void GetSSLConfig(SSLConfig* config) override {} |
252 | 252 |
253 protected: | 253 protected: |
254 virtual ~MockSSLConfigService() {} | 254 virtual ~MockSSLConfigService() {} |
255 }; | 255 }; |
256 | 256 |
257 class MockURLRequestContext : public URLRequestContext { | 257 class MockURLRequestContext : public URLRequestContext { |
258 public: | 258 public: |
259 explicit MockURLRequestContext(CookieStore* cookie_store) | 259 explicit MockURLRequestContext(CookieStore* cookie_store) |
260 : transport_security_state_() { | 260 : transport_security_state_() { |
261 set_cookie_store(cookie_store); | 261 set_cookie_store(cookie_store); |
(...skipping 29 matching lines...) Expand all Loading... |
291 host_port_pair_.set_port(80); | 291 host_port_pair_.set_port(80); |
292 spdy_session_key_ = SpdySessionKey(host_port_pair_, | 292 spdy_session_key_ = SpdySessionKey(host_port_pair_, |
293 ProxyServer::Direct(), | 293 ProxyServer::Direct(), |
294 PRIVACY_MODE_DISABLED); | 294 PRIVACY_MODE_DISABLED); |
295 session_ = CreateInsecureSpdySession( | 295 session_ = CreateInsecureSpdySession( |
296 http_session_, spdy_session_key_, BoundNetLog()); | 296 http_session_, spdy_session_key_, BoundNetLog()); |
297 } | 297 } |
298 | 298 |
299 virtual int CreateTransaction( | 299 virtual int CreateTransaction( |
300 RequestPriority priority, | 300 RequestPriority priority, |
301 scoped_ptr<HttpTransaction>* trans) OVERRIDE { | 301 scoped_ptr<HttpTransaction>* trans) override { |
302 NOTREACHED(); | 302 NOTREACHED(); |
303 return ERR_UNEXPECTED; | 303 return ERR_UNEXPECTED; |
304 } | 304 } |
305 | 305 |
306 virtual HttpCache* GetCache() OVERRIDE { | 306 virtual HttpCache* GetCache() override { |
307 NOTREACHED(); | 307 NOTREACHED(); |
308 return NULL; | 308 return NULL; |
309 } | 309 } |
310 | 310 |
311 virtual HttpNetworkSession* GetSession() OVERRIDE { | 311 virtual HttpNetworkSession* GetSession() override { |
312 return http_session_.get(); | 312 return http_session_.get(); |
313 } | 313 } |
314 | 314 |
315 private: | 315 private: |
316 OrderedSocketData* data_; | 316 OrderedSocketData* data_; |
317 scoped_ptr<SpdySessionDependencies> session_deps_; | 317 scoped_ptr<SpdySessionDependencies> session_deps_; |
318 scoped_refptr<HttpNetworkSession> http_session_; | 318 scoped_refptr<HttpNetworkSession> http_session_; |
319 base::WeakPtr<SpdySession> session_; | 319 base::WeakPtr<SpdySession> session_; |
320 HostPortPair host_port_pair_; | 320 HostPortPair host_port_pair_; |
321 SpdySessionKey spdy_session_key_; | 321 SpdySessionKey spdy_session_key_; |
(...skipping 21 matching lines...) Expand all Loading... |
343 job_->DetachDelegate(); | 343 job_->DetachDelegate(); |
344 job_ = NULL; | 344 job_ = NULL; |
345 } | 345 } |
346 } | 346 } |
347 | 347 |
348 // SocketStream::Delegate implementation | 348 // SocketStream::Delegate implementation |
349 | 349 |
350 // OnStartOpenConnection() is not implemented by SocketStreamDispatcherHost | 350 // OnStartOpenConnection() is not implemented by SocketStreamDispatcherHost |
351 | 351 |
352 virtual void OnConnected(SocketStream* socket, | 352 virtual void OnConnected(SocketStream* socket, |
353 int max_pending_send_allowed) OVERRIDE { | 353 int max_pending_send_allowed) override { |
354 DeleteJobMaybe(); | 354 DeleteJobMaybe(); |
355 } | 355 } |
356 | 356 |
357 virtual void OnSentData(SocketStream* socket, int amount_sent) OVERRIDE { | 357 virtual void OnSentData(SocketStream* socket, int amount_sent) override { |
358 DeleteJobMaybe(); | 358 DeleteJobMaybe(); |
359 } | 359 } |
360 | 360 |
361 virtual void OnReceivedData(SocketStream* socket, | 361 virtual void OnReceivedData(SocketStream* socket, |
362 const char* data, | 362 const char* data, |
363 int len) OVERRIDE { | 363 int len) override { |
364 DeleteJobMaybe(); | 364 DeleteJobMaybe(); |
365 } | 365 } |
366 | 366 |
367 virtual void OnClose(SocketStream* socket) OVERRIDE { DeleteJobMaybe(); } | 367 virtual void OnClose(SocketStream* socket) override { DeleteJobMaybe(); } |
368 | 368 |
369 virtual void OnAuthRequired(SocketStream* socket, | 369 virtual void OnAuthRequired(SocketStream* socket, |
370 AuthChallengeInfo* auth_info) OVERRIDE { | 370 AuthChallengeInfo* auth_info) override { |
371 DeleteJobMaybe(); | 371 DeleteJobMaybe(); |
372 } | 372 } |
373 | 373 |
374 virtual void OnSSLCertificateError(SocketStream* socket, | 374 virtual void OnSSLCertificateError(SocketStream* socket, |
375 const SSLInfo& ssl_info, | 375 const SSLInfo& ssl_info, |
376 bool fatal) OVERRIDE { | 376 bool fatal) override { |
377 DeleteJobMaybe(); | 377 DeleteJobMaybe(); |
378 } | 378 } |
379 | 379 |
380 virtual void OnError(const SocketStream* socket, int error) OVERRIDE { | 380 virtual void OnError(const SocketStream* socket, int error) override { |
381 DeleteJobMaybe(); | 381 DeleteJobMaybe(); |
382 } | 382 } |
383 | 383 |
384 // CanGetCookies() and CanSetCookies() do not appear to be able to delete the | 384 // CanGetCookies() and CanSetCookies() do not appear to be able to delete the |
385 // WebSocketJob object. | 385 // WebSocketJob object. |
386 | 386 |
387 private: | 387 private: |
388 scoped_refptr<WebSocketJob> job_; | 388 scoped_refptr<WebSocketJob> job_; |
389 bool delete_next_; | 389 bool delete_next_; |
390 }; | 390 }; |
391 | 391 |
392 } // namespace | 392 } // namespace |
393 | 393 |
394 class WebSocketJobTest : public PlatformTest, | 394 class WebSocketJobTest : public PlatformTest, |
395 public ::testing::WithParamInterface<NextProto> { | 395 public ::testing::WithParamInterface<NextProto> { |
396 public: | 396 public: |
397 WebSocketJobTest() | 397 WebSocketJobTest() |
398 : spdy_util_(GetParam()), | 398 : spdy_util_(GetParam()), |
399 enable_websocket_over_spdy_(false) {} | 399 enable_websocket_over_spdy_(false) {} |
400 | 400 |
401 virtual void SetUp() OVERRIDE { | 401 virtual void SetUp() override { |
402 stream_type_ = STREAM_INVALID; | 402 stream_type_ = STREAM_INVALID; |
403 cookie_store_ = new MockCookieStore; | 403 cookie_store_ = new MockCookieStore; |
404 context_.reset(new MockURLRequestContext(cookie_store_.get())); | 404 context_.reset(new MockURLRequestContext(cookie_store_.get())); |
405 } | 405 } |
406 virtual void TearDown() OVERRIDE { | 406 virtual void TearDown() override { |
407 cookie_store_ = NULL; | 407 cookie_store_ = NULL; |
408 context_.reset(); | 408 context_.reset(); |
409 websocket_ = NULL; | 409 websocket_ = NULL; |
410 socket_ = NULL; | 410 socket_ = NULL; |
411 } | 411 } |
412 void DoSendRequest() { | 412 void DoSendRequest() { |
413 EXPECT_TRUE(websocket_->SendData(kHandshakeRequestWithoutCookie, | 413 EXPECT_TRUE(websocket_->SendData(kHandshakeRequestWithoutCookie, |
414 kHandshakeRequestWithoutCookieLength)); | 414 kHandshakeRequestWithoutCookieLength)); |
415 } | 415 } |
416 void DoSendData() { | 416 void DoSendData() { |
(...skipping 868 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1285 job()->Connect(); | 1285 job()->Connect(); |
1286 SetDeleteNext(); | 1286 SetDeleteNext(); |
1287 job()->OnReceivedData( | 1287 job()->OnReceivedData( |
1288 socket_.get(), kMinimalResponse, arraysize(kMinimalResponse) - 1); | 1288 socket_.get(), kMinimalResponse, arraysize(kMinimalResponse) - 1); |
1289 EXPECT_FALSE(job()); | 1289 EXPECT_FALSE(job()); |
1290 } | 1290 } |
1291 | 1291 |
1292 // TODO(toyoshim): Add tests to verify throttling, SPDY stream limitation. | 1292 // TODO(toyoshim): Add tests to verify throttling, SPDY stream limitation. |
1293 // TODO(toyoshim,yutak): Add tests to verify closing handshake. | 1293 // TODO(toyoshim,yutak): Add tests to verify closing handshake. |
1294 } // namespace net | 1294 } // namespace net |
OLD | NEW |