Write push promise on request streams.
This CL migrates push promise from headers stream to request streams, and HTTP/3 push promise format is used in v99.
gfe-relnote: v99 only, not used in prod.
PiperOrigin-RevId: 260185991
Change-Id: I676cb4ebb71f72b321934c91d77ce4911f1d7225
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index 5b2ca81..f641dce 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -2149,25 +2149,28 @@
ElementsAre(Pair("custom-key", "custom-value")));
}
-TEST_P(QuicSpdyStreamTest, PushPromiseOnDataStreamShouldClose) {
+TEST_P(QuicSpdyStreamTest, PushPromiseOnDataStream) {
Initialize(kShouldProcessData);
if (!HasFrameHeader()) {
return;
}
+
+ // QPACK encoded single header field "foo: bar".
+ std::string headers = QuicTextUtils::HexDecode("00002a94e703626172");
+
PushPromiseFrame push_promise;
push_promise.push_id = 0x01;
- push_promise.headers = "Headers";
+ push_promise.headers = headers;
std::unique_ptr<char[]> buffer;
HttpEncoder encoder;
uint64_t length =
encoder.SerializePushPromiseFrameWithOnlyPushId(push_promise, &buffer);
- QuicStreamFrame frame(stream_->id(), false, 0, buffer.get(), length);
- // TODO(lassey): Check for HTTP_WRONG_STREAM error code.
- EXPECT_CALL(*connection_, CloseConnection(QUIC_HTTP_DECODER_ERROR, _, _));
- stream_->OnStreamHeadersPriority(
- spdy::SpdyStreamPrecedence(kV3HighestPriority));
- ProcessHeaders(false, headers_);
- stream_->ConsumeHeaderList();
+ std::string data = std::string(buffer.get(), length) + headers;
+ QuicStreamFrame frame(stream_->id(), false, 0, data);
+
+ EXPECT_CALL(*session_,
+ OnPromiseHeaderList(stream_->id(), push_promise.push_id,
+ headers.length(), _));
stream_->OnStreamFrame(frame);
}