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

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

Issue 964013002: Split bug 455884 into separate bugs for each janky piece and remove the (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months 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
« no previous file with comments | « no previous file | net/socket/ssl_client_socket_pool.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_factory_impl_job.h" 5 #include "net/http/http_stream_factory_impl_job.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 return 434 return
435 spdy_session_pool->FindAvailableSession(spdy_session_key, net_log) ? 435 spdy_session_pool->FindAvailableSession(spdy_session_key, net_log) ?
436 ERR_SPDY_SESSION_ALREADY_EXISTS : OK; 436 ERR_SPDY_SESSION_ALREADY_EXISTS : OK;
437 } 437 }
438 438
439 void HttpStreamFactoryImpl::Job::OnIOComplete(int result) { 439 void HttpStreamFactoryImpl::Job::OnIOComplete(int result) {
440 RunLoop(result); 440 RunLoop(result);
441 } 441 }
442 442
443 int HttpStreamFactoryImpl::Job::RunLoop(int result) { 443 int HttpStreamFactoryImpl::Job::RunLoop(int result) {
444 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed.
445 tracked_objects::ScopedTracker tracking_profile(
446 FROM_HERE_WITH_EXPLICIT_FUNCTION(
447 "455884 HttpStreamFactoryImpl::Job::RunLoop"));
448 result = DoLoop(result); 444 result = DoLoop(result);
449 445
450 if (result == ERR_IO_PENDING) 446 if (result == ERR_IO_PENDING)
451 return result; 447 return result;
452 448
453 // If there was an error, we should have already resumed the |waiting_job_|, 449 // If there was an error, we should have already resumed the |waiting_job_|,
454 // if there was one. 450 // if there was one.
455 DCHECK(result == OK || waiting_job_ == NULL); 451 DCHECK(result == OK || waiting_job_ == NULL);
456 452
457 if (IsPreconnecting()) { 453 if (IsPreconnecting()) {
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 610
615 int HttpStreamFactoryImpl::Job::StartInternal() { 611 int HttpStreamFactoryImpl::Job::StartInternal() {
616 CHECK_EQ(STATE_NONE, next_state_); 612 CHECK_EQ(STATE_NONE, next_state_);
617 next_state_ = STATE_START; 613 next_state_ = STATE_START;
618 int rv = RunLoop(OK); 614 int rv = RunLoop(OK);
619 DCHECK_EQ(ERR_IO_PENDING, rv); 615 DCHECK_EQ(ERR_IO_PENDING, rv);
620 return rv; 616 return rv;
621 } 617 }
622 618
623 int HttpStreamFactoryImpl::Job::DoStart() { 619 int HttpStreamFactoryImpl::Job::DoStart() {
624 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed.
625 tracked_objects::ScopedTracker tracking_profile(
626 FROM_HERE_WITH_EXPLICIT_FUNCTION(
627 "455884 HttpStreamFactoryImpl::Job::DoStart"));
628 origin_ = HostPortPair::FromURL(request_info_.url); 620 origin_ = HostPortPair::FromURL(request_info_.url);
629 origin_url_ = stream_factory_->ApplyHostMappingRules( 621 origin_url_ = stream_factory_->ApplyHostMappingRules(
630 request_info_.url, &origin_); 622 request_info_.url, &origin_);
631 623
632 net_log_.BeginEvent(NetLog::TYPE_HTTP_STREAM_JOB, 624 net_log_.BeginEvent(NetLog::TYPE_HTTP_STREAM_JOB,
633 base::Bind(&NetLogHttpStreamJobCallback, 625 base::Bind(&NetLogHttpStreamJobCallback,
634 &request_info_.url, &origin_url_, 626 &request_info_.url, &origin_url_,
635 priority_)); 627 priority_));
636 628
637 // Don't connect to restricted ports. 629 // Don't connect to restricted ports.
(...skipping 10 matching lines...) Expand all
648 waiting_job_ = NULL; 640 waiting_job_ = NULL;
649 } 641 }
650 return ERR_UNSAFE_PORT; 642 return ERR_UNSAFE_PORT;
651 } 643 }
652 644
653 next_state_ = STATE_RESOLVE_PROXY; 645 next_state_ = STATE_RESOLVE_PROXY;
654 return OK; 646 return OK;
655 } 647 }
656 648
657 int HttpStreamFactoryImpl::Job::DoResolveProxy() { 649 int HttpStreamFactoryImpl::Job::DoResolveProxy() {
658 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed.
659 tracked_objects::ScopedTracker tracking_profile(
660 FROM_HERE_WITH_EXPLICIT_FUNCTION(
661 "455884 HttpStreamFactoryImpl::Job::DoResolveProxy"));
662 DCHECK(!pac_request_); 650 DCHECK(!pac_request_);
663 DCHECK(session_); 651 DCHECK(session_);
664 652
665 next_state_ = STATE_RESOLVE_PROXY_COMPLETE; 653 next_state_ = STATE_RESOLVE_PROXY_COMPLETE;
666 654
667 if (request_info_.load_flags & LOAD_BYPASS_PROXY) { 655 if (request_info_.load_flags & LOAD_BYPASS_PROXY) {
668 proxy_info_.UseDirect(); 656 proxy_info_.UseDirect();
669 return OK; 657 return OK;
670 } 658 }
671 659
672 return session_->proxy_service()->ResolveProxy( 660 return session_->proxy_service()->ResolveProxy(
673 request_info_.url, request_info_.load_flags, &proxy_info_, io_callback_, 661 request_info_.url, request_info_.load_flags, &proxy_info_, io_callback_,
674 &pac_request_, session_->network_delegate(), net_log_); 662 &pac_request_, session_->network_delegate(), net_log_);
675 } 663 }
676 664
677 int HttpStreamFactoryImpl::Job::DoResolveProxyComplete(int result) { 665 int HttpStreamFactoryImpl::Job::DoResolveProxyComplete(int result) {
678 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed.
679 tracked_objects::ScopedTracker tracking_profile(
680 FROM_HERE_WITH_EXPLICIT_FUNCTION(
681 "455884 HttpStreamFactoryImpl::Job::DoResolveProxyComplete"));
682 pac_request_ = NULL; 666 pac_request_ = NULL;
683 667
684 if (result == OK) { 668 if (result == OK) {
685 // Remove unsupported proxies from the list. 669 // Remove unsupported proxies from the list.
686 int supported_proxies = 670 int supported_proxies =
687 ProxyServer::SCHEME_DIRECT | ProxyServer::SCHEME_HTTP | 671 ProxyServer::SCHEME_DIRECT | ProxyServer::SCHEME_HTTP |
688 ProxyServer::SCHEME_HTTPS | ProxyServer::SCHEME_SOCKS4 | 672 ProxyServer::SCHEME_HTTPS | ProxyServer::SCHEME_SOCKS4 |
689 ProxyServer::SCHEME_SOCKS5; 673 ProxyServer::SCHEME_SOCKS5;
690 674
691 if (session_->params().enable_quic_for_proxies) 675 if (session_->params().enable_quic_for_proxies)
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 } 729 }
746 730
747 int HttpStreamFactoryImpl::Job::DoWaitForJobComplete(int result) { 731 int HttpStreamFactoryImpl::Job::DoWaitForJobComplete(int result) {
748 DCHECK(!blocking_job_); 732 DCHECK(!blocking_job_);
749 DCHECK_EQ(OK, result); 733 DCHECK_EQ(OK, result);
750 next_state_ = STATE_INIT_CONNECTION; 734 next_state_ = STATE_INIT_CONNECTION;
751 return OK; 735 return OK;
752 } 736 }
753 737
754 int HttpStreamFactoryImpl::Job::DoInitConnection() { 738 int HttpStreamFactoryImpl::Job::DoInitConnection() {
755 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed. 739 // TODO(pkasting): Remove ScopedTracker below once crbug.com/462812 is fixed.
756 tracked_objects::ScopedTracker tracking_profile( 740 tracked_objects::ScopedTracker tracking_profile(
757 FROM_HERE_WITH_EXPLICIT_FUNCTION( 741 FROM_HERE_WITH_EXPLICIT_FUNCTION(
758 "455884 HttpStreamFactoryImpl::Job::DoInitConnection")); 742 "462812 HttpStreamFactoryImpl::Job::DoInitConnection"));
759 DCHECK(!blocking_job_); 743 DCHECK(!blocking_job_);
760 DCHECK(!connection_->is_initialized()); 744 DCHECK(!connection_->is_initialized());
761 DCHECK(proxy_info_.proxy_server().is_valid()); 745 DCHECK(proxy_info_.proxy_server().is_valid());
762 next_state_ = STATE_INIT_CONNECTION_COMPLETE; 746 next_state_ = STATE_INIT_CONNECTION_COMPLETE;
763 747
764 using_ssl_ = request_info_.url.SchemeIs("https") || 748 using_ssl_ = request_info_.url.SchemeIs("https") ||
765 request_info_.url.SchemeIs("wss") || ShouldForceSpdySSL(); 749 request_info_.url.SchemeIs("wss") || ShouldForceSpdySSL();
766 using_spdy_ = false; 750 using_spdy_ = false;
767 751
768 if (ShouldForceQuic()) 752 if (ShouldForceQuic())
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 880
897 return InitSocketHandleForHttpRequest( 881 return InitSocketHandleForHttpRequest(
898 origin_url_, request_info_.extra_headers, request_info_.load_flags, 882 origin_url_, request_info_.extra_headers, request_info_.load_flags,
899 priority_, session_, proxy_info_, ShouldForceSpdySSL(), 883 priority_, session_, proxy_info_, ShouldForceSpdySSL(),
900 want_spdy_over_npn, server_ssl_config_, proxy_ssl_config_, 884 want_spdy_over_npn, server_ssl_config_, proxy_ssl_config_,
901 request_info_.privacy_mode, net_log_, 885 request_info_.privacy_mode, net_log_,
902 connection_.get(), resolution_callback, io_callback_); 886 connection_.get(), resolution_callback, io_callback_);
903 } 887 }
904 888
905 int HttpStreamFactoryImpl::Job::DoInitConnectionComplete(int result) { 889 int HttpStreamFactoryImpl::Job::DoInitConnectionComplete(int result) {
906 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed.
907 tracked_objects::ScopedTracker tracking_profile(
908 FROM_HERE_WITH_EXPLICIT_FUNCTION(
909 "455884 HttpStreamFactoryImpl::Job::DoInitConnectionComplete"));
910 if (IsPreconnecting()) { 890 if (IsPreconnecting()) {
911 if (using_quic_) 891 if (using_quic_)
912 return result; 892 return result;
913 DCHECK_EQ(OK, result); 893 DCHECK_EQ(OK, result);
914 return OK; 894 return OK;
915 } 895 }
916 896
917 if (result == ERR_SPDY_SESSION_ALREADY_EXISTS) { 897 if (result == ERR_SPDY_SESSION_ALREADY_EXISTS) {
918 // We found a SPDY connection after resolving the host. This is 898 // We found a SPDY connection after resolving the host. This is
919 // probably an IP pooled connection. 899 // probably an IP pooled connection.
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 // TODO(willchan): Delete this code, because eventually, the 1066 // TODO(willchan): Delete this code, because eventually, the
1087 // HttpStreamFactoryImpl will be creating all the SpdyHttpStreams, since it 1067 // HttpStreamFactoryImpl will be creating all the SpdyHttpStreams, since it
1088 // will know when SpdySessions become available. 1068 // will know when SpdySessions become available.
1089 1069
1090 bool use_relative_url = direct || request_info_.url.SchemeIs("https"); 1070 bool use_relative_url = direct || request_info_.url.SchemeIs("https");
1091 stream_.reset(new SpdyHttpStream(session, use_relative_url)); 1071 stream_.reset(new SpdyHttpStream(session, use_relative_url));
1092 return OK; 1072 return OK;
1093 } 1073 }
1094 1074
1095 int HttpStreamFactoryImpl::Job::DoCreateStream() { 1075 int HttpStreamFactoryImpl::Job::DoCreateStream() {
1096 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed. 1076 // TODO(pkasting): Remove ScopedTracker below once crbug.com/462811 is fixed.
1097 tracked_objects::ScopedTracker tracking_profile( 1077 tracked_objects::ScopedTracker tracking_profile(
1098 FROM_HERE_WITH_EXPLICIT_FUNCTION( 1078 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1099 "455884 HttpStreamFactoryImpl::Job::DoCreateStream")); 1079 "462811 HttpStreamFactoryImpl::Job::DoCreateStream"));
1100 DCHECK(connection_->socket() || existing_spdy_session_.get() || using_quic_); 1080 DCHECK(connection_->socket() || existing_spdy_session_.get() || using_quic_);
1101 1081
1102 next_state_ = STATE_CREATE_STREAM_COMPLETE; 1082 next_state_ = STATE_CREATE_STREAM_COMPLETE;
1103 1083
1104 // We only set the socket motivation if we're the first to use 1084 // We only set the socket motivation if we're the first to use
1105 // this socket. Is there a race for two SPDY requests? We really 1085 // this socket. Is there a race for two SPDY requests? We really
1106 // need to plumb this through to the connect level. 1086 // need to plumb this through to the connect level.
1107 if (connection_->socket() && !connection_->is_reused()) 1087 if (connection_->socket() && !connection_->is_reused())
1108 SetSocketMotivation(); 1088 SetSocketMotivation();
1109 1089
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1183 1163
1184 // Create a SpdyHttpStream attached to the session; 1164 // Create a SpdyHttpStream attached to the session;
1185 // OnNewSpdySessionReadyCallback is not called until an event loop 1165 // OnNewSpdySessionReadyCallback is not called until an event loop
1186 // iteration later, so if the SpdySession is closed between then, allow 1166 // iteration later, so if the SpdySession is closed between then, allow
1187 // reuse state from the underlying socket, sampled by SpdyHttpStream, 1167 // reuse state from the underlying socket, sampled by SpdyHttpStream,
1188 // bubble up to the request. 1168 // bubble up to the request.
1189 return SetSpdyHttpStream(new_spdy_session_, spdy_session_direct_); 1169 return SetSpdyHttpStream(new_spdy_session_, spdy_session_direct_);
1190 } 1170 }
1191 1171
1192 int HttpStreamFactoryImpl::Job::DoCreateStreamComplete(int result) { 1172 int HttpStreamFactoryImpl::Job::DoCreateStreamComplete(int result) {
1193 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed.
1194 tracked_objects::ScopedTracker tracking_profile(
1195 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1196 "455884 HttpStreamFactoryImpl::Job::DoCreateStreamComplete"));
1197 if (result < 0) 1173 if (result < 0)
1198 return result; 1174 return result;
1199 1175
1200 session_->proxy_service()->ReportSuccess(proxy_info_, 1176 session_->proxy_service()->ReportSuccess(proxy_info_,
1201 session_->network_delegate()); 1177 session_->network_delegate());
1202 next_state_ = STATE_NONE; 1178 next_state_ = STATE_NONE;
1203 return OK; 1179 return OK;
1204 } 1180 }
1205 1181
1206 int HttpStreamFactoryImpl::Job::DoRestartTunnelAuth() { 1182 int HttpStreamFactoryImpl::Job::DoRestartTunnelAuth() {
1207 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed.
1208 tracked_objects::ScopedTracker tracking_profile(
1209 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1210 "455884 HttpStreamFactoryImpl::Job::DoRestartTunnelAuth"));
1211 next_state_ = STATE_RESTART_TUNNEL_AUTH_COMPLETE; 1183 next_state_ = STATE_RESTART_TUNNEL_AUTH_COMPLETE;
1212 ProxyClientSocket* proxy_socket = 1184 ProxyClientSocket* proxy_socket =
1213 static_cast<ProxyClientSocket*>(connection_->socket()); 1185 static_cast<ProxyClientSocket*>(connection_->socket());
1214 return proxy_socket->RestartWithAuth(io_callback_); 1186 return proxy_socket->RestartWithAuth(io_callback_);
1215 } 1187 }
1216 1188
1217 int HttpStreamFactoryImpl::Job::DoRestartTunnelAuthComplete(int result) { 1189 int HttpStreamFactoryImpl::Job::DoRestartTunnelAuthComplete(int result) {
1218 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455884 is fixed.
1219 tracked_objects::ScopedTracker tracking_profile(
1220 FROM_HERE_WITH_EXPLICIT_FUNCTION(
1221 "455884 HttpStreamFactoryImpl::Job::DoRestartTunnelAuthComplete"));
1222 if (result == ERR_PROXY_AUTH_REQUESTED) 1190 if (result == ERR_PROXY_AUTH_REQUESTED)
1223 return result; 1191 return result;
1224 1192
1225 if (result == OK) { 1193 if (result == OK) {
1226 // Now that we've got the HttpProxyClientSocket connected. We have 1194 // Now that we've got the HttpProxyClientSocket connected. We have
1227 // to release it as an idle socket into the pool and start the connection 1195 // to release it as an idle socket into the pool and start the connection
1228 // process from the beginning. Trying to pass it in with the 1196 // process from the beginning. Trying to pass it in with the
1229 // SSLSocketParams might cause a deadlock since params are dispatched 1197 // SSLSocketParams might cause a deadlock since params are dispatched
1230 // interchangeably. This request won't necessarily get this http proxy 1198 // interchangeably. This request won't necessarily get this http proxy
1231 // socket, but there will be forward progress. 1199 // socket, but there will be forward progress.
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1534 1502
1535 if (job_status_ == STATUS_SUCCEEDED && other_job_status_ == STATUS_BROKEN) { 1503 if (job_status_ == STATUS_SUCCEEDED && other_job_status_ == STATUS_BROKEN) {
1536 HistogramBrokenAlternateProtocolLocation( 1504 HistogramBrokenAlternateProtocolLocation(
1537 BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_MAIN); 1505 BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_MAIN);
1538 session_->http_server_properties()->SetBrokenAlternateProtocol( 1506 session_->http_server_properties()->SetBrokenAlternateProtocol(
1539 HostPortPair::FromURL(request_info_.url)); 1507 HostPortPair::FromURL(request_info_.url));
1540 } 1508 }
1541 } 1509 }
1542 1510
1543 } // namespace net 1511 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/socket/ssl_client_socket_pool.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698