gfe-relnote: Move the logic for sending the MAX_PUSH_ID frame from QuicSpdyClientSessionBase to QuicSpdySession along with the other "send initial data" logic. Protected by disabled QUIC v99 flag. PiperOrigin-RevId: 283608387 Change-Id: I3d80b0a4a596b8644912cd78993950d81f396da3
diff --git a/quic/core/http/quic_spdy_client_session_base.cc b/quic/core/http/quic_spdy_client_session_base.cc index 0150be8..7dd2aec 100644 --- a/quic/core/http/quic_spdy_client_session_base.cc +++ b/quic/core/http/quic_spdy_client_session_base.cc
@@ -39,24 +39,6 @@ QuicSpdySession::OnConfigNegotiated(); } -void QuicSpdyClientSessionBase::OnCryptoHandshakeEvent( - CryptoHandshakeEvent event) { - QuicSpdySession::OnCryptoHandshakeEvent(event); - if (event == HANDSHAKE_CONFIRMED && max_allowed_push_id() > 0 && - VersionUsesHttp3(transport_version())) { - SendMaxPushId(); - } -} - -void QuicSpdyClientSessionBase::SetDefaultEncryptionLevel( - quic::EncryptionLevel level) { - QuicSpdySession::SetDefaultEncryptionLevel(level); - if (level == ENCRYPTION_FORWARD_SECURE && max_allowed_push_id() > 0 && - VersionUsesHttp3(transport_version())) { - SendMaxPushId(); - } -} - void QuicSpdyClientSessionBase::OnInitialHeadersComplete( QuicStreamId stream_id, const SpdyHeaderBlock& response_headers) {
diff --git a/quic/core/http/quic_spdy_client_session_base.h b/quic/core/http/quic_spdy_client_session_base.h index b208abd..3ca3499 100644 --- a/quic/core/http/quic_spdy_client_session_base.h +++ b/quic/core/http/quic_spdy_client_session_base.h
@@ -50,10 +50,6 @@ void OnConfigNegotiated() override; - // Override base class to set FEC policy before any data is sent by client. - void OnCryptoHandshakeEvent(CryptoHandshakeEvent event) override; - void SetDefaultEncryptionLevel(quic::EncryptionLevel level) override; - // Called by |headers_stream_| when push promise headers have been // completely received. void OnPromiseHeaderList(QuicStreamId stream_id,
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc index 6bf2f1d..a34d580 100644 --- a/quic/core/http/quic_spdy_session.cc +++ b/quic/core/http/quic_spdy_session.cc
@@ -349,7 +349,8 @@ destruction_indicator_(123456789), debug_visitor_(nullptr), http3_goaway_received_(false), - http3_goaway_sent_(false) { + http3_goaway_sent_(false), + http3_max_push_id_sent_(false) { h2_deframer_.set_visitor(spdy_framer_visitor_.get()); h2_deframer_.set_debug_visitor(spdy_framer_visitor_.get()); spdy_framer_.set_debug_visitor(spdy_framer_visitor_.get()); @@ -598,6 +599,10 @@ send_control_stream_->MaybeSendSettingsFrame(); qpack_decoder_send_stream_->MaybeSendStreamType(); qpack_encoder_send_stream_->MaybeSendStreamType(); + if (perspective() == Perspective::IS_CLIENT && !http3_max_push_id_sent_) { + SendMaxPushId(); + http3_max_push_id_sent_ = true; + } } QpackEncoder* QuicSpdySession::qpack_encoder() {
diff --git a/quic/core/http/quic_spdy_session.h b/quic/core/http/quic_spdy_session.h index 50ec602..575d664 100644 --- a/quic/core/http/quic_spdy_session.h +++ b/quic/core/http/quic_spdy_session.h
@@ -440,6 +440,9 @@ bool http3_goaway_received_; // If the endpoint has sent HTTP/3 GOAWAY frame. bool http3_goaway_sent_; + + // If the sendpoint has sent the initial HTTP/3 MAX_PUSH_ID frame. + bool http3_max_push_id_sent_; }; } // namespace quic
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc index 8def703..42e9954 100644 --- a/quic/core/http/quic_spdy_stream_test.cc +++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -232,10 +232,15 @@ auto send_control_stream = QuicSpdySessionPeer::GetSendControlStream(session_.get()); // The control stream will write 3 times, including stream type, settings - // frame, priority for headers. + // frame and max push id, priority for headers. + int num_control_stream_writes = 2; + if (session_->perspective() == Perspective::IS_CLIENT) { + // The control stream also writes the max push id frame. + num_control_stream_writes++; + } EXPECT_CALL(*session_, WritevData(send_control_stream, send_control_stream->id(), _, _, _)) - .Times(2); + .Times(num_control_stream_writes); auto qpack_decoder_stream = QuicSpdySessionPeer::GetQpackDecoderSendStream(session_.get()); EXPECT_CALL(*session_, WritevData(qpack_decoder_stream, @@ -1279,7 +1284,8 @@ .Times(4); auto send_control_stream = QuicSpdySessionPeer::GetSendControlStream(session_.get()); - // The control stream will write priority for headers. + // The control stream will write priority for headers as well as + // the settings/max_push_id. EXPECT_CALL(*session_, WritevData(send_control_stream, send_control_stream->id(), _, _, _)) .Times(1);