Index: net/spdy/spdy_proxy_client_socket.cc |
=================================================================== |
--- net/spdy/spdy_proxy_client_socket.cc (revision 110584) |
+++ net/spdy/spdy_proxy_client_socket.cc (working copy) |
@@ -63,6 +63,19 @@ |
return response_.headers ? &response_ : NULL; |
} |
+int SpdyProxyClientSocket::RestartWithAuth(OldCompletionCallback* callback) { |
+ // A SPDY Stream can only handle a single request, so the underlying |
+ // stream may not be reused and a new SpdyProxyClientSocket must be |
+ // created (possibly on top of the same SPDY Session). |
+ next_state_ = STATE_DISCONNECTED; |
+ return OK; |
+} |
+ |
+const |
+scoped_refptr<HttpAuthController>& SpdyProxyClientSocket::auth_controller() { |
+ return auth_; |
+} |
+ |
HttpStream* SpdyProxyClientSocket::CreateConnectResponseStream() { |
DCHECK(response_stream_.get()); |
return response_stream_.release(); |
@@ -384,6 +397,16 @@ |
if (response_.headers->response_code() == 200) { |
return OK; |
} else if (response_.headers->response_code() == 407) { |
+ int rv = HandleAuthChallenge(auth_, &response_, net_log_); |
+ if (rv != ERR_PROXY_AUTH_REQUESTED) { |
+ return rv; |
+ } |
+ // SPDY only supports basic and digest auth |
+ if (auth_->auth_info() && |
+ (auth_->auth_info()->scheme == "basic" || |
+ auth_->auth_info()->scheme == "digest")) { |
+ return ERR_PROXY_AUTH_REQUESTED; |
+ } |
return ERR_TUNNEL_CONNECTION_FAILED; |
} else { |
// Immediately hand off our SpdyStream to a newly created SpdyHttpStream |