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

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

Issue 2260623002: Race TCP connection to proxies with QUIC connections (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 years, 3 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_proxy_delegate.h"
17 #include "net/cert/ct_policy_enforcer.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"
19 #include "net/cert/multi_log_ct_verifier.h" 20 #include "net/cert/multi_log_ct_verifier.h"
20 #include "net/dns/mock_host_resolver.h" 21 #include "net/dns/mock_host_resolver.h"
21 #include "net/http/bidirectional_stream_impl.h" 22 #include "net/http/bidirectional_stream_impl.h"
22 #include "net/http/bidirectional_stream_request_info.h" 23 #include "net/http/bidirectional_stream_request_info.h"
23 #include "net/http/http_auth_handler_factory.h" 24 #include "net/http/http_auth_handler_factory.h"
24 #include "net/http/http_network_session.h" 25 #include "net/http/http_network_session.h"
25 #include "net/http/http_network_session_peer.h" 26 #include "net/http/http_network_session_peer.h"
26 #include "net/http/http_network_transaction.h" 27 #include "net/http/http_network_transaction.h"
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after
677 waiter.WaitForStream(); 678 waiter.WaitForStream();
678 679
679 // The proxy that failed should now be known to the proxy_service as bad. 680 // The proxy that failed should now be known to the proxy_service as bad.
680 const ProxyRetryInfoMap& retry_info = 681 const ProxyRetryInfoMap& retry_info =
681 session->proxy_service()->proxy_retry_info(); 682 session->proxy_service()->proxy_retry_info();
682 EXPECT_EQ(1u, retry_info.size()); 683 EXPECT_EQ(1u, retry_info.size());
683 ProxyRetryInfoMap::const_iterator iter = retry_info.find("bad:99"); 684 ProxyRetryInfoMap::const_iterator iter = retry_info.find("bad:99");
684 EXPECT_TRUE(iter != retry_info.end()); 685 EXPECT_TRUE(iter != retry_info.end());
685 } 686 }
686 687
687 TEST_F(HttpStreamFactoryTest, UnreachableQuicProxyMarkedAsBad) { 688 // List of errors that are used in the tests related to QUIC proxy.
688 const int mock_error[] = {ERR_PROXY_CONNECTION_FAILED, 689 const int quic_proxy_test_mock_errors[] = {
689 ERR_NAME_NOT_RESOLVED, 690 ERR_PROXY_CONNECTION_FAILED,
690 ERR_INTERNET_DISCONNECTED, 691 ERR_NAME_NOT_RESOLVED,
691 ERR_ADDRESS_UNREACHABLE, 692 ERR_INTERNET_DISCONNECTED,
692 ERR_CONNECTION_CLOSED, 693 ERR_ADDRESS_UNREACHABLE,
693 ERR_CONNECTION_TIMED_OUT, 694 ERR_CONNECTION_CLOSED,
694 ERR_CONNECTION_RESET, 695 ERR_CONNECTION_TIMED_OUT,
695 ERR_CONNECTION_REFUSED, 696 ERR_CONNECTION_RESET,
696 ERR_CONNECTION_ABORTED, 697 ERR_CONNECTION_REFUSED,
697 ERR_TIMED_OUT, 698 ERR_CONNECTION_ABORTED,
698 ERR_TUNNEL_CONNECTION_FAILED, 699 ERR_TIMED_OUT,
699 ERR_SOCKS_CONNECTION_FAILED, 700 ERR_TUNNEL_CONNECTION_FAILED,
700 ERR_PROXY_CERTIFICATE_INVALID, 701 ERR_SOCKS_CONNECTION_FAILED,
701 ERR_QUIC_PROTOCOL_ERROR, 702 ERR_PROXY_CERTIFICATE_INVALID,
702 ERR_QUIC_HANDSHAKE_FAILED, 703 ERR_QUIC_PROTOCOL_ERROR,
703 ERR_SSL_PROTOCOL_ERROR, 704 ERR_QUIC_HANDSHAKE_FAILED,
704 ERR_MSG_TOO_BIG}; 705 ERR_SSL_PROTOCOL_ERROR,
705 for (size_t i = 0; i < arraysize(mock_error); ++i) { 706 ERR_MSG_TOO_BIG,
707 };
708
709 // Tests that a bad QUIC proxy is added to the list of bad proxies.
710 TEST_F(HttpStreamFactoryTest, QuicProxyMarkedAsBad) {
711 for (size_t i = 0; i < arraysize(quic_proxy_test_mock_errors); ++i) {
706 std::unique_ptr<ProxyService> proxy_service; 712 std::unique_ptr<ProxyService> proxy_service;
707 proxy_service = 713 proxy_service =
708 ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT"); 714 ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT");
709 715
710 HttpNetworkSession::Params params; 716 HttpNetworkSession::Params params;
711 params.enable_quic = true; 717 params.enable_quic = true;
712 params.quic_disable_preconnect_if_0rtt = false; 718 params.quic_disable_preconnect_if_0rtt = false;
713 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( 719 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
714 new SSLConfigServiceDefaults); 720 new SSLConfigServiceDefaults);
715 HttpServerPropertiesImpl http_server_properties; 721 HttpServerPropertiesImpl http_server_properties;
(...skipping 10 matching lines...) Expand all
726 CTPolicyEnforcer ct_policy_enforcer; 732 CTPolicyEnforcer ct_policy_enforcer;
727 params.ct_policy_enforcer = &ct_policy_enforcer; 733 params.ct_policy_enforcer = &ct_policy_enforcer;
728 params.proxy_service = proxy_service.get(); 734 params.proxy_service = proxy_service.get();
729 params.ssl_config_service = ssl_config_service.get(); 735 params.ssl_config_service = ssl_config_service.get();
730 params.http_server_properties = &http_server_properties; 736 params.http_server_properties = &http_server_properties;
731 737
732 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); 738 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
733 session->quic_stream_factory()->set_require_confirmation(false); 739 session->quic_stream_factory()->set_require_confirmation(false);
734 740
735 StaticSocketDataProvider socket_data1; 741 StaticSocketDataProvider socket_data1;
736 socket_data1.set_connect_data(MockConnect(ASYNC, mock_error[i])); 742 socket_data1.set_connect_data(
743 MockConnect(ASYNC, quic_proxy_test_mock_errors[i]));
737 socket_factory.AddSocketDataProvider(&socket_data1); 744 socket_factory.AddSocketDataProvider(&socket_data1);
738 745
739 // Second connection attempt succeeds. 746 // Second connection attempt succeeds.
740 StaticSocketDataProvider socket_data2; 747 StaticSocketDataProvider socket_data2;
741 socket_data2.set_connect_data(MockConnect(ASYNC, OK)); 748 socket_data2.set_connect_data(MockConnect(ASYNC, OK));
742 socket_factory.AddSocketDataProvider(&socket_data2); 749 socket_factory.AddSocketDataProvider(&socket_data2);
743 750
744 // Now request a stream. It should succeed using the second proxy in the 751 // Now request a stream. It should succeed using the second proxy in the
745 // list. 752 // list.
746 HttpRequestInfo request_info; 753 HttpRequestInfo request_info;
747 request_info.method = "GET"; 754 request_info.method = "GET";
748 request_info.url = GURL("http://www.google.com"); 755 request_info.url = GURL("http://www.google.com");
749 756
750 SSLConfig ssl_config; 757 SSLConfig ssl_config;
751 StreamRequestWaiter waiter; 758 StreamRequestWaiter waiter;
752 std::unique_ptr<HttpStreamRequest> request( 759 std::unique_ptr<HttpStreamRequest> request(
753 session->http_stream_factory()->RequestStream( 760 session->http_stream_factory()->RequestStream(
754 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, 761 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
755 BoundNetLog())); 762 BoundNetLog()));
756 waiter.WaitForStream(); 763 waiter.WaitForStream();
757 764
758 // The proxy that failed should now be known to the proxy_service as bad. 765 // The proxy that failed should now be known to the proxy_service as bad.
759 const ProxyRetryInfoMap& retry_info = 766 const ProxyRetryInfoMap& retry_info =
760 session->proxy_service()->proxy_retry_info(); 767 session->proxy_service()->proxy_retry_info();
761 EXPECT_EQ(1u, retry_info.size()) << mock_error[i]; 768 EXPECT_EQ(1u, retry_info.size()) << quic_proxy_test_mock_errors[i];
762 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); 769 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
763 770
764 ProxyRetryInfoMap::const_iterator iter = retry_info.find("quic://bad:99"); 771 ProxyRetryInfoMap::const_iterator iter = retry_info.find("quic://bad:99");
765 EXPECT_TRUE(iter != retry_info.end()) << mock_error[i]; 772 EXPECT_TRUE(iter != retry_info.end()) << quic_proxy_test_mock_errors[i];
766 } 773 }
767 } 774 }
768 775
769 // BidirectionalStreamImpl::Delegate to wait until response headers are 776 // BidirectionalStreamImpl::Delegate to wait until response headers are
770 // received. 777 // received.
771 class TestBidirectionalDelegate : public BidirectionalStreamImpl::Delegate { 778 class TestBidirectionalDelegate : public BidirectionalStreamImpl::Delegate {
772 public: 779 public:
773 void WaitUntilDone() { loop_.Run(); } 780 void WaitUntilDone() { loop_.Run(); }
774 781
775 const SpdyHeaderBlock& response_headers() const { return response_headers_; } 782 const SpdyHeaderBlock& response_headers() const { return response_headers_; }
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 } 830 }
824 831
825 private: 832 private:
826 std::vector<QuicEncryptedPacket*> packets_; 833 std::vector<QuicEncryptedPacket*> packets_;
827 std::vector<MockWrite> writes_; 834 std::vector<MockWrite> writes_;
828 std::vector<MockRead> reads_; 835 std::vector<MockRead> reads_;
829 size_t packet_number_; 836 size_t packet_number_;
830 std::unique_ptr<SequencedSocketData> socket_data_; 837 std::unique_ptr<SequencedSocketData> socket_data_;
831 }; 838 };
832 839
840 void SetupForQuicAlternativeProxyTest(
841 HttpNetworkSession::Params* params,
842 MockClientSocketFactory* socket_factory,
843 ProxyService* proxy_service,
844 TestProxyDelegate* test_proxy_delegate,
845 HttpServerPropertiesImpl* http_server_properties,
846 MockCertVerifier* cert_verifier,
847 CTPolicyEnforcer* ct_policy_enforcer,
848 MultiLogCTVerifier* ct_verifier,
849 SSLConfigServiceDefaults* ssl_config_service,
850 MockHostResolver* host_resolver,
851 TransportSecurityState* transport_security_state,
852 bool set_alternative_proxy_server) {
853 params->enable_quic = true;
854 params->quic_disable_preconnect_if_0rtt = false;
855 params->client_socket_factory = socket_factory;
856 params->host_resolver = host_resolver;
857 params->transport_security_state = transport_security_state;
858 params->proxy_service = proxy_service;
859 params->ssl_config_service = ssl_config_service;
860 params->http_server_properties = http_server_properties;
861 params->cert_verifier = cert_verifier;
862 params->ct_policy_enforcer = ct_policy_enforcer;
863 params->cert_transparency_verifier = ct_verifier;
864
865 if (set_alternative_proxy_server) {
866 test_proxy_delegate->set_alternative_proxy_server(
867 ProxyServer::FromPacString("QUIC badproxy:99"));
868 }
869 params->proxy_delegate = test_proxy_delegate;
870 }
871
833 } // namespace 872 } // namespace
834 873
874 // Tests that a HTTPS proxy that supports QUIC alternative proxy server is
875 // marked as bad if connecting to both the default proxy and the alternative
876 // proxy is unsuccessful.
877 TEST_F(HttpStreamFactoryTest, WithQUICAlternativeProxyMarkedAsBad) {
878 const bool set_alternative_proxy_server_values[] = {
879 false, true,
880 };
881
882 for (auto mock_error : quic_proxy_test_mock_errors) {
883 for (auto set_alternative_proxy_server :
884 set_alternative_proxy_server_values) {
885 HttpNetworkSession::Params params;
886 MockClientSocketFactory socket_factory;
887 std::unique_ptr<ProxyService> proxy_service =
888 ProxyService::CreateFixedFromPacResult(
889 "HTTPS badproxy:99; HTTPS badfallbackproxy:98; DIRECT");
890 TestProxyDelegate test_proxy_delegate;
891 HttpServerPropertiesImpl http_server_properties;
892 MockCertVerifier cert_verifier;
893 CTPolicyEnforcer ct_policy_enforcer;
894 MultiLogCTVerifier ct_verifier;
895 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
896 new SSLConfigServiceDefaults);
897 MockHostResolver host_resolver;
898 TransportSecurityState transport_security_state;
899 SetupForQuicAlternativeProxyTest(
900 &params, &socket_factory, proxy_service.get(), &test_proxy_delegate,
901 &http_server_properties, &cert_verifier, &ct_policy_enforcer,
902 &ct_verifier, ssl_config_service.get(), &host_resolver,
903 &transport_security_state, set_alternative_proxy_server);
904
905 std::unique_ptr<HttpNetworkSession> session(
906 new HttpNetworkSession(params));
907
908 // Before starting the test, verify that there are no proxies marked as
909 // bad.
910 ASSERT_TRUE(session->proxy_service()->proxy_retry_info().empty())
911 << mock_error;
912
913 StaticSocketDataProvider socket_data_proxy_main_job;
914 socket_data_proxy_main_job.set_connect_data(
915 MockConnect(ASYNC, mock_error));
916 socket_factory.AddSocketDataProvider(&socket_data_proxy_main_job);
917
918 StaticSocketDataProvider socket_data_proxy_alternate_job;
919 if (set_alternative_proxy_server) {
920 // Mock socket used by the QUIC job.
921 socket_data_proxy_alternate_job.set_connect_data(
922 MockConnect(ASYNC, mock_error));
923 socket_factory.AddSocketDataProvider(&socket_data_proxy_alternate_job);
924 }
925
926 // When retrying the job using the second proxy (badFallback:98),
927 // alternative job must not be created. So, socket data for only the
928 // main job is needed.
929 StaticSocketDataProvider socket_data_proxy_main_job_2;
930 socket_data_proxy_main_job_2.set_connect_data(
931 MockConnect(ASYNC, mock_error));
932 socket_factory.AddSocketDataProvider(&socket_data_proxy_main_job_2);
933
934 // First request would use DIRECT, and succeed.
935 StaticSocketDataProvider socket_data_direct_first_request;
936 socket_data_direct_first_request.set_connect_data(MockConnect(ASYNC, OK));
937 socket_factory.AddSocketDataProvider(&socket_data_direct_first_request);
938
939 // Second request would use DIRECT, and succeed.
940 StaticSocketDataProvider socket_data_direct_second_request;
941 socket_data_direct_second_request.set_connect_data(
942 MockConnect(ASYNC, OK));
943 socket_factory.AddSocketDataProvider(&socket_data_direct_second_request);
944
945 // Now request a stream. It should succeed using the DIRECT.
946 HttpRequestInfo request_info;
947 request_info.method = "GET";
948 request_info.url = GURL("http://www.google.com");
949
950 SSLConfig ssl_config;
951 StreamRequestWaiter waiter;
952
953 EXPECT_EQ(set_alternative_proxy_server,
954 test_proxy_delegate.alternative_proxy_server().is_quic());
955
956 // Start two requests. The first request should consume data from
957 // |socket_data_proxy_main_job|,
958 // |socket_data_proxy_alternate_job| and
959 // |socket_data_direct_first_request|. The second request should consume
960 // data from |socket_data_direct_second_request|.
961 for (size_t i = 0; i < 2; ++i) {
962 std::unique_ptr<HttpStreamRequest> request(
963 session->http_stream_factory()->RequestStream(
964 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
965 BoundNetLog()));
966 waiter.WaitForStream();
967
968 // The proxy that failed should now be known to the proxy_service as
969 // bad.
970 const ProxyRetryInfoMap retry_info =
971 session->proxy_service()->proxy_retry_info();
972 EXPECT_EQ(2u, retry_info.size()) << mock_error;
973
974 // Verify that request was fetched without proxy.
975 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
976
977 EXPECT_NE(retry_info.end(), retry_info.find("https://badproxy:99"));
978 EXPECT_NE(retry_info.end(),
979 retry_info.find("https://badfallbackproxy:98"));
980
981 // If alternative proxy server was specified, it should have been marked
982 // as invalid so that it is not used for subsequent requests.
983 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_valid());
984
985 if (set_alternative_proxy_server) {
986 // GetAlternativeProxy should be called only once for the first
987 // request.
988 EXPECT_EQ(1, test_proxy_delegate.get_alternative_proxy_invocations());
989 } else {
990 // Alternative proxy server job is never started. So, ProxyDelegate is
991 // queried once per request.
992 EXPECT_EQ(2, test_proxy_delegate.get_alternative_proxy_invocations());
993 }
994 }
995 }
996 }
997 }
998
999 // Tests that a HTTPS proxy that supports QUIC alternative proxy server is
1000 // not marked as bad if only the alternative proxy server job fails.
1001 TEST_F(HttpStreamFactoryTest, WithQUICAlternativeProxyNotMarkedAsBad) {
1002 for (auto mock_error : quic_proxy_test_mock_errors) {
1003 HttpNetworkSession::Params params;
1004 MockClientSocketFactory socket_factory;
1005 std::unique_ptr<ProxyService> proxy_service =
1006 ProxyService::CreateFixedFromPacResult("HTTPS badproxy:99; DIRECT");
1007 TestProxyDelegate test_proxy_delegate;
1008 HttpServerPropertiesImpl http_server_properties;
1009 MockCertVerifier cert_verifier;
1010 CTPolicyEnforcer ct_policy_enforcer;
1011 MultiLogCTVerifier ct_verifier;
1012
1013 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
1014 new SSLConfigServiceDefaults);
1015 MockHostResolver host_resolver;
1016 TransportSecurityState transport_security_state;
1017
1018 SetupForQuicAlternativeProxyTest(
1019 &params, &socket_factory, proxy_service.get(), &test_proxy_delegate,
1020 &http_server_properties, &cert_verifier, &ct_policy_enforcer,
1021 &ct_verifier, ssl_config_service.get(), &host_resolver,
1022 &transport_security_state, true);
1023
1024 HostPortPair host_port_pair("badproxy", 99);
1025 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
1026
1027 // Before starting the test, verify that there are no proxies marked as
1028 // bad.
1029 ASSERT_TRUE(session->proxy_service()->proxy_retry_info().empty())
1030 << mock_error;
1031
1032 StaticSocketDataProvider socket_data_proxy_main_job;
1033 socket_data_proxy_main_job.set_connect_data(MockConnect(ASYNC, mock_error));
1034 socket_factory.AddSocketDataProvider(&socket_data_proxy_main_job);
1035
1036 SSLSocketDataProvider ssl_data(ASYNC, OK);
1037
1038 // Next connection attempt would use HTTPS proxy, and succeed.
1039 StaticSocketDataProvider socket_data_https_first;
1040 socket_data_https_first.set_connect_data(MockConnect(ASYNC, OK));
1041 socket_factory.AddSocketDataProvider(&socket_data_https_first);
1042 socket_factory.AddSSLSocketDataProvider(&ssl_data);
1043
1044 // Next connection attempt would use HTTPS proxy, and succeed.
1045 StaticSocketDataProvider socket_data_https_second;
1046 socket_data_https_second.set_connect_data(MockConnect(ASYNC, OK));
1047 socket_factory.AddSocketDataProvider(&socket_data_https_second);
1048 socket_factory.AddSSLSocketDataProvider(&ssl_data);
1049
1050 // Now request a stream. It should succeed using the second proxy in the
1051 // list.
1052 HttpRequestInfo request_info;
1053 request_info.method = "GET";
1054 request_info.url = GURL("http://www.google.com");
1055
1056 SSLConfig ssl_config;
1057 StreamRequestWaiter waiter;
1058
1059 EXPECT_TRUE(test_proxy_delegate.alternative_proxy_server().is_quic());
1060
1061 // Start two requests. The first request should consume data from
1062 // |socket_data_proxy_main_job| and |socket_data_https_first|.
1063 // The second request should consume data from |socket_data_https_second|.
1064 for (size_t i = 0; i < 2; ++i) {
1065 std::unique_ptr<HttpStreamRequest> request(
1066 session->http_stream_factory()->RequestStream(
1067 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter,
1068 BoundNetLog()));
1069 waiter.WaitForStream();
1070
1071 // The proxy that failed should now be known to the proxy_service as
1072 // bad.
1073 const ProxyRetryInfoMap retry_info =
1074 session->proxy_service()->proxy_retry_info();
1075 // Proxy should not be marked as bad.
1076 EXPECT_EQ(0u, retry_info.size()) << mock_error;
1077 // Verify that request was fetched using proxy.
1078 EXPECT_TRUE(waiter.used_proxy_info().is_https());
1079 EXPECT_TRUE(host_port_pair.Equals(
1080 waiter.used_proxy_info().proxy_server().host_port_pair()));
1081 net::ProxyServer proxy_server;
1082
1083 // Alternative proxy server should be marked as invalid so that it is
1084 // not used for subsequent requests.
1085 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_quic());
1086
1087 // GetAlternativeProxy should be called only once per request.
1088 EXPECT_EQ(static_cast<int>(i + 1),
1089 test_proxy_delegate.get_alternative_proxy_invocations());
1090 }
1091 }
1092 }
1093
835 TEST_F(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) { 1094 TEST_F(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) {
836 // Checks if a 1095 // Checks if a
837 std::unique_ptr<ProxyService> proxy_service; 1096 std::unique_ptr<ProxyService> proxy_service;
838 proxy_service = ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT"); 1097 proxy_service = ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT");
839 1098
840 HttpNetworkSession::Params params; 1099 HttpNetworkSession::Params params;
841 params.enable_quic = true; 1100 params.enable_quic = true;
842 params.quic_disable_preconnect_if_0rtt = false; 1101 params.quic_disable_preconnect_if_0rtt = false;
843 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( 1102 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
844 new SSLConfigServiceDefaults); 1103 new SSLConfigServiceDefaults);
(...skipping 1211 matching lines...) Expand 10 before | Expand all | Expand 10 after
2056 session->GetTransportSocketPool( 2315 session->GetTransportSocketPool(
2057 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 2316 HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
2058 EXPECT_EQ(1, GetSocketPoolGroupCount( 2317 EXPECT_EQ(1, GetSocketPoolGroupCount(
2059 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); 2318 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL)));
2060 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); 2319 EXPECT_TRUE(waiter.used_proxy_info().is_direct());
2061 } 2320 }
2062 2321
2063 } // namespace 2322 } // namespace
2064 2323
2065 } // namespace net 2324 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698