| Index: net/quic/chromium/quic_chromium_client_session.cc
|
| diff --git a/net/quic/chromium/quic_chromium_client_session.cc b/net/quic/chromium/quic_chromium_client_session.cc
|
| index f58bd05a213a2e794e2b29629d4ccc00ced7a2d2..ba6c37c3c5faa43607fac245ee8ce90dc5dfccfb 100644
|
| --- a/net/quic/chromium/quic_chromium_client_session.cc
|
| +++ b/net/quic/chromium/quic_chromium_client_session.cc
|
| @@ -962,10 +962,6 @@ void QuicChromiumClientSession::OnConnectionClosed(
|
| UMA_HISTOGRAM_COUNTS(
|
| "Net.QuicSession.ConnectionClose.NumOpenStreams.TimedOut",
|
| GetNumOpenOutgoingStreams());
|
| - // Notify the factory the connection timed out with open streams.
|
| - if (GetNumOpenOutgoingStreams() > 0 && stream_factory_) {
|
| - stream_factory_->OnTimeoutWithOpenStreams();
|
| - }
|
| if (IsCryptoHandshakeConfirmed()) {
|
| if (GetNumOpenOutgoingStreams() > 0) {
|
| UMA_HISTOGRAM_BOOLEAN(
|
| @@ -991,7 +987,18 @@ void QuicChromiumClientSession::OnConnectionClosed(
|
| }
|
| }
|
|
|
| - if (!IsCryptoHandshakeConfirmed()) {
|
| + if (IsCryptoHandshakeConfirmed()) {
|
| + // QUIC connections should not timeout while there are open streams,
|
| + // since PING frames are sent to prevent timeouts. If, however, the
|
| + // connection timed out with open streams then QUIC traffic has become
|
| + // blackholed. Alternatively, if too many retransmission timeouts occur
|
| + // then QUIC traffic has become blackholed.
|
| + if (stream_factory_ &&
|
| + (error == QUIC_TOO_MANY_RTOS || (error == QUIC_NETWORK_IDLE_TIMEOUT &&
|
| + GetNumOpenOutgoingStreams() > 0))) {
|
| + stream_factory_->OnBlackholeAfterHandshakeConfirmed(this);
|
| + }
|
| + } else {
|
| if (error == QUIC_PUBLIC_RESET) {
|
| RecordHandshakeFailureReason(HANDSHAKE_FAILURE_PUBLIC_RESET);
|
| } else if (connection()->GetStats().packets_received == 0) {
|
|
|