Refactor QuicSession to allow subclasses to do their own thing on pending streams.

gfe-relnote: code refactor and v99 only. Not used in production.
PiperOrigin-RevId: 248015584
Change-Id: Ie0ac855070b304bd90a8e68392cff3cf4c5ac52a
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 163b890..1bcf9cc 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -558,9 +558,9 @@
   return GetNumOpenDynamicStreams() > 0;
 }
 
-bool QuicSpdySession::ShouldBufferIncomingStream(QuicStreamId id) const {
-  DCHECK_EQ(QUIC_VERSION_99, connection()->transport_version());
-  return !QuicUtils::IsBidirectionalStreamId(id);
+bool QuicSpdySession::UsesPendingStreams() const {
+  DCHECK(VersionHasControlStreams(connection()->transport_version()));
+  return true;
 }
 
 size_t QuicSpdySession::WriteHeadersOnHeadersStreamImpl(
@@ -724,7 +724,7 @@
   return false;
 }
 
-void QuicSpdySession::ProcessPendingStreamType(PendingStream* pending) {
+void QuicSpdySession::ProcessPendingStream(PendingStream* pending) {
   DCHECK(VersionHasControlStreams(connection()->transport_version()));
   struct iovec iov;
   if (!pending->sequencer()->GetReadableRegion(&iov)) {
diff --git a/quic/core/http/quic_spdy_session.h b/quic/core/http/quic_spdy_session.h
index 46f2b8a..65fa346 100644
--- a/quic/core/http/quic_spdy_session.h
+++ b/quic/core/http/quic_spdy_session.h
@@ -195,12 +195,12 @@
   // Returns true if there are open HTTP requests.
   bool ShouldKeepConnectionAlive() const override;
 
-  // Overridden to buffer incoming streams for version 99.
-  bool ShouldBufferIncomingStream(QuicStreamId id) const override;
+  // Overridden to buffer incoming unidirectional streams for version 99.
+  bool UsesPendingStreams() const override;
 
   // Overridden to Process HTTP/3 stream types. No action will be taken if
   // stream type cannot be read.
-  void ProcessPendingStreamType(PendingStream* pending) override;
+  void ProcessPendingStream(PendingStream* pending) override;
 
   size_t WriteHeadersOnHeadersStreamImpl(
       QuicStreamId id,
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index 1059a94..347a5f7 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -267,8 +267,8 @@
 
   using QuicSession::closed_streams;
   using QuicSession::zombie_streams;
-  using QuicSpdySession::ProcessPendingStreamType;
-  using QuicSpdySession::ShouldBufferIncomingStream;
+  using QuicSpdySession::ProcessPendingStream;
+  using QuicSpdySession::UsesPendingStreams;
 
  private:
   StrictMock<TestCryptoStream> crypto_stream_;
@@ -417,22 +417,11 @@
                          QuicSpdySessionTestServer,
                          ::testing::ValuesIn(AllSupportedVersions()));
 
-TEST_P(QuicSpdySessionTestServer, ShouldBufferIncomingStreamUnidirectional) {
-  if (!IsVersion99()) {
+TEST_P(QuicSpdySessionTestServer, UsesPendingStreams) {
+  if (!VersionHasControlStreams(transport_version())) {
     return;
   }
-  EXPECT_TRUE(session_.ShouldBufferIncomingStream(
-      QuicUtils::GetFirstUnidirectionalStreamId(
-          connection_->transport_version(), Perspective::IS_CLIENT)));
-}
-
-TEST_P(QuicSpdySessionTestServer, ShouldBufferIncomingStreamBidirectional) {
-  if (!IsVersion99()) {
-    return;
-  }
-  EXPECT_FALSE(session_.ShouldBufferIncomingStream(
-      QuicUtils::GetFirstBidirectionalStreamId(connection_->transport_version(),
-                                               Perspective::IS_CLIENT)));
+  EXPECT_TRUE(session_.UsesPendingStreams());
 }
 
 TEST_P(QuicSpdySessionTestServer, PeerAddress) {
@@ -1609,6 +1598,13 @@
                          QuicSpdySessionTestClient,
                          ::testing::ValuesIn(AllSupportedVersions()));
 
+TEST_P(QuicSpdySessionTestClient, UsesPendingStreams) {
+  if (!VersionHasControlStreams(transport_version())) {
+    return;
+  }
+  EXPECT_TRUE(session_.UsesPendingStreams());
+}
+
 TEST_P(QuicSpdySessionTestClient, AvailableStreamsClient) {
   ASSERT_TRUE(session_.GetOrCreateDynamicStream(
                   GetNthServerInitiatedBidirectionalId(2)) != nullptr);
@@ -1889,7 +1885,7 @@
 
   // A stop sending frame will be sent to indicate unknown type.
   EXPECT_CALL(*connection_, SendControlFrame(_));
-  session_.ProcessPendingStreamType(&pending);
+  session_.ProcessPendingStream(&pending);
 }
 
 TEST_P(QuicSpdySessionTestServer, SimplePendingStreamTypeOutOfOrderDelivery) {
@@ -1905,13 +1901,13 @@
                   'a', 'b', 'c'};
   QuicStreamFrame data1(pending.id(), true, 1, QuicStringPiece(&input[1], 3));
   pending.OnStreamFrame(data1);
-  session_.ProcessPendingStreamType(&pending);
+  session_.ProcessPendingStream(&pending);
 
   QuicStreamFrame data2(pending.id(), false, 0, QuicStringPiece(input, 1));
   pending.OnStreamFrame(data2);
 
   EXPECT_CALL(*connection_, SendControlFrame(_));
-  session_.ProcessPendingStreamType(&pending);
+  session_.ProcessPendingStream(&pending);
 }
 
 TEST_P(QuicSpdySessionTestServer,
@@ -1929,17 +1925,17 @@
 
   QuicStreamFrame data1(pending.id(), true, 2, QuicStringPiece(&input[2], 3));
   pending.OnStreamFrame(data1);
-  session_.ProcessPendingStreamType(&pending);
+  session_.ProcessPendingStream(&pending);
 
   QuicStreamFrame data2(pending.id(), false, 0, QuicStringPiece(input, 1));
   pending.OnStreamFrame(data2);
-  session_.ProcessPendingStreamType(&pending);
+  session_.ProcessPendingStream(&pending);
 
   QuicStreamFrame data3(pending.id(), false, 1, QuicStringPiece(&input[1], 1));
   pending.OnStreamFrame(data3);
 
   EXPECT_CALL(*connection_, SendControlFrame(_));
-  session_.ProcessPendingStreamType(&pending);
+  session_.ProcessPendingStream(&pending);
 }
 
 }  // namespace