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

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

Issue 2373663002: Unify enum NextProto and enum AlternateProtocol. (Closed)
Patch Set: Fix compile errors. 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 != UNINITIALIZED_ALTERNATE_PROTOCOL) { 106 if (alternative_service.protocol != kProtoUnknown) {
107 if (session_->params().quic_disable_preconnect_if_0rtt && 107 if (session_->params().quic_disable_preconnect_if_0rtt &&
108 alternative_service.protocol == QUIC && 108 alternative_service.protocol == kProtoQUIC &&
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 != UNINITIALIZED_ALTERNATE_PROTOCOL) { 647 if (alternative_service.protocol != kProtoUnknown) {
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 != 790 DCHECK(failed_alternative_service_.protocol != kProtoUnknown ||
791 UNINITIALIZED_ALTERNATE_PROTOCOL ||
792 failed_alternative_proxy_server_.is_valid()); 791 failed_alternative_proxy_server_.is_valid());
793 792
794 if (failed_alternative_proxy_server_.is_valid()) { 793 if (failed_alternative_proxy_server_.is_valid()) {
795 ProxyDelegate* proxy_delegate = session_->params().proxy_delegate; 794 ProxyDelegate* proxy_delegate = session_->params().proxy_delegate;
796 if (proxy_delegate) 795 if (proxy_delegate)
797 proxy_delegate->OnAlternativeProxyBroken( 796 proxy_delegate->OnAlternativeProxyBroken(
798 failed_alternative_proxy_server_); 797 failed_alternative_proxy_server_);
799 } else { 798 } else {
800 HistogramBrokenAlternateProtocolLocation( 799 HistogramBrokenAlternateProtocolLocation(
801 BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_ALT); 800 BROKEN_ALTERNATE_PROTOCOL_LOCATION_HTTP_STREAM_FACTORY_IMPL_JOB_ALT);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 } 841 }
843 842
844 AlternativeService 843 AlternativeService
845 HttpStreamFactoryImpl::JobController::GetAlternativeServiceFor( 844 HttpStreamFactoryImpl::JobController::GetAlternativeServiceFor(
846 const HttpRequestInfo& request_info, 845 const HttpRequestInfo& request_info,
847 HttpStreamRequest::Delegate* delegate, 846 HttpStreamRequest::Delegate* delegate,
848 HttpStreamRequest::StreamType stream_type) { 847 HttpStreamRequest::StreamType stream_type) {
849 AlternativeService alternative_service = 848 AlternativeService alternative_service =
850 GetAlternativeServiceForInternal(request_info, delegate, stream_type); 849 GetAlternativeServiceForInternal(request_info, delegate, stream_type);
851 AlternativeServiceType type; 850 AlternativeServiceType type;
852 if (alternative_service.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL) { 851 if (alternative_service.protocol == kProtoUnknown) {
853 type = NO_ALTERNATIVE_SERVICE; 852 type = NO_ALTERNATIVE_SERVICE;
854 } else if (alternative_service.protocol == QUIC) { 853 } else if (alternative_service.protocol == kProtoQUIC) {
855 if (request_info.url.host() == alternative_service.host) { 854 if (request_info.url.host() == alternative_service.host) {
856 type = QUIC_SAME_DESTINATION; 855 type = QUIC_SAME_DESTINATION;
857 } else { 856 } else {
858 type = QUIC_DIFFERENT_DESTINATION; 857 type = QUIC_DIFFERENT_DESTINATION;
859 } 858 }
860 } else { 859 } else {
861 if (request_info.url.host() == alternative_service.host) { 860 if (request_info.url.host() == alternative_service.host) {
862 type = NOT_QUIC_SAME_DESTINATION; 861 type = NOT_QUIC_SAME_DESTINATION;
863 } else { 862 } else {
864 type = NOT_QUIC_DIFFERENT_DESTINATION; 863 type = NOT_QUIC_DIFFERENT_DESTINATION;
(...skipping 24 matching lines...) Expand all
889 888
890 bool quic_advertised = false; 889 bool quic_advertised = false;
891 bool quic_all_broken = true; 890 bool quic_all_broken = true;
892 891
893 // First Alt-Svc that is not marked as broken. 892 // First Alt-Svc that is not marked as broken.
894 AlternativeService first_alternative_service; 893 AlternativeService first_alternative_service;
895 894
896 for (const AlternativeService& alternative_service : 895 for (const AlternativeService& alternative_service :
897 alternative_service_vector) { 896 alternative_service_vector) {
898 DCHECK(IsAlternateProtocolValid(alternative_service.protocol)); 897 DCHECK(IsAlternateProtocolValid(alternative_service.protocol));
899 if (!quic_advertised && alternative_service.protocol == QUIC) 898 if (!quic_advertised && alternative_service.protocol == kProtoQUIC)
900 quic_advertised = true; 899 quic_advertised = true;
901 if (http_server_properties.IsAlternativeServiceBroken( 900 if (http_server_properties.IsAlternativeServiceBroken(
902 alternative_service)) { 901 alternative_service)) {
903 HistogramAlternateProtocolUsage(ALTERNATE_PROTOCOL_USAGE_BROKEN, false); 902 HistogramAlternateProtocolUsage(ALTERNATE_PROTOCOL_USAGE_BROKEN, false);
904 continue; 903 continue;
905 } 904 }
906 905
907 906
908 // Some shared unix systems may have user home directories (like 907 // Some shared unix systems may have user home directories (like
909 // http://foo.com/~mike) which allow users to emit headers. This is a bad 908 // http://foo.com/~mike) which allow users to emit headers. This is a bad
910 // idea already, but with Alternate-Protocol, it provides the ability for a 909 // idea already, but with Alternate-Protocol, it provides the ability for a
911 // single user on a multi-user system to hijack the alternate protocol. 910 // single user on a multi-user system to hijack the alternate protocol.
912 // These systems also enforce ports <1024 as restricted ports. So don't 911 // These systems also enforce ports <1024 as restricted ports. So don't
913 // allow protocol upgrades to user-controllable ports. 912 // allow protocol upgrades to user-controllable ports.
914 const int kUnrestrictedPort = 1024; 913 const int kUnrestrictedPort = 1024;
915 if (!session_->params().enable_user_alternate_protocol_ports && 914 if (!session_->params().enable_user_alternate_protocol_ports &&
916 (alternative_service.port >= kUnrestrictedPort && 915 (alternative_service.port >= kUnrestrictedPort &&
917 origin.port() < kUnrestrictedPort)) 916 origin.port() < kUnrestrictedPort))
918 continue; 917 continue;
919 918
920 if (alternative_service.protocol == NPN_HTTP_2) { 919 if (alternative_service.protocol == kProtoHTTP2) {
921 if (origin.host() != alternative_service.host && 920 if (origin.host() != alternative_service.host &&
922 !session_->params() 921 !session_->params()
923 .enable_http2_alternative_service_with_different_host) { 922 .enable_http2_alternative_service_with_different_host) {
924 continue; 923 continue;
925 } 924 }
926 925
927 // Cache this entry if we don't have a non-broken Alt-Svc yet. 926 // Cache this entry if we don't have a non-broken Alt-Svc yet.
928 if (first_alternative_service.protocol == 927 if (first_alternative_service.protocol == kProtoUnknown)
929 UNINITIALIZED_ALTERNATE_PROTOCOL)
930 first_alternative_service = alternative_service; 928 first_alternative_service = alternative_service;
931 continue; 929 continue;
932 } 930 }
933 931
934 DCHECK_EQ(QUIC, alternative_service.protocol); 932 DCHECK_EQ(kProtoQUIC, alternative_service.protocol);
935 if (origin.host() != alternative_service.host && 933 if (origin.host() != alternative_service.host &&
936 !session_->params() 934 !session_->params()
937 .enable_quic_alternative_service_with_different_host) { 935 .enable_quic_alternative_service_with_different_host) {
938 continue; 936 continue;
939 } 937 }
940 938
941 quic_all_broken = false; 939 quic_all_broken = false;
942 if (!session_->params().enable_quic) 940 if (!session_->params().enable_quic)
943 continue; 941 continue;
944 942
(...skipping 18 matching lines...) Expand all
963 961
964 HostPortPair destination(alternative_service.host_port_pair()); 962 HostPortPair destination(alternative_service.host_port_pair());
965 ignore_result(ApplyHostMappingRules(original_url, &destination)); 963 ignore_result(ApplyHostMappingRules(original_url, &destination));
966 964
967 if (session_->quic_stream_factory()->CanUseExistingSession(server_id, 965 if (session_->quic_stream_factory()->CanUseExistingSession(server_id,
968 destination)) { 966 destination)) {
969 return alternative_service; 967 return alternative_service;
970 } 968 }
971 969
972 // Cache this entry if we don't have a non-broken Alt-Svc yet. 970 // Cache this entry if we don't have a non-broken Alt-Svc yet.
973 if (first_alternative_service.protocol == UNINITIALIZED_ALTERNATE_PROTOCOL) 971 if (first_alternative_service.protocol == kProtoUnknown)
974 first_alternative_service = alternative_service; 972 first_alternative_service = alternative_service;
975 } 973 }
976 974
977 // Ask delegate to mark QUIC as broken for the origin. 975 // Ask delegate to mark QUIC as broken for the origin.
978 if (quic_advertised && quic_all_broken && delegate != nullptr) 976 if (quic_advertised && quic_all_broken && delegate != nullptr)
979 delegate->OnQuicBroken(); 977 delegate->OnQuicBroken();
980 978
981 return first_alternative_service; 979 return first_alternative_service;
982 } 980 }
983 981
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1073 } 1071 }
1074 1072
1075 void HttpStreamFactoryImpl::JobController::StartAlternativeProxyServerJob() { 1073 void HttpStreamFactoryImpl::JobController::StartAlternativeProxyServerJob() {
1076 if (!alternative_job_ || !request_) 1074 if (!alternative_job_ || !request_)
1077 return; 1075 return;
1078 DCHECK(alternative_job_->alternative_proxy_server().is_valid()); 1076 DCHECK(alternative_job_->alternative_proxy_server().is_valid());
1079 alternative_job_->Start(request_->stream_type()); 1077 alternative_job_->Start(request_->stream_type());
1080 } 1078 }
1081 1079
1082 } // namespace net 1080 } // 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