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/http/http_stream_factory_impl.h" | 5 #include "net/http/http_stream_factory_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 public: | 61 public: |
62 enum StreamType { | 62 enum StreamType { |
63 kStreamTypeBasic, | 63 kStreamTypeBasic, |
64 kStreamTypeSpdy, | 64 kStreamTypeSpdy, |
65 }; | 65 }; |
66 | 66 |
67 explicit MockWebSocketHandshakeStream(StreamType type) : type_(type) {} | 67 explicit MockWebSocketHandshakeStream(StreamType type) : type_(type) {} |
68 | 68 |
69 virtual ~MockWebSocketHandshakeStream() {} | 69 virtual ~MockWebSocketHandshakeStream() {} |
70 | 70 |
71 StreamType type() const { | 71 StreamType type() const { return type_; } |
72 return type_; | |
73 } | |
74 | 72 |
75 // HttpStreamBase methods | 73 // HttpStreamBase methods |
76 virtual int InitializeStream(const HttpRequestInfo* request_info, | 74 virtual int InitializeStream(const HttpRequestInfo* request_info, |
77 RequestPriority priority, | 75 RequestPriority priority, |
78 const BoundNetLog& net_log, | 76 const BoundNetLog& net_log, |
79 const CompletionCallback& callback) OVERRIDE { | 77 const CompletionCallback& callback) OVERRIDE { |
80 return ERR_IO_PENDING; | 78 return ERR_IO_PENDING; |
81 } | 79 } |
82 virtual int SendRequest(const HttpRequestHeaders& request_headers, | 80 virtual int SendRequest(const HttpRequestHeaders& request_headers, |
83 HttpResponseInfo* response, | 81 HttpResponseInfo* response, |
(...skipping 11 matching lines...) Expand all Loading... |
95 const CompletionCallback& callback) OVERRIDE { | 93 const CompletionCallback& callback) OVERRIDE { |
96 return ERR_IO_PENDING; | 94 return ERR_IO_PENDING; |
97 } | 95 } |
98 virtual void Close(bool not_reusable) OVERRIDE {} | 96 virtual void Close(bool not_reusable) OVERRIDE {} |
99 virtual bool IsResponseBodyComplete() const OVERRIDE { return false; } | 97 virtual bool IsResponseBodyComplete() const OVERRIDE { return false; } |
100 virtual bool CanFindEndOfResponse() const OVERRIDE { return false; } | 98 virtual bool CanFindEndOfResponse() const OVERRIDE { return false; } |
101 virtual bool IsConnectionReused() const OVERRIDE { return false; } | 99 virtual bool IsConnectionReused() const OVERRIDE { return false; } |
102 virtual void SetConnectionReused() OVERRIDE {} | 100 virtual void SetConnectionReused() OVERRIDE {} |
103 virtual bool IsConnectionReusable() const OVERRIDE { return false; } | 101 virtual bool IsConnectionReusable() const OVERRIDE { return false; } |
104 virtual int64 GetTotalReceivedBytes() const OVERRIDE { return 0; } | 102 virtual int64 GetTotalReceivedBytes() const OVERRIDE { return 0; } |
105 virtual bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const | 103 virtual bool GetLoadTimingInfo( |
106 OVERRIDE { | 104 LoadTimingInfo* load_timing_info) const OVERRIDE { |
107 return false; | 105 return false; |
108 } | 106 } |
109 virtual void GetSSLInfo(SSLInfo* ssl_info) OVERRIDE {} | 107 virtual void GetSSLInfo(SSLInfo* ssl_info) OVERRIDE {} |
110 virtual void GetSSLCertRequestInfo( | 108 virtual void GetSSLCertRequestInfo( |
111 SSLCertRequestInfo* cert_request_info) OVERRIDE {} | 109 SSLCertRequestInfo* cert_request_info) OVERRIDE {} |
112 virtual bool IsSpdyHttpStream() const OVERRIDE { return false; } | 110 virtual bool IsSpdyHttpStream() const OVERRIDE { return false; } |
113 virtual void Drain(HttpNetworkSession* session) OVERRIDE {} | 111 virtual void Drain(HttpNetworkSession* session) OVERRIDE {} |
114 virtual void SetPriority(RequestPriority priority) OVERRIDE {} | 112 virtual void SetPriority(RequestPriority priority) OVERRIDE {} |
115 | 113 |
116 virtual scoped_ptr<WebSocketStream> Upgrade() OVERRIDE { | 114 virtual scoped_ptr<WebSocketStream> Upgrade() OVERRIDE { |
(...skipping 10 matching lines...) Expand all Loading... |
127 | 125 |
128 // HttpStreamFactoryImpl subclass that can wait until a preconnect is complete. | 126 // HttpStreamFactoryImpl subclass that can wait until a preconnect is complete. |
129 class MockHttpStreamFactoryImplForPreconnect : public HttpStreamFactoryImpl { | 127 class MockHttpStreamFactoryImplForPreconnect : public HttpStreamFactoryImpl { |
130 public: | 128 public: |
131 MockHttpStreamFactoryImplForPreconnect(HttpNetworkSession* session, | 129 MockHttpStreamFactoryImplForPreconnect(HttpNetworkSession* session, |
132 bool for_websockets) | 130 bool for_websockets) |
133 : HttpStreamFactoryImpl(session, for_websockets), | 131 : HttpStreamFactoryImpl(session, for_websockets), |
134 preconnect_done_(false), | 132 preconnect_done_(false), |
135 waiting_for_preconnect_(false) {} | 133 waiting_for_preconnect_(false) {} |
136 | 134 |
137 | |
138 void WaitForPreconnects() { | 135 void WaitForPreconnects() { |
139 while (!preconnect_done_) { | 136 while (!preconnect_done_) { |
140 waiting_for_preconnect_ = true; | 137 waiting_for_preconnect_ = true; |
141 base::MessageLoop::current()->Run(); | 138 base::MessageLoop::current()->Run(); |
142 waiting_for_preconnect_ = false; | 139 waiting_for_preconnect_ = false; |
143 } | 140 } |
144 } | 141 } |
145 | 142 |
146 private: | 143 private: |
147 // HttpStreamFactoryImpl methods. | 144 // HttpStreamFactoryImpl methods. |
148 virtual void OnPreconnectsCompleteInternal() OVERRIDE { | 145 virtual void OnPreconnectsCompleteInternal() OVERRIDE { |
149 preconnect_done_ = true; | 146 preconnect_done_ = true; |
150 if (waiting_for_preconnect_) | 147 if (waiting_for_preconnect_) |
151 base::MessageLoop::current()->Quit(); | 148 base::MessageLoop::current()->Quit(); |
152 } | 149 } |
153 | 150 |
154 bool preconnect_done_; | 151 bool preconnect_done_; |
155 bool waiting_for_preconnect_; | 152 bool waiting_for_preconnect_; |
156 }; | 153 }; |
157 | 154 |
158 class StreamRequestWaiter : public HttpStreamRequest::Delegate { | 155 class StreamRequestWaiter : public HttpStreamRequest::Delegate { |
159 public: | 156 public: |
160 StreamRequestWaiter() | 157 StreamRequestWaiter() : waiting_for_stream_(false), stream_done_(false) {} |
161 : waiting_for_stream_(false), | |
162 stream_done_(false) {} | |
163 | 158 |
164 // HttpStreamRequest::Delegate | 159 // HttpStreamRequest::Delegate |
165 | 160 |
166 virtual void OnStreamReady( | 161 virtual void OnStreamReady(const SSLConfig& used_ssl_config, |
167 const SSLConfig& used_ssl_config, | 162 const ProxyInfo& used_proxy_info, |
168 const ProxyInfo& used_proxy_info, | 163 HttpStreamBase* stream) OVERRIDE { |
169 HttpStreamBase* stream) OVERRIDE { | |
170 stream_done_ = true; | 164 stream_done_ = true; |
171 if (waiting_for_stream_) | 165 if (waiting_for_stream_) |
172 base::MessageLoop::current()->Quit(); | 166 base::MessageLoop::current()->Quit(); |
173 stream_.reset(stream); | 167 stream_.reset(stream); |
174 used_ssl_config_ = used_ssl_config; | 168 used_ssl_config_ = used_ssl_config; |
175 used_proxy_info_ = used_proxy_info; | 169 used_proxy_info_ = used_proxy_info; |
176 } | 170 } |
177 | 171 |
178 virtual void OnWebSocketHandshakeStreamReady( | 172 virtual void OnWebSocketHandshakeStreamReady( |
179 const SSLConfig& used_ssl_config, | 173 const SSLConfig& used_ssl_config, |
180 const ProxyInfo& used_proxy_info, | 174 const ProxyInfo& used_proxy_info, |
181 WebSocketHandshakeStreamBase* stream) OVERRIDE { | 175 WebSocketHandshakeStreamBase* stream) OVERRIDE { |
182 stream_done_ = true; | 176 stream_done_ = true; |
183 if (waiting_for_stream_) | 177 if (waiting_for_stream_) |
184 base::MessageLoop::current()->Quit(); | 178 base::MessageLoop::current()->Quit(); |
185 websocket_stream_.reset(stream); | 179 websocket_stream_.reset(stream); |
186 used_ssl_config_ = used_ssl_config; | 180 used_ssl_config_ = used_ssl_config; |
187 used_proxy_info_ = used_proxy_info; | 181 used_proxy_info_ = used_proxy_info; |
188 } | 182 } |
189 | 183 |
190 virtual void OnStreamFailed( | 184 virtual void OnStreamFailed(int status, |
191 int status, | 185 const SSLConfig& used_ssl_config) OVERRIDE {} |
192 const SSLConfig& used_ssl_config) OVERRIDE {} | |
193 | 186 |
194 virtual void OnCertificateError( | 187 virtual void OnCertificateError(int status, |
195 int status, | 188 const SSLConfig& used_ssl_config, |
196 const SSLConfig& used_ssl_config, | 189 const SSLInfo& ssl_info) OVERRIDE {} |
197 const SSLInfo& ssl_info) OVERRIDE {} | |
198 | 190 |
199 virtual void OnNeedsProxyAuth(const HttpResponseInfo& proxy_response, | 191 virtual void OnNeedsProxyAuth(const HttpResponseInfo& proxy_response, |
200 const SSLConfig& used_ssl_config, | 192 const SSLConfig& used_ssl_config, |
201 const ProxyInfo& used_proxy_info, | 193 const ProxyInfo& used_proxy_info, |
202 HttpAuthController* auth_controller) OVERRIDE {} | 194 HttpAuthController* auth_controller) OVERRIDE {} |
203 | 195 |
204 virtual void OnNeedsClientAuth(const SSLConfig& used_ssl_config, | 196 virtual void OnNeedsClientAuth(const SSLConfig& used_ssl_config, |
205 SSLCertRequestInfo* cert_info) OVERRIDE {} | 197 SSLCertRequestInfo* cert_info) OVERRIDE {} |
206 | 198 |
207 virtual void OnHttpsProxyTunnelResponse(const HttpResponseInfo& response_info, | 199 virtual void OnHttpsProxyTunnelResponse(const HttpResponseInfo& response_info, |
208 const SSLConfig& used_ssl_config, | 200 const SSLConfig& used_ssl_config, |
209 const ProxyInfo& used_proxy_info, | 201 const ProxyInfo& used_proxy_info, |
210 HttpStreamBase* stream) OVERRIDE {} | 202 HttpStreamBase* stream) OVERRIDE {} |
211 | 203 |
212 void WaitForStream() { | 204 void WaitForStream() { |
213 while (!stream_done_) { | 205 while (!stream_done_) { |
214 waiting_for_stream_ = true; | 206 waiting_for_stream_ = true; |
215 base::MessageLoop::current()->Run(); | 207 base::MessageLoop::current()->Run(); |
216 waiting_for_stream_ = false; | 208 waiting_for_stream_ = false; |
217 } | 209 } |
218 } | 210 } |
219 | 211 |
220 const SSLConfig& used_ssl_config() const { | 212 const SSLConfig& used_ssl_config() const { return used_ssl_config_; } |
221 return used_ssl_config_; | |
222 } | |
223 | 213 |
224 const ProxyInfo& used_proxy_info() const { | 214 const ProxyInfo& used_proxy_info() const { return used_proxy_info_; } |
225 return used_proxy_info_; | |
226 } | |
227 | 215 |
228 HttpStreamBase* stream() { | 216 HttpStreamBase* stream() { return stream_.get(); } |
229 return stream_.get(); | |
230 } | |
231 | 217 |
232 MockWebSocketHandshakeStream* websocket_stream() { | 218 MockWebSocketHandshakeStream* websocket_stream() { |
233 return static_cast<MockWebSocketHandshakeStream*>(websocket_stream_.get()); | 219 return static_cast<MockWebSocketHandshakeStream*>(websocket_stream_.get()); |
234 } | 220 } |
235 | 221 |
236 bool stream_done() const { return stream_done_; } | 222 bool stream_done() const { return stream_done_; } |
237 | 223 |
238 private: | 224 private: |
239 bool waiting_for_stream_; | 225 bool waiting_for_stream_; |
240 bool stream_done_; | 226 bool stream_done_; |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 return new WebSocketSpdyHandshakeStream(spdy_session); | 281 return new WebSocketSpdyHandshakeStream(spdy_session); |
296 } | 282 } |
297 }; | 283 }; |
298 | 284 |
299 struct TestCase { | 285 struct TestCase { |
300 int num_streams; | 286 int num_streams; |
301 bool ssl; | 287 bool ssl; |
302 }; | 288 }; |
303 | 289 |
304 TestCase kTests[] = { | 290 TestCase kTests[] = { |
305 { 1, false }, | 291 {1, false}, |
306 { 2, false }, | 292 {2, false}, |
307 { 1, true}, | 293 {1, true}, |
308 { 2, true}, | 294 {2, true}, |
309 }; | 295 }; |
310 | 296 |
311 void PreconnectHelperForURL(int num_streams, | 297 void PreconnectHelperForURL(int num_streams, |
312 const GURL& url, | 298 const GURL& url, |
313 HttpNetworkSession* session) { | 299 HttpNetworkSession* session) { |
314 HttpNetworkSessionPeer peer(session); | 300 HttpNetworkSessionPeer peer(session); |
315 MockHttpStreamFactoryImplForPreconnect* mock_factory = | 301 MockHttpStreamFactoryImplForPreconnect* mock_factory = |
316 new MockHttpStreamFactoryImplForPreconnect(session, false); | 302 new MockHttpStreamFactoryImplForPreconnect(session, false); |
317 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(mock_factory)); | 303 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(mock_factory)); |
318 SSLConfig ssl_config; | 304 SSLConfig ssl_config; |
319 session->ssl_config_service()->GetSSLConfig(&ssl_config); | 305 session->ssl_config_service()->GetSSLConfig(&ssl_config); |
320 | 306 |
321 HttpRequestInfo request; | 307 HttpRequestInfo request; |
322 request.method = "GET"; | 308 request.method = "GET"; |
323 request.url = url; | 309 request.url = url; |
324 request.load_flags = 0; | 310 request.load_flags = 0; |
325 | 311 |
326 session->http_stream_factory()->PreconnectStreams( | 312 session->http_stream_factory()->PreconnectStreams( |
327 num_streams, request, DEFAULT_PRIORITY, ssl_config, ssl_config); | 313 num_streams, request, DEFAULT_PRIORITY, ssl_config, ssl_config); |
328 mock_factory->WaitForPreconnects(); | 314 mock_factory->WaitForPreconnects(); |
329 }; | 315 }; |
330 | 316 |
331 void PreconnectHelper(const TestCase& test, | 317 void PreconnectHelper(const TestCase& test, HttpNetworkSession* session) { |
332 HttpNetworkSession* session) { | 318 GURL url = |
333 GURL url = test.ssl ? GURL("https://www.google.com") : | 319 test.ssl ? GURL("https://www.google.com") : GURL("http://www.google.com"); |
334 GURL("http://www.google.com"); | |
335 PreconnectHelperForURL(test.num_streams, url, session); | 320 PreconnectHelperForURL(test.num_streams, url, session); |
336 }; | 321 }; |
337 | 322 |
338 template<typename ParentPool> | 323 template <typename ParentPool> |
339 class CapturePreconnectsSocketPool : public ParentPool { | 324 class CapturePreconnectsSocketPool : public ParentPool { |
340 public: | 325 public: |
341 CapturePreconnectsSocketPool(HostResolver* host_resolver, | 326 CapturePreconnectsSocketPool(HostResolver* host_resolver, |
342 CertVerifier* cert_verifier); | 327 CertVerifier* cert_verifier); |
343 | 328 |
344 int last_num_streams() const { | 329 int last_num_streams() const { return last_num_streams_; } |
345 return last_num_streams_; | |
346 } | |
347 | 330 |
348 virtual int RequestSocket(const std::string& group_name, | 331 virtual int RequestSocket(const std::string& group_name, |
349 const void* socket_params, | 332 const void* socket_params, |
350 RequestPriority priority, | 333 RequestPriority priority, |
351 ClientSocketHandle* handle, | 334 ClientSocketHandle* handle, |
352 const CompletionCallback& callback, | 335 const CompletionCallback& callback, |
353 const BoundNetLog& net_log) OVERRIDE { | 336 const BoundNetLog& net_log) OVERRIDE { |
354 ADD_FAILURE(); | 337 ADD_FAILURE(); |
355 return ERR_UNEXPECTED; | 338 return ERR_UNEXPECTED; |
356 } | 339 } |
357 | 340 |
358 virtual void RequestSockets(const std::string& group_name, | 341 virtual void RequestSockets(const std::string& group_name, |
359 const void* socket_params, | 342 const void* socket_params, |
360 int num_sockets, | 343 int num_sockets, |
361 const BoundNetLog& net_log) OVERRIDE { | 344 const BoundNetLog& net_log) OVERRIDE { |
362 last_num_streams_ = num_sockets; | 345 last_num_streams_ = num_sockets; |
363 } | 346 } |
364 | 347 |
365 virtual void CancelRequest(const std::string& group_name, | 348 virtual void CancelRequest(const std::string& group_name, |
366 ClientSocketHandle* handle) OVERRIDE { | 349 ClientSocketHandle* handle) OVERRIDE { |
367 ADD_FAILURE(); | 350 ADD_FAILURE(); |
368 } | 351 } |
369 virtual void ReleaseSocket(const std::string& group_name, | 352 virtual void ReleaseSocket(const std::string& group_name, |
370 scoped_ptr<StreamSocket> socket, | 353 scoped_ptr<StreamSocket> socket, |
371 int id) OVERRIDE { | 354 int id) OVERRIDE { |
372 ADD_FAILURE(); | 355 ADD_FAILURE(); |
373 } | 356 } |
374 virtual void CloseIdleSockets() OVERRIDE { | 357 virtual void CloseIdleSockets() OVERRIDE { ADD_FAILURE(); } |
375 ADD_FAILURE(); | |
376 } | |
377 virtual int IdleSocketCount() const OVERRIDE { | 358 virtual int IdleSocketCount() const OVERRIDE { |
378 ADD_FAILURE(); | 359 ADD_FAILURE(); |
379 return 0; | 360 return 0; |
380 } | 361 } |
381 virtual int IdleSocketCountInGroup( | 362 virtual int IdleSocketCountInGroup( |
382 const std::string& group_name) const OVERRIDE { | 363 const std::string& group_name) const OVERRIDE { |
383 ADD_FAILURE(); | 364 ADD_FAILURE(); |
384 return 0; | 365 return 0; |
385 } | 366 } |
386 virtual LoadState GetLoadState( | 367 virtual LoadState GetLoadState( |
387 const std::string& group_name, | 368 const std::string& group_name, |
388 const ClientSocketHandle* handle) const OVERRIDE { | 369 const ClientSocketHandle* handle) const OVERRIDE { |
389 ADD_FAILURE(); | 370 ADD_FAILURE(); |
390 return LOAD_STATE_IDLE; | 371 return LOAD_STATE_IDLE; |
391 } | 372 } |
392 virtual base::TimeDelta ConnectionTimeout() const OVERRIDE { | 373 virtual base::TimeDelta ConnectionTimeout() const OVERRIDE { |
393 return base::TimeDelta(); | 374 return base::TimeDelta(); |
394 } | 375 } |
395 | 376 |
396 private: | 377 private: |
397 int last_num_streams_; | 378 int last_num_streams_; |
398 }; | 379 }; |
399 | 380 |
400 typedef CapturePreconnectsSocketPool<TransportClientSocketPool> | 381 typedef CapturePreconnectsSocketPool<TransportClientSocketPool> |
401 CapturePreconnectsTransportSocketPool; | 382 CapturePreconnectsTransportSocketPool; |
402 typedef CapturePreconnectsSocketPool<HttpProxyClientSocketPool> | 383 typedef CapturePreconnectsSocketPool<HttpProxyClientSocketPool> |
403 CapturePreconnectsHttpProxySocketPool; | 384 CapturePreconnectsHttpProxySocketPool; |
404 typedef CapturePreconnectsSocketPool<SOCKSClientSocketPool> | 385 typedef CapturePreconnectsSocketPool<SOCKSClientSocketPool> |
405 CapturePreconnectsSOCKSSocketPool; | 386 CapturePreconnectsSOCKSSocketPool; |
406 typedef CapturePreconnectsSocketPool<SSLClientSocketPool> | 387 typedef CapturePreconnectsSocketPool<SSLClientSocketPool> |
407 CapturePreconnectsSSLSocketPool; | 388 CapturePreconnectsSSLSocketPool; |
408 | 389 |
409 template<typename ParentPool> | 390 template <typename ParentPool> |
410 CapturePreconnectsSocketPool<ParentPool>::CapturePreconnectsSocketPool( | 391 CapturePreconnectsSocketPool<ParentPool>::CapturePreconnectsSocketPool( |
411 HostResolver* host_resolver, CertVerifier* /* cert_verifier */) | 392 HostResolver* host_resolver, |
412 : ParentPool(0, 0, NULL, host_resolver, NULL, NULL), | 393 CertVerifier* /* cert_verifier */) |
413 last_num_streams_(-1) {} | 394 : ParentPool(0, 0, NULL, host_resolver, NULL, NULL), last_num_streams_(-1) { |
| 395 } |
414 | 396 |
415 template<> | 397 template <> |
416 CapturePreconnectsHttpProxySocketPool::CapturePreconnectsSocketPool( | 398 CapturePreconnectsHttpProxySocketPool::CapturePreconnectsSocketPool( |
417 HostResolver* host_resolver, CertVerifier* /* cert_verifier */) | 399 HostResolver* host_resolver, |
| 400 CertVerifier* /* cert_verifier */) |
418 : HttpProxyClientSocketPool(0, 0, NULL, host_resolver, NULL, NULL, NULL), | 401 : HttpProxyClientSocketPool(0, 0, NULL, host_resolver, NULL, NULL, NULL), |
419 last_num_streams_(-1) {} | 402 last_num_streams_(-1) { |
| 403 } |
420 | 404 |
421 template <> | 405 template <> |
422 CapturePreconnectsSSLSocketPool::CapturePreconnectsSocketPool( | 406 CapturePreconnectsSSLSocketPool::CapturePreconnectsSocketPool( |
423 HostResolver* host_resolver, | 407 HostResolver* host_resolver, |
424 CertVerifier* cert_verifier) | 408 CertVerifier* cert_verifier) |
425 : SSLClientSocketPool(0, | 409 : SSLClientSocketPool(0, |
426 0, | 410 0, |
427 NULL, // ssl_histograms | 411 NULL, // ssl_histograms |
428 host_resolver, | 412 host_resolver, |
429 cert_verifier, | 413 cert_verifier, |
430 NULL, // server_bound_cert_store | 414 NULL, // server_bound_cert_store |
431 NULL, // transport_security_state | 415 NULL, // transport_security_state |
432 NULL, // cert_transparency_verifier | 416 NULL, // cert_transparency_verifier |
433 std::string(), // ssl_session_cache_shard | 417 std::string(), // ssl_session_cache_shard |
434 NULL, // deterministic_socket_factory | 418 NULL, // deterministic_socket_factory |
435 NULL, // transport_socket_pool | 419 NULL, // transport_socket_pool |
436 NULL, | 420 NULL, |
437 NULL, | 421 NULL, |
438 NULL, // ssl_config_service | 422 NULL, // ssl_config_service |
439 NULL), // net_log | 423 NULL), // net_log |
440 last_num_streams_(-1) {} | 424 last_num_streams_(-1) { |
| 425 } |
441 | 426 |
442 class HttpStreamFactoryTest : public ::testing::Test, | 427 class HttpStreamFactoryTest : public ::testing::Test, |
443 public ::testing::WithParamInterface<NextProto> { | 428 public ::testing::WithParamInterface<NextProto> { |
444 }; | 429 }; |
445 | 430 |
446 INSTANTIATE_TEST_CASE_P( | 431 INSTANTIATE_TEST_CASE_P(NextProto, |
447 NextProto, | 432 HttpStreamFactoryTest, |
448 HttpStreamFactoryTest, | 433 testing::Values(kProtoDeprecatedSPDY2, |
449 testing::Values(kProtoDeprecatedSPDY2, | 434 kProtoSPDY3, |
450 kProtoSPDY3, kProtoSPDY31, kProtoSPDY4)); | 435 kProtoSPDY31, |
| 436 kProtoSPDY4)); |
451 | 437 |
452 TEST_P(HttpStreamFactoryTest, PreconnectDirect) { | 438 TEST_P(HttpStreamFactoryTest, PreconnectDirect) { |
453 for (size_t i = 0; i < arraysize(kTests); ++i) { | 439 for (size_t i = 0; i < arraysize(kTests); ++i) { |
454 SpdySessionDependencies session_deps( | 440 SpdySessionDependencies session_deps(GetParam(), |
455 GetParam(), ProxyService::CreateDirect()); | 441 ProxyService::CreateDirect()); |
456 scoped_refptr<HttpNetworkSession> session( | 442 scoped_refptr<HttpNetworkSession> session( |
457 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 443 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
458 HttpNetworkSessionPeer peer(session); | 444 HttpNetworkSessionPeer peer(session); |
459 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 445 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
460 new CapturePreconnectsTransportSocketPool( | 446 new CapturePreconnectsTransportSocketPool( |
461 session_deps.host_resolver.get(), | 447 session_deps.host_resolver.get(), session_deps.cert_verifier.get()); |
462 session_deps.cert_verifier.get()); | |
463 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 448 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
464 new CapturePreconnectsSSLSocketPool( | 449 new CapturePreconnectsSSLSocketPool(session_deps.host_resolver.get(), |
465 session_deps.host_resolver.get(), | 450 session_deps.cert_verifier.get()); |
466 session_deps.cert_verifier.get()); | |
467 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( | 451 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
468 new MockClientSocketPoolManager); | 452 new MockClientSocketPoolManager); |
469 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 453 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
470 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 454 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
471 peer.SetClientSocketPoolManager( | 455 peer.SetClientSocketPoolManager( |
472 mock_pool_manager.PassAs<ClientSocketPoolManager>()); | 456 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
473 PreconnectHelper(kTests[i], session.get()); | 457 PreconnectHelper(kTests[i], session.get()); |
474 if (kTests[i].ssl) | 458 if (kTests[i].ssl) |
475 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 459 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
476 else | 460 else |
477 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); | 461 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
478 } | 462 } |
479 } | 463 } |
480 | 464 |
481 TEST_P(HttpStreamFactoryTest, PreconnectHttpProxy) { | 465 TEST_P(HttpStreamFactoryTest, PreconnectHttpProxy) { |
482 for (size_t i = 0; i < arraysize(kTests); ++i) { | 466 for (size_t i = 0; i < arraysize(kTests); ++i) { |
483 SpdySessionDependencies session_deps( | 467 SpdySessionDependencies session_deps( |
484 GetParam(), ProxyService::CreateFixed("http_proxy")); | 468 GetParam(), ProxyService::CreateFixed("http_proxy")); |
485 scoped_refptr<HttpNetworkSession> session( | 469 scoped_refptr<HttpNetworkSession> session( |
486 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 470 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
487 HttpNetworkSessionPeer peer(session); | 471 HttpNetworkSessionPeer peer(session); |
488 HostPortPair proxy_host("http_proxy", 80); | 472 HostPortPair proxy_host("http_proxy", 80); |
489 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = | 473 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = |
490 new CapturePreconnectsHttpProxySocketPool( | 474 new CapturePreconnectsHttpProxySocketPool( |
491 session_deps.host_resolver.get(), | 475 session_deps.host_resolver.get(), session_deps.cert_verifier.get()); |
492 session_deps.cert_verifier.get()); | |
493 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 476 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
494 new CapturePreconnectsSSLSocketPool( | 477 new CapturePreconnectsSSLSocketPool(session_deps.host_resolver.get(), |
495 session_deps.host_resolver.get(), | 478 session_deps.cert_verifier.get()); |
496 session_deps.cert_verifier.get()); | |
497 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( | 479 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
498 new MockClientSocketPoolManager); | 480 new MockClientSocketPoolManager); |
499 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); | 481 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); |
500 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 482 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
501 peer.SetClientSocketPoolManager( | 483 peer.SetClientSocketPoolManager( |
502 mock_pool_manager.PassAs<ClientSocketPoolManager>()); | 484 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
503 PreconnectHelper(kTests[i], session.get()); | 485 PreconnectHelper(kTests[i], session.get()); |
504 if (kTests[i].ssl) | 486 if (kTests[i].ssl) |
505 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 487 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
506 else | 488 else |
507 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); | 489 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); |
508 } | 490 } |
509 } | 491 } |
510 | 492 |
511 TEST_P(HttpStreamFactoryTest, PreconnectSocksProxy) { | 493 TEST_P(HttpStreamFactoryTest, PreconnectSocksProxy) { |
512 for (size_t i = 0; i < arraysize(kTests); ++i) { | 494 for (size_t i = 0; i < arraysize(kTests); ++i) { |
513 SpdySessionDependencies session_deps( | 495 SpdySessionDependencies session_deps( |
514 GetParam(), ProxyService::CreateFixed("socks4://socks_proxy:1080")); | 496 GetParam(), ProxyService::CreateFixed("socks4://socks_proxy:1080")); |
515 scoped_refptr<HttpNetworkSession> session( | 497 scoped_refptr<HttpNetworkSession> session( |
516 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 498 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
517 HttpNetworkSessionPeer peer(session); | 499 HttpNetworkSessionPeer peer(session); |
518 HostPortPair proxy_host("socks_proxy", 1080); | 500 HostPortPair proxy_host("socks_proxy", 1080); |
519 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = | 501 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = |
520 new CapturePreconnectsSOCKSSocketPool( | 502 new CapturePreconnectsSOCKSSocketPool(session_deps.host_resolver.get(), |
521 session_deps.host_resolver.get(), | 503 session_deps.cert_verifier.get()); |
522 session_deps.cert_verifier.get()); | |
523 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 504 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
524 new CapturePreconnectsSSLSocketPool( | 505 new CapturePreconnectsSSLSocketPool(session_deps.host_resolver.get(), |
525 session_deps.host_resolver.get(), | 506 session_deps.cert_verifier.get()); |
526 session_deps.cert_verifier.get()); | |
527 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( | 507 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
528 new MockClientSocketPoolManager); | 508 new MockClientSocketPoolManager); |
529 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); | 509 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); |
530 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 510 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
531 peer.SetClientSocketPoolManager( | 511 peer.SetClientSocketPoolManager( |
532 mock_pool_manager.PassAs<ClientSocketPoolManager>()); | 512 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
533 PreconnectHelper(kTests[i], session.get()); | 513 PreconnectHelper(kTests[i], session.get()); |
534 if (kTests[i].ssl) | 514 if (kTests[i].ssl) |
535 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 515 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
536 else | 516 else |
537 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); | 517 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); |
538 } | 518 } |
539 } | 519 } |
540 | 520 |
541 TEST_P(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { | 521 TEST_P(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { |
542 for (size_t i = 0; i < arraysize(kTests); ++i) { | 522 for (size_t i = 0; i < arraysize(kTests); ++i) { |
543 SpdySessionDependencies session_deps( | 523 SpdySessionDependencies session_deps(GetParam(), |
544 GetParam(), ProxyService::CreateDirect()); | 524 ProxyService::CreateDirect()); |
545 scoped_refptr<HttpNetworkSession> session( | 525 scoped_refptr<HttpNetworkSession> session( |
546 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 526 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
547 HttpNetworkSessionPeer peer(session); | 527 HttpNetworkSessionPeer peer(session); |
548 | 528 |
549 // Put a SpdySession in the pool. | 529 // Put a SpdySession in the pool. |
550 HostPortPair host_port_pair("www.google.com", 443); | 530 HostPortPair host_port_pair("www.google.com", 443); |
551 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 531 SpdySessionKey key( |
552 PRIVACY_MODE_DISABLED); | 532 host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
553 ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key)); | 533 ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key)); |
554 | 534 |
555 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 535 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
556 new CapturePreconnectsTransportSocketPool( | 536 new CapturePreconnectsTransportSocketPool( |
557 session_deps.host_resolver.get(), | 537 session_deps.host_resolver.get(), session_deps.cert_verifier.get()); |
558 session_deps.cert_verifier.get()); | |
559 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 538 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
560 new CapturePreconnectsSSLSocketPool( | 539 new CapturePreconnectsSSLSocketPool(session_deps.host_resolver.get(), |
561 session_deps.host_resolver.get(), | 540 session_deps.cert_verifier.get()); |
562 session_deps.cert_verifier.get()); | |
563 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( | 541 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
564 new MockClientSocketPoolManager); | 542 new MockClientSocketPoolManager); |
565 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 543 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
566 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 544 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
567 peer.SetClientSocketPoolManager( | 545 peer.SetClientSocketPoolManager( |
568 mock_pool_manager.PassAs<ClientSocketPoolManager>()); | 546 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
569 PreconnectHelper(kTests[i], session.get()); | 547 PreconnectHelper(kTests[i], session.get()); |
570 // We shouldn't be preconnecting if we have an existing session, which is | 548 // We shouldn't be preconnecting if we have an existing session, which is |
571 // the case for https://www.google.com. | 549 // the case for https://www.google.com. |
572 if (kTests[i].ssl) | 550 if (kTests[i].ssl) |
573 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); | 551 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); |
574 else | 552 else |
575 EXPECT_EQ(kTests[i].num_streams, | 553 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
576 transport_conn_pool->last_num_streams()); | |
577 } | 554 } |
578 } | 555 } |
579 | 556 |
580 // Verify that preconnects to unsafe ports are cancelled before they reach | 557 // Verify that preconnects to unsafe ports are cancelled before they reach |
581 // the SocketPool. | 558 // the SocketPool. |
582 TEST_P(HttpStreamFactoryTest, PreconnectUnsafePort) { | 559 TEST_P(HttpStreamFactoryTest, PreconnectUnsafePort) { |
583 ASSERT_FALSE(IsPortAllowedByDefault(7)); | 560 ASSERT_FALSE(IsPortAllowedByDefault(7)); |
584 ASSERT_FALSE(IsPortAllowedByOverride(7)); | 561 ASSERT_FALSE(IsPortAllowedByOverride(7)); |
585 | 562 |
586 SpdySessionDependencies session_deps( | 563 SpdySessionDependencies session_deps(GetParam(), |
587 GetParam(), ProxyService::CreateDirect()); | 564 ProxyService::CreateDirect()); |
588 scoped_refptr<HttpNetworkSession> session( | 565 scoped_refptr<HttpNetworkSession> session( |
589 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 566 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
590 HttpNetworkSessionPeer peer(session); | 567 HttpNetworkSessionPeer peer(session); |
591 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 568 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
592 new CapturePreconnectsTransportSocketPool( | 569 new CapturePreconnectsTransportSocketPool( |
593 session_deps.host_resolver.get(), | 570 session_deps.host_resolver.get(), session_deps.cert_verifier.get()); |
594 session_deps.cert_verifier.get()); | |
595 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( | 571 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
596 new MockClientSocketPoolManager); | 572 new MockClientSocketPoolManager); |
597 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 573 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
598 peer.SetClientSocketPoolManager( | 574 peer.SetClientSocketPoolManager( |
599 mock_pool_manager.PassAs<ClientSocketPoolManager>()); | 575 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
600 | 576 |
601 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get()); | 577 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get()); |
602 | 578 |
603 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); | 579 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); |
604 } | 580 } |
(...skipping 18 matching lines...) Expand all Loading... |
623 | 599 |
624 // Now request a stream. It should succeed using the second proxy in the | 600 // Now request a stream. It should succeed using the second proxy in the |
625 // list. | 601 // list. |
626 HttpRequestInfo request_info; | 602 HttpRequestInfo request_info; |
627 request_info.method = "GET"; | 603 request_info.method = "GET"; |
628 request_info.url = GURL("http://www.google.com"); | 604 request_info.url = GURL("http://www.google.com"); |
629 | 605 |
630 SSLConfig ssl_config; | 606 SSLConfig ssl_config; |
631 StreamRequestWaiter waiter; | 607 StreamRequestWaiter waiter; |
632 scoped_ptr<HttpStreamRequest> request( | 608 scoped_ptr<HttpStreamRequest> request( |
633 session->http_stream_factory()->RequestStream( | 609 session->http_stream_factory()->RequestStream(request_info, |
634 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, | 610 DEFAULT_PRIORITY, |
635 &waiter, BoundNetLog())); | 611 ssl_config, |
| 612 ssl_config, |
| 613 &waiter, |
| 614 BoundNetLog())); |
636 waiter.WaitForStream(); | 615 waiter.WaitForStream(); |
637 | 616 |
638 // The proxy that failed should now be known to the proxy_service as bad. | 617 // The proxy that failed should now be known to the proxy_service as bad. |
639 const ProxyRetryInfoMap& retry_info = | 618 const ProxyRetryInfoMap& retry_info = |
640 session->proxy_service()->proxy_retry_info(); | 619 session->proxy_service()->proxy_retry_info(); |
641 EXPECT_EQ(1u, retry_info.size()); | 620 EXPECT_EQ(1u, retry_info.size()); |
642 ProxyRetryInfoMap::const_iterator iter = retry_info.find("bad:99"); | 621 ProxyRetryInfoMap::const_iterator iter = retry_info.find("bad:99"); |
643 EXPECT_TRUE(iter != retry_info.end()); | 622 EXPECT_TRUE(iter != retry_info.end()); |
644 } | 623 } |
645 | 624 |
646 TEST_P(HttpStreamFactoryTest, PrivacyModeDisablesChannelId) { | 625 TEST_P(HttpStreamFactoryTest, PrivacyModeDisablesChannelId) { |
647 SpdySessionDependencies session_deps( | 626 SpdySessionDependencies session_deps(GetParam(), |
648 GetParam(), ProxyService::CreateDirect()); | 627 ProxyService::CreateDirect()); |
649 | 628 |
650 StaticSocketDataProvider socket_data; | 629 StaticSocketDataProvider socket_data; |
651 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 630 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
652 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 631 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
653 | 632 |
654 SSLSocketDataProvider ssl(ASYNC, OK); | 633 SSLSocketDataProvider ssl(ASYNC, OK); |
655 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); | 634 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
656 | 635 |
657 scoped_refptr<HttpNetworkSession> session( | 636 scoped_refptr<HttpNetworkSession> session( |
658 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 637 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
659 | 638 |
660 // Set an existing SpdySession in the pool. | 639 // Set an existing SpdySession in the pool. |
661 HostPortPair host_port_pair("www.google.com", 443); | 640 HostPortPair host_port_pair("www.google.com", 443); |
662 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), | 641 SpdySessionKey key( |
663 PRIVACY_MODE_ENABLED); | 642 host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_ENABLED); |
664 | 643 |
665 HttpRequestInfo request_info; | 644 HttpRequestInfo request_info; |
666 request_info.method = "GET"; | 645 request_info.method = "GET"; |
667 request_info.url = GURL("https://www.google.com"); | 646 request_info.url = GURL("https://www.google.com"); |
668 request_info.load_flags = 0; | 647 request_info.load_flags = 0; |
669 request_info.privacy_mode = PRIVACY_MODE_DISABLED; | 648 request_info.privacy_mode = PRIVACY_MODE_DISABLED; |
670 | 649 |
671 SSLConfig ssl_config; | 650 SSLConfig ssl_config; |
672 StreamRequestWaiter waiter; | 651 StreamRequestWaiter waiter; |
673 scoped_ptr<HttpStreamRequest> request( | 652 scoped_ptr<HttpStreamRequest> request( |
674 session->http_stream_factory()->RequestStream( | 653 session->http_stream_factory()->RequestStream(request_info, |
675 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, | 654 DEFAULT_PRIORITY, |
676 &waiter, BoundNetLog())); | 655 ssl_config, |
| 656 ssl_config, |
| 657 &waiter, |
| 658 BoundNetLog())); |
677 waiter.WaitForStream(); | 659 waiter.WaitForStream(); |
678 | 660 |
679 // The stream shouldn't come from spdy as we are using different privacy mode | 661 // The stream shouldn't come from spdy as we are using different privacy mode |
680 EXPECT_FALSE(request->using_spdy()); | 662 EXPECT_FALSE(request->using_spdy()); |
681 | 663 |
682 SSLConfig used_ssl_config = waiter.used_ssl_config(); | 664 SSLConfig used_ssl_config = waiter.used_ssl_config(); |
683 EXPECT_EQ(used_ssl_config.channel_id_enabled, ssl_config.channel_id_enabled); | 665 EXPECT_EQ(used_ssl_config.channel_id_enabled, ssl_config.channel_id_enabled); |
684 } | 666 } |
685 | 667 |
686 namespace { | 668 namespace { |
687 // Return count of distinct groups in given socket pool. | 669 // Return count of distinct groups in given socket pool. |
688 int GetSocketPoolGroupCount(ClientSocketPool* pool) { | 670 int GetSocketPoolGroupCount(ClientSocketPool* pool) { |
689 int count = 0; | 671 int count = 0; |
690 scoped_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", "", false)); | 672 scoped_ptr<base::DictionaryValue> dict(pool->GetInfoAsValue("", "", false)); |
691 EXPECT_TRUE(dict != NULL); | 673 EXPECT_TRUE(dict != NULL); |
692 base::DictionaryValue* groups = NULL; | 674 base::DictionaryValue* groups = NULL; |
693 if (dict->GetDictionary("groups", &groups) && (groups != NULL)) { | 675 if (dict->GetDictionary("groups", &groups) && (groups != NULL)) { |
694 count = static_cast<int>(groups->size()); | 676 count = static_cast<int>(groups->size()); |
695 } | 677 } |
696 return count; | 678 return count; |
697 } | 679 } |
698 } // namespace | 680 } // namespace |
699 | 681 |
700 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) { | 682 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) { |
701 SpdySessionDependencies session_deps( | 683 SpdySessionDependencies session_deps(GetParam(), |
702 GetParam(), ProxyService::CreateDirect()); | 684 ProxyService::CreateDirect()); |
703 | 685 |
704 StaticSocketDataProvider socket_data; | 686 StaticSocketDataProvider socket_data; |
705 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 687 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
706 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 688 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
707 | 689 |
708 SSLSocketDataProvider ssl(ASYNC, OK); | 690 SSLSocketDataProvider ssl(ASYNC, OK); |
709 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); | 691 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); |
710 | 692 |
711 scoped_refptr<HttpNetworkSession> session( | 693 scoped_refptr<HttpNetworkSession> session( |
712 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 694 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
713 SSLClientSocketPool* ssl_pool = session->GetSSLSocketPool( | 695 SSLClientSocketPool* ssl_pool = |
714 HttpNetworkSession::NORMAL_SOCKET_POOL); | 696 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL); |
715 | 697 |
716 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 0); | 698 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 0); |
717 | 699 |
718 HttpRequestInfo request_info; | 700 HttpRequestInfo request_info; |
719 request_info.method = "GET"; | 701 request_info.method = "GET"; |
720 request_info.url = GURL("https://www.google.com"); | 702 request_info.url = GURL("https://www.google.com"); |
721 request_info.load_flags = 0; | 703 request_info.load_flags = 0; |
722 request_info.privacy_mode = PRIVACY_MODE_DISABLED; | 704 request_info.privacy_mode = PRIVACY_MODE_DISABLED; |
723 | 705 |
724 SSLConfig ssl_config; | 706 SSLConfig ssl_config; |
725 StreamRequestWaiter waiter; | 707 StreamRequestWaiter waiter; |
726 | 708 |
727 scoped_ptr<HttpStreamRequest> request1( | 709 scoped_ptr<HttpStreamRequest> request1( |
728 session->http_stream_factory()->RequestStream( | 710 session->http_stream_factory()->RequestStream(request_info, |
729 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, | 711 DEFAULT_PRIORITY, |
730 &waiter, BoundNetLog())); | 712 ssl_config, |
| 713 ssl_config, |
| 714 &waiter, |
| 715 BoundNetLog())); |
731 waiter.WaitForStream(); | 716 waiter.WaitForStream(); |
732 | 717 |
733 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1); | 718 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1); |
734 | 719 |
735 scoped_ptr<HttpStreamRequest> request2( | 720 scoped_ptr<HttpStreamRequest> request2( |
736 session->http_stream_factory()->RequestStream( | 721 session->http_stream_factory()->RequestStream(request_info, |
737 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, | 722 DEFAULT_PRIORITY, |
738 &waiter, BoundNetLog())); | 723 ssl_config, |
| 724 ssl_config, |
| 725 &waiter, |
| 726 BoundNetLog())); |
739 waiter.WaitForStream(); | 727 waiter.WaitForStream(); |
740 | 728 |
741 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1); | 729 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1); |
742 | 730 |
743 request_info.privacy_mode = PRIVACY_MODE_ENABLED; | 731 request_info.privacy_mode = PRIVACY_MODE_ENABLED; |
744 scoped_ptr<HttpStreamRequest> request3( | 732 scoped_ptr<HttpStreamRequest> request3( |
745 session->http_stream_factory()->RequestStream( | 733 session->http_stream_factory()->RequestStream(request_info, |
746 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, | 734 DEFAULT_PRIORITY, |
747 &waiter, BoundNetLog())); | 735 ssl_config, |
| 736 ssl_config, |
| 737 &waiter, |
| 738 BoundNetLog())); |
748 waiter.WaitForStream(); | 739 waiter.WaitForStream(); |
749 | 740 |
750 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2); | 741 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2); |
751 } | 742 } |
752 | 743 |
753 TEST_P(HttpStreamFactoryTest, GetLoadState) { | 744 TEST_P(HttpStreamFactoryTest, GetLoadState) { |
754 SpdySessionDependencies session_deps( | 745 SpdySessionDependencies session_deps(GetParam(), |
755 GetParam(), ProxyService::CreateDirect()); | 746 ProxyService::CreateDirect()); |
756 | 747 |
757 StaticSocketDataProvider socket_data; | 748 StaticSocketDataProvider socket_data; |
758 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 749 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
759 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 750 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
760 | 751 |
761 scoped_refptr<HttpNetworkSession> session( | 752 scoped_refptr<HttpNetworkSession> session( |
762 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 753 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
763 | 754 |
764 HttpRequestInfo request_info; | 755 HttpRequestInfo request_info; |
765 request_info.method = "GET"; | 756 request_info.method = "GET"; |
766 request_info.url = GURL("http://www.google.com"); | 757 request_info.url = GURL("http://www.google.com"); |
767 | 758 |
768 SSLConfig ssl_config; | 759 SSLConfig ssl_config; |
769 StreamRequestWaiter waiter; | 760 StreamRequestWaiter waiter; |
770 scoped_ptr<HttpStreamRequest> request( | 761 scoped_ptr<HttpStreamRequest> request( |
771 session->http_stream_factory()->RequestStream( | 762 session->http_stream_factory()->RequestStream(request_info, |
772 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, | 763 DEFAULT_PRIORITY, |
773 &waiter, BoundNetLog())); | 764 ssl_config, |
| 765 ssl_config, |
| 766 &waiter, |
| 767 BoundNetLog())); |
774 | 768 |
775 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, request->GetLoadState()); | 769 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, request->GetLoadState()); |
776 | 770 |
777 waiter.WaitForStream(); | 771 waiter.WaitForStream(); |
778 } | 772 } |
779 | 773 |
780 TEST_P(HttpStreamFactoryTest, RequestHttpStream) { | 774 TEST_P(HttpStreamFactoryTest, RequestHttpStream) { |
781 SpdySessionDependencies session_deps( | 775 SpdySessionDependencies session_deps(GetParam(), |
782 GetParam(), ProxyService::CreateDirect()); | 776 ProxyService::CreateDirect()); |
783 | 777 |
784 StaticSocketDataProvider socket_data; | 778 StaticSocketDataProvider socket_data; |
785 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 779 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
786 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 780 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
787 | 781 |
788 scoped_refptr<HttpNetworkSession> session( | 782 scoped_refptr<HttpNetworkSession> session( |
789 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 783 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
790 | 784 |
791 // Now request a stream. It should succeed using the second proxy in the | 785 // Now request a stream. It should succeed using the second proxy in the |
792 // list. | 786 // list. |
793 HttpRequestInfo request_info; | 787 HttpRequestInfo request_info; |
794 request_info.method = "GET"; | 788 request_info.method = "GET"; |
795 request_info.url = GURL("http://www.google.com"); | 789 request_info.url = GURL("http://www.google.com"); |
796 request_info.load_flags = 0; | 790 request_info.load_flags = 0; |
797 | 791 |
798 SSLConfig ssl_config; | 792 SSLConfig ssl_config; |
799 StreamRequestWaiter waiter; | 793 StreamRequestWaiter waiter; |
800 scoped_ptr<HttpStreamRequest> request( | 794 scoped_ptr<HttpStreamRequest> request( |
801 session->http_stream_factory()->RequestStream( | 795 session->http_stream_factory()->RequestStream(request_info, |
802 request_info, | 796 DEFAULT_PRIORITY, |
803 DEFAULT_PRIORITY, | 797 ssl_config, |
804 ssl_config, | 798 ssl_config, |
805 ssl_config, | 799 &waiter, |
806 &waiter, | 800 BoundNetLog())); |
807 BoundNetLog())); | |
808 waiter.WaitForStream(); | 801 waiter.WaitForStream(); |
809 EXPECT_TRUE(waiter.stream_done()); | 802 EXPECT_TRUE(waiter.stream_done()); |
810 ASSERT_TRUE(NULL != waiter.stream()); | 803 ASSERT_TRUE(NULL != waiter.stream()); |
811 EXPECT_TRUE(NULL == waiter.websocket_stream()); | 804 EXPECT_TRUE(NULL == waiter.websocket_stream()); |
812 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); | 805 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); |
813 | 806 |
814 EXPECT_EQ(1, GetSocketPoolGroupCount( | 807 EXPECT_EQ(1, |
815 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 808 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
816 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 809 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
817 HttpNetworkSession::NORMAL_SOCKET_POOL))); | 810 EXPECT_EQ(0, |
818 EXPECT_EQ(0, GetSocketPoolGroupCount( | 811 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
819 session->GetTransportSocketPool( | 812 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
820 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 813 EXPECT_EQ(0, |
821 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 814 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
822 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 815 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 816 EXPECT_EQ(0, |
| 817 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 818 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
823 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 819 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
824 } | 820 } |
825 | 821 |
826 TEST_P(HttpStreamFactoryTest, RequestHttpStreamOverSSL) { | 822 TEST_P(HttpStreamFactoryTest, RequestHttpStreamOverSSL) { |
827 SpdySessionDependencies session_deps( | 823 SpdySessionDependencies session_deps(GetParam(), |
828 GetParam(), ProxyService::CreateDirect()); | 824 ProxyService::CreateDirect()); |
829 | 825 |
830 MockRead mock_read(ASYNC, OK); | 826 MockRead mock_read(ASYNC, OK); |
831 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); | 827 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); |
832 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 828 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
833 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 829 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
834 | 830 |
835 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 831 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
836 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); | 832 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); |
837 | 833 |
838 scoped_refptr<HttpNetworkSession> session( | 834 scoped_refptr<HttpNetworkSession> session( |
839 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 835 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
840 | 836 |
841 // Now request a stream. | 837 // Now request a stream. |
842 HttpRequestInfo request_info; | 838 HttpRequestInfo request_info; |
843 request_info.method = "GET"; | 839 request_info.method = "GET"; |
844 request_info.url = GURL("https://www.google.com"); | 840 request_info.url = GURL("https://www.google.com"); |
845 request_info.load_flags = 0; | 841 request_info.load_flags = 0; |
846 | 842 |
847 SSLConfig ssl_config; | 843 SSLConfig ssl_config; |
848 StreamRequestWaiter waiter; | 844 StreamRequestWaiter waiter; |
849 scoped_ptr<HttpStreamRequest> request( | 845 scoped_ptr<HttpStreamRequest> request( |
850 session->http_stream_factory()->RequestStream( | 846 session->http_stream_factory()->RequestStream(request_info, |
851 request_info, | 847 DEFAULT_PRIORITY, |
852 DEFAULT_PRIORITY, | 848 ssl_config, |
853 ssl_config, | 849 ssl_config, |
854 ssl_config, | 850 &waiter, |
855 &waiter, | 851 BoundNetLog())); |
856 BoundNetLog())); | |
857 waiter.WaitForStream(); | 852 waiter.WaitForStream(); |
858 EXPECT_TRUE(waiter.stream_done()); | 853 EXPECT_TRUE(waiter.stream_done()); |
859 ASSERT_TRUE(NULL != waiter.stream()); | 854 ASSERT_TRUE(NULL != waiter.stream()); |
860 EXPECT_TRUE(NULL == waiter.websocket_stream()); | 855 EXPECT_TRUE(NULL == waiter.websocket_stream()); |
861 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); | 856 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); |
862 EXPECT_EQ(1, GetSocketPoolGroupCount( | 857 EXPECT_EQ(1, |
863 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 858 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
864 EXPECT_EQ(1, GetSocketPoolGroupCount( | 859 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
865 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 860 EXPECT_EQ(1, |
866 EXPECT_EQ(0, GetSocketPoolGroupCount( | 861 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
867 session->GetTransportSocketPool( | 862 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
868 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 863 EXPECT_EQ(0, |
869 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSSLSocketPool( | 864 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
870 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 865 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 866 EXPECT_EQ(0, |
| 867 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 868 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
871 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 869 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
872 } | 870 } |
873 | 871 |
874 TEST_P(HttpStreamFactoryTest, RequestHttpStreamOverProxy) { | 872 TEST_P(HttpStreamFactoryTest, RequestHttpStreamOverProxy) { |
875 SpdySessionDependencies session_deps( | 873 SpdySessionDependencies session_deps( |
876 GetParam(), ProxyService::CreateFixed("myproxy:8888")); | 874 GetParam(), ProxyService::CreateFixed("myproxy:8888")); |
877 | 875 |
878 StaticSocketDataProvider socket_data; | 876 StaticSocketDataProvider socket_data; |
879 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 877 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
880 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 878 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
881 | 879 |
882 scoped_refptr<HttpNetworkSession> session( | 880 scoped_refptr<HttpNetworkSession> session( |
883 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 881 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
884 | 882 |
885 // Now request a stream. It should succeed using the second proxy in the | 883 // Now request a stream. It should succeed using the second proxy in the |
886 // list. | 884 // list. |
887 HttpRequestInfo request_info; | 885 HttpRequestInfo request_info; |
888 request_info.method = "GET"; | 886 request_info.method = "GET"; |
889 request_info.url = GURL("http://www.google.com"); | 887 request_info.url = GURL("http://www.google.com"); |
890 request_info.load_flags = 0; | 888 request_info.load_flags = 0; |
891 | 889 |
892 SSLConfig ssl_config; | 890 SSLConfig ssl_config; |
893 StreamRequestWaiter waiter; | 891 StreamRequestWaiter waiter; |
894 scoped_ptr<HttpStreamRequest> request( | 892 scoped_ptr<HttpStreamRequest> request( |
895 session->http_stream_factory()->RequestStream( | 893 session->http_stream_factory()->RequestStream(request_info, |
896 request_info, | 894 DEFAULT_PRIORITY, |
897 DEFAULT_PRIORITY, | 895 ssl_config, |
898 ssl_config, | 896 ssl_config, |
899 ssl_config, | 897 &waiter, |
900 &waiter, | 898 BoundNetLog())); |
901 BoundNetLog())); | |
902 waiter.WaitForStream(); | 899 waiter.WaitForStream(); |
903 EXPECT_TRUE(waiter.stream_done()); | 900 EXPECT_TRUE(waiter.stream_done()); |
904 ASSERT_TRUE(NULL != waiter.stream()); | 901 ASSERT_TRUE(NULL != waiter.stream()); |
905 EXPECT_TRUE(NULL == waiter.websocket_stream()); | 902 EXPECT_TRUE(NULL == waiter.websocket_stream()); |
906 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); | 903 EXPECT_FALSE(waiter.stream()->IsSpdyHttpStream()); |
907 EXPECT_EQ(0, GetSocketPoolGroupCount( | 904 EXPECT_EQ(0, |
908 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 905 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
909 EXPECT_EQ(0, GetSocketPoolGroupCount( | 906 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
910 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 907 EXPECT_EQ(0, |
911 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( | 908 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
912 HttpNetworkSession::NORMAL_SOCKET_POOL, | 909 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
913 HostPortPair("myproxy", 8888)))); | 910 EXPECT_EQ(1, |
914 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( | 911 GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( |
915 HttpNetworkSession::NORMAL_SOCKET_POOL, | 912 HttpNetworkSession::NORMAL_SOCKET_POOL, |
916 HostPortPair("myproxy", 8888)))); | 913 HostPortPair("myproxy", 8888)))); |
917 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( | 914 EXPECT_EQ(0, |
918 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, | 915 GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( |
919 HostPortPair("myproxy", 8888)))); | 916 HttpNetworkSession::NORMAL_SOCKET_POOL, |
920 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( | 917 HostPortPair("myproxy", 8888)))); |
921 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, | 918 EXPECT_EQ(0, |
922 HostPortPair("myproxy", 8888)))); | 919 GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( |
| 920 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, |
| 921 HostPortPair("myproxy", 8888)))); |
| 922 EXPECT_EQ(0, |
| 923 GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( |
| 924 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, |
| 925 HostPortPair("myproxy", 8888)))); |
923 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); | 926 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); |
924 } | 927 } |
925 | 928 |
926 TEST_P(HttpStreamFactoryTest, RequestWebSocketBasicHandshakeStream) { | 929 TEST_P(HttpStreamFactoryTest, RequestWebSocketBasicHandshakeStream) { |
927 SpdySessionDependencies session_deps( | 930 SpdySessionDependencies session_deps(GetParam(), |
928 GetParam(), ProxyService::CreateDirect()); | 931 ProxyService::CreateDirect()); |
929 | 932 |
930 StaticSocketDataProvider socket_data; | 933 StaticSocketDataProvider socket_data; |
931 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 934 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
932 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 935 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
933 | 936 |
934 scoped_refptr<HttpNetworkSession> session( | 937 scoped_refptr<HttpNetworkSession> session( |
935 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 938 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
936 | 939 |
937 // Now request a stream. | 940 // Now request a stream. |
938 HttpRequestInfo request_info; | 941 HttpRequestInfo request_info; |
(...skipping 12 matching lines...) Expand all Loading... |
951 ssl_config, | 954 ssl_config, |
952 &waiter, | 955 &waiter, |
953 &create_helper, | 956 &create_helper, |
954 BoundNetLog())); | 957 BoundNetLog())); |
955 waiter.WaitForStream(); | 958 waiter.WaitForStream(); |
956 EXPECT_TRUE(waiter.stream_done()); | 959 EXPECT_TRUE(waiter.stream_done()); |
957 EXPECT_TRUE(NULL == waiter.stream()); | 960 EXPECT_TRUE(NULL == waiter.stream()); |
958 ASSERT_TRUE(NULL != waiter.websocket_stream()); | 961 ASSERT_TRUE(NULL != waiter.websocket_stream()); |
959 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeBasic, | 962 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeBasic, |
960 waiter.websocket_stream()->type()); | 963 waiter.websocket_stream()->type()); |
961 EXPECT_EQ(0, GetSocketPoolGroupCount( | 964 EXPECT_EQ(0, |
962 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 965 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
963 EXPECT_EQ(0, GetSocketPoolGroupCount( | 966 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
964 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 967 EXPECT_EQ(0, |
965 EXPECT_EQ(1, GetSocketPoolGroupCount( | 968 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
966 session->GetTransportSocketPool( | 969 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
967 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 970 EXPECT_EQ(1, |
968 EXPECT_EQ(0, GetSocketPoolGroupCount( | 971 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
969 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 972 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 973 EXPECT_EQ(0, |
| 974 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 975 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
970 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 976 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
971 } | 977 } |
972 | 978 |
973 TEST_P(HttpStreamFactoryTest, RequestWebSocketBasicHandshakeStreamOverSSL) { | 979 TEST_P(HttpStreamFactoryTest, RequestWebSocketBasicHandshakeStreamOverSSL) { |
974 SpdySessionDependencies session_deps( | 980 SpdySessionDependencies session_deps(GetParam(), |
975 GetParam(), ProxyService::CreateDirect()); | 981 ProxyService::CreateDirect()); |
976 | 982 |
977 MockRead mock_read(ASYNC, OK); | 983 MockRead mock_read(ASYNC, OK); |
978 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); | 984 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); |
979 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 985 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
980 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 986 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
981 | 987 |
982 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 988 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
983 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); | 989 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); |
984 | 990 |
985 scoped_refptr<HttpNetworkSession> session( | 991 scoped_refptr<HttpNetworkSession> session( |
(...skipping 16 matching lines...) Expand all Loading... |
1002 ssl_config, | 1008 ssl_config, |
1003 &waiter, | 1009 &waiter, |
1004 &create_helper, | 1010 &create_helper, |
1005 BoundNetLog())); | 1011 BoundNetLog())); |
1006 waiter.WaitForStream(); | 1012 waiter.WaitForStream(); |
1007 EXPECT_TRUE(waiter.stream_done()); | 1013 EXPECT_TRUE(waiter.stream_done()); |
1008 EXPECT_TRUE(NULL == waiter.stream()); | 1014 EXPECT_TRUE(NULL == waiter.stream()); |
1009 ASSERT_TRUE(NULL != waiter.websocket_stream()); | 1015 ASSERT_TRUE(NULL != waiter.websocket_stream()); |
1010 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeBasic, | 1016 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeBasic, |
1011 waiter.websocket_stream()->type()); | 1017 waiter.websocket_stream()->type()); |
1012 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1018 EXPECT_EQ(0, |
1013 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1019 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1014 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1020 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1015 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1021 EXPECT_EQ(0, |
1016 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1022 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
1017 session->GetTransportSocketPool( | 1023 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1018 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1024 EXPECT_EQ(1, |
1019 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1025 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1020 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1026 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1027 EXPECT_EQ(1, |
| 1028 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 1029 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1021 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1030 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
1022 } | 1031 } |
1023 | 1032 |
1024 TEST_P(HttpStreamFactoryTest, RequestWebSocketBasicHandshakeStreamOverProxy) { | 1033 TEST_P(HttpStreamFactoryTest, RequestWebSocketBasicHandshakeStreamOverProxy) { |
1025 SpdySessionDependencies session_deps( | 1034 SpdySessionDependencies session_deps( |
1026 GetParam(), ProxyService::CreateFixed("myproxy:8888")); | 1035 GetParam(), ProxyService::CreateFixed("myproxy:8888")); |
1027 | 1036 |
1028 MockRead read(SYNCHRONOUS, "HTTP/1.0 200 Connection established\r\n\r\n"); | 1037 MockRead read(SYNCHRONOUS, "HTTP/1.0 200 Connection established\r\n\r\n"); |
1029 StaticSocketDataProvider socket_data(&read, 1, 0, 0); | 1038 StaticSocketDataProvider socket_data(&read, 1, 0, 0); |
1030 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1039 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
(...skipping 19 matching lines...) Expand all Loading... |
1050 ssl_config, | 1059 ssl_config, |
1051 &waiter, | 1060 &waiter, |
1052 &create_helper, | 1061 &create_helper, |
1053 BoundNetLog())); | 1062 BoundNetLog())); |
1054 waiter.WaitForStream(); | 1063 waiter.WaitForStream(); |
1055 EXPECT_TRUE(waiter.stream_done()); | 1064 EXPECT_TRUE(waiter.stream_done()); |
1056 EXPECT_TRUE(NULL == waiter.stream()); | 1065 EXPECT_TRUE(NULL == waiter.stream()); |
1057 ASSERT_TRUE(NULL != waiter.websocket_stream()); | 1066 ASSERT_TRUE(NULL != waiter.websocket_stream()); |
1058 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeBasic, | 1067 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeBasic, |
1059 waiter.websocket_stream()->type()); | 1068 waiter.websocket_stream()->type()); |
1060 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1069 EXPECT_EQ(0, |
1061 session->GetTransportSocketPool( | 1070 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1062 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1071 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1063 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1072 EXPECT_EQ(0, |
1064 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1073 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
1065 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( | 1074 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1066 HttpNetworkSession::NORMAL_SOCKET_POOL, | 1075 EXPECT_EQ(0, |
1067 HostPortPair("myproxy", 8888)))); | 1076 GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( |
1068 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( | 1077 HttpNetworkSession::NORMAL_SOCKET_POOL, |
1069 HttpNetworkSession::NORMAL_SOCKET_POOL, | 1078 HostPortPair("myproxy", 8888)))); |
1070 HostPortPair("myproxy", 8888)))); | 1079 EXPECT_EQ(0, |
1071 EXPECT_EQ(1, GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( | 1080 GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( |
1072 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, | 1081 HttpNetworkSession::NORMAL_SOCKET_POOL, |
1073 HostPortPair("myproxy", 8888)))); | 1082 HostPortPair("myproxy", 8888)))); |
1074 EXPECT_EQ(0, GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( | 1083 EXPECT_EQ(1, |
1075 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, | 1084 GetSocketPoolGroupCount(session->GetSocketPoolForHTTPProxy( |
1076 HostPortPair("myproxy", 8888)))); | 1085 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, |
| 1086 HostPortPair("myproxy", 8888)))); |
| 1087 EXPECT_EQ(0, |
| 1088 GetSocketPoolGroupCount(session->GetSocketPoolForSSLWithProxy( |
| 1089 HttpNetworkSession::WEBSOCKET_SOCKET_POOL, |
| 1090 HostPortPair("myproxy", 8888)))); |
1077 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); | 1091 EXPECT_FALSE(waiter.used_proxy_info().is_direct()); |
1078 } | 1092 } |
1079 | 1093 |
1080 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { | 1094 TEST_P(HttpStreamFactoryTest, RequestSpdyHttpStream) { |
1081 SpdySessionDependencies session_deps(GetParam(), | 1095 SpdySessionDependencies session_deps(GetParam(), |
1082 ProxyService::CreateDirect()); | 1096 ProxyService::CreateDirect()); |
1083 | 1097 |
1084 MockRead mock_read(ASYNC, OK); | 1098 MockRead mock_read(ASYNC, OK); |
1085 DeterministicSocketData socket_data(&mock_read, 1, NULL, 0); | 1099 DeterministicSocketData socket_data(&mock_read, 1, NULL, 0); |
1086 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1100 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
1087 session_deps.deterministic_socket_factory->AddSocketDataProvider( | 1101 session_deps.deterministic_socket_factory->AddSocketDataProvider( |
1088 &socket_data); | 1102 &socket_data); |
1089 | 1103 |
1090 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 1104 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
1091 ssl_socket_data.SetNextProto(GetParam()); | 1105 ssl_socket_data.SetNextProto(GetParam()); |
1092 session_deps.deterministic_socket_factory->AddSSLSocketDataProvider( | 1106 session_deps.deterministic_socket_factory->AddSSLSocketDataProvider( |
1093 &ssl_socket_data); | 1107 &ssl_socket_data); |
1094 | 1108 |
1095 HostPortPair host_port_pair("www.google.com", 443); | 1109 HostPortPair host_port_pair("www.google.com", 443); |
1096 scoped_refptr<HttpNetworkSession> | 1110 scoped_refptr<HttpNetworkSession> session( |
1097 session(SpdySessionDependencies::SpdyCreateSessionDeterministic( | 1111 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps)); |
1098 &session_deps)); | |
1099 | 1112 |
1100 // Now request a stream. | 1113 // Now request a stream. |
1101 HttpRequestInfo request_info; | 1114 HttpRequestInfo request_info; |
1102 request_info.method = "GET"; | 1115 request_info.method = "GET"; |
1103 request_info.url = GURL("https://www.google.com"); | 1116 request_info.url = GURL("https://www.google.com"); |
1104 request_info.load_flags = 0; | 1117 request_info.load_flags = 0; |
1105 | 1118 |
1106 SSLConfig ssl_config; | 1119 SSLConfig ssl_config; |
1107 StreamRequestWaiter waiter; | 1120 StreamRequestWaiter waiter; |
1108 scoped_ptr<HttpStreamRequest> request( | 1121 scoped_ptr<HttpStreamRequest> request( |
1109 session->http_stream_factory()->RequestStream( | 1122 session->http_stream_factory()->RequestStream(request_info, |
1110 request_info, | 1123 DEFAULT_PRIORITY, |
1111 DEFAULT_PRIORITY, | 1124 ssl_config, |
1112 ssl_config, | 1125 ssl_config, |
1113 ssl_config, | 1126 &waiter, |
1114 &waiter, | 1127 BoundNetLog())); |
1115 BoundNetLog())); | |
1116 waiter.WaitForStream(); | 1128 waiter.WaitForStream(); |
1117 EXPECT_TRUE(waiter.stream_done()); | 1129 EXPECT_TRUE(waiter.stream_done()); |
1118 EXPECT_TRUE(NULL == waiter.websocket_stream()); | 1130 EXPECT_TRUE(NULL == waiter.websocket_stream()); |
1119 ASSERT_TRUE(NULL != waiter.stream()); | 1131 ASSERT_TRUE(NULL != waiter.stream()); |
1120 EXPECT_TRUE(waiter.stream()->IsSpdyHttpStream()); | 1132 EXPECT_TRUE(waiter.stream()->IsSpdyHttpStream()); |
1121 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1133 EXPECT_EQ(1, |
1122 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1134 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1123 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1135 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1124 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1136 EXPECT_EQ(1, |
1125 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1137 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
1126 session->GetTransportSocketPool( | 1138 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1127 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1139 EXPECT_EQ(0, |
1128 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1140 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1129 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1141 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1142 EXPECT_EQ(0, |
| 1143 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 1144 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1130 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1145 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
1131 } | 1146 } |
1132 | 1147 |
1133 // TODO(ricea): This test can be removed once the new WebSocket stack supports | 1148 // TODO(ricea): This test can be removed once the new WebSocket stack supports |
1134 // SPDY. Currently, even if we connect to a SPDY-supporting server, we need to | 1149 // SPDY. Currently, even if we connect to a SPDY-supporting server, we need to |
1135 // use plain SSL. | 1150 // use plain SSL. |
1136 TEST_P(HttpStreamFactoryTest, RequestWebSocketSpdyHandshakeStreamButGetSSL) { | 1151 TEST_P(HttpStreamFactoryTest, RequestWebSocketSpdyHandshakeStreamButGetSSL) { |
1137 SpdySessionDependencies session_deps(GetParam(), | 1152 SpdySessionDependencies session_deps(GetParam(), |
1138 ProxyService::CreateDirect()); | 1153 ProxyService::CreateDirect()); |
1139 | 1154 |
1140 MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING); | 1155 MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING); |
1141 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); | 1156 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); |
1142 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1157 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
1143 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 1158 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
1144 | 1159 |
1145 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 1160 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
1146 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); | 1161 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); |
1147 | 1162 |
1148 HostPortPair host_port_pair("www.google.com", 80); | 1163 HostPortPair host_port_pair("www.google.com", 80); |
1149 scoped_refptr<HttpNetworkSession> | 1164 scoped_refptr<HttpNetworkSession> session( |
1150 session(SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 1165 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
1151 | 1166 |
1152 // Now request a stream. | 1167 // Now request a stream. |
1153 HttpRequestInfo request_info; | 1168 HttpRequestInfo request_info; |
1154 request_info.method = "GET"; | 1169 request_info.method = "GET"; |
1155 request_info.url = GURL("wss://www.google.com"); | 1170 request_info.url = GURL("wss://www.google.com"); |
1156 request_info.load_flags = 0; | 1171 request_info.load_flags = 0; |
1157 | 1172 |
1158 SSLConfig ssl_config; | 1173 SSLConfig ssl_config; |
1159 StreamRequestWaiter waiter1; | 1174 StreamRequestWaiter waiter1; |
1160 WebSocketStreamCreateHelper create_helper; | 1175 WebSocketStreamCreateHelper create_helper; |
1161 scoped_ptr<HttpStreamRequest> request1( | 1176 scoped_ptr<HttpStreamRequest> request1( |
1162 session->http_stream_factory_for_websocket() | 1177 session->http_stream_factory_for_websocket() |
1163 ->RequestWebSocketHandshakeStream(request_info, | 1178 ->RequestWebSocketHandshakeStream(request_info, |
1164 DEFAULT_PRIORITY, | 1179 DEFAULT_PRIORITY, |
1165 ssl_config, | 1180 ssl_config, |
1166 ssl_config, | 1181 ssl_config, |
1167 &waiter1, | 1182 &waiter1, |
1168 &create_helper, | 1183 &create_helper, |
1169 BoundNetLog())); | 1184 BoundNetLog())); |
1170 waiter1.WaitForStream(); | 1185 waiter1.WaitForStream(); |
1171 EXPECT_TRUE(waiter1.stream_done()); | 1186 EXPECT_TRUE(waiter1.stream_done()); |
1172 ASSERT_TRUE(NULL != waiter1.websocket_stream()); | 1187 ASSERT_TRUE(NULL != waiter1.websocket_stream()); |
1173 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeBasic, | 1188 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeBasic, |
1174 waiter1.websocket_stream()->type()); | 1189 waiter1.websocket_stream()->type()); |
1175 EXPECT_TRUE(NULL == waiter1.stream()); | 1190 EXPECT_TRUE(NULL == waiter1.stream()); |
1176 | 1191 |
1177 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1192 EXPECT_EQ(0, |
1178 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1193 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1179 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1194 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1180 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1195 EXPECT_EQ(0, |
1181 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1196 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
1182 session->GetTransportSocketPool( | 1197 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
| 1198 EXPECT_EQ(1, |
| 1199 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1183 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1200 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1184 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1201 EXPECT_EQ(1, |
1185 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1202 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 1203 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1186 EXPECT_TRUE(waiter1.used_proxy_info().is_direct()); | 1204 EXPECT_TRUE(waiter1.used_proxy_info().is_direct()); |
1187 } | 1205 } |
1188 | 1206 |
1189 // TODO(ricea): Re-enable once WebSocket-over-SPDY is implemented. | 1207 // TODO(ricea): Re-enable once WebSocket-over-SPDY is implemented. |
1190 TEST_P(HttpStreamFactoryTest, DISABLED_RequestWebSocketSpdyHandshakeStream) { | 1208 TEST_P(HttpStreamFactoryTest, DISABLED_RequestWebSocketSpdyHandshakeStream) { |
1191 SpdySessionDependencies session_deps(GetParam(), | 1209 SpdySessionDependencies session_deps(GetParam(), |
1192 ProxyService::CreateDirect()); | 1210 ProxyService::CreateDirect()); |
1193 | 1211 |
1194 MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING); | 1212 MockRead mock_read(SYNCHRONOUS, ERR_IO_PENDING); |
1195 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); | 1213 StaticSocketDataProvider socket_data(&mock_read, 1, NULL, 0); |
1196 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1214 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
1197 session_deps.socket_factory->AddSocketDataProvider(&socket_data); | 1215 session_deps.socket_factory->AddSocketDataProvider(&socket_data); |
1198 | 1216 |
1199 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 1217 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
1200 ssl_socket_data.SetNextProto(GetParam()); | 1218 ssl_socket_data.SetNextProto(GetParam()); |
1201 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); | 1219 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_socket_data); |
1202 | 1220 |
1203 HostPortPair host_port_pair("www.google.com", 80); | 1221 HostPortPair host_port_pair("www.google.com", 80); |
1204 scoped_refptr<HttpNetworkSession> | 1222 scoped_refptr<HttpNetworkSession> session( |
1205 session(SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 1223 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
1206 | 1224 |
1207 // Now request a stream. | 1225 // Now request a stream. |
1208 HttpRequestInfo request_info; | 1226 HttpRequestInfo request_info; |
1209 request_info.method = "GET"; | 1227 request_info.method = "GET"; |
1210 request_info.url = GURL("wss://www.google.com"); | 1228 request_info.url = GURL("wss://www.google.com"); |
1211 request_info.load_flags = 0; | 1229 request_info.load_flags = 0; |
1212 | 1230 |
1213 SSLConfig ssl_config; | 1231 SSLConfig ssl_config; |
1214 StreamRequestWaiter waiter1; | 1232 StreamRequestWaiter waiter1; |
1215 WebSocketStreamCreateHelper create_helper; | 1233 WebSocketStreamCreateHelper create_helper; |
(...skipping 28 matching lines...) Expand all Loading... |
1244 ASSERT_TRUE(NULL != waiter2.websocket_stream()); | 1262 ASSERT_TRUE(NULL != waiter2.websocket_stream()); |
1245 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeSpdy, | 1263 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeSpdy, |
1246 waiter2.websocket_stream()->type()); | 1264 waiter2.websocket_stream()->type()); |
1247 EXPECT_TRUE(NULL == waiter2.stream()); | 1265 EXPECT_TRUE(NULL == waiter2.stream()); |
1248 EXPECT_NE(waiter2.websocket_stream(), waiter1.websocket_stream()); | 1266 EXPECT_NE(waiter2.websocket_stream(), waiter1.websocket_stream()); |
1249 EXPECT_EQ(static_cast<WebSocketSpdyHandshakeStream*>( | 1267 EXPECT_EQ(static_cast<WebSocketSpdyHandshakeStream*>( |
1250 waiter2.websocket_stream())->spdy_session(), | 1268 waiter2.websocket_stream())->spdy_session(), |
1251 static_cast<WebSocketSpdyHandshakeStream*>( | 1269 static_cast<WebSocketSpdyHandshakeStream*>( |
1252 waiter1.websocket_stream())->spdy_session()); | 1270 waiter1.websocket_stream())->spdy_session()); |
1253 | 1271 |
1254 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1272 EXPECT_EQ(0, |
1255 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1273 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1256 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1274 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1257 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1275 EXPECT_EQ(0, |
1258 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1276 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
1259 session->GetTransportSocketPool( | 1277 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1260 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1278 EXPECT_EQ(1, |
1261 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1279 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1262 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1280 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1281 EXPECT_EQ(1, |
| 1282 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 1283 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1263 EXPECT_TRUE(waiter1.used_proxy_info().is_direct()); | 1284 EXPECT_TRUE(waiter1.used_proxy_info().is_direct()); |
1264 } | 1285 } |
1265 | 1286 |
1266 // TODO(ricea): Re-enable once WebSocket over SPDY is implemented. | 1287 // TODO(ricea): Re-enable once WebSocket over SPDY is implemented. |
1267 TEST_P(HttpStreamFactoryTest, DISABLED_OrphanedWebSocketStream) { | 1288 TEST_P(HttpStreamFactoryTest, DISABLED_OrphanedWebSocketStream) { |
1268 UseAlternateProtocolsScopedSetter use_alternate_protocols(true); | 1289 UseAlternateProtocolsScopedSetter use_alternate_protocols(true); |
1269 SpdySessionDependencies session_deps(GetParam(), | 1290 SpdySessionDependencies session_deps(GetParam(), |
1270 ProxyService::CreateDirect()); | 1291 ProxyService::CreateDirect()); |
1271 | 1292 |
1272 MockRead mock_read(ASYNC, OK); | 1293 MockRead mock_read(ASYNC, OK); |
1273 DeterministicSocketData socket_data(&mock_read, 1, NULL, 0); | 1294 DeterministicSocketData socket_data(&mock_read, 1, NULL, 0); |
1274 socket_data.set_connect_data(MockConnect(ASYNC, OK)); | 1295 socket_data.set_connect_data(MockConnect(ASYNC, OK)); |
1275 session_deps.deterministic_socket_factory->AddSocketDataProvider( | 1296 session_deps.deterministic_socket_factory->AddSocketDataProvider( |
1276 &socket_data); | 1297 &socket_data); |
1277 | 1298 |
1278 MockRead mock_read2(ASYNC, OK); | 1299 MockRead mock_read2(ASYNC, OK); |
1279 DeterministicSocketData socket_data2(&mock_read2, 1, NULL, 0); | 1300 DeterministicSocketData socket_data2(&mock_read2, 1, NULL, 0); |
1280 socket_data2.set_connect_data(MockConnect(ASYNC, ERR_IO_PENDING)); | 1301 socket_data2.set_connect_data(MockConnect(ASYNC, ERR_IO_PENDING)); |
1281 session_deps.deterministic_socket_factory->AddSocketDataProvider( | 1302 session_deps.deterministic_socket_factory->AddSocketDataProvider( |
1282 &socket_data2); | 1303 &socket_data2); |
1283 | 1304 |
1284 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); | 1305 SSLSocketDataProvider ssl_socket_data(ASYNC, OK); |
1285 ssl_socket_data.SetNextProto(GetParam()); | 1306 ssl_socket_data.SetNextProto(GetParam()); |
1286 session_deps.deterministic_socket_factory->AddSSLSocketDataProvider( | 1307 session_deps.deterministic_socket_factory->AddSSLSocketDataProvider( |
1287 &ssl_socket_data); | 1308 &ssl_socket_data); |
1288 | 1309 |
1289 scoped_refptr<HttpNetworkSession> | 1310 scoped_refptr<HttpNetworkSession> session( |
1290 session(SpdySessionDependencies::SpdyCreateSessionDeterministic( | 1311 SpdySessionDependencies::SpdyCreateSessionDeterministic(&session_deps)); |
1291 &session_deps)); | |
1292 | 1312 |
1293 // Now request a stream. | 1313 // Now request a stream. |
1294 HttpRequestInfo request_info; | 1314 HttpRequestInfo request_info; |
1295 request_info.method = "GET"; | 1315 request_info.method = "GET"; |
1296 request_info.url = GURL("ws://www.google.com:8888"); | 1316 request_info.url = GURL("ws://www.google.com:8888"); |
1297 request_info.load_flags = 0; | 1317 request_info.load_flags = 0; |
1298 | 1318 |
1299 session->http_server_properties()->SetAlternateProtocol( | 1319 session->http_server_properties()->SetAlternateProtocol( |
1300 HostPortPair("www.google.com", 8888), | 1320 HostPortPair("www.google.com", 8888), 9999, NPN_SPDY_3); |
1301 9999, | |
1302 NPN_SPDY_3); | |
1303 | 1321 |
1304 SSLConfig ssl_config; | 1322 SSLConfig ssl_config; |
1305 StreamRequestWaiter waiter; | 1323 StreamRequestWaiter waiter; |
1306 WebSocketStreamCreateHelper create_helper; | 1324 WebSocketStreamCreateHelper create_helper; |
1307 scoped_ptr<HttpStreamRequest> request( | 1325 scoped_ptr<HttpStreamRequest> request( |
1308 session->http_stream_factory_for_websocket() | 1326 session->http_stream_factory_for_websocket() |
1309 ->RequestWebSocketHandshakeStream(request_info, | 1327 ->RequestWebSocketHandshakeStream(request_info, |
1310 DEFAULT_PRIORITY, | 1328 DEFAULT_PRIORITY, |
1311 ssl_config, | 1329 ssl_config, |
1312 ssl_config, | 1330 ssl_config, |
1313 &waiter, | 1331 &waiter, |
1314 &create_helper, | 1332 &create_helper, |
1315 BoundNetLog())); | 1333 BoundNetLog())); |
1316 waiter.WaitForStream(); | 1334 waiter.WaitForStream(); |
1317 EXPECT_TRUE(waiter.stream_done()); | 1335 EXPECT_TRUE(waiter.stream_done()); |
1318 EXPECT_TRUE(NULL == waiter.stream()); | 1336 EXPECT_TRUE(NULL == waiter.stream()); |
1319 ASSERT_TRUE(NULL != waiter.websocket_stream()); | 1337 ASSERT_TRUE(NULL != waiter.websocket_stream()); |
1320 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeSpdy, | 1338 EXPECT_EQ(MockWebSocketHandshakeStream::kStreamTypeSpdy, |
1321 waiter.websocket_stream()->type()); | 1339 waiter.websocket_stream()->type()); |
1322 | 1340 |
1323 // Make sure that there was an alternative connection | 1341 // Make sure that there was an alternative connection |
1324 // which consumes extra connections. | 1342 // which consumes extra connections. |
1325 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1343 EXPECT_EQ(0, |
1326 session->GetTransportSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1344 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1327 EXPECT_EQ(0, GetSocketPoolGroupCount( | 1345 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1328 session->GetSSLSocketPool(HttpNetworkSession::NORMAL_SOCKET_POOL))); | 1346 EXPECT_EQ(0, |
1329 EXPECT_EQ(2, GetSocketPoolGroupCount( | 1347 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
1330 session->GetTransportSocketPool( | 1348 HttpNetworkSession::NORMAL_SOCKET_POOL))); |
1331 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1349 EXPECT_EQ(2, |
1332 EXPECT_EQ(1, GetSocketPoolGroupCount( | 1350 GetSocketPoolGroupCount(session->GetTransportSocketPool( |
1333 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 1351 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
| 1352 EXPECT_EQ(1, |
| 1353 GetSocketPoolGroupCount(session->GetSSLSocketPool( |
| 1354 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
1334 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1355 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
1335 | 1356 |
1336 // Make sure there is no orphaned job. it is already canceled. | 1357 // Make sure there is no orphaned job. it is already canceled. |
1337 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( | 1358 ASSERT_EQ( |
1338 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); | 1359 0u, |
| 1360 static_cast<HttpStreamFactoryImpl*>( |
| 1361 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); |
1339 } | 1362 } |
1340 | 1363 |
1341 } // namespace | 1364 } // namespace |
1342 | 1365 |
1343 } // namespace net | 1366 } // namespace net |
OLD | NEW |