summaryrefslogtreecommitdiffstats
path: root/chromium/net/http/http_proxy_client_socket_pool.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/http/http_proxy_client_socket_pool.cc')
-rw-r--r--chromium/net/http/http_proxy_client_socket_pool.cc21
1 files changed, 14 insertions, 7 deletions
diff --git a/chromium/net/http/http_proxy_client_socket_pool.cc b/chromium/net/http/http_proxy_client_socket_pool.cc
index 8d691b7dd80..829a5e78314 100644
--- a/chromium/net/http/http_proxy_client_socket_pool.cc
+++ b/chromium/net/http/http_proxy_client_socket_pool.cc
@@ -206,7 +206,7 @@ int HttpProxyConnectJob::DoSSLConnect() {
if (params_->tunnel()) {
SpdySessionKey key(params_->destination().host_port_pair(),
ProxyServer::Direct(),
- kPrivacyModeDisabled);
+ PRIVACY_MODE_DISABLED);
if (params_->spdy_session_pool()->FindAvailableSession(key, net_log())) {
using_spdy_ = true;
next_state_ = STATE_SPDY_PROXY_CREATE_STREAM;
@@ -237,6 +237,13 @@ int HttpProxyConnectJob::DoSSLConnectComplete(int result) {
return ERR_PROXY_CERTIFICATE_INVALID;
}
}
+ // A SPDY session to the proxy completed prior to resolving the proxy
+ // hostname. Surface this error, and allow the delegate to retry.
+ // See crbug.com/334413.
+ if (result == ERR_SPDY_SESSION_ALREADY_EXISTS) {
+ DCHECK(!transport_socket_handle_->socket());
+ return ERR_SPDY_SESSION_ALREADY_EXISTS;
+ }
if (result < 0) {
if (transport_socket_handle_->socket())
transport_socket_handle_->socket()->Disconnect();
@@ -302,7 +309,7 @@ int HttpProxyConnectJob::DoSpdyProxyCreateStream() {
DCHECK(params_->tunnel());
SpdySessionKey key(params_->destination().host_port_pair(),
ProxyServer::Direct(),
- kPrivacyModeDisabled);
+ PRIVACY_MODE_DISABLED);
SpdySessionPool* spdy_pool = params_->spdy_session_pool();
base::WeakPtr<SpdySession> spdy_session =
spdy_pool->FindAvailableSession(key, net_log());
@@ -315,11 +322,11 @@ int HttpProxyConnectJob::DoSpdyProxyCreateStream() {
}
} else {
// Create a session direct to the proxy itself
- int rv = spdy_pool->CreateAvailableSessionFromSocket(
- key, transport_socket_handle_.Pass(),
- net_log(), OK, &spdy_session, /*using_ssl_*/ true);
- if (rv < 0)
- return rv;
+ spdy_session =
+ spdy_pool->CreateAvailableSessionFromSocket(
+ key, transport_socket_handle_.Pass(),
+ net_log(), OK, /*using_ssl_*/ true);
+ DCHECK(spdy_session);
}
next_state_ = STATE_SPDY_PROXY_CREATE_STREAM_COMPLETE;