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

Side by Side Diff: net/quic/chromium/quic_stream_factory.cc

Issue 2789093003: Mark QUIC broken when the network blackholes after the handshake (Closed)
Patch Set: Address comments Created 3 years, 8 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
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/quic/chromium/quic_stream_factory.h" 5 #include "net/quic/chromium/quic_stream_factory.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <tuple> 8 #include <tuple>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 } 659 }
660 660
661 factory_->ActivateSession(key_, session_); 661 factory_->ActivateSession(key_, session_);
662 662
663 return OK; 663 return OK;
664 } 664 }
665 665
666 QuicStreamRequest::QuicStreamRequest( 666 QuicStreamRequest::QuicStreamRequest(
667 QuicStreamFactory* factory, 667 QuicStreamFactory* factory,
668 HttpServerProperties* http_server_properties) 668 HttpServerProperties* http_server_properties)
669 : factory_(factory), http_server_properties_(http_server_properties) {} 669 : factory_(factory),
670 http_server_properties_(http_server_properties),
671 mark_quic_broken_when_network_suspected_(
672 factory->mark_quic_broken_when_network_suspected()) {}
670 673
671 QuicStreamRequest::~QuicStreamRequest() { 674 QuicStreamRequest::~QuicStreamRequest() {
672 if (factory_ && !callback_.is_null()) 675 if (factory_ && !callback_.is_null())
673 factory_->CancelRequest(this); 676 factory_->CancelRequest(this);
674 } 677 }
675 678
676 int QuicStreamRequest::Request(const HostPortPair& destination, 679 int QuicStreamRequest::Request(const HostPortPair& destination,
677 PrivacyMode privacy_mode, 680 PrivacyMode privacy_mode,
678 int cert_verify_flags, 681 int cert_verify_flags,
679 const GURL& url, 682 const GURL& url,
(...skipping 29 matching lines...) Expand all
709 712
710 base::TimeDelta QuicStreamRequest::GetTimeDelayForWaitingJob() const { 713 base::TimeDelta QuicStreamRequest::GetTimeDelayForWaitingJob() const {
711 if (!factory_) 714 if (!factory_)
712 return base::TimeDelta(); 715 return base::TimeDelta();
713 return factory_->GetTimeDelayForWaitingJob(server_id_); 716 return factory_->GetTimeDelayForWaitingJob(server_id_);
714 } 717 }
715 718
716 std::unique_ptr<QuicHttpStream> QuicStreamRequest::CreateStream() { 719 std::unique_ptr<QuicHttpStream> QuicStreamRequest::CreateStream() {
717 if (!session_) 720 if (!session_)
718 return nullptr; 721 return nullptr;
719 return base::MakeUnique<QuicHttpStream>(session_, http_server_properties_); 722 return base::MakeUnique<QuicHttpStream>(
723 session_, http_server_properties_,
724 mark_quic_broken_when_network_suspected_);
720 } 725 }
721 726
722 std::unique_ptr<BidirectionalStreamImpl> 727 std::unique_ptr<BidirectionalStreamImpl>
723 QuicStreamRequest::CreateBidirectionalStreamImpl() { 728 QuicStreamRequest::CreateBidirectionalStreamImpl() {
724 if (!session_) 729 if (!session_)
725 return nullptr; 730 return nullptr;
726 return base::MakeUnique<BidirectionalStreamQuicImpl>(session_); 731 return base::MakeUnique<BidirectionalStreamQuicImpl>(session_);
727 } 732 }
728 733
729 QuicStreamFactory::QuicStreamFactory( 734 QuicStreamFactory::QuicStreamFactory(
(...skipping 20 matching lines...) Expand all
750 float load_server_info_timeout_srtt_multiplier, 755 float load_server_info_timeout_srtt_multiplier,
751 bool enable_connection_racing, 756 bool enable_connection_racing,
752 bool enable_non_blocking_io, 757 bool enable_non_blocking_io,
753 bool disable_disk_cache, 758 bool disable_disk_cache,
754 bool prefer_aes, 759 bool prefer_aes,
755 int socket_receive_buffer_size, 760 int socket_receive_buffer_size,
756 bool delay_tcp_race, 761 bool delay_tcp_race,
757 int max_server_configs_stored_in_properties, 762 int max_server_configs_stored_in_properties,
758 bool close_sessions_on_ip_change, 763 bool close_sessions_on_ip_change,
759 bool disable_quic_on_timeout_with_open_streams, 764 bool disable_quic_on_timeout_with_open_streams,
765 bool mark_quic_broken_when_network_suspected,
760 int idle_connection_timeout_seconds, 766 int idle_connection_timeout_seconds,
761 int reduced_ping_timeout_seconds, 767 int reduced_ping_timeout_seconds,
762 int packet_reader_yield_after_duration_milliseconds, 768 int packet_reader_yield_after_duration_milliseconds,
763 bool migrate_sessions_on_network_change, 769 bool migrate_sessions_on_network_change,
764 bool migrate_sessions_early, 770 bool migrate_sessions_early,
765 bool allow_server_migration, 771 bool allow_server_migration,
766 bool force_hol_blocking, 772 bool force_hol_blocking,
767 bool race_cert_verification, 773 bool race_cert_verification,
768 bool do_not_fragment, 774 bool do_not_fragment,
769 bool estimate_initial_rtt, 775 bool estimate_initial_rtt,
(...skipping 26 matching lines...) Expand all
796 always_require_handshake_confirmation), 802 always_require_handshake_confirmation),
797 disable_connection_pooling_(disable_connection_pooling), 803 disable_connection_pooling_(disable_connection_pooling),
798 load_server_info_timeout_srtt_multiplier_( 804 load_server_info_timeout_srtt_multiplier_(
799 load_server_info_timeout_srtt_multiplier), 805 load_server_info_timeout_srtt_multiplier),
800 enable_connection_racing_(enable_connection_racing), 806 enable_connection_racing_(enable_connection_racing),
801 enable_non_blocking_io_(enable_non_blocking_io), 807 enable_non_blocking_io_(enable_non_blocking_io),
802 disable_disk_cache_(disable_disk_cache), 808 disable_disk_cache_(disable_disk_cache),
803 prefer_aes_(prefer_aes), 809 prefer_aes_(prefer_aes),
804 disable_quic_on_timeout_with_open_streams_( 810 disable_quic_on_timeout_with_open_streams_(
805 disable_quic_on_timeout_with_open_streams), 811 disable_quic_on_timeout_with_open_streams),
812 mark_quic_broken_when_network_suspected_(
813 mark_quic_broken_when_network_suspected),
806 consecutive_disabled_count_(0), 814 consecutive_disabled_count_(0),
807 need_to_evaluate_consecutive_disabled_count_(false), 815 need_to_evaluate_consecutive_disabled_count_(false),
808 socket_receive_buffer_size_(socket_receive_buffer_size), 816 socket_receive_buffer_size_(socket_receive_buffer_size),
809 delay_tcp_race_(delay_tcp_race), 817 delay_tcp_race_(delay_tcp_race),
810 ping_timeout_(QuicTime::Delta::FromSeconds(kPingTimeoutSecs)), 818 ping_timeout_(QuicTime::Delta::FromSeconds(kPingTimeoutSecs)),
811 reduced_ping_timeout_( 819 reduced_ping_timeout_(
812 QuicTime::Delta::FromSeconds(reduced_ping_timeout_seconds)), 820 QuicTime::Delta::FromSeconds(reduced_ping_timeout_seconds)),
813 yield_after_packets_(kQuicYieldAfterPacketsRead), 821 yield_after_packets_(kQuicYieldAfterPacketsRead),
814 yield_after_duration_(QuicTime::Delta::FromMilliseconds( 822 yield_after_duration_(QuicTime::Delta::FromMilliseconds(
815 packet_reader_yield_after_duration_milliseconds)), 823 packet_reader_yield_after_duration_milliseconds)),
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
1184 active_jobs_.erase(server_id); 1192 active_jobs_.erase(server_id);
1185 job_requests_map_.erase(server_id); 1193 job_requests_map_.erase(server_id);
1186 } 1194 }
1187 1195
1188 void QuicStreamFactory::OnCertVerifyJobComplete(CertVerifierJob* job, int rv) { 1196 void QuicStreamFactory::OnCertVerifyJobComplete(CertVerifierJob* job, int rv) {
1189 active_cert_verifier_jobs_.erase(job->server_id()); 1197 active_cert_verifier_jobs_.erase(job->server_id());
1190 } 1198 }
1191 1199
1192 std::unique_ptr<QuicHttpStream> QuicStreamFactory::CreateFromSession( 1200 std::unique_ptr<QuicHttpStream> QuicStreamFactory::CreateFromSession(
1193 QuicChromiumClientSession* session) { 1201 QuicChromiumClientSession* session) {
1194 return std::unique_ptr<QuicHttpStream>( 1202 return base::MakeUnique<QuicHttpStream>(
1195 new QuicHttpStream(session->GetWeakPtr(), http_server_properties_)); 1203 session->GetWeakPtr(), http_server_properties_,
1204 mark_quic_broken_when_network_suspected_);
Jana 2017/04/06 02:29:18 Is there an easy way to test this piece? That the
Ryan Hamilton 2017/04/06 03:43:39 This happens in the QuicNetworkTransaction test wh
1196 } 1205 }
1197 1206
1198 bool QuicStreamFactory::IsQuicDisabled() const { 1207 bool QuicStreamFactory::IsQuicDisabled() const {
1199 return status_ != OPEN; 1208 return status_ != OPEN;
1200 } 1209 }
1201 1210
1202 bool QuicStreamFactory::OnHandshakeConfirmed( 1211 bool QuicStreamFactory::OnHandshakeConfirmed(
1203 QuicChromiumClientSession* session) { 1212 QuicChromiumClientSession* session) {
1204 if (!IsQuicDisabled()) 1213 if (!IsQuicDisabled())
1205 return false; 1214 return false;
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after
1944 const QuicServerId& server_id, 1953 const QuicServerId& server_id,
1945 bool session_was_active) { 1954 bool session_was_active) {
1946 if (!http_server_properties_) 1955 if (!http_server_properties_)
1947 return; 1956 return;
1948 1957
1949 const QuicConnectionStats& stats = session->connection()->GetStats(); 1958 const QuicConnectionStats& stats = session->connection()->GetStats();
1950 const AlternativeService alternative_service(kProtoQUIC, 1959 const AlternativeService alternative_service(kProtoQUIC,
1951 server_id.host_port_pair()); 1960 server_id.host_port_pair());
1952 url::SchemeHostPort server("https", server_id.host_port_pair().host(), 1961 url::SchemeHostPort server("https", server_id.host_port_pair().host(),
1953 server_id.host_port_pair().port()); 1962 server_id.host_port_pair().port());
1963 // Do nothing if QUIC is currently marked as broken.
1964 if (http_server_properties_->IsAlternativeServiceBroken(alternative_service))
1965 return;
Jana 2017/04/06 02:29:18 Did we not need this earlier because we wouldn't e
Ryan Hamilton 2017/04/06 03:43:39 It needs to happen because otherwise we'd un-mark
Jana 2017/04/06 23:55:25 Ah! Of course... Makes sense.
1966
1954 if (session->IsCryptoHandshakeConfirmed()) { 1967 if (session->IsCryptoHandshakeConfirmed()) {
1955 http_server_properties_->ConfirmAlternativeService(alternative_service); 1968 http_server_properties_->ConfirmAlternativeService(alternative_service);
1956 ServerNetworkStats network_stats; 1969 ServerNetworkStats network_stats;
1957 network_stats.srtt = base::TimeDelta::FromMicroseconds(stats.srtt_us); 1970 network_stats.srtt = base::TimeDelta::FromMicroseconds(stats.srtt_us);
1958 network_stats.bandwidth_estimate = stats.estimated_bandwidth; 1971 network_stats.bandwidth_estimate = stats.estimated_bandwidth;
1959 http_server_properties_->SetServerNetworkStats(server, network_stats); 1972 http_server_properties_->SetServerNetworkStats(server, network_stats);
1960 return; 1973 return;
1961 } 1974 }
1962 1975
1963 http_server_properties_->ClearServerNetworkStats(server); 1976 http_server_properties_->ClearServerNetworkStats(server);
(...skipping 23 matching lines...) Expand all
1987 void QuicStreamFactory::OpenFactory() { 2000 void QuicStreamFactory::OpenFactory() {
1988 status_ = OPEN; 2001 status_ = OPEN;
1989 } 2002 }
1990 2003
1991 void QuicStreamFactory::MaybeClearConsecutiveDisabledCount() { 2004 void QuicStreamFactory::MaybeClearConsecutiveDisabledCount() {
1992 if (status_ == OPEN) 2005 if (status_ == OPEN)
1993 consecutive_disabled_count_ = 0; 2006 consecutive_disabled_count_ = 0;
1994 } 2007 }
1995 2008
1996 } // namespace net 2009 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698