Chromium Code Reviews| Index: net/http/http_stream_factory_impl_job.cc |
| =================================================================== |
| --- net/http/http_stream_factory_impl_job.cc (revision 117986) |
| +++ net/http/http_stream_factory_impl_job.cc (working copy) |
| @@ -183,12 +183,17 @@ |
| int HttpStreamFactoryImpl::Job::RestartTunnelWithProxyAuth( |
| const AuthCredentials& credentials) { |
|
vandebo (ex-Chrome)
2012/01/19 20:12:49
The credentials are thrown away? It looks like th
Ryan Hamilton
2012/01/19 23:11:19
Done. Looks like it could also be removed from Ht
|
| - DCHECK(establishing_tunnel_); |
| - next_state_ = STATE_RESTART_TUNNEL_AUTH; |
| - stream_.reset(); |
| - return RunLoop(OK); |
| + MessageLoop::current()->PostTask( |
|
cbentzel
2012/01/20 02:09:46
Is this needed due to reentrancy concerns with tun
Ryan Hamilton
2012/01/20 04:20:04
Yes... Specifically, we want to invoke the callbac
cbentzel
2012/01/20 11:15:46
Could you add a comment about this? It was non-obv
Ryan Hamilton
2012/01/20 17:20:13
Done.
|
| + FROM_HERE, |
| + base::Bind(&HttpStreamFactoryImpl::Job::ReallyRestartTunnelWithProxyAuth, |
| + ptr_factory_.GetWeakPtr())); |
| + return ERR_IO_PENDING; |
| } |
| +void HttpStreamFactoryImpl::Job::ReallyRestartTunnelWithProxyAuth() { |
| + tunnel_auth_handled_callback_.Run(OK); |
| +} |
|
vandebo (ex-Chrome)
2012/01/19 20:12:49
Null out tunnel_auth_handled_callback_ when you're
Ryan Hamilton
2012/01/19 23:11:19
tunnel_auth_handled_callback_ is not a pointer, it
|
| + |
| LoadState HttpStreamFactoryImpl::Job::GetLoadState() const { |
| switch (next_state_) { |
| case STATE_RESOLVE_PROXY_COMPLETE: |
| @@ -342,6 +347,16 @@ |
| // |this| may be deleted after this call. |
| } |
| +void HttpStreamFactoryImpl::Job::OnNeedsProxyTunnelAuthCallback( |
| + const HttpResponseInfo& response_info, |
| + HttpAuthController* auth_controller, |
| + CompletionCallback callback) { |
| + tunnel_auth_handled_callback_ = callback; |
|
vandebo (ex-Chrome)
2012/01/19 20:12:49
DCHECK that tunnel_auth_handled_callback_ == NULL
Ryan Hamilton
2012/01/19 23:11:19
tunnel_auth_handled_callback_ is not a pointer, it
|
| + request_->OnNeedsProxyAuth( |
| + this, response_info, server_ssl_config_, proxy_info_, auth_controller); |
| + // |this| may be deleted after this call. |
| +} |
| + |
| void HttpStreamFactoryImpl::Job::OnNeedsClientAuthCallback( |
| SSLCertRequestInfo* cert_info) { |
| DCHECK(!IsPreconnecting()); |
| @@ -416,10 +431,10 @@ |
| DCHECK(connection_->socket()); |
| DCHECK(establishing_tunnel_); |
| - HttpProxyClientSocket* http_proxy_socket = |
| - static_cast<HttpProxyClientSocket*>(connection_->socket()); |
| + ProxyClientSocket* proxy_socket = |
| + static_cast<ProxyClientSocket*>(connection_->socket()); |
| const HttpResponseInfo* tunnel_auth_response = |
| - http_proxy_socket->GetConnectResponseInfo(); |
| + proxy_socket->GetConnectResponseInfo(); |
| next_state_ = STATE_WAITING_USER_ACTION; |
| MessageLoop::current()->PostTask( |
| @@ -428,7 +443,7 @@ |
| &HttpStreamFactoryImpl::Job::OnNeedsProxyAuthCallback, |
| ptr_factory_.GetWeakPtr(), |
| *tunnel_auth_response, |
| - http_proxy_socket->auth_controller())); |
| + proxy_socket->auth_controller())); |
| } |
| return ERR_IO_PENDING; |
| @@ -721,13 +736,17 @@ |
| server_ssl_config_, |
| proxy_ssl_config_, |
| net_log_, |
| - num_streams_); |
| + num_streams_, |
| + base::Bind(&HttpStreamFactoryImpl::Job::OnNeedsProxyTunnelAuthCallback, |
| + base::Unretained(this))); |
| } else { |
| return InitSocketHandleForHttpRequest( |
| origin_url_, request_info_.extra_headers, request_info_.load_flags, |
| request_info_.priority, session_, proxy_info_, ShouldForceSpdySSL(), |
| want_spdy_over_npn, server_ssl_config_, proxy_ssl_config_, net_log_, |
| - connection_.get(), io_callback_); |
| + connection_.get(), io_callback_, |
| + base::Bind(&HttpStreamFactoryImpl::Job::OnNeedsProxyTunnelAuthCallback, |
| + base::Unretained(this))); |
| } |
| } |