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

Unified Diff: net/quic/chromium/quic_stream_factory.cc

Issue 2789093003: Mark QUIC broken when the network blackholes after the handshake (Closed)
Patch Set: Created 3 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 side-by-side diff with in-line comments
Download patch
Index: net/quic/chromium/quic_stream_factory.cc
diff --git a/net/quic/chromium/quic_stream_factory.cc b/net/quic/chromium/quic_stream_factory.cc
index f7e7fcd9cd46d0b8e4a815f7611b8061c67014a3..63338bc2734aba76af44dae9bafddc94dcd72414 100644
--- a/net/quic/chromium/quic_stream_factory.cc
+++ b/net/quic/chromium/quic_stream_factory.cc
@@ -666,7 +666,10 @@ int QuicStreamFactory::Job::DoConnectComplete(int rv) {
QuicStreamRequest::QuicStreamRequest(
QuicStreamFactory* factory,
HttpServerProperties* http_server_properties)
- : factory_(factory), http_server_properties_(http_server_properties) {}
+ : factory_(factory),
+ http_server_properties_(http_server_properties),
+ mark_quic_broken_when_network_suspected_(
+ factory->mark_quic_broken_when_network_suspected()) {}
QuicStreamRequest::~QuicStreamRequest() {
if (factory_ && !callback_.is_null())
@@ -716,7 +719,9 @@ base::TimeDelta QuicStreamRequest::GetTimeDelayForWaitingJob() const {
std::unique_ptr<QuicHttpStream> QuicStreamRequest::CreateStream() {
if (!session_)
return nullptr;
- return base::MakeUnique<QuicHttpStream>(session_, http_server_properties_);
+ return base::MakeUnique<QuicHttpStream>(
+ session_, http_server_properties_,
+ mark_quic_broken_when_network_suspected_);
}
std::unique_ptr<BidirectionalStreamImpl>
@@ -757,6 +762,7 @@ QuicStreamFactory::QuicStreamFactory(
int max_server_configs_stored_in_properties,
bool close_sessions_on_ip_change,
bool disable_quic_on_timeout_with_open_streams,
+ bool mark_quic_broken_when_network_suspected,
int idle_connection_timeout_seconds,
int reduced_ping_timeout_seconds,
int packet_reader_yield_after_duration_milliseconds,
@@ -803,6 +809,8 @@ QuicStreamFactory::QuicStreamFactory(
prefer_aes_(prefer_aes),
disable_quic_on_timeout_with_open_streams_(
disable_quic_on_timeout_with_open_streams),
+ mark_quic_broken_when_network_suspected_(
+ mark_quic_broken_when_network_suspected),
consecutive_disabled_count_(0),
need_to_evaluate_consecutive_disabled_count_(false),
socket_receive_buffer_size_(socket_receive_buffer_size),
@@ -1191,8 +1199,9 @@ void QuicStreamFactory::OnCertVerifyJobComplete(CertVerifierJob* job, int rv) {
std::unique_ptr<QuicHttpStream> QuicStreamFactory::CreateFromSession(
QuicChromiumClientSession* session) {
- return std::unique_ptr<QuicHttpStream>(
- new QuicHttpStream(session->GetWeakPtr(), http_server_properties_));
+ return base::MakeUnique<QuicHttpStream>(
+ session->GetWeakPtr(), http_server_properties_,
+ mark_quic_broken_when_network_suspected_);
}
bool QuicStreamFactory::IsQuicDisabled() const {
@@ -1951,6 +1960,10 @@ void QuicStreamFactory::ProcessGoingAwaySession(
server_id.host_port_pair());
url::SchemeHostPort server("https", server_id.host_port_pair().host(),
server_id.host_port_pair().port());
+ // Do nothing if QUIC is currently marked as broken.
+ if (http_server_properties_->IsAlternativeServiceBroken(alternative_service))
+ return;
+
if (session->IsCryptoHandshakeConfirmed()) {
http_server_properties_->ConfirmAlternativeService(alternative_service);
ServerNetworkStats network_stats;

Powered by Google App Engine
This is Rietveld 408576698