Close all handles after connection close when session decides to close connection on error.
This change also conditionally override quic connection error
only when the QuicChromiumClientStream contains a valid connection error
code.
Bug: 922739
Change-Id: Ib83d65cd5c03f89842a344fa599d3f874107c5b7
Reviewed-on: https://chromium-review.googlesource.com/c/1415304
Commit-Queue: Ryan Hamilton <rch@chromium.org>
Reviewed-by: Ryan Hamilton <rch@chromium.org>
Cr-Commit-Position: refs/heads/master@{#623555}
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index fa35c0f..3c20ccf5 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -2323,8 +2323,9 @@
if (!callback_.is_null()) {
base::ResetAndReturn(&callback_).Run(net_error);
}
+
CloseAllStreams(net_error);
- CloseAllHandles(net_error);
+
net_log_.AddEvent(NetLogEventType::QUIC_SESSION_CLOSE_ON_ERROR,
NetLog::IntCallback("net_error", net_error));
@@ -2332,6 +2333,7 @@
connection()->CloseConnection(quic_error, "net error", behavior);
DCHECK(!connection()->connected());
+ CloseAllHandles(net_error);
NotifyFactoryOfSessionClosed();
}
diff --git a/net/quic/quic_http_stream.cc b/net/quic/quic_http_stream.cc
index 28c79bf..eee4128 100644
--- a/net/quic/quic_http_stream.cc
+++ b/net/quic/quic_http_stream.cc
@@ -405,7 +405,8 @@
details->connection_info =
ConnectionInfoFromQuicVersion(quic_session()->GetQuicVersion());
quic_session()->PopulateNetErrorDetails(details);
- if (quic_session()->IsCryptoHandshakeConfirmed() && stream_)
+ if (quic_session()->IsCryptoHandshakeConfirmed() && stream_ &&
+ stream_->connection_error() != quic::QUIC_NO_ERROR)
details->quic_connection_error = stream_->connection_error();
}
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 9b8f6c99..ada58429 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -5389,6 +5389,11 @@
EXPECT_EQ(ERR_NETWORK_CHANGED,
stream->ReadResponseHeaders(callback_.callback()));
+ NetErrorDetails error_details;
+ stream->PopulateNetErrorDetails(&error_details);
+ EXPECT_EQ(error_details.quic_connection_error,
+ quic::QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK);
+
EXPECT_TRUE(socket_data.AllReadDataConsumed());
EXPECT_TRUE(socket_data.AllWriteDataConsumed());
}