deprecate gfe2_reloadable_flag_quic_split_up_send_rst_2.

PiperOrigin-RevId: 355190869
Change-Id: Ibb80955ad0719724682060689bc2ba71346ddb0d
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 887e0eb..357ac69 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -2437,7 +2437,7 @@
   const QuicPacketCount packets_sent_now =
       client_connection->GetStats().packets_sent;
 
-  if (version_.UsesHttp3() && GetQuicReloadableFlag(quic_split_up_send_rst_2)) {
+  if (version_.UsesHttp3()) {
     // Make sure 2 packets were sent, one for QPACK instructions, another for
     // RESET_STREAM and STOP_SENDING.
     EXPECT_EQ(packets_sent_before + 2, packets_sent_now);
diff --git a/quic/core/http/quic_spdy_server_stream_base.cc b/quic/core/http/quic_spdy_server_stream_base.cc
index d6cbddf..c2e7845 100644
--- a/quic/core/http/quic_spdy_server_stream_base.cc
+++ b/quic/core/http/quic_spdy_server_stream_base.cc
@@ -28,11 +28,7 @@
     QUICHE_DCHECK(fin_sent() || !session()->connection()->connected());
     // Tell the peer to stop sending further data.
     QUIC_DVLOG(1) << " Server: Send QUIC_STREAM_NO_ERROR on stream " << id();
-    if (session()->split_up_send_rst()) {
-      MaybeSendStopSending(QUIC_STREAM_NO_ERROR);
-    } else {
-      Reset(QUIC_STREAM_NO_ERROR);
-    }
+    MaybeSendStopSending(QUIC_STREAM_NO_ERROR);
   }
 
   QuicSpdyStream::CloseWriteSide();
@@ -44,11 +40,7 @@
     QUICHE_DCHECK(fin_sent());
     // Tell the peer to stop sending further data.
     QUIC_DVLOG(1) << " Server: Send QUIC_STREAM_NO_ERROR on stream " << id();
-    if (session()->split_up_send_rst()) {
-      MaybeSendStopSending(QUIC_STREAM_NO_ERROR);
-    } else {
-      Reset(QUIC_STREAM_NO_ERROR);
-    }
+    MaybeSendStopSending(QUIC_STREAM_NO_ERROR);
   }
   QuicSpdyStream::StopReading();
 }
diff --git a/quic/core/http/quic_spdy_server_stream_base_test.cc b/quic/core/http/quic_spdy_server_stream_base_test.cc
index 323e4d2..bada263 100644
--- a/quic/core/http/quic_spdy_server_stream_base_test.cc
+++ b/quic/core/http/quic_spdy_server_stream_base_test.cc
@@ -55,17 +55,12 @@
        SendQuicRstStreamNoErrorWithEarlyResponse) {
   stream_->StopReading();
 
-  if (!session_.split_up_send_rst()) {
-    EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _, _))
+  if (session_.version().UsesHttp3()) {
+    EXPECT_CALL(session_, MaybeSendStopSendingFrame(_, QUIC_STREAM_NO_ERROR))
         .Times(1);
   } else {
-    if (session_.version().UsesHttp3()) {
-      EXPECT_CALL(session_, MaybeSendStopSendingFrame(_, QUIC_STREAM_NO_ERROR))
-          .Times(1);
-    } else {
-      EXPECT_CALL(session_, MaybeSendRstStreamFrame(_, QUIC_STREAM_NO_ERROR, _))
-          .Times(1);
-    }
+    EXPECT_CALL(session_, MaybeSendRstStreamFrame(_, QUIC_STREAM_NO_ERROR, _))
+        .Times(1);
   }
   QuicStreamPeer::SetFinSent(stream_);
   stream_->CloseWriteSide();
@@ -75,27 +70,14 @@
        DoNotSendQuicRstStreamNoErrorWithRstReceived) {
   EXPECT_FALSE(stream_->reading_stopped());
 
-  EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _, _)).Times(0);
-
-  if (!session_.split_up_send_rst()) {
-    EXPECT_CALL(
-        session_,
-        SendRstStream(_,
-                      VersionHasIetfQuicFrames(session_.transport_version())
-                          ? QUIC_STREAM_CANCELLED
-                          : QUIC_RST_ACKNOWLEDGEMENT,
-                      _, _))
-        .Times(1);
-  } else {
-    EXPECT_CALL(session_,
-                MaybeSendRstStreamFrame(
-                    _,
-                    VersionHasIetfQuicFrames(session_.transport_version())
-                        ? QUIC_STREAM_CANCELLED
-                        : QUIC_RST_ACKNOWLEDGEMENT,
-                    _))
-        .Times(1);
-  }
+  EXPECT_CALL(session_,
+              MaybeSendRstStreamFrame(
+                  _,
+                  VersionHasIetfQuicFrames(session_.transport_version())
+                      ? QUIC_STREAM_CANCELLED
+                      : QUIC_RST_ACKNOWLEDGEMENT,
+                  _))
+      .Times(1);
   QuicRstStreamFrame rst_frame(kInvalidControlFrameId, stream_->id(),
                                QUIC_STREAM_CANCELLED, 1234);
   stream_->OnStreamReset(rst_frame);
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index 14f3eab..06f779e 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -520,13 +520,8 @@
     stream_->OnStreamHeadersPriority(
         spdy::SpdyStreamPrecedence(kV3HighestPriority));
 
-    if (!session_->split_up_send_rst()) {
-      EXPECT_CALL(*session_,
-                  SendRstStream(stream_->id(), QUIC_HEADERS_TOO_LARGE, 0, _));
-    } else {
-      EXPECT_CALL(*session_, MaybeSendRstStreamFrame(
-                                 stream_->id(), QUIC_HEADERS_TOO_LARGE, 0));
-    }
+    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
+                                                   QUIC_HEADERS_TOO_LARGE, 0));
     stream_->OnStreamHeaderList(false, 1 << 20, headers);
 
     EXPECT_THAT(stream_->stream_error(), IsStreamError(QUIC_HEADERS_TOO_LARGE));
@@ -541,15 +536,10 @@
 
   QuicStreamFrame frame(stream_->id(), false, 0, headers);
 
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_,
-                SendRstStream(stream_->id(), QUIC_HEADERS_TOO_LARGE, 0, _));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendStopSendingFrame(stream_->id(),
-                                                     QUIC_HEADERS_TOO_LARGE));
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
-                                                   QUIC_HEADERS_TOO_LARGE, 0));
-  }
+  EXPECT_CALL(*session_,
+              MaybeSendStopSendingFrame(stream_->id(), QUIC_HEADERS_TOO_LARGE));
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
+                                                 QUIC_HEADERS_TOO_LARGE, 0));
 
   auto qpack_decoder_stream =
       QuicSpdySessionPeer::GetQpackDecoderSendStream(session_.get());
@@ -685,11 +675,7 @@
                               ConnectionCloseSource source) {
         session_->ReallyOnConnectionClosed(frame, source);
       }));
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_, SendRstStream(_, _, _, _)).Times(2);
-  } else {
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, _, _)).Times(2);
-  }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, _, _)).Times(2);
 
   stream_->OnStreamFrame(frame);
 }
@@ -2116,11 +2102,7 @@
                               ConnectionCloseSource source) {
         session_->ReallyOnConnectionClosed(frame, source);
       }));
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_, SendRstStream(_, _, _, _)).Times(2);
-  } else {
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, _, _)).Times(2);
-  }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, _, _)).Times(2);
   stream_->OnStreamFrame(frame);
 }
 
@@ -2158,13 +2140,8 @@
           session_->ReallyOnConnectionClosed(frame, source);
         }));
   }
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_, SendRstStream(stream_->id(), _, _, _));
-    EXPECT_CALL(*session_, SendRstStream(stream2_->id(), _, _, _));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(), _, _));
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream2_->id(), _, _));
-  }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(), _, _));
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream2_->id(), _, _));
 
   // Invalid headers: Required Insert Count is zero, but the header block
   // contains a dynamic table reference.
@@ -2478,15 +2455,10 @@
                          /* offset = */ 1, _, _, _));
 
   // Reset stream by this endpoint, for example, due to stream cancellation.
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_,
-                SendRstStream(stream_->id(), QUIC_STREAM_CANCELLED, _, _));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendStopSendingFrame(stream_->id(),
-                                                     QUIC_STREAM_CANCELLED));
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
-                                                   QUIC_STREAM_CANCELLED, _));
-  }
+  EXPECT_CALL(*session_,
+              MaybeSendStopSendingFrame(stream_->id(), QUIC_STREAM_CANCELLED));
+  EXPECT_CALL(*session_,
+              MaybeSendRstStreamFrame(stream_->id(), QUIC_STREAM_CANCELLED, _));
   stream_->Reset(QUIC_STREAM_CANCELLED);
 
   // Deliver dynamic table entry to decoder.
@@ -2987,15 +2959,10 @@
   EXPECT_CALL(*session_,
               WritevData(qpack_decoder_stream->id(), /* write_length = */ 1,
                          /* offset = */ 1, _, _, _));
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_,
-                SendRstStream(stream_->id(), QUIC_STREAM_CANCELLED, _, _));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendStopSendingFrame(stream_->id(),
-                                                     QUIC_STREAM_CANCELLED));
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
-                                                   QUIC_STREAM_CANCELLED, _));
-  }
+  EXPECT_CALL(*session_,
+              MaybeSendStopSendingFrame(stream_->id(), QUIC_STREAM_CANCELLED));
+  EXPECT_CALL(*session_,
+              MaybeSendRstStreamFrame(stream_->id(), QUIC_STREAM_CANCELLED, _));
 
   stream_->Reset(QUIC_STREAM_CANCELLED);
 }
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 4f75fc1..1c161e2 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -55,7 +55,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_send_timestamps, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_send_tls_crypto_error_code, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_single_ack_in_packet2, false)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_split_up_send_rst_2, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_start_peer_migration_earlier, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_testonly_default_false, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_testonly_default_true, true)
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 5112cde..8cd0a57 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -847,32 +847,6 @@
   return connection_->SendControlFrame(frame);
 }
 
-void QuicSession::SendRstStream(QuicStreamId id,
-                                QuicRstStreamErrorCode error,
-                                QuicStreamOffset bytes_written,
-                                bool send_rst_only) {
-  QUICHE_DCHECK(!split_up_send_rst());
-  if (!connection()->connected()) {
-    return;
-  }
-
-  QuicConnection::ScopedPacketFlusher flusher(connection());
-  if (!VersionHasIetfQuicFrames(transport_version()) ||
-      QuicUtils::GetStreamType(id, perspective(), IsIncomingStream(id),
-                               version()) != READ_UNIDIRECTIONAL) {
-    control_frame_manager_.WriteOrBufferRstStream(id, error, bytes_written);
-  }
-  if (!send_rst_only) {
-    if (VersionHasIetfQuicFrames(transport_version()) &&
-        QuicUtils::GetStreamType(id, perspective(), IsIncomingStream(id),
-                                 version()) != WRITE_UNIDIRECTIONAL) {
-      control_frame_manager_.WriteOrBufferStopSending(error, id);
-    }
-  }
-
-  connection_->OnStreamReset(id, error);
-}
-
 void QuicSession::ResetStream(QuicStreamId id, QuicRstStreamErrorCode error) {
   QuicStream* stream = GetStream(id);
   if (stream != nullptr && stream->is_static()) {
@@ -887,19 +861,14 @@
     return;
   }
 
-  if (split_up_send_rst()) {
-    QuicConnection::ScopedPacketFlusher flusher(connection());
-    MaybeSendStopSendingFrame(id, error);
-    MaybeSendRstStreamFrame(id, error, 0);
-  } else {
-    SendRstStream(id, error, 0, /*send_rst_only = */ false);
-  }
+  QuicConnection::ScopedPacketFlusher flusher(connection());
+  MaybeSendStopSendingFrame(id, error);
+  MaybeSendRstStreamFrame(id, error, 0);
 }
 
 void QuicSession::MaybeSendRstStreamFrame(QuicStreamId id,
                                           QuicRstStreamErrorCode error,
                                           QuicStreamOffset bytes_written) {
-  QUICHE_DCHECK(split_up_send_rst());
   if (!connection()->connected()) {
     return;
   }
@@ -914,7 +883,6 @@
 
 void QuicSession::MaybeSendStopSendingFrame(QuicStreamId id,
                                             QuicRstStreamErrorCode error) {
-  QUICHE_DCHECK(split_up_send_rst());
   if (!connection()->connected()) {
     return;
   }
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index b995c5d..d9c9b93 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -240,15 +240,6 @@
   bool WriteControlFrame(const QuicFrame& frame,
                          TransmissionType type) override;
 
-  // Called by stream to send RST_STREAM (and STOP_SENDING in IETF QUIC).
-  // if |send_rst_only|, STOP_SENDING will not be sent for IETF QUIC.
-  // TODO(b/170233449): Delete this method when flag quic_split_up_send_rst_2 is
-  // deprecated.
-  virtual void SendRstStream(QuicStreamId id,
-                             QuicRstStreamErrorCode error,
-                             QuicStreamOffset bytes_written,
-                             bool send_rst_only);
-
   // Called to send RST_STREAM (and STOP_SENDING) and close stream. If stream
   // |id| does not exist, just send RST_STREAM (and STOP_SENDING).
   virtual void ResetStream(QuicStreamId id, QuicRstStreamErrorCode error);
@@ -369,8 +360,6 @@
     return connection_->connection_id();
   }
 
-  bool split_up_send_rst() const { return split_up_send_rst_; }
-
   // Returns the number of currently open streams, excluding static streams, and
   // never counting unfinished streams.
   size_t GetNumActiveStreams() const;
@@ -948,9 +937,6 @@
   // creation of new outgoing bidirectional streams.
   bool liveness_testing_in_progress_;
 
-  const bool split_up_send_rst_ =
-      GetQuicReloadableFlag(quic_split_up_send_rst_2);
-
   const bool use_write_or_buffer_data_at_level_ =
       GetQuicReloadableFlag(quic_use_write_or_buffer_data_at_level);
 };
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index 0649428..14ce157 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -507,16 +507,7 @@
   }
 
   stream_error_ = code;
-
-  if (session()->split_up_send_rst()) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_split_up_send_rst_2, 1, 3);
-    MaybeSendRstStream(code);
-  } else {
-    session()->SendRstStream(id(), code, stream_bytes_written(),
-                             /*send_rst_only = */ true);
-    rst_sent_ = true;
-    CloseWriteSide();
-  }
+  MaybeSendRstStream(code);
   return true;
 }
 
@@ -602,24 +593,14 @@
 
 void QuicStream::Reset(QuicRstStreamErrorCode error) {
   stream_error_ = error;
-  if (session()->split_up_send_rst()) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_split_up_send_rst_2, 2, 3);
-    QuicConnection::ScopedPacketFlusher flusher(session()->connection());
-    MaybeSendStopSending(error);
-    MaybeSendRstStream(error);
-  } else {
-    session()->SendRstStream(id(), error, stream_bytes_written(),
-                             /*send_rst_only = */ false);
-    rst_sent_ = true;
-  }
+  QuicConnection::ScopedPacketFlusher flusher(session()->connection());
+  MaybeSendStopSending(error);
+  MaybeSendRstStream(error);
+
   if (read_side_closed_ && write_side_closed_ && !IsWaitingForAcks()) {
     session()->MaybeCloseZombieStream(id_);
     return;
   }
-  if (!session()->split_up_send_rst()) {
-    CloseReadSide();
-    CloseWriteSide();
-  }
 }
 
 void QuicStream::OnUnrecoverableError(QuicErrorCode error,
@@ -872,7 +853,6 @@
 }
 
 void QuicStream::MaybeSendStopSending(QuicRstStreamErrorCode error) {
-  QUICHE_DCHECK(session()->split_up_send_rst());
   if (stop_sending_sent_) {
     return;
   }
@@ -894,7 +874,6 @@
 }
 
 void QuicStream::MaybeSendRstStream(QuicRstStreamErrorCode error) {
-  QUICHE_DCHECK(session()->split_up_send_rst());
   if (rst_sent_) {
     return;
   }
@@ -935,25 +914,15 @@
   QUICHE_DCHECK(read_side_closed_ && write_side_closed_);
 
   if (!fin_sent_ && !rst_sent_) {
-    if (!session()->split_up_send_rst()) {
-      // For flow control accounting, tell the peer how many bytes have been
-      // written on this stream before termination. Done here if needed, using a
-      // RST_STREAM frame.
-      QUIC_DLOG(INFO) << ENDPOINT << "Sending RST_STREAM in OnClose: " << id();
-      session_->SendRstStream(id(), QUIC_RST_ACKNOWLEDGEMENT,
-                              stream_bytes_written(),
-                              /*send_rst_only = */ false);
-      session_->MaybeCloseZombieStream(id_);
-      rst_sent_ = true;
-    } else {
-      QUIC_RELOADABLE_FLAG_COUNT_N(quic_split_up_send_rst_2, 3, 3);
-      QUIC_BUG_IF(session()->connection()->connected() &&
-                  session()->version().UsesHttp3())
-          << "The stream should've already sent RST in response to "
-             "STOP_SENDING";
-      MaybeSendRstStream(QUIC_RST_ACKNOWLEDGEMENT);
-      session_->MaybeCloseZombieStream(id_);
-    }
+    QUIC_BUG_IF(session()->connection()->connected() &&
+                session()->version().UsesHttp3())
+        << "The stream should've already sent RST in response to "
+           "STOP_SENDING";
+    // For flow control accounting, tell the peer how many bytes have been
+    // written on this stream before termination. Done here if needed, using a
+    // RST_STREAM frame.
+    MaybeSendRstStream(QUIC_RST_ACKNOWLEDGEMENT);
+    session_->MaybeCloseZombieStream(id_);
   }
 
   if (!flow_controller_.has_value() ||
diff --git a/quic/core/quic_stream_test.cc b/quic/core/quic_stream_test.cc
index 9cb2ce5..46c4b4a 100644
--- a/quic/core/quic_stream_test.cc
+++ b/quic/core/quic_stream_test.cc
@@ -116,15 +116,10 @@
     // session_ now owns stream_.
     session_->ActivateStream(QuicWrapUnique(stream_));
     // Ignore resetting when session_ is terminated.
-    if (!session_->split_up_send_rst()) {
-      EXPECT_CALL(*session_, SendRstStream(kTestStreamId, _, _, _))
-          .Times(AnyNumber());
-    } else {
-      EXPECT_CALL(*session_, MaybeSendStopSendingFrame(kTestStreamId, _))
-          .Times(AnyNumber());
-      EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _))
-          .Times(AnyNumber());
-    }
+    EXPECT_CALL(*session_, MaybeSendStopSendingFrame(kTestStreamId, _))
+        .Times(AnyNumber());
+    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _))
+        .Times(AnyNumber());
     write_blocked_list_ =
         QuicSessionPeer::GetWriteBlockedStreams(session_.get());
   }
@@ -471,11 +466,7 @@
   EXPECT_FALSE(rst_sent());
 
   // Now close the stream, and expect that we send a RST.
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_, SendRstStream(kTestStreamId, _, _, _));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _));
-  }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _));
   QuicRstStreamFrame rst_frame(kInvalidControlFrameId, stream_->id(),
                                QUIC_STREAM_CANCELLED, 1234);
   stream_->OnStreamReset(rst_frame);
@@ -528,12 +519,7 @@
   EXPECT_FALSE(rst_sent());
 
   // Reset the stream.
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_, SendRstStream(kTestStreamId, _, _, _)).Times(1);
-  } else {
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _))
-        .Times(1);
-  }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(kTestStreamId, _, _)).Times(1);
   stream_->Reset(QUIC_STREAM_CANCELLED);
   EXPECT_FALSE(fin_sent());
   EXPECT_TRUE(rst_sent());
@@ -943,11 +929,7 @@
   EXPECT_TRUE(session_->HasUnackedStreamData());
   EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
   // Cancel stream.
-  if (session_->split_up_send_rst()) {
-    stream_->MaybeSendStopSending(QUIC_STREAM_NO_ERROR);
-  } else {
-    stream_->Reset(QUIC_STREAM_NO_ERROR);
-  }
+  stream_->MaybeSendStopSending(QUIC_STREAM_NO_ERROR);
   // stream still waits for acks as the error code is QUIC_STREAM_NO_ERROR, and
   // data is going to be retransmitted.
   EXPECT_TRUE(stream_->IsWaitingForAcks());
@@ -957,21 +939,13 @@
   EXPECT_CALL(*session_, WriteControlFrame(_, _))
       .Times(AtLeast(1))
       .WillRepeatedly(Invoke(&ClearControlFrameWithTransmissionType));
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_,
-                SendRstStream(stream_->id(), QUIC_STREAM_CANCELLED, 9, _))
-        .WillOnce(InvokeWithoutArgs([this]() {
-          session_->ReallySendRstStream(stream_->id(), QUIC_STREAM_CANCELLED,
-                                        stream_->stream_bytes_written(), false);
-        }));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, _, _))
-        .WillOnce(InvokeWithoutArgs([this]() {
-          session_->ReallyMaybeSendRstStreamFrame(
-              stream_->id(), QUIC_STREAM_CANCELLED,
-              stream_->stream_bytes_written());
-        }));
-  }
+
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, _, _))
+      .WillOnce(InvokeWithoutArgs([this]() {
+        session_->ReallyMaybeSendRstStreamFrame(
+            stream_->id(), QUIC_STREAM_CANCELLED,
+            stream_->stream_bytes_written());
+      }));
 
   stream_->Reset(QUIC_STREAM_CANCELLED);
   EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
@@ -1003,13 +977,8 @@
   QuicRstStreamFrame rst_frame(kInvalidControlFrameId, stream_->id(),
                                QUIC_STREAM_CANCELLED, 9);
 
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_,
-                SendRstStream(stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9, _));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(
-                               stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9));
-  }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
+                                                 QUIC_RST_ACKNOWLEDGEMENT, 9));
   stream_->OnStreamReset(rst_frame);
   EXPECT_EQ(1u, QuicStreamPeer::SendBuffer(stream_).size());
   // Stream stops waiting for acks as it does not finish sending and rst is
@@ -1031,7 +1000,6 @@
   EXPECT_TRUE(session_->HasUnackedStreamData());
 
   // RST_STREAM received.
-  EXPECT_CALL(*session_, SendRstStream(_, _, _, _)).Times(0);
   QuicRstStreamFrame rst_frame(kInvalidControlFrameId, stream_->id(),
                                QUIC_STREAM_CANCELLED, 1234);
   stream_->OnStreamReset(rst_frame);
@@ -1052,13 +1020,8 @@
   stream_->WriteOrBufferData(kData1, false, nullptr);
   EXPECT_TRUE(stream_->IsWaitingForAcks());
   EXPECT_TRUE(session_->HasUnackedStreamData());
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_,
-                SendRstStream(stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9, _));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(
-                               stream_->id(), QUIC_RST_ACKNOWLEDGEMENT, 9));
-  }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(stream_->id(),
+                                                 QUIC_RST_ACKNOWLEDGEMENT, 9));
   QuicConnectionPeer::SetConnectionClose(connection_);
   stream_->OnConnectionClosed(QUIC_INTERNAL_ERROR,
                               ConnectionCloseSource::FROM_SELF);
@@ -1583,19 +1546,13 @@
 
   connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
   // Verify stream gets reset because TTL expires.
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_, SendRstStream(_, QUIC_STREAM_TTL_EXPIRED, _, _))
-        .Times(1);
-  } else {
-    if (session_->version().UsesHttp3()) {
-      EXPECT_CALL(*session_,
-                  MaybeSendStopSendingFrame(_, QUIC_STREAM_TTL_EXPIRED))
-          .Times(1);
-    }
+  if (session_->version().UsesHttp3()) {
     EXPECT_CALL(*session_,
-                MaybeSendRstStreamFrame(_, QUIC_STREAM_TTL_EXPIRED, _))
+                MaybeSendStopSendingFrame(_, QUIC_STREAM_TTL_EXPIRED))
         .Times(1);
   }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, QUIC_STREAM_TTL_EXPIRED, _))
+      .Times(1);
   stream_->OnCanWrite();
 }
 
@@ -1613,19 +1570,13 @@
 
   connection_->AdvanceTime(QuicTime::Delta::FromSeconds(1));
   // Verify stream gets reset because TTL expires.
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_, SendRstStream(_, QUIC_STREAM_TTL_EXPIRED, _, _))
-        .Times(1);
-  } else {
-    if (session_->version().UsesHttp3()) {
-      EXPECT_CALL(*session_,
-                  MaybeSendStopSendingFrame(_, QUIC_STREAM_TTL_EXPIRED))
-          .Times(1);
-    }
+  if (session_->version().UsesHttp3()) {
     EXPECT_CALL(*session_,
-                MaybeSendRstStreamFrame(_, QUIC_STREAM_TTL_EXPIRED, _))
+                MaybeSendStopSendingFrame(_, QUIC_STREAM_TTL_EXPIRED))
         .Times(1);
   }
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(_, QUIC_STREAM_TTL_EXPIRED, _))
+      .Times(1);
   stream_->RetransmitStreamData(0, 100, false, PTO_RETRANSMISSION);
 }
 
diff --git a/quic/qbone/qbone_stream_test.cc b/quic/qbone/qbone_stream_test.cc
index 966a1b7..bcbc5a5 100644
--- a/quic/qbone/qbone_stream_test.cc
+++ b/quic/qbone/qbone_stream_test.cc
@@ -59,10 +59,6 @@
 
   // Called by QuicStream when they want to close stream.
   MOCK_METHOD(void,
-              SendRstStream,
-              (QuicStreamId, QuicRstStreamErrorCode, QuicStreamOffset, bool),
-              (override));
-  MOCK_METHOD(void,
               MaybeSendRstStreamFrame,
               (QuicStreamId stream_id,
                QuicRstStreamErrorCode error,
@@ -245,15 +241,10 @@
   CreateReliableQuicStream();
   std::string packet = "0123456789";
   int iterations = (QboneConstants::kMaxQbonePacketBytes / packet.size()) + 2;
-  if (!session_->split_up_send_rst()) {
-    EXPECT_CALL(*session_,
-                SendRstStream(kStreamId, QUIC_BAD_APPLICATION_PAYLOAD, _, _));
-  } else {
-    EXPECT_CALL(*session_, MaybeSendStopSendingFrame(
-                               kStreamId, QUIC_BAD_APPLICATION_PAYLOAD));
-    EXPECT_CALL(*session_, MaybeSendRstStreamFrame(
-                               kStreamId, QUIC_BAD_APPLICATION_PAYLOAD, _));
-  }
+  EXPECT_CALL(*session_, MaybeSendStopSendingFrame(
+                             kStreamId, QUIC_BAD_APPLICATION_PAYLOAD));
+  EXPECT_CALL(*session_, MaybeSendRstStreamFrame(
+                             kStreamId, QUIC_BAD_APPLICATION_PAYLOAD, _));
   for (int i = 0; i < iterations; ++i) {
     QuicStreamFrame frame(kStreamId, i == (iterations - 1), i * packet.size(),
                           packet);
diff --git a/quic/test_tools/quic_test_utils.h b/quic/test_tools/quic_test_utils.h
index 893b18f..7b4b18f 100644
--- a/quic/test_tools/quic_test_utils.h
+++ b/quic/test_tools/quic_test_utils.h
@@ -879,14 +879,6 @@
               WriteControlFrame,
               (const QuicFrame& frame, TransmissionType type),
               (override));
-
-  MOCK_METHOD(void,
-              SendRstStream,
-              (QuicStreamId stream_id,
-               QuicRstStreamErrorCode error,
-               QuicStreamOffset bytes_written,
-               bool send_rst_only),
-              (override));
   MOCK_METHOD(void,
               MaybeSendRstStreamFrame,
               (QuicStreamId stream_id,
@@ -921,13 +913,6 @@
                                TransmissionType type,
                                absl::optional<EncryptionLevel> level);
 
-  void ReallySendRstStream(QuicStreamId id,
-                           QuicRstStreamErrorCode error,
-                           QuicStreamOffset bytes_written,
-                           bool send_rst_only) {
-    QuicSession::SendRstStream(id, error, bytes_written, send_rst_only);
-  }
-
   void ReallyMaybeSendRstStreamFrame(QuicStreamId id,
                                      QuicRstStreamErrorCode error,
                                      QuicStreamOffset bytes_written) {
@@ -1033,13 +1018,6 @@
                absl::optional<EncryptionLevel> level),
               (override));
   MOCK_METHOD(void,
-              SendRstStream,
-              (QuicStreamId stream_id,
-               QuicRstStreamErrorCode error,
-               QuicStreamOffset bytes_written,
-               bool send_rst_only),
-              (override));
-  MOCK_METHOD(void,
               MaybeSendRstStreamFrame,
               (QuicStreamId stream_id,
                QuicRstStreamErrorCode error,
diff --git a/quic/tools/quic_simple_server_stream_test.cc b/quic/tools/quic_simple_server_stream_test.cc
index cee1753..5806ad7 100644
--- a/quic/tools/quic_simple_server_stream_test.cc
+++ b/quic/tools/quic_simple_server_stream_test.cc
@@ -164,13 +164,6 @@
                const spdy::SpdyStreamPrecedence& precedence),
               (override));
   MOCK_METHOD(void,
-              SendRstStream,
-              (QuicStreamId stream_id,
-               QuicRstStreamErrorCode error,
-               QuicStreamOffset bytes_written,
-               bool send_rst_only),
-              (override));
-  MOCK_METHOD(void,
               MaybeSendRstStreamFrame,
               (QuicStreamId stream_id,
                QuicRstStreamErrorCode error,
@@ -366,17 +359,12 @@
   QuicStreamPeer::SetFinSent(stream_);
   stream_->CloseWriteSide();
 
-  if (!session_.split_up_send_rst()) {
-    EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _, _))
+  if (session_.version().UsesHttp3()) {
+    EXPECT_CALL(session_, MaybeSendStopSendingFrame(_, QUIC_STREAM_NO_ERROR))
         .Times(1);
   } else {
-    if (session_.version().UsesHttp3()) {
-      EXPECT_CALL(session_, MaybeSendStopSendingFrame(_, QUIC_STREAM_NO_ERROR))
-          .Times(1);
-    } else {
-      EXPECT_CALL(session_, MaybeSendRstStreamFrame(_, QUIC_STREAM_NO_ERROR, _))
-          .Times(1);
-    }
+    EXPECT_CALL(session_, MaybeSendRstStreamFrame(_, QUIC_STREAM_NO_ERROR, _))
+        .Times(1);
   }
   stream_->StopReading();
 }
@@ -393,8 +381,6 @@
   }
   EXPECT_CALL(session_, WritevData(_, kErrorLength, _, FIN, _, _));
 
-  EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _, _)).Times(0);
-
   stream_->OnStreamHeaderList(false, kFakeFrameLen, header_list_);
   std::unique_ptr<char[]> buffer;
   QuicByteCount header_length =
@@ -505,16 +491,12 @@
                                     std::move(response_headers_), body);
 
   InSequence s;
-  if (!session_.split_up_send_rst()) {
-    EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_CANCELLED, 0, _));
-  } else {
-    if (session_.version().UsesHttp3()) {
-      EXPECT_CALL(session_, MaybeSendStopSendingFrame(promised_stream->id(),
-                                                      QUIC_STREAM_CANCELLED));
-    }
-    EXPECT_CALL(session_, MaybeSendRstStreamFrame(promised_stream->id(),
-                                                  QUIC_STREAM_CANCELLED, 0));
+  if (session_.version().UsesHttp3()) {
+    EXPECT_CALL(session_, MaybeSendStopSendingFrame(promised_stream->id(),
+                                                    QUIC_STREAM_CANCELLED));
   }
+  EXPECT_CALL(session_, MaybeSendRstStreamFrame(promised_stream->id(),
+                                                QUIC_STREAM_CANCELLED, 0));
 
   promised_stream->DoSendResponse();
 }
@@ -650,8 +632,6 @@
 }
 
 TEST_P(QuicSimpleServerStreamTest, TestSendErrorResponse) {
-  EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _, _)).Times(0);
-
   QuicStreamPeer::SetFinReceived(stream_);
 
   InSequence s;
@@ -668,8 +648,6 @@
 }
 
 TEST_P(QuicSimpleServerStreamTest, InvalidMultipleContentLength) {
-  EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _, _)).Times(0);
-
   spdy::Http2HeaderBlock request_headers;
   // \000 is a way to write the null byte when followed by a literal digit.
   header_list_.OnHeader("content-length", absl::string_view("11\00012", 5));
@@ -686,8 +664,6 @@
 }
 
 TEST_P(QuicSimpleServerStreamTest, InvalidLeadingNullContentLength) {
-  EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _, _)).Times(0);
-
   spdy::Http2HeaderBlock request_headers;
   // \000 is a way to write the null byte when followed by a literal digit.
   header_list_.OnHeader("content-length", absl::string_view("\00012", 3));
@@ -720,7 +696,6 @@
        DoNotSendQuicRstStreamNoErrorWithRstReceived) {
   EXPECT_FALSE(stream_->reading_stopped());
 
-  EXPECT_CALL(session_, SendRstStream(_, QUIC_STREAM_NO_ERROR, _, _)).Times(0);
   if (VersionUsesHttp3(connection_->transport_version())) {
     // Unidirectional stream type and then a Stream Cancellation instruction is
     // sent on the QPACK decoder stream.  Ignore these writes without any
@@ -731,22 +706,12 @@
         .Times(AnyNumber());
   }
 
-  if (!session_.split_up_send_rst()) {
-    EXPECT_CALL(session_, SendRstStream(_,
-                                        session_.version().UsesHttp3()
-                                            ? QUIC_STREAM_CANCELLED
-                                            : QUIC_RST_ACKNOWLEDGEMENT,
-                                        _, _))
-        .Times(1);
-  } else {
-    EXPECT_CALL(session_,
-                MaybeSendRstStreamFrame(_,
-                                        session_.version().UsesHttp3()
-                                            ? QUIC_STREAM_CANCELLED
-                                            : QUIC_RST_ACKNOWLEDGEMENT,
-                                        _))
-        .Times(1);
-  }
+  EXPECT_CALL(session_, MaybeSendRstStreamFrame(_,
+                                                session_.version().UsesHttp3()
+                                                    ? QUIC_STREAM_CANCELLED
+                                                    : QUIC_RST_ACKNOWLEDGEMENT,
+                                                _))
+      .Times(1);
   QuicRstStreamFrame rst_frame(kInvalidControlFrameId, stream_->id(),
                                QUIC_STREAM_CANCELLED, 1234);
   stream_->OnStreamReset(rst_frame);