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

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

Issue 2496953002: Revert of Unify enum NextProto and enum AlternateProtocol. (Closed)
Patch Set: Created 4 years, 1 month 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
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 <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 DCHECK(!main_job_); 96 DCHECK(!main_job_);
97 DCHECK(!alternative_job_); 97 DCHECK(!alternative_job_);
98 98
99 is_preconnect_ = true; 99 is_preconnect_ = true;
100 HostPortPair destination(HostPortPair::FromURL(request_info.url)); 100 HostPortPair destination(HostPortPair::FromURL(request_info.url));
101 GURL origin_url = ApplyHostMappingRules(request_info.url, &destination); 101 GURL origin_url = ApplyHostMappingRules(request_info.url, &destination);
102 102
103 const AlternativeService alternative_service = GetAlternativeServiceFor( 103 const AlternativeService alternative_service = GetAlternativeServiceFor(
104 request_info, nullptr, HttpStreamRequest::HTTP_STREAM); 104 request_info, nullptr, HttpStreamRequest::HTTP_STREAM);
105 105
106 if (alternative_service.protocol != kProtoUnknown) { 106 if (alternative_service.protocol != UNINITIALIZED_ALTERNATE_PROTOCOL) {
107 if (session_->params().quic_disable_preconnect_if_0rtt && 107 if (session_->params().quic_disable_preconnect_if_0rtt &&
108 alternative_service.protocol == kProtoQUIC && 108 alternative_service.protocol == QUIC &&
109 session_->quic_stream_factory()->ZeroRTTEnabledFor(QuicServerId( 109 session_->quic_stream_factory()->ZeroRTTEnabledFor(QuicServerId(
110 alternative_service.host_port_pair(), request_info.privacy_mode))) { 110 alternative_service.host_port_pair(), request_info.privacy_mode))) {
111 MaybeNotifyFactoryOfCompletion(); 111 MaybeNotifyFactoryOfCompletion();
112 return; 112 return;
113 } 113 }
114 destination = alternative_service.host_port_pair(); 114 destination = alternative_service.host_port_pair();
115 ignore_result(ApplyHostMappingRules(request_info.url, &destination)); 115 ignore_result(ApplyHostMappingRules(request_info.url, &destination));
116 } 116 }
117 117
118 // Due to how the socket pools handle priorities and idle sockets, only IDLE 118 // Due to how the socket pools handle priorities and idle sockets, only IDLE
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 637
638 main_job_.reset(job_factory_->CreateJob( 638 main_job_.reset(job_factory_->CreateJob(
639 this, MAIN, session_, request_info, priority, server_ssl_config, 639 this, MAIN, session_, request_info, priority, server_ssl_config,
640 proxy_ssl_config, destination, origin_url, net_log.net_log())); 640 proxy_ssl_config, destination, origin_url, net_log.net_log()));
641 AttachJob(main_job_.get()); 641 AttachJob(main_job_.get());
642 642
643 // Create an alternative job if alternative service is set up for this domain. 643 // Create an alternative job if alternative service is set up for this domain.
644 const AlternativeService alternative_service = 644 const AlternativeService alternative_service =
645 GetAlternativeServiceFor(request_info, delegate, stream_type); 645 GetAlternativeServiceFor(request_info, delegate, stream_type);
646 646
647 if (alternative_service.protocol != kProtoUnknown) { 647 if (alternative_service.protocol != UNINITIALIZED_ALTERNATE_PROTOCOL) {
648 // Never share connection with other jobs for FTP requests. 648 // Never share connection with other jobs for FTP requests.
649 DVLOG(1) << "Selected alternative service (host: " 649 DVLOG(1) << "Selected alternative service (host: "
650 << alternative_service.host_port_pair().host() 650 << alternative_service.host_port_pair().host()
651 << " port: " << alternative_service.host_port_pair().port() << ")"; 651 << " port: " << alternative_service.host_port_pair().port() << ")";
652 652
653 DCHECK(!request_info.url.SchemeIs(url::kFtpScheme)); 653 DCHECK(!request_info.url.SchemeIs(url::kFtpScheme));
654 HostPortPair alternative_destination(alternative_service.host_port_pair()); 654 HostPortPair alternative_destination(alternative_service.host_port_pair());
655 ignore_result( 655 ignore_result(
656 ApplyHostMappingRules(request_info.url, &alternative_destination)); 656 ApplyHostMappingRules(request_info.url, &alternative_destination));
657 657
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 if (!request_ || (job_bound_ && bound_job_ != job)) { 780 if (!request_ || (job_bound_ && bound_job_ != job)) {
781 // If |request_| is gone then it must have been successfully served by 781 // If |request_| is gone then it must have been successfully served by
782 // |main_job_|. 782 // |main_job_|.
783 // If |request_| is bound to a different job, then it is being 783 // If |request_| is bound to a different job, then it is being
784 // successfully serverd by the main job. 784 // successfully serverd by the main job.
785 ReportBrokenAlternativeService(); 785 ReportBrokenAlternativeService();
786 } 786 }
787 } 787 }
788 788
789 void HttpStreamFactoryImpl::JobController::ReportBrokenAlternativeService() { 789 void HttpStreamFactoryImpl::JobController::ReportBrokenAlternativeService() {
790 DCHECK(failed_alternative_service_.protocol != kProtoUnknown || 790 DCHECK(failed_alternative_service_.protocol !=
791 UNINITIALIZED_ALTERNATE_PROTOCOL ||
791 failed_alternative_proxy_server_.is_valid()); 792 failed_alternative_proxy_server_.is_valid());
792 793
793 if (failed_alternative_proxy_server_.is_valid()) { 794 if (failed_alternative_proxy_server_.is_valid()) {
794 ProxyDelegate* proxy_delegate = session_->params().proxy_delegate; 795 ProxyDelegate* proxy_delegate = session_->params().proxy_delegate;
795 if (proxy_delegate) 796 if (proxy_delegate)
796 proxy_delegate->OnAlternativeProxyBroken( 797 proxy_delegate->OnAlternativeProxyBroken(
797 failed_alternative_proxy_server_); 798 failed_alternative_proxy_server_);
798 } else { 799 } else {
799 HistogramBrokenAlternateProtocolLocation( 800 HistogramBrokenAlternateProtocolLocation(
800 BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_ALT); 801 BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_ALT);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 } 842 }
842 843
843 AlternativeService 844 AlternativeService
844 HttpStreamFactoryImpl::JobController::GetAlternativeServiceFor( 845 HttpStreamFactoryImpl::JobController::GetAlternativeServiceFor(
845 const HttpRequestInfo& request_info, 846 const HttpRequestInfo& request_info,
846 HttpStreamRequest::Delegate* delegate, 847 HttpStreamRequest::Delegate* delegate,
847 HttpStreamRequest::StreamType stream_type) { 848 HttpStreamRequest::StreamType stream_type) {
848 AlternativeService alternative_service = 849 AlternativeService alternative_service =
849 GetAlternativeServiceForInternal(request_info, delegate, stream_type); 850 GetAlternativeServiceForInternal(request_info, delegate, stream_type);
850 AlternativeServiceType type; 851 AlternativeServiceType type;
851 if (alternative_service.protocol == kProtoUnknown) { 852 if (alternative_service.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL) {
852 type = NO_ALTERNATIVE_SERVICE; 853 type = NO_ALTERNATIVE_SERVICE;
853 } else if (alternative_service.protocol == kProtoQUIC) { 854 } else if (alternative_service.protocol == QUIC) {
854 if (request_info.url.host() == alternative_service.host) { 855 if (request_info.url.host() == alternative_service.host) {
855 type = QUIC_SAME_DESTINATION; 856 type = QUIC_SAME_DESTINATION;
856 } else { 857 } else {
857 type = QUIC_DIFFERENT_DESTINATION; 858 type = QUIC_DIFFERENT_DESTINATION;
858 } 859 }
859 } else { 860 } else {
860 if (request_info.url.host() == alternative_service.host) { 861 if (request_info.url.host() == alternative_service.host) {
861 type = NOT_QUIC_SAME_DESTINATION; 862 type = NOT_QUIC_SAME_DESTINATION;
862 } else { 863 } else {
863 type = NOT_QUIC_DIFFERENT_DESTINATION; 864 type = NOT_QUIC_DIFFERENT_DESTINATION;
(...skipping 24 matching lines...) Expand all
888 889
889 bool quic_advertised = false; 890 bool quic_advertised = false;
890 bool quic_all_broken = true; 891 bool quic_all_broken = true;
891 892
892 // First Alt-Svc that is not marked as broken. 893 // First Alt-Svc that is not marked as broken.
893 AlternativeService first_alternative_service; 894 AlternativeService first_alternative_service;
894 895
895 for (const AlternativeService& alternative_service : 896 for (const AlternativeService& alternative_service :
896 alternative_service_vector) { 897 alternative_service_vector) {
897 DCHECK(IsAlternateProtocolValid(alternative_service.protocol)); 898 DCHECK(IsAlternateProtocolValid(alternative_service.protocol));
898 if (!quic_advertised && alternative_service.protocol == kProtoQUIC) 899 if (!quic_advertised && alternative_service.protocol == QUIC)
899 quic_advertised = true; 900 quic_advertised = true;
900 if (http_server_properties.IsAlternativeServiceBroken( 901 if (http_server_properties.IsAlternativeServiceBroken(
901 alternative_service)) { 902 alternative_service)) {
902 HistogramAlternateProtocolUsage(ALTERNATE_PROTOCOL_USAGE_BROKEN, false); 903 HistogramAlternateProtocolUsage(ALTERNATE_PROTOCOL_USAGE_BROKEN, false);
903 continue; 904 continue;
904 } 905 }
905 906
906 907
907 // Some shared unix systems may have user home directories (like 908 // Some shared unix systems may have user home directories (like
908 // http://foo.com/~mike) which allow users to emit headers. This is a bad 909 // http://foo.com/~mike) which allow users to emit headers. This is a bad
909 // idea already, but with Alternate-Protocol, it provides the ability for a 910 // idea already, but with Alternate-Protocol, it provides the ability for a
910 // single user on a multi-user system to hijack the alternate protocol. 911 // single user on a multi-user system to hijack the alternate protocol.
911 // These systems also enforce ports <1024 as restricted ports. So don't 912 // These systems also enforce ports <1024 as restricted ports. So don't
912 // allow protocol upgrades to user-controllable ports. 913 // allow protocol upgrades to user-controllable ports.
913 const int kUnrestrictedPort = 1024; 914 const int kUnrestrictedPort = 1024;
914 if (!session_->params().enable_user_alternate_protocol_ports && 915 if (!session_->params().enable_user_alternate_protocol_ports &&
915 (alternative_service.port >= kUnrestrictedPort && 916 (alternative_service.port >= kUnrestrictedPort &&
916 origin.port() < kUnrestrictedPort)) 917 origin.port() < kUnrestrictedPort))
917 continue; 918 continue;
918 919
919 if (alternative_service.protocol == kProtoHTTP2) { 920 if (alternative_service.protocol == NPN_HTTP_2) {
920 if (origin.host() != alternative_service.host && 921 if (origin.host() != alternative_service.host &&
921 !session_->params() 922 !session_->params()
922 .enable_http2_alternative_service_with_different_host) { 923 .enable_http2_alternative_service_with_different_host) {
923 continue; 924 continue;
924 } 925 }
925 926
926 // Cache this entry if we don't have a non-broken Alt-Svc yet. 927 // Cache this entry if we don't have a non-broken Alt-Svc yet.
927 if (first_alternative_service.protocol == kProtoUnknown) 928 if (first_alternative_service.protocol ==
929 UNINITIALIZED_ALTERNATE_PROTOCOL)
928 first_alternative_service = alternative_service; 930 first_alternative_service = alternative_service;
929 continue; 931 continue;
930 } 932 }
931 933
932 DCHECK_EQ(kProtoQUIC, alternative_service.protocol); 934 DCHECK_EQ(QUIC, alternative_service.protocol);
933 if (origin.host() != alternative_service.host && 935 if (origin.host() != alternative_service.host &&
934 !session_->params() 936 !session_->params()
935 .enable_quic_alternative_service_with_different_host) { 937 .enable_quic_alternative_service_with_different_host) {
936 continue; 938 continue;
937 } 939 }
938 940
939 quic_all_broken = false; 941 quic_all_broken = false;
940 if (!session_->params().enable_quic) 942 if (!session_->params().enable_quic)
941 continue; 943 continue;
942 944
(...skipping 18 matching lines...) Expand all
961 963
962 HostPortPair destination(alternative_service.host_port_pair()); 964 HostPortPair destination(alternative_service.host_port_pair());
963 ignore_result(ApplyHostMappingRules(original_url, &destination)); 965 ignore_result(ApplyHostMappingRules(original_url, &destination));
964 966
965 if (session_->quic_stream_factory()->CanUseExistingSession(server_id, 967 if (session_->quic_stream_factory()->CanUseExistingSession(server_id,
966 destination)) { 968 destination)) {
967 return alternative_service; 969 return alternative_service;
968 } 970 }
969 971
970 // Cache this entry if we don't have a non-broken Alt-Svc yet. 972 // Cache this entry if we don't have a non-broken Alt-Svc yet.
971 if (first_alternative_service.protocol == kProtoUnknown) 973 if (first_alternative_service.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL)
972 first_alternative_service = alternative_service; 974 first_alternative_service = alternative_service;
973 } 975 }
974 976
975 // Ask delegate to mark QUIC as broken for the origin. 977 // Ask delegate to mark QUIC as broken for the origin.
976 if (quic_advertised && quic_all_broken && delegate != nullptr) 978 if (quic_advertised && quic_all_broken && delegate != nullptr)
977 delegate->OnQuicBroken(); 979 delegate->OnQuicBroken();
978 980
979 return first_alternative_service; 981 return first_alternative_service;
980 } 982 }
981 983
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 } 1073 }
1072 1074
1073 void HttpStreamFactoryImpl::JobController::StartAlternativeProxyServerJob() { 1075 void HttpStreamFactoryImpl::JobController::StartAlternativeProxyServerJob() {
1074 if (!alternative_job_ || !request_) 1076 if (!alternative_job_ || !request_)
1075 return; 1077 return;
1076 DCHECK(alternative_job_->alternative_proxy_server().is_valid()); 1078 DCHECK(alternative_job_->alternative_proxy_server().is_valid());
1077 alternative_job_->Start(request_->stream_type()); 1079 alternative_job_->Start(request_->stream_type());
1078 } 1080 }
1079 1081
1080 } // namespace net 1082 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_stream_factory_impl_job.cc ('k') | net/http/http_stream_factory_impl_job_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698