Exclude locally_closed_streams_highest_offset_.size() in QuicSession::ShouldKeepConnectionAlive().

When the connection aliveness is consulted and the only request streams are locally closed streams whose highest byte offset hasn't arrived yet, I don't think we need to wait for those trailing bytes, keeping the connection alive.

gfe-relnote: protected by gfe2_reloadable_flag_quic_aggressive_connection_aliveness.pb.cfg
PiperOrigin-RevId: 262377696
Change-Id: Ie4f57173d8e7a996fd55fa3b24426ec2fc2c70dc
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 87208ee..baa9c85 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -594,9 +594,10 @@
 
 // True if there are open HTTP requests.
 bool QuicSpdySession::ShouldKeepConnectionAlive() const {
-  // Change to check if there are open HTTP requests.
-  // When IETF QUIC control and QPACK streams are used, those will need to be
-  // subtracted from this count to ensure only request streams are counted.
+  if (GetQuicReloadableFlag(quic_aggressive_connection_aliveness)) {
+    QUIC_RELOADABLE_FLAG_COUNT(quic_aggressive_connection_aliveness);
+    return GetNumActiveStreams() > 0;
+  }
   return GetNumOpenDynamicStreams() > 0;
 }
 
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc
index 18a6808..9bb4a99 100644
--- a/quic/core/quic_session_test.cc
+++ b/quic/core/quic_session_test.cc
@@ -237,7 +237,7 @@
   }
 
   bool ShouldKeepConnectionAlive() const override {
-    return GetNumOpenDynamicStreams() > 0;
+    return GetNumActiveStreams() > 0;
   }
 
   QuicConsumedData WritevData(QuicStream* stream,
diff --git a/quic/quartc/quartc_session.cc b/quic/quartc/quartc_session.cc
index f851579..a7a96ee 100644
--- a/quic/quartc/quartc_session.cc
+++ b/quic/quartc/quartc_session.cc
@@ -207,7 +207,7 @@
 
 bool QuartcSession::ShouldKeepConnectionAlive() const {
   // TODO(mellem): Quartc may want different keepalive logic than HTTP.
-  return GetNumOpenDynamicStreams() > 0;
+  return GetNumActiveStreams() > 0;
 }
 
 void QuartcSession::OnConnectionClosed(const QuicConnectionCloseFrame& frame,
diff --git a/quic/quartc/quartc_stream_test.cc b/quic/quartc/quartc_stream_test.cc
index 719cca7..b689e57 100644
--- a/quic/quartc/quartc_stream_test.cc
+++ b/quic/quartc/quartc_stream_test.cc
@@ -93,7 +93,7 @@
   const QuicCryptoStream* GetCryptoStream() const override { return nullptr; }
   QuicCryptoStream* GetMutableCryptoStream() override { return nullptr; }
   bool ShouldKeepConnectionAlive() const override {
-    return GetNumOpenDynamicStreams() > 0;
+    return GetNumActiveStreams() > 0;
   }
 
   // Called by QuicStream when they want to close stream.