Make QuicSession::ResetStream() smarter.

If the stream reseted doesn't exist, we always send out 0 as the bytes written. And if it doesn, we always send what the stream has written. So we don't need the explicit parameter for bytes_written.

No behavior change. not protected.

PiperOrigin-RevId: 319211675
Change-Id: I6c96d94e2d0ec1eca0c86a4740a7384aa15c8529
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 005e463..f333264 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -1944,7 +1944,7 @@
   // Transmit the cancel, and ensure the connection is torn down properly.
   SetPacketLossPercentage(0);
   QuicStreamId stream_id = GetNthClientInitiatedBidirectionalId(0);
-  session->ResetStream(stream_id, QUIC_STREAM_CANCELLED, 0);
+  session->ResetStream(stream_id, QUIC_STREAM_CANCELLED);
 
   // WaitForEvents waits 50ms and returns true if there are outstanding
   // requests.
diff --git a/quic/core/http/quic_client_promised_info_test.cc b/quic/core/http/quic_client_promised_info_test.cc
index 0836f9a..e1b00c8 100644
--- a/quic/core/http/quic_client_promised_info_test.cc
+++ b/quic/core/http/quic_client_promised_info_test.cc
@@ -328,7 +328,7 @@
   EXPECT_CALL(*connection_, SendControlFrame(_));
   EXPECT_CALL(*connection_,
               OnStreamReset(promise_id_, QUIC_STREAM_PEER_GOING_AWAY));
-  session_.ResetStream(promise_id_, QUIC_STREAM_PEER_GOING_AWAY, 0);
+  session_.ResetStream(promise_id_, QUIC_STREAM_PEER_GOING_AWAY);
 
   // Now initiate rendezvous.
   TestPushPromiseDelegate delegate(/*match=*/true);
diff --git a/quic/core/http/quic_spdy_client_session_base.cc b/quic/core/http/quic_spdy_client_session_base.cc
index b433c56..3050989 100644
--- a/quic/core/http/quic_spdy_client_session_base.cc
+++ b/quic/core/http/quic_spdy_client_session_base.cc
@@ -204,7 +204,7 @@
     QuicStreamId id,
     QuicRstStreamErrorCode error_code) {
   DCHECK(QuicUtils::IsServerInitiatedStreamId(transport_version(), id));
-  ResetStream(id, error_code, 0);
+  ResetStream(id, error_code);
   if (!IsOpenStream(id) && !IsClosedStream(id)) {
     MaybeIncreaseLargestPeerStreamId(id);
   }
diff --git a/quic/core/http/quic_spdy_client_session_test.cc b/quic/core/http/quic_spdy_client_session_test.cc
index 535ecf5..ea131c9 100644
--- a/quic/core/http/quic_spdy_client_session_test.cc
+++ b/quic/core/http/quic_spdy_client_session_test.cc
@@ -288,7 +288,7 @@
 
   // Close the stream, but without having received a FIN or a RST_STREAM
   // or MAX_STREAMS (V99) and check that a new one can not be created.
-  session_->ResetStream(stream->id(), QUIC_STREAM_CANCELLED, 0);
+  session_->ResetStream(stream->id(), QUIC_STREAM_CANCELLED);
   EXPECT_EQ(1u, QuicSessionPeer::GetNumOpenDynamicStreams(session_.get()));
 
   stream = session_->CreateOutgoingBidirectionalStream();
@@ -304,7 +304,7 @@
   EXPECT_EQ(nullptr, session_->CreateOutgoingBidirectionalStream());
 
   // Close the stream and receive an RST frame to remove the unfinished stream
-  session_->ResetStream(stream->id(), QUIC_STREAM_CANCELLED, 0);
+  session_->ResetStream(stream->id(), QUIC_STREAM_CANCELLED);
   session_->OnRstStream(QuicRstStreamFrame(kInvalidControlFrameId, stream->id(),
                                            QUIC_RST_ACKNOWLEDGEMENT, 0));
   // Check that a new one can be created.
@@ -360,7 +360,7 @@
       .Times(AtLeast(1))
       .WillRepeatedly(Invoke(&ClearControlFrame));
   EXPECT_CALL(*connection_, OnStreamReset(_, _)).Times(1);
-  session_->ResetStream(stream_id, QUIC_STREAM_PEER_GOING_AWAY, 0);
+  session_->ResetStream(stream_id, QUIC_STREAM_PEER_GOING_AWAY);
 
   // A new stream cannot be created as the reset stream still counts as an open
   // outgoing stream until closed by the server.
@@ -412,7 +412,7 @@
       .Times(AtLeast(1))
       .WillRepeatedly(Invoke(&ClearControlFrame));
   EXPECT_CALL(*connection_, OnStreamReset(_, _)).Times(1);
-  session_->ResetStream(stream_id, QUIC_STREAM_PEER_GOING_AWAY, 0);
+  session_->ResetStream(stream_id, QUIC_STREAM_PEER_GOING_AWAY);
 
   // The stream receives trailers with final byte offset, but the header value
   // is non-numeric and should be treated as malformed.
@@ -862,7 +862,7 @@
   EXPECT_CALL(*connection_, SendControlFrame(_));
   EXPECT_CALL(*connection_,
               OnStreamReset(promised_stream_id_, QUIC_STREAM_PEER_GOING_AWAY));
-  session_->ResetStream(promised_stream_id_, QUIC_STREAM_PEER_GOING_AWAY, 0);
+  session_->ResetStream(promised_stream_id_, QUIC_STREAM_PEER_GOING_AWAY);
   QuicClientPromisedInfo* promised =
       session_->GetPromisedById(promised_stream_id_);
   EXPECT_NE(promised, nullptr);
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index febbe40..20cc430 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -411,7 +411,7 @@
     // handle the data.
     session_.set_writev_consumes_all_data(true);
 
-    session_.ResetStream(id, QUIC_STREAM_CANCELLED, 0);
+    session_.ResetStream(id, QUIC_STREAM_CANCELLED);
     closed_streams_.insert(id);
   }
 
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 9f4de44..97490d6 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -763,9 +763,7 @@
   }
 }
 
-void QuicSession::ResetStream(QuicStreamId id,
-                              QuicRstStreamErrorCode error,
-                              QuicStreamOffset bytes_written) {
+void QuicSession::ResetStream(QuicStreamId id, QuicRstStreamErrorCode error) {
   QuicStream* stream = GetStream(id);
   if (stream != nullptr && stream->is_static()) {
     connection()->CloseConnection(
@@ -779,7 +777,7 @@
     return;
   }
 
-  SendRstStream(id, error, bytes_written);
+  SendRstStream(id, error, 0);
 }
 
 void QuicSession::MaybeSendRstStreamFrame(QuicStreamId id,
@@ -1795,7 +1793,7 @@
   if (!VersionHasIetfQuicFrames(transport_version()) &&
       !stream_id_manager_.CanOpenIncomingStream()) {
     // Refuse to open the stream.
-    ResetStream(stream_id, QUIC_REFUSED_STREAM, 0);
+    ResetStream(stream_id, QUIC_REFUSED_STREAM);
     return nullptr;
   }
 
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index f6f7bb6..c936767 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -211,9 +211,7 @@
 
   // 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,
-                           QuicStreamOffset bytes_written);
+  virtual void ResetStream(QuicStreamId id, QuicRstStreamErrorCode error);
 
   // Called when the session wants to go away and not accept any new streams.
   virtual void SendGoAway(QuicErrorCode error_code, const std::string& reason);
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc
index aa937a6..15eaf50 100644
--- a/quic/core/quic_session_test.cc
+++ b/quic/core/quic_session_test.cc
@@ -467,7 +467,7 @@
           .WillOnce(Invoke(&ClearControlFrame));
       EXPECT_CALL(*connection_, OnStreamReset(id, _));
     }
-    session_.ResetStream(id, QUIC_STREAM_CANCELLED, 0);
+    session_.ResetStream(id, QUIC_STREAM_CANCELLED);
     closed_streams_.insert(id);
   }
 
@@ -2458,7 +2458,7 @@
   // Retransmit stream data causes connection close. Stream has not sent fin
   // yet, so an RST is sent.
   EXPECT_CALL(*stream, OnCanWrite()).WillOnce(Invoke([this, stream]() {
-    session_.ResetStream(stream->id(), QUIC_STREAM_CANCELLED, 0);
+    session_.ResetStream(stream->id(), QUIC_STREAM_CANCELLED);
   }));
   if (VersionHasIetfQuicFrames(transport_version())) {
     // Once for the RST_STREAM, once for the STOP_SENDING
diff --git a/quic/core/quic_stream_test.cc b/quic/core/quic_stream_test.cc
index a991a52..da709d4 100644
--- a/quic/core/quic_stream_test.cc
+++ b/quic/core/quic_stream_test.cc
@@ -130,7 +130,7 @@
       StreamSendingState /*state*/,
       TransmissionType /*type*/,
       quiche::QuicheOptional<EncryptionLevel> /*level*/) {
-    session_->ResetStream(id, QUIC_STREAM_CANCELLED, 0);
+    session_->ResetStream(id, QUIC_STREAM_CANCELLED);
     return QuicConsumedData(1, false);
   }
 
diff --git a/quic/test_tools/quic_test_client.cc b/quic/test_tools/quic_test_client.cc
index 503f585..f876532 100644
--- a/quic/test_tools/quic_test_client.cc
+++ b/quic/test_tools/quic_test_client.cc
@@ -423,9 +423,7 @@
 
   QuicStreamId stream_id = GetNthClientInitiatedBidirectionalStreamId(
       session->transport_version(), 0);
-  QuicStream* stream = session->GetOrCreateStream(stream_id);
-  session->ResetStream(stream_id, QUIC_STREAM_CANCELLED,
-                       stream->stream_bytes_written());
+  session->ResetStream(stream_id, QUIC_STREAM_CANCELLED);
   return ret;
 }