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 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "net/base/net_log.h" | 10 #include "net/base/net_log.h" |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory; | 145 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory; |
146 HttpServerPropertiesImpl http_server_properties; | 146 HttpServerPropertiesImpl http_server_properties; |
147 NetLog* net_log; | 147 NetLog* net_log; |
148 }; | 148 }; |
149 | 149 |
150 HttpNetworkSession* CreateSession(SessionDependencies* session_deps) { | 150 HttpNetworkSession* CreateSession(SessionDependencies* session_deps) { |
151 HttpNetworkSession::Params params; | 151 HttpNetworkSession::Params params; |
152 params.host_resolver = session_deps->host_resolver.get(); | 152 params.host_resolver = session_deps->host_resolver.get(); |
153 params.cert_verifier = session_deps->cert_verifier.get(); | 153 params.cert_verifier = session_deps->cert_verifier.get(); |
154 params.proxy_service = session_deps->proxy_service.get(); | 154 params.proxy_service = session_deps->proxy_service.get(); |
155 params.ssl_config_service = session_deps->ssl_config_service; | 155 params.ssl_config_service = session_deps->ssl_config_service.get(); |
156 params.client_socket_factory = &session_deps->socket_factory; | 156 params.client_socket_factory = &session_deps->socket_factory; |
157 params.http_auth_handler_factory = | 157 params.http_auth_handler_factory = |
158 session_deps->http_auth_handler_factory.get(); | 158 session_deps->http_auth_handler_factory.get(); |
159 params.net_log = session_deps->net_log; | 159 params.net_log = session_deps->net_log; |
160 params.http_server_properties = &session_deps->http_server_properties; | 160 params.http_server_properties = &session_deps->http_server_properties; |
161 return new HttpNetworkSession(params); | 161 return new HttpNetworkSession(params); |
162 } | 162 } |
163 | 163 |
164 struct TestCase { | 164 struct TestCase { |
165 int num_streams; | 165 int num_streams; |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 session_deps.cert_verifier.get()); | 314 session_deps.cert_verifier.get()); |
315 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 315 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
316 new CapturePreconnectsSSLSocketPool( | 316 new CapturePreconnectsSSLSocketPool( |
317 session_deps.host_resolver.get(), | 317 session_deps.host_resolver.get(), |
318 session_deps.cert_verifier.get()); | 318 session_deps.cert_verifier.get()); |
319 MockClientSocketPoolManager* mock_pool_manager = | 319 MockClientSocketPoolManager* mock_pool_manager = |
320 new MockClientSocketPoolManager; | 320 new MockClientSocketPoolManager; |
321 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 321 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
322 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 322 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
323 peer.SetClientSocketPoolManager(mock_pool_manager); | 323 peer.SetClientSocketPoolManager(mock_pool_manager); |
324 PreconnectHelper(kTests[i], session); | 324 PreconnectHelper(kTests[i], session.get()); |
325 if (kTests[i].ssl) | 325 if (kTests[i].ssl) |
326 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 326 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
327 else | 327 else |
328 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); | 328 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
329 } | 329 } |
330 } | 330 } |
331 | 331 |
332 TEST(HttpStreamFactoryTest, PreconnectHttpProxy) { | 332 TEST(HttpStreamFactoryTest, PreconnectHttpProxy) { |
333 for (size_t i = 0; i < arraysize(kTests); ++i) { | 333 for (size_t i = 0; i < arraysize(kTests); ++i) { |
334 SessionDependencies session_deps(ProxyService::CreateFixed("http_proxy")); | 334 SessionDependencies session_deps(ProxyService::CreateFixed("http_proxy")); |
335 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 335 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
336 HttpNetworkSessionPeer peer(session); | 336 HttpNetworkSessionPeer peer(session); |
337 HostPortPair proxy_host("http_proxy", 80); | 337 HostPortPair proxy_host("http_proxy", 80); |
338 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = | 338 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = |
339 new CapturePreconnectsHttpProxySocketPool( | 339 new CapturePreconnectsHttpProxySocketPool( |
340 session_deps.host_resolver.get(), | 340 session_deps.host_resolver.get(), |
341 session_deps.cert_verifier.get()); | 341 session_deps.cert_verifier.get()); |
342 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 342 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
343 new CapturePreconnectsSSLSocketPool( | 343 new CapturePreconnectsSSLSocketPool( |
344 session_deps.host_resolver.get(), | 344 session_deps.host_resolver.get(), |
345 session_deps.cert_verifier.get()); | 345 session_deps.cert_verifier.get()); |
346 MockClientSocketPoolManager* mock_pool_manager = | 346 MockClientSocketPoolManager* mock_pool_manager = |
347 new MockClientSocketPoolManager; | 347 new MockClientSocketPoolManager; |
348 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); | 348 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); |
349 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 349 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
350 peer.SetClientSocketPoolManager(mock_pool_manager); | 350 peer.SetClientSocketPoolManager(mock_pool_manager); |
351 PreconnectHelper(kTests[i], session); | 351 PreconnectHelper(kTests[i], session.get()); |
352 if (kTests[i].ssl) | 352 if (kTests[i].ssl) |
353 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 353 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
354 else | 354 else |
355 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); | 355 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); |
356 } | 356 } |
357 } | 357 } |
358 | 358 |
359 TEST(HttpStreamFactoryTest, PreconnectSocksProxy) { | 359 TEST(HttpStreamFactoryTest, PreconnectSocksProxy) { |
360 for (size_t i = 0; i < arraysize(kTests); ++i) { | 360 for (size_t i = 0; i < arraysize(kTests); ++i) { |
361 SessionDependencies session_deps( | 361 SessionDependencies session_deps( |
362 ProxyService::CreateFixed("socks4://socks_proxy:1080")); | 362 ProxyService::CreateFixed("socks4://socks_proxy:1080")); |
363 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 363 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
364 HttpNetworkSessionPeer peer(session); | 364 HttpNetworkSessionPeer peer(session); |
365 HostPortPair proxy_host("socks_proxy", 1080); | 365 HostPortPair proxy_host("socks_proxy", 1080); |
366 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = | 366 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = |
367 new CapturePreconnectsSOCKSSocketPool( | 367 new CapturePreconnectsSOCKSSocketPool( |
368 session_deps.host_resolver.get(), | 368 session_deps.host_resolver.get(), |
369 session_deps.cert_verifier.get()); | 369 session_deps.cert_verifier.get()); |
370 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 370 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
371 new CapturePreconnectsSSLSocketPool( | 371 new CapturePreconnectsSSLSocketPool( |
372 session_deps.host_resolver.get(), | 372 session_deps.host_resolver.get(), |
373 session_deps.cert_verifier.get()); | 373 session_deps.cert_verifier.get()); |
374 MockClientSocketPoolManager* mock_pool_manager = | 374 MockClientSocketPoolManager* mock_pool_manager = |
375 new MockClientSocketPoolManager; | 375 new MockClientSocketPoolManager; |
376 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); | 376 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); |
377 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 377 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
378 peer.SetClientSocketPoolManager(mock_pool_manager); | 378 peer.SetClientSocketPoolManager(mock_pool_manager); |
379 PreconnectHelper(kTests[i], session); | 379 PreconnectHelper(kTests[i], session.get()); |
380 if (kTests[i].ssl) | 380 if (kTests[i].ssl) |
381 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 381 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
382 else | 382 else |
383 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); | 383 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); |
384 } | 384 } |
385 } | 385 } |
386 | 386 |
387 TEST(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { | 387 TEST(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { |
388 for (size_t i = 0; i < arraysize(kTests); ++i) { | 388 for (size_t i = 0; i < arraysize(kTests); ++i) { |
389 SessionDependencies session_deps(ProxyService::CreateDirect()); | 389 SessionDependencies session_deps(ProxyService::CreateDirect()); |
(...skipping 13 matching lines...) Expand all Loading... |
403 session_deps.cert_verifier.get()); | 403 session_deps.cert_verifier.get()); |
404 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 404 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
405 new CapturePreconnectsSSLSocketPool( | 405 new CapturePreconnectsSSLSocketPool( |
406 session_deps.host_resolver.get(), | 406 session_deps.host_resolver.get(), |
407 session_deps.cert_verifier.get()); | 407 session_deps.cert_verifier.get()); |
408 MockClientSocketPoolManager* mock_pool_manager = | 408 MockClientSocketPoolManager* mock_pool_manager = |
409 new MockClientSocketPoolManager; | 409 new MockClientSocketPoolManager; |
410 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 410 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
411 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 411 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
412 peer.SetClientSocketPoolManager(mock_pool_manager); | 412 peer.SetClientSocketPoolManager(mock_pool_manager); |
413 PreconnectHelper(kTests[i], session); | 413 PreconnectHelper(kTests[i], session.get()); |
414 // We shouldn't be preconnecting if we have an existing session, which is | 414 // We shouldn't be preconnecting if we have an existing session, which is |
415 // the case for https://www.google.com. | 415 // the case for https://www.google.com. |
416 if (kTests[i].ssl) | 416 if (kTests[i].ssl) |
417 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); | 417 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); |
418 else | 418 else |
419 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); | 419 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
420 } | 420 } |
421 } | 421 } |
422 | 422 |
423 // Verify that preconnects to unsafe ports are cancelled before they reach | 423 // Verify that preconnects to unsafe ports are cancelled before they reach |
424 // the SocketPool. | 424 // the SocketPool. |
425 TEST(HttpStreamFactoryTest, PreconnectUnsafePort) { | 425 TEST(HttpStreamFactoryTest, PreconnectUnsafePort) { |
426 ASSERT_FALSE(IsPortAllowedByDefault(7)); | 426 ASSERT_FALSE(IsPortAllowedByDefault(7)); |
427 ASSERT_FALSE(IsPortAllowedByOverride(7)); | 427 ASSERT_FALSE(IsPortAllowedByOverride(7)); |
428 | 428 |
429 SessionDependencies session_deps(ProxyService::CreateDirect()); | 429 SessionDependencies session_deps(ProxyService::CreateDirect()); |
430 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); | 430 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); |
431 HttpNetworkSessionPeer peer(session); | 431 HttpNetworkSessionPeer peer(session); |
432 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 432 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
433 new CapturePreconnectsTransportSocketPool( | 433 new CapturePreconnectsTransportSocketPool( |
434 session_deps.host_resolver.get(), | 434 session_deps.host_resolver.get(), |
435 session_deps.cert_verifier.get()); | 435 session_deps.cert_verifier.get()); |
436 MockClientSocketPoolManager* mock_pool_manager = | 436 MockClientSocketPoolManager* mock_pool_manager = |
437 new MockClientSocketPoolManager; | 437 new MockClientSocketPoolManager; |
438 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 438 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
439 peer.SetClientSocketPoolManager(mock_pool_manager); | 439 peer.SetClientSocketPoolManager(mock_pool_manager); |
440 | 440 |
441 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session); | 441 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get()); |
442 | 442 |
443 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); | 443 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); |
444 } | 444 } |
445 | 445 |
446 TEST(HttpStreamFactoryTest, JobNotifiesProxy) { | 446 TEST(HttpStreamFactoryTest, JobNotifiesProxy) { |
447 const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT"; | 447 const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT"; |
448 SessionDependencies session_deps( | 448 SessionDependencies session_deps( |
449 ProxyService::CreateFixedFromPacResult(kProxyString)); | 449 ProxyService::CreateFixedFromPacResult(kProxyString)); |
450 | 450 |
451 // First connection attempt fails | 451 // First connection attempt fails |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 &waiter, BoundNetLog())); | 606 &waiter, BoundNetLog())); |
607 | 607 |
608 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, request->GetLoadState()); | 608 EXPECT_EQ(LOAD_STATE_RESOLVING_HOST, request->GetLoadState()); |
609 | 609 |
610 waiter.WaitForStream(); | 610 waiter.WaitForStream(); |
611 } | 611 } |
612 | 612 |
613 } // namespace | 613 } // namespace |
614 | 614 |
615 } // namespace net | 615 } // namespace net |
OLD | NEW |