Commit e05fe063 authored by tbansal's avatar tbansal Committed by Commit bot

Bypass QUIC proxy on ERR_QUIC_HANDSHAKE_FAILED

Also, fixed variable names to comply with style guide.

BUG=459426

Review URL: https://codereview.chromium.org/939083003

Cr-Commit-Position: refs/heads/master@{#317109}
parent 4cf440af
...@@ -904,7 +904,8 @@ int HttpStreamFactoryImpl::Job::DoInitConnectionComplete(int result) { ...@@ -904,7 +904,8 @@ int HttpStreamFactoryImpl::Job::DoInitConnectionComplete(int result) {
} }
if (proxy_info_.is_quic() && using_quic_ && if (proxy_info_.is_quic() && using_quic_ &&
result == ERR_QUIC_PROTOCOL_ERROR) { (result == ERR_QUIC_PROTOCOL_ERROR ||
result == ERR_QUIC_HANDSHAKE_FAILED)) {
using_quic_ = false; using_quic_ = false;
return ReconsiderProxyAfterError(result); return ReconsiderProxyAfterError(result);
} }
...@@ -1320,6 +1321,7 @@ int HttpStreamFactoryImpl::Job::ReconsiderProxyAfterError(int error) { ...@@ -1320,6 +1321,7 @@ int HttpStreamFactoryImpl::Job::ReconsiderProxyAfterError(int error) {
// This can happen when trying to talk SSL to a non-SSL server (Like a // This can happen when trying to talk SSL to a non-SSL server (Like a
// captive portal). // captive portal).
case ERR_QUIC_PROTOCOL_ERROR: case ERR_QUIC_PROTOCOL_ERROR:
case ERR_QUIC_HANDSHAKE_FAILED:
case ERR_SSL_PROTOCOL_ERROR: case ERR_SSL_PROTOCOL_ERROR:
break; break;
case ERR_SOCKS_CONNECTION_HOST_UNREACHABLE: case ERR_SOCKS_CONNECTION_HOST_UNREACHABLE:
......
...@@ -617,37 +617,41 @@ TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) { ...@@ -617,37 +617,41 @@ TEST_P(HttpStreamFactoryTest, JobNotifiesProxy) {
} }
TEST_P(HttpStreamFactoryTest, UnreachableQuicProxyMarkedAsBad) { TEST_P(HttpStreamFactoryTest, UnreachableQuicProxyMarkedAsBad) {
scoped_ptr<ProxyService> proxy_service_; for (int i = 1; i <= 2; i++) {
proxy_service_.reset( 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")); ProxyService::CreateFixedFromPacResult("QUIC bad:99; DIRECT"));
HttpNetworkSession::Params params_; HttpNetworkSession::Params params;
params_.enable_quic = true; params.enable_quic = true;
scoped_refptr<SSLConfigServiceDefaults> ssl_config_service_( scoped_refptr<SSLConfigServiceDefaults> ssl_config_service(
new SSLConfigServiceDefaults); new SSLConfigServiceDefaults);
HttpServerPropertiesImpl http_server_properties; HttpServerPropertiesImpl http_server_properties;
MockClientSocketFactory socket_factory_; MockClientSocketFactory socket_factory;
params_.client_socket_factory = &socket_factory_; params.client_socket_factory = &socket_factory;
MockHostResolver host_resolver_; MockHostResolver host_resolver;
params_.host_resolver = &host_resolver_; params.host_resolver = &host_resolver;
TransportSecurityState transport_security_state_; TransportSecurityState transport_security_state;
params_.transport_security_state = &transport_security_state_; params.transport_security_state = &transport_security_state;
params_.proxy_service = proxy_service_.get(); params.proxy_service = proxy_service.get();
params_.ssl_config_service = ssl_config_service_.get(); params.ssl_config_service = ssl_config_service.get();
params_.http_server_properties = http_server_properties.GetWeakPtr(); params.http_server_properties = http_server_properties.GetWeakPtr();
scoped_refptr<HttpNetworkSession> session; scoped_refptr<HttpNetworkSession> session;
session = new HttpNetworkSession(params_); session = new HttpNetworkSession(params);
session->quic_stream_factory()->set_require_confirmation(false); session->quic_stream_factory()->set_require_confirmation(false);
StaticSocketDataProvider socket_data1; StaticSocketDataProvider socket_data1;
socket_data1.set_connect_data(MockConnect(ASYNC, ERR_QUIC_PROTOCOL_ERROR)); socket_data1.set_connect_data(MockConnect(ASYNC, mock_error));
socket_factory_.AddSocketDataProvider(&socket_data1); socket_factory.AddSocketDataProvider(&socket_data1);
// Second connection attempt succeeds // Second connection attempt succeeds.
StaticSocketDataProvider socket_data2; StaticSocketDataProvider socket_data2;
socket_data2.set_connect_data(MockConnect(ASYNC, OK)); socket_data2.set_connect_data(MockConnect(ASYNC, OK));
socket_factory_.AddSocketDataProvider(&socket_data2); socket_factory.AddSocketDataProvider(&socket_data2);
// Now request a stream. It should succeed using the second proxy in the // Now request a stream. It should succeed using the second proxy in the
// list. // list.
...@@ -667,11 +671,12 @@ TEST_P(HttpStreamFactoryTest, UnreachableQuicProxyMarkedAsBad) { ...@@ -667,11 +671,12 @@ TEST_P(HttpStreamFactoryTest, UnreachableQuicProxyMarkedAsBad) {
const ProxyRetryInfoMap& retry_info = const ProxyRetryInfoMap& retry_info =
session->proxy_service()->proxy_retry_info(); session->proxy_service()->proxy_retry_info();
// proxy_headers_handler.proxy_info_used.proxy_retry_info(); // proxy_headers_handler.proxy_info_used.proxy_retry_info();
EXPECT_EQ(1u, retry_info.size()); EXPECT_EQ(1u, retry_info.size()) << i;
EXPECT_TRUE(waiter.used_proxy_info().is_direct()); // EXPECT_TRUE(waiter.used_proxy_info().is_direct());
ProxyRetryInfoMap::const_iterator iter = retry_info.find("quic://bad:99"); ProxyRetryInfoMap::const_iterator iter = retry_info.find("quic://bad:99");
EXPECT_TRUE(iter != retry_info.end()); EXPECT_TRUE(iter != retry_info.end()) << i;
}
} }
TEST_P(HttpStreamFactoryTest, PrivacyModeDisablesChannelId) { TEST_P(HttpStreamFactoryTest, PrivacyModeDisablesChannelId) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment