| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/http/http_stream_request.h" | 5 #include "net/http/http_stream_request.h" |
| 6 | 6 |
| 7 #include "base/stl_util-inl.h" | 7 #include "base/stl_util-inl.h" |
| 8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 const HttpResponseInfo& response, | 199 const HttpResponseInfo& response, |
| 200 HttpAuthController* auth_controller) { | 200 HttpAuthController* auth_controller) { |
| 201 delegate_->OnNeedsProxyAuth(response, auth_controller); | 201 delegate_->OnNeedsProxyAuth(response, auth_controller); |
| 202 } | 202 } |
| 203 | 203 |
| 204 void HttpStreamRequest::OnNeedsClientAuthCallback( | 204 void HttpStreamRequest::OnNeedsClientAuthCallback( |
| 205 SSLCertRequestInfo* cert_info) { | 205 SSLCertRequestInfo* cert_info) { |
| 206 delegate_->OnNeedsClientAuth(cert_info); | 206 delegate_->OnNeedsClientAuth(cert_info); |
| 207 } | 207 } |
| 208 | 208 |
| 209 void HttpStreamRequest::OnHttpsProxyTunnelResponseCallback( |
| 210 const HttpResponseInfo& response_info, |
| 211 HttpStream* stream) { |
| 212 delegate_->OnHttpsProxyTunnelResponse(response_info, stream); |
| 213 } |
| 214 |
| 209 void HttpStreamRequest::OnPreconnectsComplete(int result) { | 215 void HttpStreamRequest::OnPreconnectsComplete(int result) { |
| 210 preconnect_delegate_->OnPreconnectsComplete(this, result); | 216 preconnect_delegate_->OnPreconnectsComplete(this, result); |
| 211 } | 217 } |
| 212 | 218 |
| 213 void HttpStreamRequest::OnIOComplete(int result) { | 219 void HttpStreamRequest::OnIOComplete(int result) { |
| 214 RunLoop(result); | 220 RunLoop(result); |
| 215 } | 221 } |
| 216 | 222 |
| 217 int HttpStreamRequest::RunLoop(int result) { | 223 int HttpStreamRequest::RunLoop(int result) { |
| 218 result = DoLoop(result); | 224 result = DoLoop(result); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 246 switch (result) { | 252 switch (result) { |
| 247 case ERR_PROXY_AUTH_REQUESTED: | 253 case ERR_PROXY_AUTH_REQUESTED: |
| 248 { | 254 { |
| 249 DCHECK(connection_.get()); | 255 DCHECK(connection_.get()); |
| 250 DCHECK(connection_->socket()); | 256 DCHECK(connection_->socket()); |
| 251 DCHECK(establishing_tunnel_); | 257 DCHECK(establishing_tunnel_); |
| 252 | 258 |
| 253 HttpProxyClientSocket* http_proxy_socket = | 259 HttpProxyClientSocket* http_proxy_socket = |
| 254 static_cast<HttpProxyClientSocket*>(connection_->socket()); | 260 static_cast<HttpProxyClientSocket*>(connection_->socket()); |
| 255 const HttpResponseInfo* tunnel_auth_response = | 261 const HttpResponseInfo* tunnel_auth_response = |
| 256 http_proxy_socket->GetResponseInfo(); | 262 http_proxy_socket->GetConnectResponseInfo(); |
| 257 | 263 |
| 258 next_state_ = STATE_WAITING_USER_ACTION; | 264 next_state_ = STATE_WAITING_USER_ACTION; |
| 259 MessageLoop::current()->PostTask( | 265 MessageLoop::current()->PostTask( |
| 260 FROM_HERE, | 266 FROM_HERE, |
| 261 method_factory_.NewRunnableMethod( | 267 method_factory_.NewRunnableMethod( |
| 262 &HttpStreamRequest::OnNeedsProxyAuthCallback, | 268 &HttpStreamRequest::OnNeedsProxyAuthCallback, |
| 263 *tunnel_auth_response, | 269 *tunnel_auth_response, |
| 264 http_proxy_socket->auth_controller())); | 270 http_proxy_socket->auth_controller())); |
| 265 } | 271 } |
| 266 return ERR_IO_PENDING; | 272 return ERR_IO_PENDING; |
| 267 | 273 |
| 268 case ERR_SSL_CLIENT_AUTH_CERT_NEEDED: | 274 case ERR_SSL_CLIENT_AUTH_CERT_NEEDED: |
| 269 MessageLoop::current()->PostTask( | 275 MessageLoop::current()->PostTask( |
| 270 FROM_HERE, | 276 FROM_HERE, |
| 271 method_factory_.NewRunnableMethod( | 277 method_factory_.NewRunnableMethod( |
| 272 &HttpStreamRequest::OnNeedsClientAuthCallback, | 278 &HttpStreamRequest::OnNeedsClientAuthCallback, |
| 273 connection_->ssl_error_response_info().cert_request_info)); | 279 connection_->ssl_error_response_info().cert_request_info)); |
| 274 return ERR_IO_PENDING; | 280 return ERR_IO_PENDING; |
| 275 | 281 |
| 282 case ERR_HTTPS_PROXY_TUNNEL_RESPONSE: { |
| 283 LOG(INFO) << "Creating stream"; |
| 284 scoped_ptr<ProxyClientSocket> proxy_socket( |
| 285 connection_->release_https_proxy_tunnel_response_socket()); |
| 286 MessageLoop::current()->PostTask( |
| 287 FROM_HERE, |
| 288 method_factory_.NewRunnableMethod( |
| 289 &HttpStreamRequest::OnHttpsProxyTunnelResponseCallback, |
| 290 connection_->ssl_error_response_info(), |
| 291 proxy_socket->CreateConnectResponseStream())); |
| 292 return ERR_IO_PENDING; |
| 293 } |
| 294 |
| 276 case OK: | 295 case OK: |
| 277 next_state_ = STATE_DONE; | 296 next_state_ = STATE_DONE; |
| 278 MessageLoop::current()->PostTask( | 297 MessageLoop::current()->PostTask( |
| 279 FROM_HERE, | 298 FROM_HERE, |
| 280 method_factory_.NewRunnableMethod( | 299 method_factory_.NewRunnableMethod( |
| 281 &HttpStreamRequest::OnStreamReadyCallback)); | 300 &HttpStreamRequest::OnStreamReadyCallback)); |
| 282 return ERR_IO_PENDING; | 301 return ERR_IO_PENDING; |
| 283 | 302 |
| 284 default: | 303 default: |
| 285 MessageLoop::current()->PostTask( | 304 MessageLoop::current()->PostTask( |
| (...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 // this socket. Is there a race for two SPDY requests? We really | 756 // this socket. Is there a race for two SPDY requests? We really |
| 738 // need to plumb this through to the connect level. | 757 // need to plumb this through to the connect level. |
| 739 if (connection_->socket() && !connection_->is_reused()) | 758 if (connection_->socket() && !connection_->is_reused()) |
| 740 SetSocketMotivation(); | 759 SetSocketMotivation(); |
| 741 | 760 |
| 742 const ProxyServer& proxy_server = proxy_info()->proxy_server(); | 761 const ProxyServer& proxy_server = proxy_info()->proxy_server(); |
| 743 | 762 |
| 744 if (!using_spdy_) { | 763 if (!using_spdy_) { |
| 745 bool using_proxy = (proxy_info()->is_http() || proxy_info()->is_https()) && | 764 bool using_proxy = (proxy_info()->is_http() || proxy_info()->is_https()) && |
| 746 request_info().url.SchemeIs("http"); | 765 request_info().url.SchemeIs("http"); |
| 747 stream_.reset(new HttpBasicStream(connection_.release(), using_proxy)); | 766 stream_.reset(new HttpBasicStream(connection_.release(), NULL, |
| 767 using_proxy)); |
| 748 return OK; | 768 return OK; |
| 749 } | 769 } |
| 750 | 770 |
| 751 CHECK(!stream_.get()); | 771 CHECK(!stream_.get()); |
| 752 | 772 |
| 753 bool direct = true; | 773 bool direct = true; |
| 754 SpdySessionPool* spdy_pool = session_->spdy_session_pool(); | 774 SpdySessionPool* spdy_pool = session_->spdy_session_pool(); |
| 755 scoped_refptr<SpdySession> spdy_session; | 775 scoped_refptr<SpdySession> spdy_session; |
| 756 | 776 |
| 757 HostPortProxyPair pair(endpoint_, proxy_server); | 777 HostPortProxyPair pair(endpoint_, proxy_server); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 785 int error = spdy_pool->GetSpdySessionFromSocket( | 805 int error = spdy_pool->GetSpdySessionFromSocket( |
| 786 pair, session_->mutable_spdy_settings(), connection_.release(), | 806 pair, session_->mutable_spdy_settings(), connection_.release(), |
| 787 net_log_, spdy_certificate_error_, &spdy_session, using_ssl_); | 807 net_log_, spdy_certificate_error_, &spdy_session, using_ssl_); |
| 788 if (error != OK) | 808 if (error != OK) |
| 789 return error; | 809 return error; |
| 790 } | 810 } |
| 791 | 811 |
| 792 if (spdy_session->IsClosed()) | 812 if (spdy_session->IsClosed()) |
| 793 return ERR_CONNECTION_CLOSED; | 813 return ERR_CONNECTION_CLOSED; |
| 794 | 814 |
| 795 bool useRelativeUrl = direct || request_info().url.SchemeIs("https"); | 815 bool use_relative_url = direct || request_info().url.SchemeIs("https"); |
| 796 stream_.reset(new SpdyHttpStream(spdy_session, useRelativeUrl)); | 816 stream_.reset(new SpdyHttpStream(spdy_session, use_relative_url)); |
| 797 return OK; | 817 return OK; |
| 798 } | 818 } |
| 799 | 819 |
| 800 int HttpStreamRequest::DoCreateStreamComplete(int result) { | 820 int HttpStreamRequest::DoCreateStreamComplete(int result) { |
| 801 if (result < 0) | 821 if (result < 0) |
| 802 return result; | 822 return result; |
| 803 | 823 |
| 804 next_state_ = STATE_NONE; | 824 next_state_ = STATE_NONE; |
| 805 return OK; | 825 return OK; |
| 806 } | 826 } |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1057 base::TimeDelta::FromMinutes(6), | 1077 base::TimeDelta::FromMinutes(6), |
| 1058 100); | 1078 100); |
| 1059 break; | 1079 break; |
| 1060 default: | 1080 default: |
| 1061 NOTREACHED(); | 1081 NOTREACHED(); |
| 1062 break; | 1082 break; |
| 1063 } | 1083 } |
| 1064 } | 1084 } |
| 1065 | 1085 |
| 1066 } // namespace net | 1086 } // namespace net |
| OLD | NEW |