| 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 0f855f0aad2fc91b2dbd342ed323617889c9626e..969aa43386c3df224f63f86576de5f28c8f7ce55 100644
|
| --- a/net/quic/chromium/quic_stream_factory.cc
|
| +++ b/net/quic/chromium/quic_stream_factory.cc
|
| @@ -724,6 +724,7 @@ QuicStreamFactory::QuicStreamFactory(
|
| bool delay_tcp_race,
|
| int max_server_configs_stored_in_properties,
|
| bool close_sessions_on_ip_change,
|
| + bool mark_quic_broken_when_network_blackholes,
|
| int idle_connection_timeout_seconds,
|
| int reduced_ping_timeout_seconds,
|
| int packet_reader_yield_after_duration_milliseconds,
|
| @@ -768,6 +769,8 @@ QuicStreamFactory::QuicStreamFactory(
|
| enable_non_blocking_io_(enable_non_blocking_io),
|
| disable_disk_cache_(disable_disk_cache),
|
| prefer_aes_(prefer_aes),
|
| + mark_quic_broken_when_network_blackholes_(
|
| + mark_quic_broken_when_network_blackholes),
|
| socket_receive_buffer_size_(socket_receive_buffer_size),
|
| delay_tcp_race_(delay_tcp_race),
|
| ping_timeout_(QuicTime::Delta::FromSeconds(kPingTimeoutSecs)),
|
| @@ -1152,8 +1155,8 @@ 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_);
|
| }
|
|
|
| void QuicStreamFactory::OnIdleSession(QuicChromiumClientSession* session) {}
|
| @@ -1192,10 +1195,15 @@ void QuicStreamFactory::OnSessionClosed(QuicChromiumClientSession* session) {
|
| all_sessions_.erase(session);
|
| }
|
|
|
| -void QuicStreamFactory::OnTimeoutWithOpenStreams() {
|
| - // Reduce PING timeout when connection times out with open stream.
|
| - if (ping_timeout_ > reduced_ping_timeout_) {
|
| +void QuicStreamFactory::OnBlackholeAfterHandshakeConfirmed(
|
| + QuicChromiumClientSession* session) {
|
| + // Reduce PING timeout when connection blackholes after the handshake.
|
| + if (ping_timeout_ > reduced_ping_timeout_)
|
| ping_timeout_ = reduced_ping_timeout_;
|
| +
|
| + if (mark_quic_broken_when_network_blackholes_) {
|
| + http_server_properties_->MarkAlternativeServiceBroken(
|
| + AlternativeService(kProtoQUIC, session->server_id().host_port_pair()));
|
| }
|
| }
|
|
|
| @@ -1858,6 +1866,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;
|
|
|