Index: net/http/http_stream_factory_impl_unittest.cc |
diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc |
index 29ee6413199cdc4baae415f1891f2fe5ab8b0a00..417b6b45604fc369eecae782cc57bec06c50a61c 100644 |
--- a/net/http/http_stream_factory_impl_unittest.cc |
+++ b/net/http/http_stream_factory_impl_unittest.cc |
@@ -617,61 +617,66 @@ TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) { |
} |
TEST_P(HttpStreamFactoryTest, UnreachableQuicProxyMarkedAsBad) { |
- scoped_ptr<ProxyService> proxy_service_; |
- proxy_service_.reset( |
- ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT")); |
- |
- HttpNetworkSession::Params params_; |
- params_.enable_quic = true; |
- scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_( |
- new SSLConfigServiceDefaults); |
- HttpServerPropertiesImpl http_server_properties; |
- MockClientSocketFactory socket_factory_; |
- params_.client_socket_factory = &socket_factory_; |
- MockHostResolver host_resolver_; |
- params_.host_resolver = &host_resolver_; |
- TransportSecurityState transport_security_state_; |
- params_.transport_security_state = &transport_security_state_; |
- params_.proxy_service = proxy_service_.get(); |
- params_.ssl_config_service = ssl_config_service_.get(); |
- params_.http_server_properties = http_server_properties.GetWeakPtr(); |
- |
- scoped_refptr<HttpNetworkSession> session; |
- session = new HttpNetworkSession(params_); |
- session->quic_stream_factory()->set_require_confirmation(false); |
- |
- StaticSocketDataProvider socket_data1; |
- socket_data1.set_connect_data(MockConnect(ASYNC, ERR_QUIC_PROTOCOL_ERROR)); |
- socket_factory_.AddSocketDataProvider(&socket_data1); |
- |
- // Second connection attempt succeeds |
- StaticSocketDataProvider socket_data2; |
- socket_data2.set_connect_data(MockConnect(ASYNC, OK)); |
- socket_factory_.AddSocketDataProvider(&socket_data2); |
- |
- // Now request a stream. It should succeed using the second proxy in the |
- // list. |
- HttpRequestInfo request_info; |
- request_info.method = "GET"; |
- request_info.url = GURL("http://www.google.com"); |
- |
- SSLConfig ssl_config; |
- StreamRequestWaiter waiter; |
- scoped_ptr<HttpStreamRequest> request( |
- session->http_stream_factory()->RequestStream( |
- request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, |
- BoundNetLog())); |
- waiter.WaitForStream(); |
- |
- // The proxy that failed should now be known to the proxy_service as bad. |
- const ProxyRetryInfoMap& retry_info = |
- session->proxy_service()->proxy_retry_info(); |
- // proxy_headers_handler.proxy_info_used.proxy_retry_info(); |
- EXPECT_EQ(1u, retry_info.size()); |
- EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
- |
- ProxyRetryInfoMap::const_iterator iter = retry_info.find("quic://bad:99"); |
- EXPECT_TRUE(iter != retry_info.end()); |
+ for (int i = 1; i <= 2; i++) { |
+ int mock_error = |
+ i == 1 ? ERR_QUIC_PROTOCOL_ERROR : ERR_QUIC_HANDSHAKE_FAILED; |
+ |
+ scoped_ptr<ProxyService> proxy_service; |
+ proxy_service.reset( |
+ ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT")); |
+ |
+ HttpNetworkSession::Params params; |
+ params.enable_quic = true; |
+ scoped_refptr<SSLConfigServiceDefaults> ssl_config_service( |
+ new SSLConfigServiceDefaults); |
+ HttpServerPropertiesImpl http_server_properties; |
+ MockClientSocketFactory socket_factory; |
+ params.client_socket_factory = &socket_factory; |
+ MockHostResolver host_resolver; |
+ params.host_resolver = &host_resolver; |
+ TransportSecurityState transport_security_state; |
+ params.transport_security_state = &transport_security_state; |
+ params.proxy_service = proxy_service.get(); |
+ params.ssl_config_service = ssl_config_service.get(); |
+ params.http_server_properties = http_server_properties.GetWeakPtr(); |
+ |
+ scoped_refptr<HttpNetworkSession> session; |
+ session = new HttpNetworkSession(params); |
+ session->quic_stream_factory()->set_require_confirmation(false); |
+ |
+ StaticSocketDataProvider socket_data1; |
+ socket_data1.set_connect_data(MockConnect(ASYNC, mock_error)); |
+ socket_factory.AddSocketDataProvider(&socket_data1); |
+ |
+ // Second connection attempt succeeds. |
+ StaticSocketDataProvider socket_data2; |
+ socket_data2.set_connect_data(MockConnect(ASYNC, OK)); |
+ socket_factory.AddSocketDataProvider(&socket_data2); |
+ |
+ // Now request a stream. It should succeed using the second proxy in the |
+ // list. |
+ HttpRequestInfo request_info; |
+ request_info.method = "GET"; |
+ request_info.url = GURL("http://www.google.com"); |
+ |
+ SSLConfig ssl_config; |
+ StreamRequestWaiter waiter; |
+ scoped_ptr<HttpStreamRequest> request( |
+ session->http_stream_factory()->RequestStream( |
+ request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, |
+ BoundNetLog())); |
+ waiter.WaitForStream(); |
+ |
+ // The proxy that failed should now be known to the proxy_service as bad. |
+ const ProxyRetryInfoMap& retry_info = |
+ session->proxy_service()->proxy_retry_info(); |
+ // proxy_headers_handler.proxy_info_used.proxy_retry_info(); |
+ EXPECT_EQ(1u, retry_info.size()) << i; |
+ // EXPECT_TRUE(waiter.used_proxy_info().is_direct()); |
+ |
+ ProxyRetryInfoMap::const_iterator iter = retry_info.find("quic://bad:99"); |
+ EXPECT_TRUE(iter != retry_info.end()) << i; |
+ } |
} |
TEST_P(HttpStreamFactoryTest, PrivacyModeDisablesChannelId) { |