Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1305)

Side by Side Diff: net/http/http_stream_request.cc

Issue 4935001: Allow a non-200 (or non-407) response for a CONNECT request from an HTTPS pro... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Addressing the comments from vandebo and willchan Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698