| 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 |