remove num_expected_unidirectional_static_streams_ from QuicSession.

gfe-relnote: no behavior change. not protected.
PiperOrigin-RevId: 309085887
Change-Id: Iddcdb676c27e50e61654b41be754350f201a018a
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 1baa8b8..186e104 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -1749,7 +1749,7 @@
           client_session->connection()->transport_version())
           ? QuicSessionPeer::v99_streamid_manager(client_session)
                     ->max_outgoing_unidirectional_streams() -
-                client_session->num_expected_unidirectional_static_streams()
+                kHttp3StaticUnidirectionalStreamCount
           : QuicSessionPeer::GetStreamIdManager(client_session)
                 ->max_open_outgoing_streams();
   EXPECT_EQ(kServerMaxDynamicStreams,
@@ -1770,7 +1770,7 @@
           server_session->connection()->transport_version())
           ? QuicSessionPeer::v99_streamid_manager(server_session)
                     ->max_outgoing_unidirectional_streams() -
-                server_session->num_expected_unidirectional_static_streams()
+                kHttp3StaticUnidirectionalStreamCount
           : QuicSessionPeer::GetStreamIdManager(server_session)
                 ->max_open_outgoing_streams();
   EXPECT_EQ(kClientMaxDynamicStreams,
diff --git a/quic/core/http/http_constants.h b/quic/core/http/http_constants.h
index fbf3069..17afe1b 100644
--- a/quic/core/http/http_constants.h
+++ b/quic/core/http/http_constants.h
@@ -20,6 +20,9 @@
 const uint64_t kQpackEncoderStream = 0x02;
 const uint64_t kQpackDecoderStream = 0x03;
 
+// This includes control stream, QPACK encoder stream, and QPACK decoder stream.
+const QuicStreamCount kHttp3StaticUnidirectionalStreamCount = 3;
+
 // HTTP/3 and QPACK settings identifiers.
 // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#settings-parameters
 // https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#configuration
diff --git a/quic/core/http/quic_spdy_client_session_test.cc b/quic/core/http/quic_spdy_client_session_test.cc
index ce0cf9f..9ea6128 100644
--- a/quic/core/http/quic_spdy_client_session_test.cc
+++ b/quic/core/http/quic_spdy_client_session_test.cc
@@ -165,8 +165,7 @@
     QuicConfig config = DefaultQuicConfig();
     if (VersionHasIetfQuicFrames(connection_->transport_version())) {
       config.SetMaxUnidirectionalStreamsToSend(
-          server_max_incoming_streams +
-          session_->num_expected_unidirectional_static_streams());
+          server_max_incoming_streams + kHttp3StaticUnidirectionalStreamCount);
       config.SetMaxBidirectionalStreamsToSend(server_max_incoming_streams);
     } else {
       config.SetMaxBidirectionalStreamsToSend(server_max_incoming_streams);
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index c5ed028..d00bf9a 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -376,7 +376,9 @@
                   config,
                   supported_versions,
                   /*num_expected_unidirectional_static_streams = */
-                  VersionUsesHttp3(connection->transport_version()) ? 3 : 0),
+                  VersionUsesHttp3(connection->transport_version())
+                      ? kHttp3StaticUnidirectionalStreamCount
+                      : 0),
       send_control_stream_(nullptr),
       receive_control_stream_(nullptr),
       qpack_encoder_receive_stream_(nullptr),
@@ -448,8 +450,6 @@
     headers_stream_ = headers_stream.get();
     ActivateStream(std::move(headers_stream));
   } else {
-    ConfigureMaxUnidirectionalStreamsToSend(
-        config()->GetMaxUnidirectionalStreamsToSend());
     qpack_encoder_ = std::make_unique<QpackEncoder>(this);
     qpack_decoder_ =
         std::make_unique<QpackDecoder>(qpack_maximum_dynamic_table_capacity_,
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index 7bc452f..55930e1 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -346,8 +346,7 @@
         kInitialSessionFlowControlWindowForTest);
     if (VersionUsesHttp3(transport_version())) {
       QuicConfigPeer::SetReceivedMaxUnidirectionalStreams(
-          session_.config(),
-          session_.num_expected_unidirectional_static_streams());
+          session_.config(), kHttp3StaticUnidirectionalStreamCount);
     }
     QuicConfigPeer::SetReceivedInitialSessionFlowControlWindow(
         session_.config(), kMinimumFlowControlSendWindow);
@@ -1602,7 +1601,8 @@
 
   EXPECT_CALL(
       *connection_,
-      CloseConnection(_, "New unidirectional stream limit is too low.", _));
+      CloseConnection(
+          _, "new unidirectional limit 2 decreases the current limit: 3", _));
   session_.OnConfigNegotiated();
 }
 
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 43932bf..99d1ff4 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -100,8 +100,6 @@
       supported_versions_(supported_versions),
       use_http2_priority_write_scheduler_(false),
       is_configured_(false),
-      num_expected_unidirectional_static_streams_(
-          num_expected_unidirectional_static_streams),
       enable_round_robin_scheduling_(false),
       deprecate_draining_streams_(
           GetQuicReloadableFlag(quic_deprecate_draining_streams)),
@@ -114,6 +112,11 @@
       connection_->version().handshake_protocol == PROTOCOL_TLS1_3) {
     config_.SetStatelessResetTokenToSend(GetStatelessResetToken());
   }
+  if (VersionHasIetfQuicFrames(transport_version())) {
+    config_.SetMaxUnidirectionalStreamsToSend(
+        config_.GetMaxUnidirectionalStreamsToSend() +
+        num_expected_unidirectional_static_streams);
+  }
   if (break_close_loop_) {
     QUIC_RELOADABLE_FLAG_COUNT(quic_break_session_stream_close_loop);
   }
@@ -1144,21 +1147,8 @@
     if (config_.HasReceivedMaxUnidirectionalStreams()) {
       max_streams = config_.ReceivedMaxUnidirectionalStreams();
     }
-    // TODO(b/153726130): remove this check and
-    // num_expected_unidirectional_static_streams_.
-    if (max_streams < num_expected_unidirectional_static_streams_) {
-      QUIC_DLOG(ERROR) << "Received unidirectional stream limit of "
-                       << max_streams << " < "
-                       << num_expected_unidirectional_static_streams_;
-      connection_->CloseConnection(
-          QUIC_HTTP_STREAM_LIMIT_TOO_LOW,
-          "New unidirectional stream limit is too low.",
-          ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
-      return;
-    }
-    if (perspective_ == Perspective::IS_CLIENT &&
-        max_streams <
-            v99_streamid_manager_.max_outgoing_unidirectional_streams()) {
+    if (max_streams <
+        v99_streamid_manager_.max_outgoing_unidirectional_streams()) {
       connection_->CloseConnection(
           QUIC_MAX_STREAMS_ERROR,
           quiche::QuicheStrCat(
@@ -1655,14 +1645,6 @@
     stream_id_manager_.ActivateStream(
         /*is_incoming=*/IsIncomingStream(stream_id));
   }
-
-  if (VersionHasIetfQuicFrames(transport_version()) &&
-      !QuicUtils::IsBidirectionalStreamId(stream_id) && is_static) {
-    DCHECK_LE(num_incoming_static_streams_,
-              num_expected_unidirectional_static_streams_);
-    DCHECK_LE(num_outgoing_static_streams_,
-              num_expected_unidirectional_static_streams_);
-  }
 }
 
 QuicStreamId QuicSession::GetNextOutgoingBidirectionalStreamId() {
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index 1825322..a4bec84 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -459,21 +459,6 @@
 
   bool is_configured() const { return is_configured_; }
 
-  QuicStreamCount num_expected_unidirectional_static_streams() const {
-    return num_expected_unidirectional_static_streams_;
-  }
-
-  // Set the number of streams that the peer is allowed to open.
-  void ConfigureMaxBidirectionalStreamsToSend(QuicStreamCount max_stream) {
-    DCHECK(VersionHasIetfQuicFrames(transport_version()));
-    config_.SetMaxBidirectionalStreamsToSend(max_stream);
-  }
-  void ConfigureMaxUnidirectionalStreamsToSend(QuicStreamCount max_stream) {
-    DCHECK(VersionHasIetfQuicFrames(transport_version()));
-    config_.SetMaxUnidirectionalStreamsToSend(
-        max_stream + num_expected_unidirectional_static_streams_);
-  }
-
   // Called to neuter crypto data of encryption |level|.
   void NeuterCryptoDataOfEncryptionLevel(EncryptionLevel level);
 
@@ -846,9 +831,6 @@
   // configured and is ready for general operation.
   bool is_configured_;
 
-  // The number of expected static streams.
-  QuicStreamCount num_expected_unidirectional_static_streams_;
-
   // If true, enables round robin scheduling.
   bool enable_round_robin_scheduling_;
 
diff --git a/quic/qbone/qbone_session_base.cc b/quic/qbone/qbone_session_base.cc
index 522e136..81aeda8 100644
--- a/quic/qbone/qbone_session_base.cc
+++ b/quic/qbone/qbone_session_base.cc
@@ -44,11 +44,9 @@
   const uint32_t max_streams =
       (std::numeric_limits<uint32_t>::max() / kMaxAvailableStreamsMultiplier) -
       1;
+  this->config()->SetMaxBidirectionalStreamsToSend(max_streams);
   if (VersionHasIetfQuicFrames(transport_version())) {
-    ConfigureMaxBidirectionalStreamsToSend(max_streams);
-    ConfigureMaxUnidirectionalStreamsToSend(max_streams);
-  } else {
-    this->config()->SetMaxBidirectionalStreamsToSend(max_streams);
+    this->config()->SetMaxUnidirectionalStreamsToSend(max_streams);
   }
 }