| 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;
|
|
|