Merge QpackEncoderStreamSender::Delegate and QpackDecoderStreamSender::Delegate
into a single delegate interface called QpackUnidirectionalStreamSenderDelegate. The new interface is inherited by QpackSendStream.
Before this change, Qpack encoder/decoder stream sender will call the spdy session and the session is responsible for finding the correct stream and write instructions.
Now Qpack encoder/decoder stream sender can access Qpack streams to write instructions directly.
gfe-relnote: v99 only, not used in prod.
PiperOrigin-RevId: 254247942
Change-Id: Iec378d412396d12d51b63843d45630b09b301b69
diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 2ac1043..0aa796a 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -2290,7 +2290,7 @@
->transport_version())) {
// Determine size of compressed headers.
NoopDecoderStreamErrorDelegate decoder_stream_error_delegate;
- NoopEncoderStreamSenderDelegate encoder_stream_sender_delegate;
+ NoopQpackStreamSenderDelegate encoder_stream_sender_delegate;
QpackEncoder qpack_encoder(&decoder_stream_error_delegate,
&encoder_stream_sender_delegate);
auto progressive_encoder =
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index fbe8407..b4849ab 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -366,8 +366,10 @@
}
if (VersionUsesQpack(connection()->transport_version())) {
- qpack_encoder_ = QuicMakeUnique<QpackEncoder>(this, this);
- qpack_decoder_ = QuicMakeUnique<QpackDecoder>(this, this);
+ qpack_encoder_ =
+ QuicMakeUnique<QpackEncoder>(this, &encoder_stream_sender_delegate_);
+ qpack_decoder_ =
+ QuicMakeUnique<QpackDecoder>(this, &decoder_stream_sender_delegate_);
}
headers_stream_ = QuicMakeUnique<QuicHeadersStream>((this));
@@ -406,13 +408,6 @@
QUIC_NOTREACHED();
}
-void QuicSpdySession::WriteEncoderStreamData(QuicStringPiece /*data*/) {
- DCHECK(VersionUsesQpack(connection()->transport_version()));
-
- // TODO(112770235): Send encoder stream data on encoder stream.
- QUIC_NOTREACHED();
-}
-
void QuicSpdySession::OnEncoderStreamError(QuicStringPiece /*error_message*/) {
DCHECK(VersionUsesQpack(connection()->transport_version()));
@@ -420,12 +415,6 @@
QUIC_NOTREACHED();
}
-void QuicSpdySession::WriteDecoderStreamData(QuicStringPiece /*data*/) {
- DCHECK(VersionUsesQpack(connection()->transport_version()));
-
- // TODO(112770235): Send decoder stream data on decoder stream.
-}
-
void QuicSpdySession::OnStreamHeadersPriority(QuicStreamId stream_id,
SpdyPriority priority) {
QuicSpdyStream* stream = GetSpdyDataStream(stream_id);
diff --git a/quic/core/http/quic_spdy_session.h b/quic/core/http/quic_spdy_session.h
index 4277496..1b5927a 100644
--- a/quic/core/http/quic_spdy_session.h
+++ b/quic/core/http/quic_spdy_session.h
@@ -18,6 +18,7 @@
#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder_stream_sender.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_stream_sender.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_utils.h"
#include "net/third_party/quiche/src/quic/core/quic_session.h"
#include "net/third_party/quiche/src/quic/core/quic_versions.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
@@ -63,9 +64,7 @@
class QUIC_EXPORT_PRIVATE QuicSpdySession
: public QuicSession,
public QpackEncoder::DecoderStreamErrorDelegate,
- public QpackEncoderStreamSender::Delegate,
- public QpackDecoder::EncoderStreamErrorDelegate,
- public QpackDecoderStreamSender::Delegate {
+ public QpackDecoder::EncoderStreamErrorDelegate {
public:
// Does not take ownership of |connection| or |visitor|.
QuicSpdySession(QuicConnection* connection,
@@ -82,15 +81,9 @@
// QpackEncoder::DecoderStreamErrorDelegate implementation.
void OnDecoderStreamError(QuicStringPiece error_message) override;
- // QpackEncoderStreamSender::Delegate implemenation.
- void WriteEncoderStreamData(QuicStringPiece data) override;
-
// QpackDecoder::EncoderStreamErrorDelegate implementation.
void OnEncoderStreamError(QuicStringPiece error_message) override;
- // QpackDecoderStreamSender::Delegate implementation.
- void WriteDecoderStreamData(QuicStringPiece data) 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,
@@ -331,6 +324,10 @@
spdy::SpdyFramer spdy_framer_;
http2::Http2DecoderAdapter h2_deframer_;
std::unique_ptr<SpdyFramerVisitor> spdy_framer_visitor_;
+
+ // TODO(renjietang): Replace these two members with actual QPACK send streams.
+ NoopQpackStreamSenderDelegate encoder_stream_sender_delegate_;
+ NoopQpackStreamSenderDelegate decoder_stream_sender_delegate_;
};
} // namespace quic
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index a1e4fab..de13108 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -159,8 +159,9 @@
~QuicSpdyStreamTest() override = default;
std::string EncodeQpackHeaders(QuicStreamId id, SpdyHeaderBlock* header) {
- auto qpack_encoder =
- QuicMakeUnique<QpackEncoder>(session_.get(), session_.get());
+ NoopQpackStreamSenderDelegate encoder_stream_sender_delegate;
+ auto qpack_encoder = QuicMakeUnique<QpackEncoder>(
+ session_.get(), &encoder_stream_sender_delegate);
auto progressive_encoder = qpack_encoder->EncodeHeaderList(id, header);
std::string encoded_headers;
while (progressive_encoder->HasNext()) {
diff --git a/quic/core/qpack/fuzzer/qpack_decoder_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_decoder_fuzzer.cc
index cb66b27..1a2aa4d 100644
--- a/quic/core/qpack/fuzzer/qpack_decoder_fuzzer.cc
+++ b/quic/core/qpack/fuzzer/qpack_decoder_fuzzer.cc
@@ -2,13 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder.h"
-
#include <cstddef>
#include <cstdint>
#include <limits>
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder_test_utils.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_utils.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_fuzzed_data_provider.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
@@ -31,7 +31,7 @@
&provider, 1, std::numeric_limits<uint16_t>::max());
NoopEncoderStreamErrorDelegate encoder_stream_error_delegate;
- NoopDecoderStreamSenderDelegate decoder_stream_sender_delegate;
+ NoopQpackStreamSenderDelegate decoder_stream_sender_delegate;
QpackDecode(&encoder_stream_error_delegate, &decoder_stream_sender_delegate,
&handler, fragment_size_generator,
provider.ConsumeRemainingBytesAsString());
diff --git a/quic/core/qpack/fuzzer/qpack_encoder_stream_sender_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_encoder_stream_sender_fuzzer.cc
index 844d57a..78c4c20 100644
--- a/quic/core/qpack/fuzzer/qpack_encoder_stream_sender_fuzzer.cc
+++ b/quic/core/qpack/fuzzer/qpack_encoder_stream_sender_fuzzer.cc
@@ -2,14 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_stream_sender.h"
-
#include <cstddef>
#include <cstdint>
#include <limits>
#include <string>
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_stream_sender.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_test_utils.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_utils.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_fuzzed_data_provider.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
@@ -21,7 +21,7 @@
// decoded instructions directly compared to input. Figure out how to get gMock
// enabled for cc_fuzz_target target types.
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
- NoopEncoderStreamSenderDelegate delegate;
+ NoopQpackStreamSenderDelegate delegate;
QpackEncoderStreamSender sender(&delegate);
QuicFuzzedDataProvider provider(data, size);
diff --git a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
index 5f752ea..0d74c2e 100644
--- a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
+++ b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
@@ -8,6 +8,7 @@
#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder_test_utils.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_test_utils.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_utils.h"
#include "net/third_party/quiche/src/quic/core/qpack/value_splitting_header_list.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_fuzzed_data_provider.h"
#include "net/third_party/quiche/src/spdy/core/spdy_header_block.h"
@@ -126,7 +127,7 @@
// Encode header list.
NoopDecoderStreamErrorDelegate decoder_stream_error_delegate;
- NoopEncoderStreamSenderDelegate encoder_stream_sender_delegate;
+ NoopQpackStreamSenderDelegate encoder_stream_sender_delegate;
std::string encoded_header_block = QpackEncode(
&decoder_stream_error_delegate, &encoder_stream_sender_delegate,
fragment_size_generator, &header_list);
@@ -134,7 +135,7 @@
// Decode header block.
TestHeadersHandler handler;
NoopEncoderStreamErrorDelegate encoder_stream_error_delegate;
- NoopDecoderStreamSenderDelegate decoder_stream_sender_delegate;
+ NoopQpackStreamSenderDelegate decoder_stream_sender_delegate;
QpackDecode(&encoder_stream_error_delegate, &decoder_stream_sender_delegate,
&handler, fragment_size_generator, encoded_header_block);
diff --git a/quic/core/qpack/offline/qpack_offline_decoder.h b/quic/core/qpack/offline/qpack_offline_decoder.h
index 922fd64..1fc3d4a 100644
--- a/quic/core/qpack/offline/qpack_offline_decoder.h
+++ b/quic/core/qpack/offline/qpack_offline_decoder.h
@@ -9,6 +9,7 @@
#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder_test_utils.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_utils.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
#include "net/third_party/quiche/src/spdy/core/spdy_header_block.h"
@@ -61,7 +62,7 @@
spdy::SpdyHeaderBlock expected_header_list);
bool encoder_stream_error_detected_;
- test::NoopDecoderStreamSenderDelegate decoder_stream_sender_delegate_;
+ NoopQpackStreamSenderDelegate decoder_stream_sender_delegate_;
QpackDecoder decoder_;
std::list<spdy::SpdyHeaderBlock> decoded_header_lists_;
};
diff --git a/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc b/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc
index c3c0b81..1607292 100644
--- a/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc
+++ b/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc
@@ -39,7 +39,7 @@
accumulator_(kTestStreamId, &qpack_decoder_, kMaxHeaderListSize) {}
NoopEncoderStreamErrorDelegate encoder_stream_error_delegate_;
- StrictMock<MockDecoderStreamSenderDelegate> decoder_stream_sender_delegate_;
+ StrictMock<MockQpackStreamSenderDelegate> decoder_stream_sender_delegate_;
QpackDecoder qpack_decoder_;
QpackDecodedHeadersAccumulator accumulator_;
};
@@ -59,7 +59,7 @@
TEST_F(QpackDecodedHeadersAccumulatorTest, EmptyHeaderList) {
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
EXPECT_TRUE(accumulator_.Decode(QuicTextUtils::HexDecode("0000")));
EXPECT_TRUE(accumulator_.EndHeaderBlock());
@@ -83,7 +83,7 @@
TEST_F(QpackDecodedHeadersAccumulatorTest, Success) {
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
std::string encoded_data(QuicTextUtils::HexDecode("000023666f6f03626172"));
EXPECT_TRUE(accumulator_.Decode(encoded_data));
@@ -99,7 +99,7 @@
TEST_F(QpackDecodedHeadersAccumulatorTest, ExceedingLimit) {
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
// Total length of header list exceeds kMaxHeaderListSize.
EXPECT_TRUE(accumulator_.Decode(QuicTextUtils::HexDecode(
diff --git a/quic/core/qpack/qpack_decoder.cc b/quic/core/qpack/qpack_decoder.cc
index 03e15f7..d0e5ad9 100644
--- a/quic/core/qpack/qpack_decoder.cc
+++ b/quic/core/qpack/qpack_decoder.cc
@@ -13,7 +13,7 @@
QpackDecoder::QpackDecoder(
EncoderStreamErrorDelegate* encoder_stream_error_delegate,
- QpackDecoderStreamSender::Delegate* decoder_stream_sender_delegate)
+ QpackStreamSenderDelegate* decoder_stream_sender_delegate)
: encoder_stream_error_delegate_(encoder_stream_error_delegate),
encoder_stream_receiver_(this),
decoder_stream_sender_(decoder_stream_sender_delegate) {
diff --git a/quic/core/qpack/qpack_decoder.h b/quic/core/qpack/qpack_decoder.h
index 7ad4b11..9f8a3e3 100644
--- a/quic/core/qpack/qpack_decoder.h
+++ b/quic/core/qpack/qpack_decoder.h
@@ -34,9 +34,8 @@
virtual void OnEncoderStreamError(QuicStringPiece error_message) = 0;
};
- QpackDecoder(
- EncoderStreamErrorDelegate* encoder_stream_error_delegate,
- QpackDecoderStreamSender::Delegate* decoder_stream_sender_delegate);
+ QpackDecoder(EncoderStreamErrorDelegate* encoder_stream_error_delegate,
+ QpackStreamSenderDelegate* decoder_stream_sender_delegate);
~QpackDecoder() override;
// Set maximum capacity of dynamic table.
diff --git a/quic/core/qpack/qpack_decoder_stream_sender.cc b/quic/core/qpack/qpack_decoder_stream_sender.cc
index 9474d6c..a38c6d5 100644
--- a/quic/core/qpack/qpack_decoder_stream_sender.cc
+++ b/quic/core/qpack/qpack_decoder_stream_sender.cc
@@ -13,7 +13,8 @@
namespace quic {
-QpackDecoderStreamSender::QpackDecoderStreamSender(Delegate* delegate)
+QpackDecoderStreamSender::QpackDecoderStreamSender(
+ QpackStreamSenderDelegate* delegate)
: delegate_(delegate) {
DCHECK(delegate_);
}
@@ -28,7 +29,7 @@
instruction_encoder_.Next(std::numeric_limits<size_t>::max(), &output);
DCHECK(!instruction_encoder_.HasNext());
- delegate_->WriteDecoderStreamData(output);
+ delegate_->WriteStreamData(output);
}
void QpackDecoderStreamSender::SendHeaderAcknowledgement(
@@ -42,7 +43,7 @@
instruction_encoder_.Next(std::numeric_limits<size_t>::max(), &output);
DCHECK(!instruction_encoder_.HasNext());
- delegate_->WriteDecoderStreamData(output);
+ delegate_->WriteStreamData(output);
}
void QpackDecoderStreamSender::SendStreamCancellation(QuicStreamId stream_id) {
@@ -55,7 +56,7 @@
instruction_encoder_.Next(std::numeric_limits<size_t>::max(), &output);
DCHECK(!instruction_encoder_.HasNext());
- delegate_->WriteDecoderStreamData(output);
+ delegate_->WriteStreamData(output);
}
} // namespace quic
diff --git a/quic/core/qpack/qpack_decoder_stream_sender.h b/quic/core/qpack/qpack_decoder_stream_sender.h
index a791173..558996e 100644
--- a/quic/core/qpack/qpack_decoder_stream_sender.h
+++ b/quic/core/qpack/qpack_decoder_stream_sender.h
@@ -8,6 +8,7 @@
#include <cstdint>
#include "net/third_party/quiche/src/quic/core/qpack/qpack_instruction_encoder.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_stream_sender_delegate.h"
#include "net/third_party/quiche/src/quic/core/quic_types.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
@@ -18,19 +19,7 @@
// stream.
class QUIC_EXPORT_PRIVATE QpackDecoderStreamSender {
public:
- // An interface for handling encoded data.
- class Delegate {
- public:
- virtual ~Delegate() = default;
-
- // Encoded |data| is ready to be written on the decoder stream.
- // WriteDecoderStreamData() is called exactly once for each instruction.
- // |data| contains the entire encoded instruction and it is guaranteed to be
- // not empty.
- virtual void WriteDecoderStreamData(QuicStringPiece data) = 0;
- };
-
- explicit QpackDecoderStreamSender(Delegate* delegate);
+ explicit QpackDecoderStreamSender(QpackStreamSenderDelegate* delegate);
QpackDecoderStreamSender() = delete;
QpackDecoderStreamSender(const QpackDecoderStreamSender&) = delete;
QpackDecoderStreamSender& operator=(const QpackDecoderStreamSender&) = delete;
@@ -46,7 +35,7 @@
void SendStreamCancellation(QuicStreamId stream_id);
private:
- Delegate* const delegate_;
+ QpackStreamSenderDelegate* const delegate_;
QpackInstructionEncoder instruction_encoder_;
};
diff --git a/quic/core/qpack/qpack_decoder_stream_sender_test.cc b/quic/core/qpack/qpack_decoder_stream_sender_test.cc
index c7c132e..a50df48 100644
--- a/quic/core/qpack/qpack_decoder_stream_sender_test.cc
+++ b/quic/core/qpack/qpack_decoder_stream_sender_test.cc
@@ -20,61 +20,51 @@
QpackDecoderStreamSenderTest() : stream_(&delegate_) {}
~QpackDecoderStreamSenderTest() override = default;
- StrictMock<MockDecoderStreamSenderDelegate> delegate_;
+ StrictMock<MockQpackStreamSenderDelegate> delegate_;
QpackDecoderStreamSender stream_;
};
TEST_F(QpackDecoderStreamSenderTest, InsertCountIncrement) {
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("00"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("00"))));
stream_.SendInsertCountIncrement(0);
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("0a"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("0a"))));
stream_.SendInsertCountIncrement(10);
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("3f00"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("3f00"))));
stream_.SendInsertCountIncrement(63);
EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("3f8901"))));
+ WriteStreamData(Eq(QuicTextUtils::HexDecode("3f8901"))));
stream_.SendInsertCountIncrement(200);
}
TEST_F(QpackDecoderStreamSenderTest, HeaderAcknowledgement) {
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("80"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("80"))));
stream_.SendHeaderAcknowledgement(0);
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("a5"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("a5"))));
stream_.SendHeaderAcknowledgement(37);
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("ff00"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("ff00"))));
stream_.SendHeaderAcknowledgement(127);
EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("fff802"))));
+ WriteStreamData(Eq(QuicTextUtils::HexDecode("fff802"))));
stream_.SendHeaderAcknowledgement(503);
}
TEST_F(QpackDecoderStreamSenderTest, StreamCancellation) {
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("40"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("40"))));
stream_.SendStreamCancellation(0);
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("53"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("53"))));
stream_.SendStreamCancellation(19);
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("7f00"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("7f00"))));
stream_.SendStreamCancellation(63);
- EXPECT_CALL(delegate_,
- WriteDecoderStreamData(Eq(QuicTextUtils::HexDecode("7f2f"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("7f2f"))));
stream_.SendStreamCancellation(110);
}
diff --git a/quic/core/qpack/qpack_decoder_test.cc b/quic/core/qpack/qpack_decoder_test.cc
index eabc7b9..185aab9 100644
--- a/quic/core/qpack/qpack_decoder_test.cc
+++ b/quic/core/qpack/qpack_decoder_test.cc
@@ -54,7 +54,7 @@
}
StrictMock<MockEncoderStreamErrorDelegate> encoder_stream_error_delegate_;
- StrictMock<MockDecoderStreamSenderDelegate> decoder_stream_sender_delegate_;
+ StrictMock<MockQpackStreamSenderDelegate> decoder_stream_sender_delegate_;
StrictMock<MockHeadersHandler> handler_;
private:
@@ -78,7 +78,7 @@
TEST_P(QpackDecoderTest, EmptyHeaderBlock) {
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode("0000"));
}
@@ -87,7 +87,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq(""), Eq("foo")));
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode("00002003666f6f"));
}
@@ -96,7 +96,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("foo"), Eq("")));
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode("000023666f6f00"));
}
@@ -105,7 +105,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq(""), Eq("")));
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode("00002000"));
}
@@ -114,7 +114,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("foo"), Eq("bar")));
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode("000023666f6f03626172"));
}
@@ -125,7 +125,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("foobaar"), QuicStringPiece(str)));
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode(
"0000" // prefix
@@ -184,7 +184,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("custom-key"), Eq("custom-value")));
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(
QuicTextUtils::HexDecode("00002f0125a849e95ba97d7f8925a849e95bb8e8b4bf"));
@@ -195,7 +195,7 @@
.Times(4);
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode(
"0000" // Prefix.
@@ -269,7 +269,7 @@
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode(
"0000d1dfccd45f108621e9aec2a11f5c8294e75f000554524143455f1000"));
@@ -312,7 +312,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("foo"), Eq("ZZZ"))).InSequence(s);
EXPECT_CALL(handler_, OnHeaderDecoded(Eq(":method"), Eq("ZZ"))).InSequence(s);
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)))
+ WriteStreamData(Eq(kHeaderAcknowledgement)))
.InSequence(s);
EXPECT_CALL(handler_, OnDecodingCompleted()).InSequence(s);
@@ -333,7 +333,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("foo"), Eq("ZZZ"))).InSequence(s);
EXPECT_CALL(handler_, OnHeaderDecoded(Eq(":method"), Eq("ZZ"))).InSequence(s);
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)))
+ WriteStreamData(Eq(kHeaderAcknowledgement)))
.InSequence(s);
EXPECT_CALL(handler_, OnDecodingCompleted()).InSequence(s);
@@ -354,7 +354,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("foo"), Eq("ZZZ"))).InSequence(s);
EXPECT_CALL(handler_, OnHeaderDecoded(Eq(":method"), Eq("ZZ"))).InSequence(s);
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)))
+ WriteStreamData(Eq(kHeaderAcknowledgement)))
.InSequence(s);
EXPECT_CALL(handler_, OnDecodingCompleted()).InSequence(s);
@@ -376,7 +376,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("foo"), Eq("bar")));
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
DecodeHeaderBlock(QuicTextUtils::HexDecode(
"0200" // Required Insert Count 1 and Delta Base 0.
@@ -580,7 +580,7 @@
EXPECT_CALL(handler_, OnHeaderDecoded(Eq("foo"), Eq(header_value)));
EXPECT_CALL(handler_, OnDecodingCompleted());
EXPECT_CALL(decoder_stream_sender_delegate_,
- WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+ WriteStreamData(Eq(kHeaderAcknowledgement)));
// Send header block with Required Insert Count = 201.
DecodeHeaderBlock(QuicTextUtils::HexDecode(
diff --git a/quic/core/qpack/qpack_decoder_test_utils.cc b/quic/core/qpack/qpack_decoder_test_utils.cc
index d00e528..ab0e2b8 100644
--- a/quic/core/qpack/qpack_decoder_test_utils.cc
+++ b/quic/core/qpack/qpack_decoder_test_utils.cc
@@ -16,9 +16,6 @@
void NoopEncoderStreamErrorDelegate::OnEncoderStreamError(
QuicStringPiece /*error_message*/) {}
-void NoopDecoderStreamSenderDelegate::WriteDecoderStreamData(
- QuicStringPiece /*data*/) {}
-
TestHeadersHandler::TestHeadersHandler()
: decoding_completed_(false), decoding_error_detected_(false) {}
@@ -62,7 +59,7 @@
void QpackDecode(
QpackDecoder::EncoderStreamErrorDelegate* encoder_stream_error_delegate,
- QpackDecoderStreamSender::Delegate* decoder_stream_sender_delegate,
+ QpackStreamSenderDelegate* decoder_stream_sender_delegate,
QpackProgressiveDecoder::HeadersHandlerInterface* handler,
const FragmentSizeGenerator& fragment_size_generator,
QuicStringPiece data) {
diff --git a/quic/core/qpack/qpack_decoder_test_utils.h b/quic/core/qpack/qpack_decoder_test_utils.h
index 7cc684c..c2e909c 100644
--- a/quic/core/qpack/qpack_decoder_test_utils.h
+++ b/quic/core/qpack/qpack_decoder_test_utils.h
@@ -33,24 +33,6 @@
MOCK_METHOD1(OnEncoderStreamError, void(QuicStringPiece error_message));
};
-// QpackDecoderStreamSender::Delegate implementation that does nothing.
-class NoopDecoderStreamSenderDelegate
- : public QpackDecoderStreamSender::Delegate {
- public:
- ~NoopDecoderStreamSenderDelegate() override = default;
-
- void WriteDecoderStreamData(QuicStringPiece data) override;
-};
-
-// Mock QpackDecoderStreamSender::Delegate implementation.
-class MockDecoderStreamSenderDelegate
- : public QpackDecoderStreamSender::Delegate {
- public:
- ~MockDecoderStreamSenderDelegate() override = default;
-
- MOCK_METHOD1(WriteDecoderStreamData, void(QuicStringPiece data));
-};
-
// HeadersHandlerInterface implementation that collects decoded headers
// into a SpdyHeaderBlock.
class TestHeadersHandler
@@ -104,7 +86,7 @@
void QpackDecode(
QpackDecoder::EncoderStreamErrorDelegate* encoder_stream_error_delegate,
- QpackDecoderStreamSender::Delegate* decoder_stream_sender_delegate,
+ QpackStreamSenderDelegate* decoder_stream_sender_delegate,
QpackProgressiveDecoder::HeadersHandlerInterface* handler,
const FragmentSizeGenerator& fragment_size_generator,
QuicStringPiece data);
diff --git a/quic/core/qpack/qpack_encoder.cc b/quic/core/qpack/qpack_encoder.cc
index 2c1e453..92bf0dc 100644
--- a/quic/core/qpack/qpack_encoder.cc
+++ b/quic/core/qpack/qpack_encoder.cc
@@ -14,7 +14,7 @@
QpackEncoder::QpackEncoder(
DecoderStreamErrorDelegate* decoder_stream_error_delegate,
- QpackEncoderStreamSender::Delegate* encoder_stream_sender_delegate)
+ QpackStreamSenderDelegate* encoder_stream_sender_delegate)
: decoder_stream_error_delegate_(decoder_stream_error_delegate),
decoder_stream_receiver_(this),
encoder_stream_sender_(encoder_stream_sender_delegate) {
diff --git a/quic/core/qpack/qpack_encoder.h b/quic/core/qpack/qpack_encoder.h
index 2c450b1..a14d91b 100644
--- a/quic/core/qpack/qpack_encoder.h
+++ b/quic/core/qpack/qpack_encoder.h
@@ -40,9 +40,8 @@
virtual void OnDecoderStreamError(QuicStringPiece error_message) = 0;
};
- QpackEncoder(
- DecoderStreamErrorDelegate* decoder_stream_error_delegate,
- QpackEncoderStreamSender::Delegate* encoder_stream_sender_delegate);
+ QpackEncoder(DecoderStreamErrorDelegate* decoder_stream_error_delegate,
+ QpackStreamSenderDelegate* encoder_stream_sender_delegate);
~QpackEncoder() override;
// This factory method is called to start encoding a header list.
diff --git a/quic/core/qpack/qpack_encoder_stream_sender.cc b/quic/core/qpack/qpack_encoder_stream_sender.cc
index 3fb3b33..e4299ed 100644
--- a/quic/core/qpack/qpack_encoder_stream_sender.cc
+++ b/quic/core/qpack/qpack_encoder_stream_sender.cc
@@ -13,7 +13,8 @@
namespace quic {
-QpackEncoderStreamSender::QpackEncoderStreamSender(Delegate* delegate)
+QpackEncoderStreamSender::QpackEncoderStreamSender(
+ QpackStreamSenderDelegate* delegate)
: delegate_(delegate) {
DCHECK(delegate_);
}
@@ -33,7 +34,7 @@
instruction_encoder_.Next(std::numeric_limits<size_t>::max(), &output);
DCHECK(!instruction_encoder_.HasNext());
- delegate_->WriteEncoderStreamData(output);
+ delegate_->WriteStreamData(output);
}
void QpackEncoderStreamSender::SendInsertWithoutNameReference(
@@ -49,7 +50,7 @@
instruction_encoder_.Next(std::numeric_limits<size_t>::max(), &output);
DCHECK(!instruction_encoder_.HasNext());
- delegate_->WriteEncoderStreamData(output);
+ delegate_->WriteStreamData(output);
}
void QpackEncoderStreamSender::SendDuplicate(uint64_t index) {
@@ -62,7 +63,7 @@
instruction_encoder_.Next(std::numeric_limits<size_t>::max(), &output);
DCHECK(!instruction_encoder_.HasNext());
- delegate_->WriteEncoderStreamData(output);
+ delegate_->WriteStreamData(output);
}
void QpackEncoderStreamSender::SendSetDynamicTableCapacity(uint64_t capacity) {
@@ -75,7 +76,7 @@
instruction_encoder_.Next(std::numeric_limits<size_t>::max(), &output);
DCHECK(!instruction_encoder_.HasNext());
- delegate_->WriteEncoderStreamData(output);
+ delegate_->WriteStreamData(output);
}
} // namespace quic
diff --git a/quic/core/qpack/qpack_encoder_stream_sender.h b/quic/core/qpack/qpack_encoder_stream_sender.h
index ad34568..e395b6d 100644
--- a/quic/core/qpack/qpack_encoder_stream_sender.h
+++ b/quic/core/qpack/qpack_encoder_stream_sender.h
@@ -8,6 +8,7 @@
#include <cstdint>
#include "net/third_party/quiche/src/quic/core/qpack/qpack_instruction_encoder.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_stream_sender_delegate.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
@@ -16,19 +17,7 @@
// This class serializes instructions for transmission on the encoder stream.
class QUIC_EXPORT_PRIVATE QpackEncoderStreamSender {
public:
- // An interface for handling encoded data.
- class Delegate {
- public:
- virtual ~Delegate() = default;
-
- // Encoded |data| is ready to be written on the encoder stream.
- // WriteEncoderStreamData() is called exactly once for each instruction.
- // |data| contains the entire encoded instruction and it is guaranteed to be
- // not empty.
- virtual void WriteEncoderStreamData(QuicStringPiece data) = 0;
- };
-
- explicit QpackEncoderStreamSender(Delegate* delegate);
+ explicit QpackEncoderStreamSender(QpackStreamSenderDelegate* delegate);
QpackEncoderStreamSender() = delete;
QpackEncoderStreamSender(const QpackEncoderStreamSender&) = delete;
QpackEncoderStreamSender& operator=(const QpackEncoderStreamSender&) = delete;
@@ -49,7 +38,7 @@
void SendSetDynamicTableCapacity(uint64_t capacity);
private:
- Delegate* const delegate_;
+ QpackStreamSenderDelegate* const delegate_;
QpackInstructionEncoder instruction_encoder_;
};
diff --git a/quic/core/qpack/qpack_encoder_stream_sender_test.cc b/quic/core/qpack/qpack_encoder_stream_sender_test.cc
index ee8f399..2df9ffc 100644
--- a/quic/core/qpack/qpack_encoder_stream_sender_test.cc
+++ b/quic/core/qpack/qpack_encoder_stream_sender_test.cc
@@ -20,31 +20,30 @@
QpackEncoderStreamSenderTest() : stream_(&delegate_) {}
~QpackEncoderStreamSenderTest() override = default;
- StrictMock<MockEncoderStreamSenderDelegate> delegate_;
+ StrictMock<MockQpackStreamSenderDelegate> delegate_;
QpackEncoderStreamSender stream_;
};
TEST_F(QpackEncoderStreamSenderTest, InsertWithNameReference) {
// Static, index fits in prefix, empty value.
- EXPECT_CALL(delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode("c500"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("c500"))));
stream_.SendInsertWithNameReference(true, 5, "");
// Static, index fits in prefix, Huffman encoded value.
EXPECT_CALL(delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode("c28294e7"))));
+ WriteStreamData(Eq(QuicTextUtils::HexDecode("c28294e7"))));
stream_.SendInsertWithNameReference(true, 2, "foo");
// Not static, index does not fit in prefix, not Huffman encoded value.
- EXPECT_CALL(delegate_, WriteEncoderStreamData(
- Eq(QuicTextUtils::HexDecode("bf4a03626172"))));
+ EXPECT_CALL(delegate_,
+ WriteStreamData(Eq(QuicTextUtils::HexDecode("bf4a03626172"))));
stream_.SendInsertWithNameReference(false, 137, "bar");
// Value length does not fit in prefix.
// 'Z' would be Huffman encoded to 8 bits, so no Huffman encoding is used.
EXPECT_CALL(
delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode(
+ WriteStreamData(Eq(QuicTextUtils::HexDecode(
"aa7f005a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a"
"5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a"
"5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a"
@@ -54,25 +53,24 @@
TEST_F(QpackEncoderStreamSenderTest, InsertWithoutNameReference) {
// Empty name and value.
- EXPECT_CALL(delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode("4000"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("4000"))));
stream_.SendInsertWithoutNameReference("", "");
// Huffman encoded short strings.
- EXPECT_CALL(delegate_, WriteEncoderStreamData(
+ EXPECT_CALL(delegate_, WriteStreamData(
Eq(QuicTextUtils::HexDecode("4362617203626172"))));
stream_.SendInsertWithoutNameReference("bar", "bar");
// Not Huffman encoded short strings.
- EXPECT_CALL(delegate_, WriteEncoderStreamData(
- Eq(QuicTextUtils::HexDecode("6294e78294e7"))));
+ EXPECT_CALL(delegate_,
+ WriteStreamData(Eq(QuicTextUtils::HexDecode("6294e78294e7"))));
stream_.SendInsertWithoutNameReference("foo", "foo");
// Not Huffman encoded long strings; length does not fit on prefix.
// 'Z' would be Huffman encoded to 8 bits, so no Huffman encoding is used.
EXPECT_CALL(
delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode(
+ WriteStreamData(Eq(QuicTextUtils::HexDecode(
"5f005a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a7f"
"005a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a"
"5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a"
@@ -84,25 +82,23 @@
TEST_F(QpackEncoderStreamSenderTest, Duplicate) {
// Small index fits in prefix.
- EXPECT_CALL(delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode("11"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("11"))));
stream_.SendDuplicate(17);
// Large index requires two extension bytes.
EXPECT_CALL(delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode("1fd503"))));
+ WriteStreamData(Eq(QuicTextUtils::HexDecode("1fd503"))));
stream_.SendDuplicate(500);
}
TEST_F(QpackEncoderStreamSenderTest, SetDynamicTableCapacity) {
// Small capacity fits in prefix.
- EXPECT_CALL(delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode("31"))));
+ EXPECT_CALL(delegate_, WriteStreamData(Eq(QuicTextUtils::HexDecode("31"))));
stream_.SendSetDynamicTableCapacity(17);
// Large capacity requires two extension bytes.
EXPECT_CALL(delegate_,
- WriteEncoderStreamData(Eq(QuicTextUtils::HexDecode("3fd503"))));
+ WriteStreamData(Eq(QuicTextUtils::HexDecode("3fd503"))));
stream_.SendSetDynamicTableCapacity(500);
}
diff --git a/quic/core/qpack/qpack_encoder_test.cc b/quic/core/qpack/qpack_encoder_test.cc
index 8200e14..add6a74 100644
--- a/quic/core/qpack/qpack_encoder_test.cc
+++ b/quic/core/qpack/qpack_encoder_test.cc
@@ -8,6 +8,7 @@
#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_test_utils.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_test_utils.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_utils.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_text_utils.h"
@@ -31,7 +32,7 @@
}
StrictMock<MockDecoderStreamErrorDelegate> decoder_stream_error_delegate_;
- NoopEncoderStreamSenderDelegate encoder_stream_sender_delegate_;
+ NoopQpackStreamSenderDelegate encoder_stream_sender_delegate_;
private:
const FragmentMode fragment_mode_;
diff --git a/quic/core/qpack/qpack_encoder_test_utils.cc b/quic/core/qpack/qpack_encoder_test_utils.cc
index a58b0ae..a5fdbea 100644
--- a/quic/core/qpack/qpack_encoder_test_utils.cc
+++ b/quic/core/qpack/qpack_encoder_test_utils.cc
@@ -12,12 +12,9 @@
void NoopDecoderStreamErrorDelegate::OnDecoderStreamError(
QuicStringPiece /*error_message*/) {}
-void NoopEncoderStreamSenderDelegate::WriteEncoderStreamData(
- QuicStringPiece /*data*/) {}
-
std::string QpackEncode(
QpackEncoder::DecoderStreamErrorDelegate* decoder_stream_error_delegate,
- QpackEncoderStreamSender::Delegate* encoder_stream_sender_delegate,
+ QpackStreamSenderDelegate* encoder_stream_sender_delegate,
const FragmentSizeGenerator& fragment_size_generator,
const spdy::SpdyHeaderBlock* header_list) {
QpackEncoder encoder(decoder_stream_error_delegate,
diff --git a/quic/core/qpack/qpack_encoder_test_utils.h b/quic/core/qpack/qpack_encoder_test_utils.h
index 3c9b404..f897d45 100644
--- a/quic/core/qpack/qpack_encoder_test_utils.h
+++ b/quic/core/qpack/qpack_encoder_test_utils.h
@@ -34,27 +34,9 @@
MOCK_METHOD1(OnDecoderStreamError, void(QuicStringPiece error_message));
};
-// QpackEncoderStreamSender::Delegate implementation that does nothing.
-class NoopEncoderStreamSenderDelegate
- : public QpackEncoderStreamSender::Delegate {
- public:
- ~NoopEncoderStreamSenderDelegate() override = default;
-
- void WriteEncoderStreamData(QuicStringPiece data) override;
-};
-
-// Mock QpackEncoderStreamSender::Delegate implementation.
-class MockEncoderStreamSenderDelegate
- : public QpackEncoderStreamSender::Delegate {
- public:
- ~MockEncoderStreamSenderDelegate() override = default;
-
- MOCK_METHOD1(WriteEncoderStreamData, void(QuicStringPiece data));
-};
-
std::string QpackEncode(
QpackEncoder::DecoderStreamErrorDelegate* decoder_stream_error_delegate,
- QpackEncoderStreamSender::Delegate* encoder_stream_sender_delegate,
+ QpackStreamSenderDelegate* encoder_stream_sender_delegate,
const FragmentSizeGenerator& fragment_size_generator,
const spdy::SpdyHeaderBlock* header_list);
diff --git a/quic/core/qpack/qpack_round_trip_test.cc b/quic/core/qpack/qpack_round_trip_test.cc
index 45ad667..4fc1a38 100644
--- a/quic/core/qpack/qpack_round_trip_test.cc
+++ b/quic/core/qpack/qpack_round_trip_test.cc
@@ -8,6 +8,7 @@
#include "net/third_party/quiche/src/quic/core/qpack/qpack_decoder_test_utils.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_test_utils.h"
#include "net/third_party/quiche/src/quic/core/qpack/qpack_test_utils.h"
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_utils.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
#include "net/third_party/quiche/src/spdy/core/spdy_header_block.h"
@@ -30,7 +31,7 @@
spdy::SpdyHeaderBlock EncodeThenDecode(
const spdy::SpdyHeaderBlock& header_list) {
NoopDecoderStreamErrorDelegate decoder_stream_error_delegate;
- NoopEncoderStreamSenderDelegate encoder_stream_sender_delegate;
+ NoopQpackStreamSenderDelegate encoder_stream_sender_delegate;
std::string encoded_header_block = QpackEncode(
&decoder_stream_error_delegate, &encoder_stream_sender_delegate,
FragmentModeToFragmentSizeGenerator(encoding_fragment_mode_),
@@ -38,7 +39,7 @@
TestHeadersHandler handler;
NoopEncoderStreamErrorDelegate encoder_stream_error_delegate;
- NoopDecoderStreamSenderDelegate decoder_stream_sender_delegate;
+ NoopQpackStreamSenderDelegate decoder_stream_sender_delegate;
QpackDecode(&encoder_stream_error_delegate, &decoder_stream_sender_delegate,
&handler,
FragmentModeToFragmentSizeGenerator(decoding_fragment_mode_),
diff --git a/quic/core/qpack/qpack_send_stream.h b/quic/core/qpack/qpack_send_stream.h
index dab4fd0..aa3cb79 100644
--- a/quic/core/qpack/qpack_send_stream.h
+++ b/quic/core/qpack/qpack_send_stream.h
@@ -5,6 +5,7 @@
#ifndef QUICHE_QUIC_CORE_QPACK_QPACK_SEND_STREAM_H_
#define QUICHE_QUIC_CORE_QPACK_QPACK_SEND_STREAM_H_
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_stream_sender_delegate.h"
#include "net/third_party/quiche/src/quic/core/quic_stream.h"
#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
@@ -14,7 +15,8 @@
// QPACK 4.2.1 Encoder and Decoder Streams.
// The QPACK send stream is self initiated and is write only.
-class QUIC_EXPORT_PRIVATE QpackSendStream : public QuicStream {
+class QUIC_EXPORT_PRIVATE QpackSendStream : public QuicStream,
+ public QpackStreamSenderDelegate {
public:
// |session| can't be nullptr, and the ownership is not passed. |session| owns
// this stream.
@@ -35,7 +37,7 @@
// Writes the instructions to peer. The stream type will be sent
// before the first instruction so that the peer can open an qpack stream.
- void WriteStreamData(QuicStringPiece data);
+ void WriteStreamData(QuicStringPiece data) override;
private:
const uint64_t stream_type_;
diff --git a/quic/core/qpack/qpack_stream_sender_delegate.h b/quic/core/qpack/qpack_stream_sender_delegate.h
new file mode 100644
index 0000000..616df98
--- /dev/null
+++ b/quic/core/qpack/qpack_stream_sender_delegate.h
@@ -0,0 +1,24 @@
+// Copyright (c) 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_QUIC_CORE_QPACK_QPACK_STREAM_SENDER_DELEGATE_H_
+#define QUICHE_QUIC_CORE_QPACK_QPACK_STREAM_SENDER_DELEGATE_H_
+
+#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
+
+namespace quic {
+
+// This interface writes encoder/decoder data to peer.
+class QUIC_EXPORT_PRIVATE QpackStreamSenderDelegate {
+ public:
+ virtual ~QpackStreamSenderDelegate() = default;
+
+ // Write data on the unidirectional stream.
+ virtual void WriteStreamData(QuicStringPiece data) = 0;
+};
+
+} // namespace quic
+
+#endif // QUICHE_QUIC_CORE_QPACK_QPACK_STREAM_SENDER_DELEGATE_H_
diff --git a/quic/core/qpack/qpack_test_utils.h b/quic/core/qpack/qpack_test_utils.h
index 65bb5a2..42fa383 100644
--- a/quic/core/qpack/qpack_test_utils.h
+++ b/quic/core/qpack/qpack_test_utils.h
@@ -8,6 +8,9 @@
#include <cstddef>
#include <functional>
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_stream_sender_delegate.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
+
namespace quic {
namespace test {
@@ -23,6 +26,14 @@
FragmentSizeGenerator FragmentModeToFragmentSizeGenerator(
FragmentMode fragment_mode);
+// Mock QpackUnidirectionalStreamSenderDelegate implementation.
+class MockQpackStreamSenderDelegate : public QpackStreamSenderDelegate {
+ public:
+ ~MockQpackStreamSenderDelegate() override = default;
+
+ MOCK_METHOD1(WriteStreamData, void(QuicStringPiece data));
+};
+
} // namespace test
} // namespace quic
diff --git a/quic/core/qpack/qpack_utils.h b/quic/core/qpack/qpack_utils.h
new file mode 100644
index 0000000..1b63422
--- /dev/null
+++ b/quic/core/qpack/qpack_utils.h
@@ -0,0 +1,23 @@
+// Copyright (c) 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_QUIC_CORE_QPACK_QPACK_UTILS_H_
+#define QUICHE_QUIC_CORE_QPACK_QPACK_UTILS_H_
+
+#include "net/third_party/quiche/src/quic/core/qpack/qpack_stream_sender_delegate.h"
+
+namespace quic {
+// TODO(renjietang): Move this class to qpack_test_utils.h once it is not needed
+// in QuicSpdySession.
+class QUIC_EXPORT_PRIVATE NoopQpackStreamSenderDelegate
+ : public QpackStreamSenderDelegate {
+ public:
+ ~NoopQpackStreamSenderDelegate() override = default;
+
+ void WriteStreamData(QuicStringPiece /*data*/) override {}
+};
+
+} // namespace quic
+
+#endif // QUICHE_QUIC_CORE_QPACK_QPACK_UTILS_H_