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 |