Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(641)

Side by Side Diff: net/http/http_stream_factory_impl_unittest.cc

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698