Consolidate OnStreamHeadersPriority and OnPriorityFrame into OnStreamPriority. Both methods performed identical logic when receiving priority via HEADERS or a PRIORITY frame. PiperOrigin-RevId: 1006112686
diff --git a/quiche/quic/core/http/quic_headers_stream_test.cc b/quiche/quic/core/http/quic_headers_stream_test.cc index cd413bc..c3b5bf9 100644 --- a/quiche/quic/core/http/quic_headers_stream_test.cc +++ b/quiche/quic/core/http/quic_headers_stream_test.cc
@@ -410,7 +410,7 @@ headers_frame.set_has_priority(true); headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); frame = framer_->SerializeFrame(headers_frame); - EXPECT_CALL(session_, OnStreamHeadersPriority( + EXPECT_CALL(session_, OnStreamPriority( stream_id, spdy::SpdyStreamPrecedence(0))); } else { SpdyHeadersIR headers_frame(stream_id, headers_.Clone()); @@ -471,7 +471,7 @@ } else { EXPECT_CALL( session_, - OnPriorityFrame(stream_id, spdy::SpdyStreamPrecedence(priority))) + OnStreamPriority(stream_id, spdy::SpdyStreamPrecedence(priority))) .Times(1); } stream_frame_.data_buffer = frame.data(); @@ -520,7 +520,7 @@ headers_frame.set_has_priority(true); headers_frame.set_weight(Spdy3PriorityToHttp2Weight(0)); frame = framer_->SerializeFrame(headers_frame); - EXPECT_CALL(session_, OnStreamHeadersPriority( + EXPECT_CALL(session_, OnStreamPriority( stream_id, spdy::SpdyStreamPrecedence(0))); } else { SpdyHeadersIR headers_frame(stream_id, headers_.Clone());
diff --git a/quiche/quic/core/http/quic_spdy_session.cc b/quiche/quic/core/http/quic_spdy_session.cc index 2ad8837..4f9ed30 100644 --- a/quiche/quic/core/http/quic_spdy_session.cc +++ b/quiche/quic/core/http/quic_spdy_session.cc
@@ -675,14 +675,15 @@ error_code, absl::StrCat("Encoder stream error: ", error_message)); } -void QuicSpdySession::OnStreamHeadersPriority( +void QuicSpdySession::OnStreamPriority( QuicStreamId stream_id, const spdy::SpdyStreamPrecedence& precedence) { QuicSpdyStream* stream = GetOrCreateSpdyDataStream(stream_id); if (!stream) { - // It's quite possible to receive headers after a stream has been reset. + // It's quite possible to receive headers or a PRIORITY frame after a stream + // has been reset. return; } - stream->OnStreamHeadersPriority(precedence); + stream->OnStreamPriority(precedence); } void QuicSpdySession::OnStreamHeaderList(QuicStreamId stream_id, bool fin, @@ -723,17 +724,6 @@ stream->OnStreamHeaderList(fin, frame_len, header_list); } -void QuicSpdySession::OnPriorityFrame( - QuicStreamId stream_id, const spdy::SpdyStreamPrecedence& precedence) { - QuicSpdyStream* stream = GetOrCreateSpdyDataStream(stream_id); - if (!stream) { - // It's quite possible to receive a PRIORITY frame after a stream has been - // reset. - return; - } - stream->OnPriorityFrame(precedence); -} - bool QuicSpdySession::OnPriorityUpdateForRequestStream( QuicStreamId stream_id, HttpStreamPriority priority) { // TODO: Close the connection if the client receives a PRIORITY_UPDATE or @@ -1468,7 +1458,7 @@ "Server must not send priorities."); return; } - OnStreamHeadersPriority(stream_id, precedence); + OnStreamPriority(stream_id, precedence); } else { if (perspective() == Perspective::IS_SERVER) { CloseConnectionWithDetails(QUIC_INVALID_HEADERS_STREAM_DATA, @@ -1491,7 +1481,7 @@ "Server must not send PRIORITY frames."); return; } - OnPriorityFrame(stream_id, precedence); + OnStreamPriority(stream_id, precedence); } void QuicSpdySession::OnHeaderList(const QuicHeaderList& header_list) {
diff --git a/quiche/quic/core/http/quic_spdy_session.h b/quiche/quic/core/http/quic_spdy_session.h index 5e96a4d..a38d976 100644 --- a/quiche/quic/core/http/quic_spdy_session.h +++ b/quiche/quic/core/http/quic_spdy_session.h
@@ -184,10 +184,11 @@ void OnEncoderStreamError(QuicErrorCode error_code, absl::string_view error_message) override; - // Called by |headers_stream_| when headers with a priority have been - // received for a stream. This method will only be called for server streams. - virtual void OnStreamHeadersPriority( - QuicStreamId stream_id, const spdy::SpdyStreamPrecedence& precedence); + // Called by |headers_stream_| when headers with a priority or a PRIORITY + // frame have been received for a stream. This method will only be called for + // server streams. + virtual void OnStreamPriority(QuicStreamId stream_id, + const spdy::SpdyStreamPrecedence& precedence); // Called by |headers_stream_| when headers have been completely received // for a stream. |fin| will be true if the fin flag was set in the headers @@ -196,11 +197,6 @@ size_t frame_len, const QuicHeaderList& header_list); - // Called by |headers_stream_| when a PRIORITY frame has been received for a - // stream. This method will only be called for server streams. - virtual void OnPriorityFrame(QuicStreamId stream_id, - const spdy::SpdyStreamPrecedence& precedence); - // Called when an HTTP/3 PRIORITY_UPDATE frame has been received for a request // stream. Returns false and closes connection if |stream_id| is invalid. bool OnPriorityUpdateForRequestStream(QuicStreamId stream_id,
diff --git a/quiche/quic/core/http/quic_spdy_session_test.cc b/quiche/quic/core/http/quic_spdy_session_test.cc index 63a6633..8958d41 100644 --- a/quiche/quic/core/http/quic_spdy_session_test.cc +++ b/quiche/quic/core/http/quic_spdy_session_test.cc
@@ -2302,12 +2302,12 @@ session_->RetransmitFrames(frames, PTO_RETRANSMISSION); } -TEST_P(QuicSpdySessionTestServer, OnPriorityFrame) { +TEST_P(QuicSpdySessionTestServer, OnStreamPriority) { Initialize(); QuicStreamId stream_id = GetNthClientInitiatedBidirectionalId(0); TestStream* stream = session_->CreateIncomingStream(stream_id); - session_->OnPriorityFrame(stream_id, - spdy::SpdyStreamPrecedence(kV3HighestPriority)); + session_->OnStreamPriority(stream_id, + spdy::SpdyStreamPrecedence(kV3HighestPriority)); EXPECT_EQ((QuicStreamPriority(HttpStreamPriority{ kV3HighestPriority, HttpStreamPriority::kDefaultIncremental})),
diff --git a/quiche/quic/core/http/quic_spdy_stream.cc b/quiche/quic/core/http/quic_spdy_stream.cc index e1c99fa..d57236f 100644 --- a/quiche/quic/core/http/quic_spdy_stream.cc +++ b/quiche/quic/core/http/quic_spdy_stream.cc
@@ -543,7 +543,7 @@ } } -void QuicSpdyStream::OnStreamHeadersPriority( +void QuicSpdyStream::OnStreamPriority( const spdy::SpdyStreamPrecedence& precedence) { QUICHE_DCHECK_EQ(Perspective::IS_SERVER, session()->connection()->perspective()); @@ -753,14 +753,6 @@ metadata_visitor_ = nullptr; } -void QuicSpdyStream::OnPriorityFrame( - const spdy::SpdyStreamPrecedence& precedence) { - QUICHE_DCHECK_EQ(Perspective::IS_SERVER, - session()->connection()->perspective()); - SetPriority(QuicStreamPriority(HttpStreamPriority{ - precedence.spdy3_priority(), HttpStreamPriority::kDefaultIncremental})); -} - void QuicSpdyStream::OnStreamReset(const QuicRstStreamFrame& frame) { if (web_transport_data_ != nullptr) { WebTransportStreamVisitor* webtransport_visitor =
diff --git a/quiche/quic/core/http/quic_spdy_stream.h b/quiche/quic/core/http/quic_spdy_stream.h index b2b7543..02f6f50 100644 --- a/quiche/quic/core/http/quic_spdy_stream.h +++ b/quiche/quic/core/http/quic_spdy_stream.h
@@ -133,10 +133,10 @@ // Override to maybe close the write side after writing. void OnCanWrite() override; - // Called by the session when headers with a priority have been received - // for this stream. This method will only be called for server streams. - virtual void OnStreamHeadersPriority( - const spdy::SpdyStreamPrecedence& precedence); + // Called by the session when headers with a priority or a PRIORITY frame have + // been received for this stream. This method will only be called for server + // streams. + void OnStreamPriority(const spdy::SpdyStreamPrecedence& precedence); // Called by the session when decompressed headers have been completely // delivered to this stream. If |fin| is true, then this stream @@ -144,10 +144,6 @@ virtual void OnStreamHeaderList(bool fin, size_t frame_len, const QuicHeaderList& header_list); - // Called by the session when a PRIORITY frame has been been received for this - // stream. This method will only be called for server streams. - void OnPriorityFrame(const spdy::SpdyStreamPrecedence& precedence); - // Override the base class to not discard response when receiving // QUIC_STREAM_NO_ERROR. void OnStreamReset(const QuicRstStreamFrame& frame) override;
diff --git a/quiche/quic/core/http/quic_spdy_stream_test.cc b/quiche/quic/core/http/quic_spdy_stream_test.cc index 7acbc55..048340e 100644 --- a/quiche/quic/core/http/quic_spdy_stream_test.cc +++ b/quiche/quic/core/http/quic_spdy_stream_test.cc
@@ -572,8 +572,7 @@ TEST_P(QuicSpdyStreamTest, ProcessHeaderList) { Initialize(kShouldProcessData); - stream_->OnStreamHeadersPriority( - spdy::SpdyStreamPrecedence(kV3HighestPriority)); + stream_->OnStreamPriority(spdy::SpdyStreamPrecedence(kV3HighestPriority)); ProcessHeaders(false, headers_); EXPECT_EQ("", stream_->data()); EXPECT_FALSE(stream_->header_list().empty()); @@ -585,8 +584,7 @@ if (!IsIetfQuic()) { QuicHeaderList headers; - stream_->OnStreamHeadersPriority( - spdy::SpdyStreamPrecedence(kV3HighestPriority)); + stream_->OnStreamPriority(spdy::SpdyStreamPrecedence(kV3HighestPriority)); EXPECT_CALL( *session_, @@ -646,8 +644,7 @@ headers.OnHeader(p.first, p.second); total_bytes += p.first.size() + p.second.size(); } - stream_->OnStreamHeadersPriority( - spdy::SpdyStreamPrecedence(kV3HighestPriority)); + stream_->OnStreamPriority(spdy::SpdyStreamPrecedence(kV3HighestPriority)); stream_->OnStreamHeaderList(true, total_bytes, headers); EXPECT_EQ("", stream_->data()); EXPECT_FALSE(stream_->header_list().empty()); @@ -1298,8 +1295,7 @@ total_bytes += p.first.size() + p.second.size(); } - stream_->OnStreamHeadersPriority( - spdy::SpdyStreamPrecedence(kV3HighestPriority)); + stream_->OnStreamPriority(spdy::SpdyStreamPrecedence(kV3HighestPriority)); stream_->OnStreamHeaderList(/*fin=*/false, total_bytes, headers); stream_->ConsumeHeaderList(); @@ -1819,15 +1815,15 @@ /*is_retransmission=*/false)); } -TEST_P(QuicSpdyStreamTest, OnPriorityFrame) { +TEST_P(QuicSpdyStreamTest, OnStreamPriority) { Initialize(kShouldProcessData); - stream_->OnPriorityFrame(spdy::SpdyStreamPrecedence(kV3HighestPriority)); + stream_->OnStreamPriority(spdy::SpdyStreamPrecedence(kV3HighestPriority)); EXPECT_EQ(QuicStreamPriority(HttpStreamPriority{ kV3HighestPriority, HttpStreamPriority::kDefaultIncremental}), stream_->priority()); } -TEST_P(QuicSpdyStreamTest, OnPriorityFrameAfterSendingData) { +TEST_P(QuicSpdyStreamTest, OnStreamPriorityAfterSendingData) { Initialize(kShouldProcessData); testing::InSequence seq; @@ -1836,7 +1832,7 @@ } EXPECT_CALL(*session_, WritevData(_, 4, _, FIN, _, _)); stream_->WriteOrBufferBody("data", true); - stream_->OnPriorityFrame(spdy::SpdyStreamPrecedence(kV3HighestPriority)); + stream_->OnStreamPriority(spdy::SpdyStreamPrecedence(kV3HighestPriority)); EXPECT_EQ(QuicStreamPriority(HttpStreamPriority{ kV3HighestPriority, HttpStreamPriority::kDefaultIncremental}), stream_->priority()); @@ -3474,8 +3470,7 @@ headers_[":protocol"] = "webtransport"; headers_["wt-available-protocols"] = R"("moqt-00", "moqt-01"; a=b)"; - stream_->OnStreamHeadersPriority( - spdy::SpdyStreamPrecedence(kV3HighestPriority)); + stream_->OnStreamPriority(spdy::SpdyStreamPrecedence(kV3HighestPriority)); ProcessHeaders(false, headers_); EXPECT_EQ("", stream_->data()); EXPECT_FALSE(stream_->header_list().empty());
diff --git a/quiche/quic/test_tools/quic_test_utils.h b/quiche/quic/test_tools/quic_test_utils.h index 6ba7cac..3dd42f8 100644 --- a/quiche/quic/test_tools/quic_test_utils.h +++ b/quiche/quic/test_tools/quic_test_utils.h
@@ -996,7 +996,7 @@ (QuicStreamId id, QuicStreamOffset byte_offset), (override)); MOCK_METHOD(void, SendBlocked, (QuicStreamId id, QuicStreamOffset byte_offset), (override)); - MOCK_METHOD(void, OnStreamHeadersPriority, + MOCK_METHOD(void, OnStreamPriority, (QuicStreamId stream_id, const spdy::SpdyStreamPrecedence& precedence), (override)); @@ -1004,9 +1004,6 @@ (QuicStreamId stream_id, bool fin, size_t frame_len, const QuicHeaderList& header_list), (override)); - MOCK_METHOD(void, OnPriorityFrame, - (QuicStreamId id, const spdy::SpdyStreamPrecedence& precedence), - (override)); MOCK_METHOD(void, OnCongestionWindowChange, (QuicTime now), (override)); // Returns a QuicConsumedData that indicates all of |write_length| (and |fin|
diff --git a/quiche/quic/tools/quic_simple_server_stream_test.cc b/quiche/quic/tools/quic_simple_server_stream_test.cc index 531126d..d4187ff 100644 --- a/quiche/quic/tools/quic_simple_server_stream_test.cc +++ b/quiche/quic/tools/quic_simple_server_stream_test.cc
@@ -176,7 +176,7 @@ (QuicStreamId stream_id, bool fin, size_t frame_len, const QuicHeaderList& header_list), (override)); - MOCK_METHOD(void, OnStreamHeadersPriority, + MOCK_METHOD(void, OnStreamPriority, (QuicStreamId stream_id, const spdy::SpdyStreamPrecedence& precedence), (override));