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

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

Issue 2895443002: Return Job as unique_ptr from factory methods. (Closed)
Patch Set: Created 3 years, 7 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 | « net/http/http_stream_factory_impl_job.cc ('k') | net/http/http_stream_factory_test_util.h » ('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) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 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_controller.h" 5 #include "net/http/http_stream_factory_impl_job_controller.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 756 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 767
768 // Create an alternative job if alternative service is set up for this domain. 768 // Create an alternative job if alternative service is set up for this domain.
769 const AlternativeService alternative_service = 769 const AlternativeService alternative_service =
770 GetAlternativeServiceFor(request_info_, delegate_, stream_type_); 770 GetAlternativeServiceFor(request_info_, delegate_, stream_type_);
771 771
772 if (is_preconnect_) { 772 if (is_preconnect_) {
773 // Due to how the socket pools handle priorities and idle sockets, only IDLE 773 // Due to how the socket pools handle priorities and idle sockets, only IDLE
774 // priority currently makes sense for preconnects. The priority for 774 // priority currently makes sense for preconnects. The priority for
775 // preconnects is currently ignored (see RequestSocketsForPool()), but could 775 // preconnects is currently ignored (see RequestSocketsForPool()), but could
776 // be used at some point for proxy resolution or something. 776 // be used at some point for proxy resolution or something.
777 main_job_.reset(job_factory_->CreateAltSvcJob( 777 main_job_ = job_factory_->CreateAltSvcJob(
778 this, PRECONNECT, session_, request_info_, IDLE, proxy_info_, 778 this, PRECONNECT, session_, request_info_, IDLE, proxy_info_,
779 server_ssl_config_, proxy_ssl_config_, destination, origin_url, 779 server_ssl_config_, proxy_ssl_config_, destination, origin_url,
780 alternative_service, enable_ip_based_pooling_, session_->net_log())); 780 alternative_service, enable_ip_based_pooling_, session_->net_log());
781 main_job_->Preconnect(num_streams_); 781 main_job_->Preconnect(num_streams_);
782 return OK; 782 return OK;
783 } 783 }
784 main_job_.reset(job_factory_->CreateMainJob( 784 main_job_ = job_factory_->CreateMainJob(
785 this, MAIN, session_, request_info_, priority_, proxy_info_, 785 this, MAIN, session_, request_info_, priority_, proxy_info_,
786 server_ssl_config_, proxy_ssl_config_, destination, origin_url, 786 server_ssl_config_, proxy_ssl_config_, destination, origin_url,
787 enable_ip_based_pooling_, net_log_.net_log())); 787 enable_ip_based_pooling_, net_log_.net_log());
788 // Alternative Service can only be set for HTTPS requests while Alternative 788 // Alternative Service can only be set for HTTPS requests while Alternative
789 // Proxy is set for HTTP requests. 789 // Proxy is set for HTTP requests.
790 if (alternative_service.protocol != kProtoUnknown) { 790 if (alternative_service.protocol != kProtoUnknown) {
791 // Never share connection with other jobs for FTP requests. 791 // Never share connection with other jobs for FTP requests.
792 DVLOG(1) << "Selected alternative service (host: " 792 DVLOG(1) << "Selected alternative service (host: "
793 << alternative_service.host_port_pair().host() 793 << alternative_service.host_port_pair().host()
794 << " port: " << alternative_service.host_port_pair().port() << ")"; 794 << " port: " << alternative_service.host_port_pair().port() << ")";
795 795
796 DCHECK(!request_info_.url.SchemeIs(url::kFtpScheme)); 796 DCHECK(!request_info_.url.SchemeIs(url::kFtpScheme));
797 HostPortPair alternative_destination(alternative_service.host_port_pair()); 797 HostPortPair alternative_destination(alternative_service.host_port_pair());
798 ignore_result( 798 ignore_result(
799 ApplyHostMappingRules(request_info_.url, &alternative_destination)); 799 ApplyHostMappingRules(request_info_.url, &alternative_destination));
800 800
801 alternative_job_.reset(job_factory_->CreateAltSvcJob( 801 alternative_job_ = job_factory_->CreateAltSvcJob(
802 this, ALTERNATIVE, session_, request_info_, priority_, proxy_info_, 802 this, ALTERNATIVE, session_, request_info_, priority_, proxy_info_,
803 server_ssl_config_, proxy_ssl_config_, alternative_destination, 803 server_ssl_config_, proxy_ssl_config_, alternative_destination,
804 origin_url, alternative_service, enable_ip_based_pooling_, 804 origin_url, alternative_service, enable_ip_based_pooling_,
805 net_log_.net_log())); 805 net_log_.net_log());
806 806
807 main_job_is_blocked_ = true; 807 main_job_is_blocked_ = true;
808 alternative_job_->Start(request_->stream_type()); 808 alternative_job_->Start(request_->stream_type());
809 } else { 809 } else {
810 ProxyServer alternative_proxy_server; 810 ProxyServer alternative_proxy_server;
811 if (ShouldCreateAlternativeProxyServerJob(proxy_info_, request_info_.url, 811 if (ShouldCreateAlternativeProxyServerJob(proxy_info_, request_info_.url,
812 &alternative_proxy_server)) { 812 &alternative_proxy_server)) {
813 DCHECK(!main_job_is_blocked_); 813 DCHECK(!main_job_is_blocked_);
814 ProxyInfo alternative_proxy_info; 814 ProxyInfo alternative_proxy_info;
815 alternative_proxy_info.UseProxyServer(alternative_proxy_server); 815 alternative_proxy_info.UseProxyServer(alternative_proxy_server);
816 816
817 alternative_job_.reset(job_factory_->CreateAltProxyJob( 817 alternative_job_ = job_factory_->CreateAltProxyJob(
818 this, ALTERNATIVE, session_, request_info_, priority_, 818 this, ALTERNATIVE, session_, request_info_, priority_,
819 alternative_proxy_info, server_ssl_config_, proxy_ssl_config_, 819 alternative_proxy_info, server_ssl_config_, proxy_ssl_config_,
820 destination, origin_url, alternative_proxy_server, 820 destination, origin_url, alternative_proxy_server,
821 enable_ip_based_pooling_, net_log_.net_log())); 821 enable_ip_based_pooling_, net_log_.net_log());
822 822
823 can_start_alternative_proxy_job_ = false; 823 can_start_alternative_proxy_job_ = false;
824 main_job_is_blocked_ = true; 824 main_job_is_blocked_ = true;
825 alternative_job_->Start(request_->stream_type()); 825 alternative_job_->Start(request_->stream_type());
826 } 826 }
827 } 827 }
828 // Even if |alternative_job| has already finished, it will not have notified 828 // Even if |alternative_job| has already finished, it will not have notified
829 // the request yet, since we defer that to the next iteration of the 829 // the request yet, since we defer that to the next iteration of the
830 // MessageLoop, so starting |main_job_| is always safe. 830 // MessageLoop, so starting |main_job_| is always safe.
831 main_job_->Start(request_->stream_type()); 831 main_job_->Start(request_->stream_type());
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
1256 // If ReconsiderProxyAfterError() failed synchronously, it means 1256 // If ReconsiderProxyAfterError() failed synchronously, it means
1257 // there was nothing left to fall-back to, so fail the transaction 1257 // there was nothing left to fall-back to, so fail the transaction
1258 // with the last connection error we got. 1258 // with the last connection error we got.
1259 // TODO(eroman): This is a confusing contract, make it more obvious. 1259 // TODO(eroman): This is a confusing contract, make it more obvious.
1260 rv = error; 1260 rv = error;
1261 } 1261 }
1262 return rv; 1262 return rv;
1263 } 1263 }
1264 1264
1265 } // namespace net 1265 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl_job.cc ('k') | net/http/http_stream_factory_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698