Allow QuicStream constructor to take parameter on static-ness when constructing from PendingStream.
gfe-relnote: API change and version 99 only. Not used in production.
PiperOrigin-RevId: 247323613
Change-Id: I0c57ce900130873cfc6f625e687e2e67c1ef5737
diff --git a/quic/core/http/quic_receive_control_stream.cc b/quic/core/http/quic_receive_control_stream.cc
index 8e0c011..b53d4e9 100644
--- a/quic/core/http/quic_receive_control_stream.cc
+++ b/quic/core/http/quic_receive_control_stream.cc
@@ -112,7 +112,7 @@
}
QuicReceiveControlStream::QuicReceiveControlStream(PendingStream pending)
- : QuicStream(std::move(pending), READ_UNIDIRECTIONAL),
+ : QuicStream(std::move(pending), READ_UNIDIRECTIONAL, /*is_static=*/true),
received_settings_length_(0),
http_decoder_visitor_(new HttpDecoderVisitor(this)) {
decoder_.set_visitor(http_decoder_visitor_.get());
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc
index 1861d17..0dba0af 100644
--- a/quic/core/http/quic_receive_control_stream_test.cc
+++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -100,6 +100,7 @@
::testing::ValuesIn(GetTestParams()));
TEST_P(QuicReceiveControlStreamTest, ResetControlStream) {
+ EXPECT_TRUE(receive_control_stream_->is_static());
QuicRstStreamFrame rst_frame(kInvalidControlFrameId,
receive_control_stream_->id(),
QUIC_STREAM_CANCELLED, 1234);
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 9043ced..bcea7e5 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -163,7 +163,7 @@
QuicSpdyStream::QuicSpdyStream(PendingStream pending,
QuicSpdySession* spdy_session,
StreamType type)
- : QuicStream(std::move(pending), type),
+ : QuicStream(std::move(pending), type, /*is_static=*/false),
spdy_session_(spdy_session),
visitor_(nullptr),
headers_decompressed_(false),
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc
index ad6d324..1be72f8 100644
--- a/quic/core/quic_session_test.cc
+++ b/quic/core/quic_session_test.cc
@@ -111,7 +111,7 @@
: QuicStream(id, session, /*is_static=*/false, type) {}
TestStream(PendingStream pending, StreamType type)
- : QuicStream(std::move(pending), type) {}
+ : QuicStream(std::move(pending), type, /*is_static=*/false) {}
using QuicStream::CloseReadSide;
using QuicStream::CloseWriteSide;
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index bad8a660..0d654d6 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -168,11 +168,11 @@
return true;
}
-QuicStream::QuicStream(PendingStream pending, StreamType type)
+QuicStream::QuicStream(PendingStream pending, StreamType type, bool is_static)
: QuicStream(pending.id_,
pending.session_,
std::move(pending.sequencer_),
- /*is_static=*/false,
+ is_static,
type,
pending.stream_bytes_read_,
pending.fin_received_,
diff --git a/quic/core/quic_stream.h b/quic/core/quic_stream.h
index efe46a6..b6d03de 100644
--- a/quic/core/quic_stream.h
+++ b/quic/core/quic_stream.h
@@ -123,7 +123,7 @@
QuicSession* session,
bool is_static,
StreamType type);
- QuicStream(PendingStream pending, StreamType type);
+ QuicStream(PendingStream pending, StreamType type, bool is_static);
QuicStream(const QuicStream&) = delete;
QuicStream& operator=(const QuicStream&) = delete;
diff --git a/quic/core/quic_stream_test.cc b/quic/core/quic_stream_test.cc
index bfe88f7..9b32012 100644
--- a/quic/core/quic_stream_test.cc
+++ b/quic/core/quic_stream_test.cc
@@ -49,8 +49,8 @@
TestStream(QuicStreamId id, QuicSession* session, StreamType type)
: QuicStream(id, session, /*is_static=*/false, type) {}
- TestStream(PendingStream pending, StreamType type)
- : QuicStream(std::move(pending), type) {}
+ TestStream(PendingStream pending, StreamType type, bool is_static)
+ : QuicStream(std::move(pending), type, is_static) {}
void OnDataAvailable() override {}
@@ -171,6 +171,18 @@
QuicParameterizedStreamTest,
::testing::ValuesIn(AllSupportedVersions()));
+TEST_P(QuicStreamTest, PendingStreamStaticness) {
+ Initialize();
+
+ PendingStream pending(kTestStreamId + 2, session_.get());
+ TestStream stream(std::move(pending), StreamType::BIDIRECTIONAL, false);
+ EXPECT_FALSE(stream.is_static());
+
+ PendingStream pending2(kTestStreamId + 3, session_.get());
+ TestStream stream2(std::move(pending2), StreamType::BIDIRECTIONAL, true);
+ EXPECT_TRUE(stream2.is_static());
+}
+
TEST_P(QuicStreamTest, PendingStreamTooMuchData) {
Initialize();
@@ -228,7 +240,7 @@
QuicStreamFrame frame2(kTestStreamId + 2, true, 3, QuicStringPiece("."));
pending.OnStreamFrame(frame2);
- TestStream stream(std::move(pending), StreamType::READ_UNIDIRECTIONAL);
+ TestStream stream(std::move(pending), StreamType::READ_UNIDIRECTIONAL, false);
EXPECT_EQ(3, stream.num_frames_received());
EXPECT_EQ(3u, stream.stream_bytes_read());
EXPECT_EQ(1, stream.num_duplicate_frames_received());
@@ -247,8 +259,8 @@
QuicStreamFrame frame(kTestStreamId + 2, false, 2, QuicStringPiece("."));
pending.OnStreamFrame(frame);
- auto stream =
- new TestStream(std::move(pending), StreamType::READ_UNIDIRECTIONAL);
+ auto stream = new TestStream(std::move(pending),
+ StreamType::READ_UNIDIRECTIONAL, false);
session_->ActivateStream(QuicWrapUnique(stream));
QuicStreamFrame frame2(kTestStreamId + 2, true, 3, QuicStringPiece("."));
diff --git a/quic/quartc/quartc_stream.cc b/quic/quartc/quartc_stream.cc
index 748491d..5fc1074 100644
--- a/quic/quartc/quartc_stream.cc
+++ b/quic/quartc/quartc_stream.cc
@@ -25,7 +25,7 @@
}
QuartcStream::QuartcStream(PendingStream pending)
- : QuicStream(std::move(pending), BIDIRECTIONAL) {
+ : QuicStream(std::move(pending), BIDIRECTIONAL, /*is_static=*/false) {
sequencer()->set_level_triggered(true);
}