Use QuicStream::transport_version() in QuicSpdySession.

Use QuicStream::transport_version() throughout QuicSpdySession instead of
session->connection()->transport_version() or
spdy_session->connection()->transport_version().

gfe-relnote: n/a, no functional change.
PiperOrigin-RevId: 257309665
Change-Id: Iaad38a38ee1bb3d6c309759f9cc9c58a46f1d1fb
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 6b7c48f..dd71302 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -98,8 +98,7 @@
   bool OnDataFrameEnd() override { return stream_->OnDataFrameEnd(); }
 
   bool OnHeadersFrameStart(Http3FrameLengths frame_length) override {
-    if (!VersionUsesQpack(
-            stream_->session()->connection()->transport_version())) {
+    if (!VersionUsesQpack(stream_->transport_version())) {
       CloseConnectionOnWrongFrame("Headers");
       return false;
     }
@@ -108,8 +107,7 @@
 
   bool OnHeadersFramePayload(QuicStringPiece payload) override {
     DCHECK(!payload.empty());
-    if (!VersionUsesQpack(
-            stream_->session()->connection()->transport_version())) {
+    if (!VersionUsesQpack(stream_->transport_version())) {
       CloseConnectionOnWrongFrame("Headers");
       return false;
     }
@@ -117,8 +115,7 @@
   }
 
   bool OnHeadersFrameEnd() override {
-    if (!VersionUsesQpack(
-            stream_->session()->connection()->transport_version())) {
+    if (!VersionUsesQpack(stream_->transport_version())) {
       CloseConnectionOnWrongFrame("Headers");
       return false;
     }
@@ -177,17 +174,18 @@
       sequencer_offset_(0),
       is_decoder_processing_input_(false),
       ack_listener_(nullptr) {
-  DCHECK(!QuicUtils::IsCryptoStreamId(
-      spdy_session->connection()->transport_version(), id));
+  DCHECK_EQ(session()->connection(), spdy_session->connection());
+  DCHECK_EQ(transport_version(),
+            spdy_session->connection()->transport_version());
+  DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id));
   DCHECK_EQ(0u, sequencer()->NumBytesConsumed());
   // If headers are sent on the headers stream, then do not receive any
   // callbacks from the sequencer until headers are complete.
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (!VersionUsesQpack(transport_version())) {
     sequencer()->SetBlockedUntilFlush();
   }
 
-  if (VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version())) {
+  if (VersionHasDataFrameHeader(transport_version())) {
     sequencer()->set_level_triggered(true);
   }
 }
@@ -213,16 +211,17 @@
       sequencer_offset_(sequencer()->NumBytesConsumed()),
       is_decoder_processing_input_(false),
       ack_listener_(nullptr) {
-  DCHECK(!QuicUtils::IsCryptoStreamId(
-      spdy_session->connection()->transport_version(), id()));
+  DCHECK_EQ(session()->connection(), spdy_session->connection());
+  DCHECK_EQ(transport_version(),
+            spdy_session->connection()->transport_version());
+  DCHECK(!QuicUtils::IsCryptoStreamId(transport_version(), id()));
   // If headers are sent on the headers stream, then do not receive any
   // callbacks from the sequencer until headers are complete.
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (!VersionUsesQpack(transport_version())) {
     sequencer()->SetBlockedUntilFlush();
   }
 
-  if (VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version())) {
+  if (VersionHasDataFrameHeader(transport_version())) {
     sequencer()->set_level_triggered(true);
   }
 }
@@ -235,7 +234,7 @@
     QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
   QuicConnection::ScopedPacketFlusher flusher(spdy_session_->connection());
   // Send stream type for server push stream
-  if (VersionHasStreamType(session()->connection()->transport_version()) &&
+  if (VersionHasStreamType(transport_version()) &&
       type() == WRITE_UNIDIRECTIONAL && send_buffer().stream_offset() == 0) {
     char data[sizeof(kServerPushStream)];
     QuicDataWriter writer(QUIC_ARRAYSIZE(data), data);
@@ -251,8 +250,7 @@
   }
   size_t bytes_written =
       WriteHeadersImpl(std::move(header_block), fin, std::move(ack_listener));
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version()) &&
-      fin) {
+  if (!VersionUsesQpack(transport_version()) && fin) {
     // If HEADERS are sent on the headers stream, then |fin_sent_| needs to be
     // set and write side needs to be closed without actually sending a FIN on
     // this stream.
@@ -264,9 +262,7 @@
 }
 
 void QuicSpdyStream::WriteOrBufferBody(QuicStringPiece data, bool fin) {
-  if (!VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version()) ||
-      data.length() == 0) {
+  if (!VersionHasDataFrameHeader(transport_version()) || data.length() == 0) {
     WriteOrBufferData(data, fin, nullptr);
     return;
   }
@@ -300,7 +296,7 @@
     return 0;
   }
 
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (!VersionUsesQpack(transport_version())) {
     // The header block must contain the final offset for this stream, as the
     // trailers may be processed out of order at the peer.
     const QuicStreamOffset final_offset =
@@ -319,7 +315,7 @@
 
   // If trailers are sent on the headers stream, then |fin_sent_| needs to be
   // set without actually sending a FIN on this stream.
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (!VersionUsesQpack(transport_version())) {
     set_fin_sent(kFin);
 
     // Also, write side of this stream needs to be closed.  However, only do
@@ -344,9 +340,7 @@
 
 QuicConsumedData QuicSpdyStream::WriteBodySlices(QuicMemSliceSpan slices,
                                                  bool fin) {
-  if (!VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version()) ||
-      slices.empty()) {
+  if (!VersionHasDataFrameHeader(transport_version()) || slices.empty()) {
     return WriteMemSlices(slices, fin);
   }
 
@@ -382,13 +376,12 @@
 
 size_t QuicSpdyStream::Readv(const struct iovec* iov, size_t iov_len) {
   DCHECK(FinishedReadingHeaders());
-  if (!VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version())) {
+  if (!VersionHasDataFrameHeader(transport_version())) {
     return sequencer()->Readv(iov, iov_len);
   }
   size_t bytes_read = body_buffer_.ReadBody(iov, iov_len);
 
-  if (VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (VersionUsesQpack(transport_version())) {
     // Maybe all DATA frame bytes have been read and some trailing HEADERS had
     // already been processed, in which case MarkConsumed() should be called.
     MaybeMarkHeadersBytesConsumed();
@@ -399,8 +392,7 @@
 
 int QuicSpdyStream::GetReadableRegions(iovec* iov, size_t iov_len) const {
   DCHECK(FinishedReadingHeaders());
-  if (!VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version())) {
+  if (!VersionHasDataFrameHeader(transport_version())) {
     return sequencer()->GetReadableRegions(iov, iov_len);
   }
   return body_buffer_.PeekBody(iov, iov_len);
@@ -408,14 +400,13 @@
 
 void QuicSpdyStream::MarkConsumed(size_t num_bytes) {
   DCHECK(FinishedReadingHeaders());
-  if (!VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version())) {
+  if (!VersionHasDataFrameHeader(transport_version())) {
     sequencer()->MarkConsumed(num_bytes);
     return;
   }
   body_buffer_.MarkBodyConsumed(num_bytes);
 
-  if (VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (VersionUsesQpack(transport_version())) {
     // Maybe all DATA frame bytes have been read and some trailing HEADERS had
     // already been processed, in which case MarkConsumed() should be called.
     MaybeMarkHeadersBytesConsumed();
@@ -430,8 +421,7 @@
 }
 
 bool QuicSpdyStream::HasBytesToRead() const {
-  if (!VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version())) {
+  if (!VersionHasDataFrameHeader(transport_version())) {
     return sequencer()->HasBytesToRead();
   }
   return body_buffer_.HasBytesToRead();
@@ -442,8 +432,7 @@
 }
 
 uint64_t QuicSpdyStream::total_body_bytes_read() const {
-  if (VersionHasDataFrameHeader(
-          spdy_session_->connection()->transport_version())) {
+  if (VersionHasDataFrameHeader(transport_version())) {
     return body_buffer_.total_body_bytes_received();
   }
   return sequencer()->NumBytesConsumed();
@@ -456,7 +445,7 @@
     return;
   }
 
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (!VersionUsesQpack(transport_version())) {
     sequencer()->SetUnblocked();
     return;
   }
@@ -520,7 +509,7 @@
 }
 
 void QuicSpdyStream::OnHeadersTooLarge() {
-  if (VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (VersionUsesQpack(transport_version())) {
     // TODO(124216424): Use HTTP_EXCESSIVE_LOAD error code.
     std::string error_message =
         QuicStrCat("Too large headers received on stream ", id());
@@ -539,7 +528,7 @@
   headers_decompressed_ = true;
   header_list_ = header_list;
 
-  if (VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (VersionUsesQpack(transport_version())) {
     if (fin) {
       OnStreamFrame(
           QuicStreamFrame(id(), /* fin = */ true,
@@ -580,8 +569,7 @@
     const QuicHeaderList& header_list) {
   // TODO(b/134706391): remove |fin| argument.
   DCHECK(!trailers_decompressed_);
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version()) &&
-      fin_received()) {
+  if (!VersionUsesQpack(transport_version()) && fin_received()) {
     QUIC_DLOG(INFO) << "Received Trailers after FIN, on stream: " << id();
     session()->connection()->CloseConnection(
         QUIC_INVALID_HEADERS_STREAM_DATA, "Trailers after fin",
@@ -589,8 +577,7 @@
     return;
   }
 
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version()) &&
-      !fin) {
+  if (!VersionUsesQpack(transport_version()) && !fin) {
     QUIC_DLOG(INFO) << "Trailers must have FIN set, on stream: " << id();
     session()->connection()->CloseConnection(
         QUIC_INVALID_HEADERS_STREAM_DATA, "Fin missing from trailers",
@@ -599,8 +586,7 @@
   }
 
   size_t final_byte_offset = 0;
-  const bool expect_final_byte_offset =
-      !VersionUsesQpack(spdy_session_->connection()->transport_version());
+  const bool expect_final_byte_offset = !VersionUsesQpack(transport_version());
   if (!SpdyUtils::CopyAndValidateTrailers(header_list, expect_final_byte_offset,
                                           &final_byte_offset,
                                           &received_trailers_)) {
@@ -638,13 +624,12 @@
 }
 
 void QuicSpdyStream::OnDataAvailable() {
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (!VersionUsesQpack(transport_version())) {
     // Sequencer must be blocked until headers are consumed.
     DCHECK(FinishedReadingHeaders());
   }
 
-  if (!VersionHasDataFrameHeader(
-          session()->connection()->transport_version())) {
+  if (!VersionHasDataFrameHeader(transport_version())) {
     OnBodyAvailable();
     return;
   }
@@ -757,8 +742,7 @@
 }
 
 bool QuicSpdyStream::OnDataFrameStart(Http3FrameLengths frame_lengths) {
-  DCHECK(
-      VersionHasDataFrameHeader(session()->connection()->transport_version()));
+  DCHECK(VersionHasDataFrameHeader(transport_version()));
   if (!headers_decompressed_ || trailers_decompressed_) {
     // TODO(b/124216424): Change error code to HTTP_UNEXPECTED_FRAME.
     session()->connection()->CloseConnection(
@@ -772,16 +756,14 @@
 }
 
 bool QuicSpdyStream::OnDataFramePayload(QuicStringPiece payload) {
-  DCHECK(
-      VersionHasDataFrameHeader(session()->connection()->transport_version()));
+  DCHECK(VersionHasDataFrameHeader(transport_version()));
 
   body_buffer_.OnDataPayload(payload);
   return true;
 }
 
 bool QuicSpdyStream::OnDataFrameEnd() {
-  DCHECK(
-      VersionHasDataFrameHeader(session()->connection()->transport_version()));
+  DCHECK(VersionHasDataFrameHeader(transport_version()));
   QUIC_DVLOG(1) << "Reaches the end of a data frame. Total bytes received are "
                 << body_buffer_.total_body_bytes_received();
   return true;
@@ -823,7 +805,7 @@
 }
 
 void QuicSpdyStream::MaybeMarkHeadersBytesConsumed() {
-  DCHECK(VersionUsesQpack(spdy_session_->connection()->transport_version()));
+  DCHECK(VersionUsesQpack(transport_version()));
 
   if (!body_buffer_.HasBytesToRead() && !reading_stopped() &&
       headers_bytes_to_be_marked_consumed_ > 0) {
@@ -845,7 +827,7 @@
 }
 
 bool QuicSpdyStream::OnHeadersFrameStart(Http3FrameLengths frame_length) {
-  DCHECK(VersionUsesQpack(spdy_session_->connection()->transport_version()));
+  DCHECK(VersionUsesQpack(transport_version()));
   DCHECK(!qpack_decoded_headers_accumulator_);
 
   if (trailers_decompressed_) {
@@ -876,7 +858,7 @@
 }
 
 bool QuicSpdyStream::OnHeadersFramePayload(QuicStringPiece payload) {
-  DCHECK(VersionUsesQpack(spdy_session_->connection()->transport_version()));
+  DCHECK(VersionUsesQpack(transport_version()));
 
   const bool success = qpack_decoded_headers_accumulator_->Decode(payload);
 
@@ -895,7 +877,7 @@
 }
 
 bool QuicSpdyStream::OnHeadersFrameEnd() {
-  DCHECK(VersionUsesQpack(spdy_session_->connection()->transport_version()));
+  DCHECK(VersionUsesQpack(transport_version()));
 
   auto result = qpack_decoded_headers_accumulator_->EndHeaderBlock();
 
@@ -931,7 +913,7 @@
     spdy::SpdyHeaderBlock header_block,
     bool fin,
     QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
-  if (!VersionUsesQpack(spdy_session_->connection()->transport_version())) {
+  if (!VersionUsesQpack(transport_version())) {
     return spdy_session_->WriteHeadersOnHeadersStream(
         id(), std::move(header_block), fin, priority(),
         std::move(ack_listener));