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()) {