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 <stdint.h> | 7 #include <stdint.h> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 #include <vector> | 10 #include <vector> |
(...skipping 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1084 // not used for subsequent requests. | 1084 // not used for subsequent requests. |
1085 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_quic()); | 1085 EXPECT_FALSE(test_proxy_delegate.alternative_proxy_server().is_quic()); |
1086 | 1086 |
1087 // GetAlternativeProxy should be called only once per request. | 1087 // GetAlternativeProxy should be called only once per request. |
1088 EXPECT_EQ(static_cast<int>(i + 1), | 1088 EXPECT_EQ(static_cast<int>(i + 1), |
1089 test_proxy_delegate.get_alternative_proxy_invocations()); | 1089 test_proxy_delegate.get_alternative_proxy_invocations()); |
1090 } | 1090 } |
1091 } | 1091 } |
1092 } | 1092 } |
1093 | 1093 |
| 1094 TEST_F(HttpStreamFactoryTest, QuicLossyProxyMarkedAsBad) { |
| 1095 // Checks if a |
| 1096 std::unique_ptr<ProxyService> proxy_service; |
| 1097 proxy_service = ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT"); |
| 1098 |
| 1099 HttpNetworkSession::Params params; |
| 1100 params.enable_quic = true; |
| 1101 params.quic_disable_preconnect_if_0rtt = false; |
| 1102 scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( |
| 1103 new SSLConfigServiceDefaults); |
| 1104 HttpServerPropertiesImpl http_server_properties; |
| 1105 MockClientSocketFactory socket_factory; |
| 1106 params.client_socket_factory = &socket_factory; |
| 1107 MockHostResolver host_resolver; |
| 1108 params.host_resolver = &host_resolver; |
| 1109 MockCertVerifier cert_verifier; |
| 1110 params.cert_verifier = &cert_verifier; |
| 1111 TransportSecurityState transport_security_state; |
| 1112 params.transport_security_state = &transport_security_state; |
| 1113 MultiLogCTVerifier ct_verifier; |
| 1114 params.cert_transparency_verifier = &ct_verifier; |
| 1115 CTPolicyEnforcer ct_policy_enforcer; |
| 1116 params.ct_policy_enforcer = &ct_policy_enforcer; |
| 1117 params.proxy_service = proxy_service.get(); |
| 1118 params.ssl_config_service = ssl_config_service.get(); |
| 1119 params.http_server_properties = &http_server_properties; |
| 1120 params.quic_max_number_of_lossy_connections = 2; |
| 1121 |
| 1122 std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params)); |
| 1123 session->quic_stream_factory()->set_require_confirmation(false); |
| 1124 |
| 1125 session->quic_stream_factory()->number_of_lossy_connections_[99] = |
| 1126 params.quic_max_number_of_lossy_connections; |
| 1127 session->quic_stream_factory()->MaybeDisableQuic(99); |
| 1128 ASSERT_TRUE(session->quic_stream_factory()->IsQuicDisabled(99)); |
| 1129 |
| 1130 StaticSocketDataProvider socket_data2; |
| 1131 socket_data2.set_connect_data(MockConnect(ASYNC, OK)); |
| 1132 socket_factory.AddSocketDataProvider(&socket_data2); |
| 1133 |
| 1134 // Now request a stream. It should succeed using the second proxy in the |
| 1135 // list. |
| 1136 HttpRequestInfo request_info; |
| 1137 request_info.method = "GET"; |
| 1138 request_info.url = GURL("http://www.google.com"); |
| 1139 |
| 1140 SSLConfig ssl_config; |
| 1141 StreamRequestWaiter waiter; |
| 1142 std::unique_ptr<HttpStreamRequest> request( |
| 1143 session->http_stream_factory()->RequestStream( |
| 1144 request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, |
| 1145 BoundNetLog())); |
| 1146 waiter.WaitForStream(); |
| 1147 |
| 1148 // The proxy that failed should now be known to the proxy_service as bad. |
| 1149 const ProxyRetryInfoMap& retry_info = |
| 1150 session->proxy_service()->proxy_retry_info(); |
| 1151 EXPECT_EQ(1u, retry_info.size()); |
| 1152 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
| 1153 |
| 1154 ProxyRetryInfoMap::const_iterator iter = retry_info.find("quic://bad:99"); |
| 1155 EXPECT_TRUE(iter != retry_info.end()); |
| 1156 } |
| 1157 |
1094 TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) { | 1158 TEST_F(HttpStreamFactoryTest, UsePreConnectIfNoZeroRTT) { |
1095 for (int num_streams = 1; num_streams < 3; ++num_streams) { | 1159 for (int num_streams = 1; num_streams < 3; ++num_streams) { |
1096 GURL url = GURL("https://www.google.com"); | 1160 GURL url = GURL("https://www.google.com"); |
1097 | 1161 |
1098 // Set up QUIC as alternative_service. | 1162 // Set up QUIC as alternative_service. |
1099 HttpServerPropertiesImpl http_server_properties; | 1163 HttpServerPropertiesImpl http_server_properties; |
1100 const AlternativeService alternative_service(QUIC, url.host().c_str(), | 1164 const AlternativeService alternative_service(QUIC, url.host().c_str(), |
1101 url.IntPort()); | 1165 url.IntPort()); |
1102 AlternativeServiceInfoVector alternative_service_info_vector; | 1166 AlternativeServiceInfoVector alternative_service_info_vector; |
1103 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); | 1167 base::Time expiration = base::Time::Now() + base::TimeDelta::FromDays(1); |
(...skipping 1147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2251 session->GetTransportSocketPool( | 2315 session->GetTransportSocketPool( |
2252 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 2316 HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
2253 EXPECT_EQ(1, GetSocketPoolGroupCount( | 2317 EXPECT_EQ(1, GetSocketPoolGroupCount( |
2254 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); | 2318 session->GetSSLSocketPool(HttpNetworkSession::WEBSOCKET_SOCKET_POOL))); |
2255 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); | 2319 EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
2256 } | 2320 } |
2257 | 2321 |
2258 } // namespace | 2322 } // namespace |
2259 | 2323 |
2260 } // namespace net | 2324 } // namespace net |
OLD | NEW |