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

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

Issue 2067843003: Require a CTVerifier and CTPolicyEnforcer for TLS/QUIC sockets (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Extensions Created 4 years, 6 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
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 <stdint.h> 7 #include <stdint.h>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "net/base/port_util.h" 15 #include "net/base/port_util.h"
16 #include "net/base/test_completion_callback.h" 16 #include "net/base/test_completion_callback.h"
17 #include "net/base/test_data_directory.h" 17 #include "net/base/test_data_directory.h"
18 #include "net/cert/ct_policy_enforcer.h"
18 #include "net/cert/mock_cert_verifier.h" 19 #include "net/cert/mock_cert_verifier.h"
20 #include "net/cert/multi_log_ct_verifier.h"
19 #include "net/dns/mock_host_resolver.h" 21 #include "net/dns/mock_host_resolver.h"
20 #include "net/http/bidirectional_stream_impl.h" 22 #include "net/http/bidirectional_stream_impl.h"
21 #include "net/http/bidirectional_stream_request_info.h" 23 #include "net/http/bidirectional_stream_request_info.h"
22 #include "net/http/http_auth_handler_factory.h" 24 #include "net/http/http_auth_handler_factory.h"
23 #include "net/http/http_network_session.h" 25 #include "net/http/http_network_session.h"
24 #include "net/http/http_network_session_peer.h" 26 #include "net/http/http_network_session_peer.h"
25 #include "net/http/http_network_transaction.h" 27 #include "net/http/http_network_transaction.h"
26 #include "net/http/http_request_info.h" 28 #include "net/http/http_request_info.h"
27 #include "net/http/http_server_properties.h" 29 #include "net/http/http_server_properties.h"
28 #include "net/http/http_server_properties_impl.h" 30 #include "net/http/http_server_properties_impl.h"
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 HttpNetworkSession* session) { 357 HttpNetworkSession* session) {
356 GURL url = test.ssl ? GURL("https://www.google.com") : 358 GURL url = test.ssl ? GURL("https://www.google.com") :
357 GURL("http://www.google.com"); 359 GURL("http://www.google.com");
358 PreconnectHelperForURL(test.num_streams, url, session); 360 PreconnectHelperForURL(test.num_streams, url, session);
359 } 361 }
360 362
361 template<typename ParentPool> 363 template<typename ParentPool>
362 class CapturePreconnectsSocketPool : public ParentPool { 364 class CapturePreconnectsSocketPool : public ParentPool {
363 public: 365 public:
364 CapturePreconnectsSocketPool(HostResolver* host_resolver, 366 CapturePreconnectsSocketPool(HostResolver* host_resolver,
365 CertVerifier* cert_verifier); 367 CertVerifier* cert_verifier,
368 TransportSecurityState* transport_security_state,
369 CTVerifier* cert_transparency_verifier,
370 CTPolicyEnforcer* ct_policy_enforcer);
366 371
367 int last_num_streams() const { 372 int last_num_streams() const {
368 return last_num_streams_; 373 return last_num_streams_;
369 } 374 }
370 375
371 int RequestSocket(const std::string& group_name, 376 int RequestSocket(const std::string& group_name,
372 const void* socket_params, 377 const void* socket_params,
373 RequestPriority priority, 378 RequestPriority priority,
374 ClientSocketPool::RespectLimits respect_limits, 379 ClientSocketPool::RespectLimits respect_limits,
375 ClientSocketHandle* handle, 380 ClientSocketHandle* handle,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 typedef CapturePreconnectsSocketPool<HttpProxyClientSocketPool> 427 typedef CapturePreconnectsSocketPool<HttpProxyClientSocketPool>
423 CapturePreconnectsHttpProxySocketPool; 428 CapturePreconnectsHttpProxySocketPool;
424 typedef CapturePreconnectsSocketPool<SOCKSClientSocketPool> 429 typedef CapturePreconnectsSocketPool<SOCKSClientSocketPool>
425 CapturePreconnectsSOCKSSocketPool; 430 CapturePreconnectsSOCKSSocketPool;
426 typedef CapturePreconnectsSocketPool<SSLClientSocketPool> 431 typedef CapturePreconnectsSocketPool<SSLClientSocketPool>
427 CapturePreconnectsSSLSocketPool; 432 CapturePreconnectsSSLSocketPool;
428 433
429 template <typename ParentPool> 434 template <typename ParentPool>
430 CapturePreconnectsSocketPool<ParentPool>::CapturePreconnectsSocketPool( 435 CapturePreconnectsSocketPool<ParentPool>::CapturePreconnectsSocketPool(
431 HostResolver* host_resolver, 436 HostResolver* host_resolver,
432 CertVerifier* /* cert_verifier */) 437 CertVerifier*,
438 TransportSecurityState*,
439 CTVerifier*,
440 CTPolicyEnforcer*)
433 : ParentPool(0, 0, host_resolver, nullptr, nullptr, nullptr), 441 : ParentPool(0, 0, host_resolver, nullptr, nullptr, nullptr),
434 last_num_streams_(-1) {} 442 last_num_streams_(-1) {}
435 443
436 template <> 444 template <>
437 CapturePreconnectsHttpProxySocketPool::CapturePreconnectsSocketPool( 445 CapturePreconnectsHttpProxySocketPool::CapturePreconnectsSocketPool(
438 HostResolver* /* host_resolver */, 446 HostResolver*,
439 CertVerifier* /* cert_verifier */) 447 CertVerifier*,
448 TransportSecurityState*,
449 CTVerifier*,
450 CTPolicyEnforcer*)
440 : HttpProxyClientSocketPool(0, 0, nullptr, nullptr, nullptr), 451 : HttpProxyClientSocketPool(0, 0, nullptr, nullptr, nullptr),
441 last_num_streams_(-1) { 452 last_num_streams_(-1) {}
442 }
443 453
444 template <> 454 template <>
445 CapturePreconnectsSSLSocketPool::CapturePreconnectsSocketPool( 455 CapturePreconnectsSSLSocketPool::CapturePreconnectsSocketPool(
446 HostResolver* /* host_resolver */, 456 HostResolver* /* host_resolver */,
447 CertVerifier* cert_verifier) 457 CertVerifier* cert_verifier,
448 : SSLClientSocketPool(0, 458 TransportSecurityState* transport_security_state,
449 0, 459 CTVerifier* cert_transparency_verifier,
450 cert_verifier, 460 CTPolicyEnforcer* ct_policy_enforcer)
451 nullptr, // channel_id_store 461 : SSLClientSocketPool(
452 nullptr, // transport_security_state 462 0,
453 nullptr, // cert_transparency_verifier 463 0,
454 nullptr, // ct_policy_enforcer 464 cert_verifier,
455 std::string(), // ssl_session_cache_shard 465 nullptr, // channel_id_store
456 nullptr, // deterministic_socket_factory 466 transport_security_state, // transport_security_state
457 nullptr, // transport_socket_pool 467 cert_transparency_verifier, // cert_transparency_verifier
458 nullptr, 468 ct_policy_enforcer, // ct_policy_enforcer
Ryan Hamilton 2016/06/16 03:31:04 no reason for the comments on the non-literals but
459 nullptr, 469 std::string(), // ssl_session_cache_shard
460 nullptr, // ssl_config_service 470 nullptr, // deterministic_socket_factory
461 nullptr), // net_log 471 nullptr, // transport_socket_pool
462 last_num_streams_(-1) { 472 nullptr,
463 } 473 nullptr,
474 nullptr, // ssl_config_service
475 nullptr), // net_log
476 last_num_streams_(-1) {}
464 477
465 class HttpStreamFactoryTest : public ::testing::Test, 478 class HttpStreamFactoryTest : public ::testing::Test,
466 public ::testing::WithParamInterface<NextProto> { 479 public ::testing::WithParamInterface<NextProto> {
467 }; 480 };
468 481
469 INSTANTIATE_TEST_CASE_P(NextProto, 482 INSTANTIATE_TEST_CASE_P(NextProto,
470 HttpStreamFactoryTest, 483 HttpStreamFactoryTest,
471 testing::Values(kProtoSPDY31, 484 testing::Values(kProtoSPDY31,
472 kProtoHTTP2)); 485 kProtoHTTP2));
473 486
474 TEST_P(HttpStreamFactoryTest, PreconnectDirect) { 487 TEST_P(HttpStreamFactoryTest, PreconnectDirect) {
475 for (size_t i = 0; i < arraysize(kTests); ++i) { 488 for (size_t i = 0; i < arraysize(kTests); ++i) {
476 SpdySessionDependencies session_deps( 489 SpdySessionDependencies session_deps(
477 GetParam(), ProxyService::CreateDirect()); 490 GetParam(), ProxyService::CreateDirect());
478 std::unique_ptr<HttpNetworkSession> session( 491 std::unique_ptr<HttpNetworkSession> session(
479 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 492 SpdySessionDependencies::SpdyCreateSession(&session_deps));
480 HttpNetworkSessionPeer peer(session.get()); 493 HttpNetworkSessionPeer peer(session.get());
481 CapturePreconnectsTransportSocketPool* transport_conn_pool = 494 CapturePreconnectsTransportSocketPool* transport_conn_pool =
482 new CapturePreconnectsTransportSocketPool( 495 new CapturePreconnectsTransportSocketPool(
483 session_deps.host_resolver.get(), 496 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
484 session_deps.cert_verifier.get()); 497 session_deps.transport_security_state.get(),
498 session_deps.cert_transparency_verifier.get(),
499 session_deps.ct_policy_enforcer.get());
485 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 500 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
486 new CapturePreconnectsSSLSocketPool( 501 new CapturePreconnectsSSLSocketPool(
487 session_deps.host_resolver.get(), 502 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
488 session_deps.cert_verifier.get()); 503 session_deps.transport_security_state.get(),
504 session_deps.cert_transparency_verifier.get(),
505 session_deps.ct_policy_enforcer.get());
489 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 506 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
490 new MockClientSocketPoolManager); 507 new MockClientSocketPoolManager);
491 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 508 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
492 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); 509 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool);
493 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 510 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
494 PreconnectHelper(kTests[i], session.get()); 511 PreconnectHelper(kTests[i], session.get());
495 if (kTests[i].ssl) 512 if (kTests[i].ssl)
496 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); 513 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams());
497 else 514 else
498 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams()); 515 EXPECT_EQ(kTests[i].num_streams, transport_conn_pool->last_num_streams());
499 } 516 }
500 } 517 }
501 518
502 TEST_P(HttpStreamFactoryTest, PreconnectHttpProxy) { 519 TEST_P(HttpStreamFactoryTest, PreconnectHttpProxy) {
503 for (size_t i = 0; i < arraysize(kTests); ++i) { 520 for (size_t i = 0; i < arraysize(kTests); ++i) {
504 SpdySessionDependencies session_deps( 521 SpdySessionDependencies session_deps(
505 GetParam(), ProxyService::CreateFixed("http_proxy")); 522 GetParam(), ProxyService::CreateFixed("http_proxy"));
506 std::unique_ptr<HttpNetworkSession> session( 523 std::unique_ptr<HttpNetworkSession> session(
507 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 524 SpdySessionDependencies::SpdyCreateSession(&session_deps));
508 HttpNetworkSessionPeer peer(session.get()); 525 HttpNetworkSessionPeer peer(session.get());
509 HostPortPair proxy_host("http_proxy", 80); 526 HostPortPair proxy_host("http_proxy", 80);
510 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = 527 CapturePreconnectsHttpProxySocketPool* http_proxy_pool =
511 new CapturePreconnectsHttpProxySocketPool( 528 new CapturePreconnectsHttpProxySocketPool(
512 session_deps.host_resolver.get(), 529 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
513 session_deps.cert_verifier.get()); 530 session_deps.transport_security_state.get(),
531 session_deps.cert_transparency_verifier.get(),
532 session_deps.ct_policy_enforcer.get());
514 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 533 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
515 new CapturePreconnectsSSLSocketPool( 534 new CapturePreconnectsSSLSocketPool(
516 session_deps.host_resolver.get(), 535 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
517 session_deps.cert_verifier.get()); 536 session_deps.transport_security_state.get(),
537 session_deps.cert_transparency_verifier.get(),
538 session_deps.ct_policy_enforcer.get());
518 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 539 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
519 new MockClientSocketPoolManager); 540 new MockClientSocketPoolManager);
520 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); 541 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool);
521 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); 542 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
522 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 543 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
523 PreconnectHelper(kTests[i], session.get()); 544 PreconnectHelper(kTests[i], session.get());
524 if (kTests[i].ssl) 545 if (kTests[i].ssl)
525 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); 546 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams());
526 else 547 else
527 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams()); 548 EXPECT_EQ(kTests[i].num_streams, http_proxy_pool->last_num_streams());
528 } 549 }
529 } 550 }
530 551
531 TEST_P(HttpStreamFactoryTest, PreconnectSocksProxy) { 552 TEST_P(HttpStreamFactoryTest, PreconnectSocksProxy) {
532 for (size_t i = 0; i < arraysize(kTests); ++i) { 553 for (size_t i = 0; i < arraysize(kTests); ++i) {
533 SpdySessionDependencies session_deps( 554 SpdySessionDependencies session_deps(
534 GetParam(), ProxyService::CreateFixed("socks4://socks_proxy:1080")); 555 GetParam(), ProxyService::CreateFixed("socks4://socks_proxy:1080"));
535 std::unique_ptr<HttpNetworkSession> session( 556 std::unique_ptr<HttpNetworkSession> session(
536 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 557 SpdySessionDependencies::SpdyCreateSession(&session_deps));
537 HttpNetworkSessionPeer peer(session.get()); 558 HttpNetworkSessionPeer peer(session.get());
538 HostPortPair proxy_host("socks_proxy", 1080); 559 HostPortPair proxy_host("socks_proxy", 1080);
539 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool = 560 CapturePreconnectsSOCKSSocketPool* socks_proxy_pool =
540 new CapturePreconnectsSOCKSSocketPool( 561 new CapturePreconnectsSOCKSSocketPool(
541 session_deps.host_resolver.get(), 562 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
542 session_deps.cert_verifier.get()); 563 session_deps.transport_security_state.get(),
564 session_deps.cert_transparency_verifier.get(),
565 session_deps.ct_policy_enforcer.get());
543 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 566 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
544 new CapturePreconnectsSSLSocketPool( 567 new CapturePreconnectsSSLSocketPool(
545 session_deps.host_resolver.get(), 568 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
546 session_deps.cert_verifier.get()); 569 session_deps.transport_security_state.get(),
570 session_deps.cert_transparency_verifier.get(),
571 session_deps.ct_policy_enforcer.get());
547 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 572 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
548 new MockClientSocketPoolManager); 573 new MockClientSocketPoolManager);
549 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool); 574 mock_pool_manager->SetSocketPoolForSOCKSProxy(proxy_host, socks_proxy_pool);
550 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); 575 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
551 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 576 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
552 PreconnectHelper(kTests[i], session.get()); 577 PreconnectHelper(kTests[i], session.get());
553 if (kTests[i].ssl) 578 if (kTests[i].ssl)
554 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams()); 579 EXPECT_EQ(kTests[i].num_streams, ssl_conn_pool->last_num_streams());
555 else 580 else
556 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams()); 581 EXPECT_EQ(kTests[i].num_streams, socks_proxy_pool->last_num_streams());
557 } 582 }
558 } 583 }
559 584
560 TEST_P(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) { 585 TEST_P(HttpStreamFactoryTest, PreconnectDirectWithExistingSpdySession) {
561 for (size_t i = 0; i < arraysize(kTests); ++i) { 586 for (size_t i = 0; i < arraysize(kTests); ++i) {
562 SpdySessionDependencies session_deps( 587 SpdySessionDependencies session_deps(
563 GetParam(), ProxyService::CreateDirect()); 588 GetParam(), ProxyService::CreateDirect());
564 std::unique_ptr<HttpNetworkSession> session( 589 std::unique_ptr<HttpNetworkSession> session(
565 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 590 SpdySessionDependencies::SpdyCreateSession(&session_deps));
566 HttpNetworkSessionPeer peer(session.get()); 591 HttpNetworkSessionPeer peer(session.get());
567 592
568 // Put a SpdySession in the pool. 593 // Put a SpdySession in the pool.
569 HostPortPair host_port_pair("www.google.com", 443); 594 HostPortPair host_port_pair("www.google.com", 443);
570 SpdySessionKey key(host_port_pair, ProxyServer::Direct(), 595 SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
571 PRIVACY_MODE_DISABLED); 596 PRIVACY_MODE_DISABLED);
572 ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key)); 597 ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key));
573 598
574 CapturePreconnectsTransportSocketPool* transport_conn_pool = 599 CapturePreconnectsTransportSocketPool* transport_conn_pool =
575 new CapturePreconnectsTransportSocketPool( 600 new CapturePreconnectsTransportSocketPool(
576 session_deps.host_resolver.get(), 601 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
577 session_deps.cert_verifier.get()); 602 session_deps.transport_security_state.get(),
603 session_deps.cert_transparency_verifier.get(),
604 session_deps.ct_policy_enforcer.get());
578 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 605 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
579 new CapturePreconnectsSSLSocketPool( 606 new CapturePreconnectsSSLSocketPool(
580 session_deps.host_resolver.get(), 607 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
581 session_deps.cert_verifier.get()); 608 session_deps.transport_security_state.get(),
609 session_deps.cert_transparency_verifier.get(),
610 session_deps.ct_policy_enforcer.get());
582 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 611 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
583 new MockClientSocketPoolManager); 612 new MockClientSocketPoolManager);
584 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 613 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
585 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool); 614 mock_pool_manager->SetSSLSocketPool(ssl_conn_pool);
586 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 615 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
587 PreconnectHelper(kTests[i], session.get()); 616 PreconnectHelper(kTests[i], session.get());
588 // We shouldn't be preconnecting if we have an existing session, which is 617 // We shouldn't be preconnecting if we have an existing session, which is
589 // the case for https://www.google.com. 618 // the case for https://www.google.com.
590 if (kTests[i].ssl) 619 if (kTests[i].ssl)
591 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams()); 620 EXPECT_EQ(-1, ssl_conn_pool->last_num_streams());
592 else 621 else
593 EXPECT_EQ(kTests[i].num_streams, 622 EXPECT_EQ(kTests[i].num_streams,
594 transport_conn_pool->last_num_streams()); 623 transport_conn_pool->last_num_streams());
595 } 624 }
596 } 625 }
597 626
598 // Verify that preconnects to unsafe ports are cancelled before they reach 627 // Verify that preconnects to unsafe ports are cancelled before they reach
599 // the SocketPool. 628 // the SocketPool.
600 TEST_P(HttpStreamFactoryTest, PreconnectUnsafePort) { 629 TEST_P(HttpStreamFactoryTest, PreconnectUnsafePort) {
601 ASSERT_FALSE(IsPortAllowedForScheme(7, "http")); 630 ASSERT_FALSE(IsPortAllowedForScheme(7, "http"));
602 631
603 SpdySessionDependencies session_deps( 632 SpdySessionDependencies session_deps(
604 GetParam(), ProxyService::CreateDirect()); 633 GetParam(), ProxyService::CreateDirect());
605 std::unique_ptr<HttpNetworkSession> session( 634 std::unique_ptr<HttpNetworkSession> session(
606 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 635 SpdySessionDependencies::SpdyCreateSession(&session_deps));
607 HttpNetworkSessionPeer peer(session.get()); 636 HttpNetworkSessionPeer peer(session.get());
608 CapturePreconnectsTransportSocketPool* transport_conn_pool = 637 CapturePreconnectsTransportSocketPool* transport_conn_pool =
609 new CapturePreconnectsTransportSocketPool( 638 new CapturePreconnectsTransportSocketPool(
610 session_deps.host_resolver.get(), 639 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
611 session_deps.cert_verifier.get()); 640 session_deps.transport_security_state.get(),
641 session_deps.cert_transparency_verifier.get(),
642 session_deps.ct_policy_enforcer.get());
612 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 643 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
613 new MockClientSocketPoolManager); 644 new MockClientSocketPoolManager);
614 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 645 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
615 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 646 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
616 647
617 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get()); 648 PreconnectHelperForURL(1, GURL("http://www.google.com:7"), session.get());
618 EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); 649 EXPECT_EQ(-1, transport_conn_pool->last_num_streams());
619 } 650 }
620 651
621 TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) { 652 TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 HttpNetworkSession::Params params; 715 HttpNetworkSession::Params params;
685 params.enable_quic = true; 716 params.enable_quic = true;
686 params.quic_disable_preconnect_if_0rtt = false; 717 params.quic_disable_preconnect_if_0rtt = false;
687 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( 718 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
688 new SSLConfigServiceDefaults); 719 new SSLConfigServiceDefaults);
689 HttpServerPropertiesImpl http_server_properties; 720 HttpServerPropertiesImpl http_server_properties;
690 MockClientSocketFactory socket_factory; 721 MockClientSocketFactory socket_factory;
691 params.client_socket_factory = &socket_factory; 722 params.client_socket_factory = &socket_factory;
692 MockHostResolver host_resolver; 723 MockHostResolver host_resolver;
693 params.host_resolver = &host_resolver; 724 params.host_resolver = &host_resolver;
725 MockCertVerifier cert_verifier;
726 params.cert_verifier = &cert_verifier;
694 TransportSecurityState transport_security_state; 727 TransportSecurityState transport_security_state;
695 params.transport_security_state = &transport_security_state; 728 params.transport_security_state = &transport_security_state;
729 MultiLogCTVerifier ct_verifier;
730 params.cert_transparency_verifier = &ct_verifier;
731 CTPolicyEnforcer ct_policy_enforcer;
732 params.ct_policy_enforcer = &ct_policy_enforcer;
696 params.proxy_service = proxy_service.get(); 733 params.proxy_service = proxy_service.get();
697 params.ssl_config_service = ssl_config_service.get(); 734 params.ssl_config_service = ssl_config_service.get();
698 params.http_server_properties = http_server_properties.GetWeakPtr(); 735 params.http_server_properties = http_server_properties.GetWeakPtr();
699 736
700 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 737 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
701 session->quic_stream_factory()->set_require_confirmation(false); 738 session->quic_stream_factory()->set_require_confirmation(false);
702 739
703 StaticSocketDataProvider socket_data1; 740 StaticSocketDataProvider socket_data1;
704 socket_data1.set_connect_data(MockConnect(ASYNC, mock_error[i])); 741 socket_data1.set_connect_data(MockConnect(ASYNC, mock_error[i]));
705 socket_factory.AddSocketDataProvider(&socket_data1); 742 socket_factory.AddSocketDataProvider(&socket_data1);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 HttpNetworkSession::Params params; 845 HttpNetworkSession::Params params;
809 params.enable_quic = true; 846 params.enable_quic = true;
810 params.quic_disable_preconnect_if_0rtt = false; 847 params.quic_disable_preconnect_if_0rtt = false;
811 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( 848 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
812 new SSLConfigServiceDefaults); 849 new SSLConfigServiceDefaults);
813 HttpServerPropertiesImpl http_server_properties; 850 HttpServerPropertiesImpl http_server_properties;
814 MockClientSocketFactory socket_factory; 851 MockClientSocketFactory socket_factory;
815 params.client_socket_factory = &socket_factory; 852 params.client_socket_factory = &socket_factory;
816 MockHostResolver host_resolver; 853 MockHostResolver host_resolver;
817 params.host_resolver = &host_resolver; 854 params.host_resolver = &host_resolver;
855 MockCertVerifier cert_verifier;
856 params.cert_verifier = &cert_verifier;
818 TransportSecurityState transport_security_state; 857 TransportSecurityState transport_security_state;
819 params.transport_security_state = &transport_security_state; 858 params.transport_security_state = &transport_security_state;
859 MultiLogCTVerifier ct_verifier;
860 params.cert_transparency_verifier = &ct_verifier;
861 CTPolicyEnforcer ct_policy_enforcer;
862 params.ct_policy_enforcer = &ct_policy_enforcer;
820 params.proxy_service = proxy_service.get(); 863 params.proxy_service = proxy_service.get();
821 params.ssl_config_service = ssl_config_service.get(); 864 params.ssl_config_service = ssl_config_service.get();
822 params.http_server_properties = http_server_properties.GetWeakPtr(); 865 params.http_server_properties = http_server_properties.GetWeakPtr();
823 params.quic_max_number_of_lossy_connections = 2; 866 params.quic_max_number_of_lossy_connections = 2;
824 867
825 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 868 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
826 session->quic_stream_factory()->set_require_confirmation(false); 869 session->quic_stream_factory()->set_require_confirmation(false);
827 870
828 session->quic_stream_factory()->number_of_lossy_connections_[99] = 871 session->quic_stream_factory()->number_of_lossy_connections_[99] =
829 params.quic_max_number_of_lossy_connections; 872 params.quic_max_number_of_lossy_connections;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 SpdySessionDependencies::CreateSessionParams(&session_deps); 927 SpdySessionDependencies::CreateSessionParams(&session_deps);
885 params.enable_quic = true; 928 params.enable_quic = true;
886 params.quic_disable_preconnect_if_0rtt = true; 929 params.quic_disable_preconnect_if_0rtt = true;
887 params.http_server_properties = http_server_properties.GetWeakPtr(); 930 params.http_server_properties = http_server_properties.GetWeakPtr();
888 931
889 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 932 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
890 HttpNetworkSessionPeer peer(session.get()); 933 HttpNetworkSessionPeer peer(session.get());
891 HostPortPair proxy_host("http_proxy", 80); 934 HostPortPair proxy_host("http_proxy", 80);
892 CapturePreconnectsHttpProxySocketPool* http_proxy_pool = 935 CapturePreconnectsHttpProxySocketPool* http_proxy_pool =
893 new CapturePreconnectsHttpProxySocketPool( 936 new CapturePreconnectsHttpProxySocketPool(
894 session_deps.host_resolver.get(), session_deps.cert_verifier.get()); 937 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
938 session_deps.transport_security_state.get(),
939 session_deps.cert_transparency_verifier.get(),
940 session_deps.ct_policy_enforcer.get());
895 CapturePreconnectsSSLSocketPool* ssl_conn_pool = 941 CapturePreconnectsSSLSocketPool* ssl_conn_pool =
896 new CapturePreconnectsSSLSocketPool(session_deps.host_resolver.get(), 942 new CapturePreconnectsSSLSocketPool(
897 session_deps.cert_verifier.get()); 943 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
944 session_deps.transport_security_state.get(),
945 session_deps.cert_transparency_verifier.get(),
946 session_deps.ct_policy_enforcer.get());
898 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 947 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
899 new MockClientSocketPoolManager); 948 new MockClientSocketPoolManager);
900 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool); 949 mock_pool_manager->SetSocketPoolForHTTPProxy(proxy_host, http_proxy_pool);
901 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool); 950 mock_pool_manager->SetSocketPoolForSSLWithProxy(proxy_host, ssl_conn_pool);
902 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 951 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
903 PreconnectHelperForURL(num_streams, url, session.get()); 952 PreconnectHelperForURL(num_streams, url, session.get());
904 EXPECT_EQ(num_streams, ssl_conn_pool->last_num_streams()); 953 EXPECT_EQ(num_streams, ssl_conn_pool->last_num_streams());
905 } 954 }
906 } 955 }
907 956
(...skipping 27 matching lines...) Expand all
935 984
936 // Setup 0RTT for QUIC. 985 // Setup 0RTT for QUIC.
937 QuicStreamFactory* factory = session->quic_stream_factory(); 986 QuicStreamFactory* factory = session->quic_stream_factory();
938 factory->set_require_confirmation(false); 987 factory->set_require_confirmation(false);
939 test::QuicStreamFactoryPeer::CacheDummyServerConfig( 988 test::QuicStreamFactoryPeer::CacheDummyServerConfig(
940 factory, QuicServerId(host_port_pair, PRIVACY_MODE_DISABLED)); 989 factory, QuicServerId(host_port_pair, PRIVACY_MODE_DISABLED));
941 990
942 HttpNetworkSessionPeer peer(session.get()); 991 HttpNetworkSessionPeer peer(session.get());
943 CapturePreconnectsTransportSocketPool* transport_conn_pool = 992 CapturePreconnectsTransportSocketPool* transport_conn_pool =
944 new CapturePreconnectsTransportSocketPool( 993 new CapturePreconnectsTransportSocketPool(
945 session_deps.host_resolver.get(), session_deps.cert_verifier.get()); 994 session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
995 session_deps.transport_security_state.get(),
996 session_deps.cert_transparency_verifier.get(),
997 session_deps.ct_policy_enforcer.get());
946 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager( 998 std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
947 new MockClientSocketPoolManager); 999 new MockClientSocketPoolManager);
948 mock_pool_manager->SetTransportSocketPool(transport_conn_pool); 1000 mock_pool_manager->SetTransportSocketPool(transport_conn_pool);
949 peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); 1001 peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
950 1002
951 HttpRequestInfo request; 1003 HttpRequestInfo request;
952 request.method = "GET"; 1004 request.method = "GET";
953 request.url = url; 1005 request.url = url;
954 request.load_flags = 0; 1006 request.load_flags = 0;
955 1007
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 return -1; 1076 return -1;
1025 return session_list->GetSize(); 1077 return session_list->GetSize();
1026 } 1078 }
1027 1079
1028 } // namespace 1080 } // namespace
1029 1081
1030 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) { 1082 TEST_P(HttpStreamFactoryTest, PrivacyModeUsesDifferentSocketPoolGroup) {
1031 SpdySessionDependencies session_deps( 1083 SpdySessionDependencies session_deps(
1032 GetParam(), ProxyService::CreateDirect()); 1084 GetParam(), ProxyService::CreateDirect());
1033 1085
1034 StaticSocketDataProvider socket_data; 1086 StaticSocketDataProvider socket_data_1;
1035 socket_data.set_connect_data(MockConnect(ASYNC, OK)); 1087 socket_data_1.set_connect_data(MockConnect(ASYNC, OK));
1036 session_deps.socket_factory->AddSocketDataProvider(&socket_data); 1088 session_deps.socket_factory->AddSocketDataProvider(&socket_data_1);
1089 StaticSocketDataProvider socket_data_2;
1090 socket_data_2.set_connect_data(MockConnect(ASYNC, OK));
1091 session_deps.socket_factory->AddSocketDataProvider(&socket_data_2);
1092 StaticSocketDataProvider socket_data_3;
1093 socket_data_3.set_connect_data(MockConnect(ASYNC, OK));
1094 session_deps.socket_factory->AddSocketDataProvider(&socket_data_3);
1037 1095
1038 SSLSocketDataProvider ssl(ASYNC, OK); 1096 SSLSocketDataProvider ssl_1(ASYNC, OK);
1039 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl); 1097 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_1);
1098 SSLSocketDataProvider ssl_2(ASYNC, OK);
1099 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_2);
1100 SSLSocketDataProvider ssl_3(ASYNC, OK);
1101 session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_3);
1040 1102
1041 std::unique_ptr<HttpNetworkSession> session( 1103 std::unique_ptr<HttpNetworkSession> session(
1042 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 1104 SpdySessionDependencies::SpdyCreateSession(&session_deps));
1043 SSLClientSocketPool* ssl_pool = session->GetSSLSocketPool( 1105 SSLClientSocketPool* ssl_pool = session->GetSSLSocketPool(
1044 HttpNetworkSession::NORMAL_SOCKET_POOL); 1106 HttpNetworkSession::NORMAL_SOCKET_POOL);
1045 1107
1046 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 0); 1108 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 0);
1047 1109
1048 HttpRequestInfo request_info; 1110 HttpRequestInfo request_info;
1049 request_info.method = "GET"; 1111 request_info.method = "GET";
(...skipping 27 matching lines...) Expand all
1077 BoundNetLog())); 1139 BoundNetLog()));
1078 waiter.WaitForStream(); 1140 waiter.WaitForStream();
1079 1141
1080 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2); 1142 EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2);
1081 } 1143 }
1082 1144
1083 TEST_P(HttpStreamFactoryTest, GetLoadState) { 1145 TEST_P(HttpStreamFactoryTest, GetLoadState) {
1084 SpdySessionDependencies session_deps( 1146 SpdySessionDependencies session_deps(
1085 GetParam(), ProxyService::CreateDirect()); 1147 GetParam(), ProxyService::CreateDirect());
1086 1148
1149 // Force asynchronous host resolutions, so that the LoadState will be
1150 // resolving the host.
1151 session_deps.host_resolver->set_synchronous_mode(false);
1152
1087 StaticSocketDataProvider socket_data; 1153 StaticSocketDataProvider socket_data;
1088 socket_data.set_connect_data(MockConnect(ASYNC, OK)); 1154 socket_data.set_connect_data(MockConnect(ASYNC, OK));
1089 session_deps.socket_factory->AddSocketDataProvider(&socket_data); 1155 session_deps.socket_factory->AddSocketDataProvider(&socket_data);
1090 1156
1091 std::unique_ptr<HttpNetworkSession> session( 1157 std::unique_ptr<HttpNetworkSession> session(
1092 SpdySessionDependencies::SpdyCreateSession(&session_deps)); 1158 SpdySessionDependencies::SpdyCreateSession(&session_deps));
1093 1159
1094 HttpRequestInfo request_info; 1160 HttpRequestInfo request_info;
1095 request_info.method = "GET"; 1161 request_info.method = "GET";
1096 request_info.url = GURL("http://www.google.com"); 1162 request_info.url = GURL("http://www.google.com");
(...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
1511 1577
1512 // Load a certificate that is valid for *.example.org 1578 // Load a certificate that is valid for *.example.org
1513 scoped_refptr<X509Certificate> test_cert( 1579 scoped_refptr<X509Certificate> test_cert(
1514 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); 1580 ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem"));
1515 EXPECT_TRUE(test_cert.get()); 1581 EXPECT_TRUE(test_cert.get());
1516 verify_details_.cert_verify_result.verified_cert = test_cert; 1582 verify_details_.cert_verify_result.verified_cert = test_cert;
1517 verify_details_.cert_verify_result.is_issued_by_known_root = true; 1583 verify_details_.cert_verify_result.is_issued_by_known_root = true;
1518 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_); 1584 crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details_);
1519 crypto_client_stream_factory_.set_handshake_mode( 1585 crypto_client_stream_factory_.set_handshake_mode(
1520 MockCryptoClientStream::CONFIRM_HANDSHAKE); 1586 MockCryptoClientStream::CONFIRM_HANDSHAKE);
1587 params_.cert_verifier = &cert_verifier_;
1521 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; 1588 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
1522 params_.quic_supported_versions = test::SupportedVersions(GetParam()); 1589 params_.quic_supported_versions = test::SupportedVersions(GetParam());
1523 params_.transport_security_state = &transport_security_state_; 1590 params_.transport_security_state = &transport_security_state_;
1591 params_.cert_transparency_verifier = &ct_verifier_;
1592 params_.ct_policy_enforcer = &ct_policy_enforcer_;
1524 params_.host_resolver = &host_resolver_; 1593 params_.host_resolver = &host_resolver_;
1525 params_.proxy_service = proxy_service_.get(); 1594 params_.proxy_service = proxy_service_.get();
1526 params_.ssl_config_service = ssl_config_service_.get(); 1595 params_.ssl_config_service = ssl_config_service_.get();
1527 params_.client_socket_factory = &socket_factory_; 1596 params_.client_socket_factory = &socket_factory_;
1528 session_.reset(new HttpNetworkSession(params_)); 1597 session_.reset(new HttpNetworkSession(params_));
1529 session_->quic_stream_factory()->set_require_confirmation(false); 1598 session_->quic_stream_factory()->set_require_confirmation(false);
1530 } 1599 }
1531 1600
1532 void AddQuicAlternativeService() { 1601 void AddQuicAlternativeService() {
1533 const AlternativeService alternative_service(QUIC, "www.example.org", 443); 1602 const AlternativeService alternative_service(QUIC, "www.example.org", 443);
(...skipping 17 matching lines...) Expand all
1551 1620
1552 HttpNetworkSession* session() { return session_.get(); } 1621 HttpNetworkSession* session() { return session_.get(); }
1553 1622
1554 private: 1623 private:
1555 MockClock* clock_; // Owned by QuicStreamFactory 1624 MockClock* clock_; // Owned by QuicStreamFactory
1556 test::QuicTestPacketMaker client_packet_maker_; 1625 test::QuicTestPacketMaker client_packet_maker_;
1557 test::QuicTestPacketMaker server_packet_maker_; 1626 test::QuicTestPacketMaker server_packet_maker_;
1558 MockClientSocketFactory socket_factory_; 1627 MockClientSocketFactory socket_factory_;
1559 std::unique_ptr<HttpNetworkSession> session_; 1628 std::unique_ptr<HttpNetworkSession> session_;
1560 test::MockRandom random_generator_; 1629 test::MockRandom random_generator_;
1630 MockCertVerifier cert_verifier_;
1561 ProofVerifyDetailsChromium verify_details_; 1631 ProofVerifyDetailsChromium verify_details_;
1562 MockCryptoClientStreamFactory crypto_client_stream_factory_; 1632 MockCryptoClientStreamFactory crypto_client_stream_factory_;
1563 HttpServerPropertiesImpl http_server_properties_; 1633 HttpServerPropertiesImpl http_server_properties_;
1564 TransportSecurityState transport_security_state_; 1634 TransportSecurityState transport_security_state_;
1635 MultiLogCTVerifier ct_verifier_;
1636 CTPolicyEnforcer ct_policy_enforcer_;
1565 MockHostResolver host_resolver_; 1637 MockHostResolver host_resolver_;
1566 std::unique_ptr<ProxyService> proxy_service_; 1638 std::unique_ptr<ProxyService> proxy_service_;
1567 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_; 1639 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_;
1568 HttpNetworkSession::Params params_; 1640 HttpNetworkSession::Params params_;
1569 }; 1641 };
1570 1642
1571 INSTANTIATE_TEST_CASE_P(Version, 1643 INSTANTIATE_TEST_CASE_P(Version,
1572 HttpStreamFactoryBidirectionalQuicTest, 1644 HttpStreamFactoryBidirectionalQuicTest,
1573 ::testing::ValuesIn(QuicSupportedVersions())); 1645 ::testing::ValuesIn(QuicSupportedVersions()));
1574 1646
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
2016 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); 2088 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
2017 2089
2018 // Make sure there is no orphaned job. it is already canceled. 2090 // Make sure there is no orphaned job. it is already canceled.
2019 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>( 2091 ASSERT_EQ(0u, static_cast<HttpStreamFactoryImpl*>(
2020 session->http_stream_factory_for_websocket())->num_orphaned_jobs()); 2092 session->http_stream_factory_for_websocket())->num_orphaned_jobs());
2021 } 2093 }
2022 2094
2023 } // namespace 2095 } // namespace
2024 2096
2025 } // namespace net 2097 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698