Add max_header_list_size argument to QpackDecodedHeadersAccumulator constructor.

This will be used in cr/231494986.

gfe-relnote: n/a.  Change to unused code.
PiperOrigin-RevId: 243792811
Change-Id: If8cdf715eb7d2a6a0af02be74d05f74eff8a6219
diff --git a/quic/core/qpack/qpack_decoded_headers_accumulator.cc b/quic/core/qpack/qpack_decoded_headers_accumulator.cc
index ac60fce..bcfe0e4 100644
--- a/quic/core/qpack/qpack_decoded_headers_accumulator.cc
+++ b/quic/core/qpack/qpack_decoded_headers_accumulator.cc
@@ -10,11 +10,13 @@
 
 QpackDecodedHeadersAccumulator::QpackDecodedHeadersAccumulator(
     QuicStreamId id,
-    QpackDecoder* qpack_decoder)
+    QpackDecoder* qpack_decoder,
+    size_t max_header_list_size)
     : decoder_(qpack_decoder->DecodeHeaderBlock(id, this)),
       uncompressed_header_bytes_(0),
       compressed_header_bytes_(0),
       error_detected_(false) {
+  quic_header_list_.set_max_header_list_size(max_header_list_size);
   quic_header_list_.OnHeaderBlockStart();
 }
 
diff --git a/quic/core/qpack/qpack_decoded_headers_accumulator.h b/quic/core/qpack/qpack_decoded_headers_accumulator.h
index f9e8feb..5db88d7 100644
--- a/quic/core/qpack/qpack_decoded_headers_accumulator.h
+++ b/quic/core/qpack/qpack_decoded_headers_accumulator.h
@@ -24,7 +24,9 @@
 class QUIC_EXPORT_PRIVATE QpackDecodedHeadersAccumulator
     : public QpackProgressiveDecoder::HeadersHandlerInterface {
  public:
-  QpackDecodedHeadersAccumulator(QuicStreamId id, QpackDecoder* qpack_decoder);
+  QpackDecodedHeadersAccumulator(QuicStreamId id,
+                                 QpackDecoder* qpack_decoder,
+                                 size_t max_header_list_size);
   virtual ~QpackDecodedHeadersAccumulator() = default;
 
   // QpackProgressiveDecoder::HeadersHandlerInterface implementation.
diff --git a/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc b/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc
index eb6f622..c3c0b81 100644
--- a/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc
+++ b/quic/core/qpack/qpack_decoded_headers_accumulator_test.cc
@@ -20,8 +20,12 @@
 namespace test {
 namespace {
 
+// Arbitrary stream ID used for testing.
 QuicStreamId kTestStreamId = 1;
 
+// Limit on header list size.
+const size_t kMaxHeaderListSize = 100;
+
 // Header Acknowledgement decoder stream instruction with stream_id = 1.
 const char* const kHeaderAcknowledgement = "\x81";
 
@@ -32,7 +36,7 @@
   QpackDecodedHeadersAccumulatorTest()
       : qpack_decoder_(&encoder_stream_error_delegate_,
                        &decoder_stream_sender_delegate_),
-        accumulator_(kTestStreamId, &qpack_decoder_) {}
+        accumulator_(kTestStreamId, &qpack_decoder_, kMaxHeaderListSize) {}
 
   NoopEncoderStreamErrorDelegate encoder_stream_error_delegate_;
   StrictMock<MockDecoderStreamSenderDelegate> decoder_stream_sender_delegate_;
@@ -93,5 +97,23 @@
   EXPECT_EQ(encoded_data.size(), header_list.compressed_header_bytes());
 }
 
+TEST_F(QpackDecodedHeadersAccumulatorTest, ExceedingLimit) {
+  EXPECT_CALL(decoder_stream_sender_delegate_,
+              WriteDecoderStreamData(Eq(kHeaderAcknowledgement)));
+
+  // Total length of header list exceeds kMaxHeaderListSize.
+  EXPECT_TRUE(accumulator_.Decode(QuicTextUtils::HexDecode(
+      "0000"                                      // header block prefix
+      "26666f6f626172"                            // header key: "foobar"
+      "7d61616161616161616161616161616161616161"  // header value: 'a' 125 times
+      "616161616161616161616161616161616161616161616161616161616161616161616161"
+      "616161616161616161616161616161616161616161616161616161616161616161616161"
+      "61616161616161616161616161616161616161616161616161616161616161616161")));
+  EXPECT_TRUE(accumulator_.EndHeaderBlock());
+
+  // QuicHeaderList signals header list over limit by clearing it.
+  EXPECT_TRUE(accumulator_.quic_header_list().empty());
+}
+
 }  // namespace test
 }  // namespace quic