| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/http_stream_factory_impl.h" | 5 #include "net/http/http_stream_factory_impl.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 301 { 1, true}, | 301 { 1, true}, |
| 302 { 2, true}, | 302 { 2, true}, |
| 303 }; | 303 }; |
| 304 | 304 |
| 305 void PreconnectHelperForURL(int num_streams, | 305 void PreconnectHelperForURL(int num_streams, |
| 306 const GURL& url, | 306 const GURL& url, |
| 307 HttpNetworkSession* session) { | 307 HttpNetworkSession* session) { |
| 308 HttpNetworkSessionPeer peer(session); | 308 HttpNetworkSessionPeer peer(session); |
| 309 MockHttpStreamFactoryImplForPreconnect* mock_factory = | 309 MockHttpStreamFactoryImplForPreconnect* mock_factory = |
| 310 new MockHttpStreamFactoryImplForPreconnect(session, false); | 310 new MockHttpStreamFactoryImplForPreconnect(session, false); |
| 311 peer.SetHttpStreamFactory(mock_factory); | 311 peer.SetHttpStreamFactory(scoped_ptr<HttpStreamFactory>(mock_factory)); |
| 312 SSLConfig ssl_config; | 312 SSLConfig ssl_config; |
| 313 session->ssl_config_service()->GetSSLConfig(&ssl_config); | 313 session->ssl_config_service()->GetSSLConfig(&ssl_config); |
| 314 | 314 |
| 315 HttpRequestInfo request; | 315 HttpRequestInfo request; |
| 316 request.method = "GET"; | 316 request.method = "GET"; |
| 317 request.url = url; | 317 request.url = url; |
| 318 request.load_flags = 0; | 318 request.load_flags = 0; |
| 319 | 319 |
| 320 session->http_stream_factory()->PreconnectStreams( | 320 session->http_stream_factory()->PreconnectStreams( |
| 321 num_streams, request, DEFAULT_PRIORITY, ssl_config, ssl_config); | 321 num_streams, request, DEFAULT_PRIORITY, ssl_config, ssl_config); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 451 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
| 452 HttpNetworkSessionPeer peer(session); | 452 HttpNetworkSessionPeer peer(session); |
| 453 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 453 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
| 454 new CapturePreconnectsTransportSocketPool( | 454 new CapturePreconnectsTransportSocketPool( |
| 455 session_deps.host_resolver.get(), | 455 session_deps.host_resolver.get(), |
| 456 session_deps.cert_verifier.get()); | 456 session_deps.cert_verifier.get()); |
| 457 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 457 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 458 new CapturePreconnectsSSLSocketPool( | 458 new CapturePreconnectsSSLSocketPool( |
| 459 session_deps.host_resolver.get(), | 459 session_deps.host_resolver.get(), |
| 460 session_deps.cert_verifier.get()); | 460 session_deps.cert_verifier.get()); |
| 461 MockClientSocketPoolManager* mock_pool_manager = | 461 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
| 462 new MockClientSocketPoolManager; | 462 new MockClientSocketPoolManager); |
| 463 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 463 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 464 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 464 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
| 465 peer.SetClientSocketPoolManager(mock_pool_manager); | 465 peer.SetClientSocketPoolManager( |
| 466 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
| 466 PreconnectHelper(kTests[i], session.get()); | 467 PreconnectHelper(kTests[i], session.get()); |
| 467 if (kTests[i].ssl) | 468 if (kTests[i].ssl) |
| 468 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 469 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 469 else | 470 else |
| 470 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); | 471 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); |
| 471 } | 472 } |
| 472 } | 473 } |
| 473 | 474 |
| 474 TEST_P(HttpStreamFactoryTest, PreconnectHttpProxy) { | 475 TEST_P(HttpStreamFactoryTest, PreconnectHttpProxy) { |
| 475 for (size_t i = 0; i < arraysize(kTests); ++i) { | 476 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 476 SpdySessionDependencies session_deps( | 477 SpdySessionDependencies session_deps( |
| 477 GetParam(), ProxyService::CreateFixed("http_proxy")); | 478 GetParam(), ProxyService::CreateFixed("http_proxy")); |
| 478 scoped_refptr<HttpNetworkSession> session( | 479 scoped_refptr<HttpNetworkSession> session( |
| 479 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 480 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
| 480 HttpNetworkSessionPeer peer(session); | 481 HttpNetworkSessionPeer peer(session); |
| 481 HostPortPair proxy_host("http_proxy", 80); | 482 HostPortPair proxy_host("http_proxy", 80); |
| 482 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = | 483 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = |
| 483 new CapturePreconnectsHttpProxySocketPool( | 484 new CapturePreconnectsHttpProxySocketPool( |
| 484 session_deps.host_resolver.get(), | 485 session_deps.host_resolver.get(), |
| 485 session_deps.cert_verifier.get()); | 486 session_deps.cert_verifier.get()); |
| 486 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 487 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 487 new CapturePreconnectsSSLSocketPool( | 488 new CapturePreconnectsSSLSocketPool( |
| 488 session_deps.host_resolver.get(), | 489 session_deps.host_resolver.get(), |
| 489 session_deps.cert_verifier.get()); | 490 session_deps.cert_verifier.get()); |
| 490 MockClientSocketPoolManager* mock_pool_manager = | 491 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
| 491 new MockClientSocketPoolManager; | 492 new MockClientSocketPoolManager); |
| 492 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); | 493 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); |
| 493 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 494 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
| 494 peer.SetClientSocketPoolManager(mock_pool_manager); | 495 peer.SetClientSocketPoolManager( |
| 496 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
| 495 PreconnectHelper(kTests[i], session.get()); | 497 PreconnectHelper(kTests[i], session.get()); |
| 496 if (kTests[i].ssl) | 498 if (kTests[i].ssl) |
| 497 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 499 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 498 else | 500 else |
| 499 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); | 501 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); |
| 500 } | 502 } |
| 501 } | 503 } |
| 502 | 504 |
| 503 TEST_P(HttpStreamFactoryTest, PreconnectSocksProxy) { | 505 TEST_P(HttpStreamFactoryTest, PreconnectSocksProxy) { |
| 504 for (size_t i = 0; i < arraysize(kTests); ++i) { | 506 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| 505 SpdySessionDependencies session_deps( | 507 SpdySessionDependencies session_deps( |
| 506 GetParam(), ProxyService::CreateFixed("socks4://socks_proxy:1080")); | 508 GetParam(), ProxyService::CreateFixed("socks4://socks_proxy:1080")); |
| 507 scoped_refptr<HttpNetworkSession> session( | 509 scoped_refptr<HttpNetworkSession> session( |
| 508 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 510 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
| 509 HttpNetworkSessionPeer peer(session); | 511 HttpNetworkSessionPeer peer(session); |
| 510 HostPortPair proxy_host("socks_proxy", 1080); | 512 HostPortPair proxy_host("socks_proxy", 1080); |
| 511 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = | 513 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = |
| 512 new CapturePreconnectsSOCKSSocketPool( | 514 new CapturePreconnectsSOCKSSocketPool( |
| 513 session_deps.host_resolver.get(), | 515 session_deps.host_resolver.get(), |
| 514 session_deps.cert_verifier.get()); | 516 session_deps.cert_verifier.get()); |
| 515 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 517 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 516 new CapturePreconnectsSSLSocketPool( | 518 new CapturePreconnectsSSLSocketPool( |
| 517 session_deps.host_resolver.get(), | 519 session_deps.host_resolver.get(), |
| 518 session_deps.cert_verifier.get()); | 520 session_deps.cert_verifier.get()); |
| 519 MockClientSocketPoolManager* mock_pool_manager = | 521 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
| 520 new MockClientSocketPoolManager; | 522 new MockClientSocketPoolManager); |
| 521 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); | 523 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); |
| 522 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); | 524 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); |
| 523 peer.SetClientSocketPoolManager(mock_pool_manager); | 525 peer.SetClientSocketPoolManager( |
| 526 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
| 524 PreconnectHelper(kTests[i], session.get()); | 527 PreconnectHelper(kTests[i], session.get()); |
| 525 if (kTests[i].ssl) | 528 if (kTests[i].ssl) |
| 526 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); | 529 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); |
| 527 else | 530 else |
| 528 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); | 531 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); |
| 529 } | 532 } |
| 530 } | 533 } |
| 531 | 534 |
| 532 TEST_P(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { | 535 TEST_P(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { |
| 533 for (size_t i = 0; i < arraysize(kTests); ++i) { | 536 for (size_t i = 0; i < arraysize(kTests); ++i) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 544 ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key)); | 547 ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key)); |
| 545 | 548 |
| 546 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 549 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
| 547 new CapturePreconnectsTransportSocketPool( | 550 new CapturePreconnectsTransportSocketPool( |
| 548 session_deps.host_resolver.get(), | 551 session_deps.host_resolver.get(), |
| 549 session_deps.cert_verifier.get()); | 552 session_deps.cert_verifier.get()); |
| 550 CapturePreconnectsSSLSocketPool* ssl_conn_pool = | 553 CapturePreconnectsSSLSocketPool* ssl_conn_pool = |
| 551 new CapturePreconnectsSSLSocketPool( | 554 new CapturePreconnectsSSLSocketPool( |
| 552 session_deps.host_resolver.get(), | 555 session_deps.host_resolver.get(), |
| 553 session_deps.cert_verifier.get()); | 556 session_deps.cert_verifier.get()); |
| 554 MockClientSocketPoolManager* mock_pool_manager = | 557 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
| 555 new MockClientSocketPoolManager; | 558 new MockClientSocketPoolManager); |
| 556 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 559 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 557 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); | 560 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); |
| 558 peer.SetClientSocketPoolManager(mock_pool_manager); | 561 peer.SetClientSocketPoolManager( |
| 562 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
| 559 PreconnectHelper(kTests[i], session.get()); | 563 PreconnectHelper(kTests[i], session.get()); |
| 560 // We shouldn't be preconnecting if we have an existing session, which is | 564 // We shouldn't be preconnecting if we have an existing session, which is |
| 561 // the case for https://www.google.com. | 565 // the case for https://www.google.com. |
| 562 if (kTests[i].ssl) | 566 if (kTests[i].ssl) |
| 563 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); | 567 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); |
| 564 else | 568 else |
| 565 EXPECT_EQ(kTests[i].num_streams, | 569 EXPECT_EQ(kTests[i].num_streams, |
| 566 transport_conn_pool->last_num_streams()); | 570 transport_conn_pool->last_num_streams()); |
| 567 } | 571 } |
| 568 } | 572 } |
| 569 | 573 |
| 570 // Verify that preconnects to unsafe ports are cancelled before they reach | 574 // Verify that preconnects to unsafe ports are cancelled before they reach |
| 571 // the SocketPool. | 575 // the SocketPool. |
| 572 TEST_P(HttpStreamFactoryTest, PreconnectUnsafePort) { | 576 TEST_P(HttpStreamFactoryTest, PreconnectUnsafePort) { |
| 573 ASSERT_FALSE(IsPortAllowedByDefault(7)); | 577 ASSERT_FALSE(IsPortAllowedByDefault(7)); |
| 574 ASSERT_FALSE(IsPortAllowedByOverride(7)); | 578 ASSERT_FALSE(IsPortAllowedByOverride(7)); |
| 575 | 579 |
| 576 SpdySessionDependencies session_deps( | 580 SpdySessionDependencies session_deps( |
| 577 GetParam(), ProxyService::CreateDirect()); | 581 GetParam(), ProxyService::CreateDirect()); |
| 578 scoped_refptr<HttpNetworkSession> session( | 582 scoped_refptr<HttpNetworkSession> session( |
| 579 SpdySessionDependencies::SpdyCreateSession(&session_deps)); | 583 SpdySessionDependencies::SpdyCreateSession(&session_deps)); |
| 580 HttpNetworkSessionPeer peer(session); | 584 HttpNetworkSessionPeer peer(session); |
| 581 CapturePreconnectsTransportSocketPool* transport_conn_pool = | 585 CapturePreconnectsTransportSocketPool* transport_conn_pool = |
| 582 new CapturePreconnectsTransportSocketPool( | 586 new CapturePreconnectsTransportSocketPool( |
| 583 session_deps.host_resolver.get(), | 587 session_deps.host_resolver.get(), |
| 584 session_deps.cert_verifier.get()); | 588 session_deps.cert_verifier.get()); |
| 585 MockClientSocketPoolManager* mock_pool_manager = | 589 scoped_ptr<MockClientSocketPoolManager> mock_pool_manager( |
| 586 new MockClientSocketPoolManager; | 590 new MockClientSocketPoolManager); |
| 587 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); | 591 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); |
| 588 peer.SetClientSocketPoolManager(mock_pool_manager); | 592 peer.SetClientSocketPoolManager( |
| 593 mock_pool_manager.PassAs<ClientSocketPoolManager>()); |
| 589 | 594 |
| 590 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get()); | 595 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get()); |
| 591 | 596 |
| 592 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); | 597 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); |
| 593 } | 598 } |
| 594 | 599 |
| 595 TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) { | 600 TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) { |
| 596 const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT"; | 601 const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT"; |
| 597 SpdySessionDependencies session_deps( | 602 SpdySessionDependencies session_deps( |
| 598 GetParam(), ProxyService::CreateFixedFromPacResult(kProxyString)); | 603 GetParam(), ProxyService::CreateFixedFromPacResult(kProxyString)); |
| (...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1265 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 1270 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
| 1266 | 1271 |
| 1267 // Make sure there is no orphaned job. it is already canceled. | 1272 // Make sure there is no orphaned job. it is already canceled. |
| 1268 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( | 1273 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( |
| 1269 session->websocket_handshake_stream_factory())->num_orphaned_jobs()); | 1274 session->websocket_handshake_stream_factory())->num_orphaned_jobs()); |
| 1270 } | 1275 } |
| 1271 | 1276 |
| 1272 } // namespace | 1277 } // namespace |
| 1273 | 1278 |
| 1274 } // namespace net | 1279 } // namespace net |
| OLD | NEW |