diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index 27d3785..6eb6ac6 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -2469,7 +2469,7 @@
     qpack_encoder.set_qpack_stream_sender_delegate(
         &encoder_stream_sender_delegate);
     std::string encoded_headers =
-        qpack_encoder.EncodeHeaderList(/* stream_id = */ 0, &headers);
+        qpack_encoder.EncodeHeaderList(/* stream_id = */ 0, headers);
     header_size = encoded_headers.size();
   }
 
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 29c6d9d..c869459 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -545,7 +545,7 @@
 
   // Encode header list.
   std::string encoded_headers =
-      qpack_encoder_->EncodeHeaderList(original_stream_id, &headers);
+      qpack_encoder_->EncodeHeaderList(original_stream_id, headers);
   PushPromiseFrame frame;
   frame.push_id = promised_stream_id;
   frame.headers = encoded_headers;
diff --git a/quic/core/http/quic_spdy_stream.cc b/quic/core/http/quic_spdy_stream.cc
index 2471756..464c0a3 100644
--- a/quic/core/http/quic_spdy_stream.cc
+++ b/quic/core/http/quic_spdy_stream.cc
@@ -1018,7 +1018,7 @@
 
   // Encode header list.
   std::string encoded_headers =
-      spdy_session_->qpack_encoder()->EncodeHeaderList(id(), &header_block);
+      spdy_session_->qpack_encoder()->EncodeHeaderList(id(), header_block);
 
   // Write HEADERS frame.
   std::unique_ptr<char[]> headers_frame_header;
diff --git a/quic/core/http/quic_spdy_stream_test.cc b/quic/core/http/quic_spdy_stream_test.cc
index f247df4..8b1c922 100644
--- a/quic/core/http/quic_spdy_stream_test.cc
+++ b/quic/core/http/quic_spdy_stream_test.cc
@@ -184,7 +184,7 @@
         &encoder_stream_sender_delegate);
     // QpackEncoder does not use the dynamic table by default,
     // therefore the value of |stream_id| does not matter.
-    return qpack_encoder->EncodeHeaderList(/* stream_id = */ 0, &header);
+    return qpack_encoder->EncodeHeaderList(/* stream_id = */ 0, header);
   }
 
   void Initialize(bool stream_should_process_data) {
diff --git a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
index 53cd279..624eca5 100644
--- a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
+++ b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
@@ -50,7 +50,7 @@
   }
 
   std::string EncodeHeaderList(QuicStreamId stream_id,
-                               const spdy::SpdyHeaderBlock* header_list) {
+                               const spdy::SpdyHeaderBlock& header_list) {
     return encoder_.EncodeHeaderList(stream_id, header_list);
   }
 
@@ -614,7 +614,7 @@
 
     // Encode header list.
     std::string encoded_header_block =
-        encoder.EncodeHeaderList(stream_id, &header_list);
+        encoder.EncodeHeaderList(stream_id, header_list);
 
     // TODO(bnc): Randomly cancel the stream.
 
diff --git a/quic/core/qpack/qpack_encoder.cc b/quic/core/qpack/qpack_encoder.cc
index 31bebcc..370887a 100644
--- a/quic/core/qpack/qpack_encoder.cc
+++ b/quic/core/qpack/qpack_encoder.cc
@@ -86,10 +86,10 @@
 }
 
 QpackEncoder::Instructions QpackEncoder::FirstPassEncode(
-    const spdy::SpdyHeaderBlock* header_list,
+    const spdy::SpdyHeaderBlock& header_list,
     QpackBlockingManager::IndexSet* referred_indices) {
   Instructions instructions;
-  instructions.reserve(header_list->size());
+  instructions.reserve(header_list.size());
 
   // The index of the oldest entry that must not be evicted.
   uint64_t smallest_blocking_index =
@@ -108,8 +108,8 @@
   const bool blocking_allowed =
       maximum_blocked_streams_ > blocking_manager_.blocked_stream_count();
 
-  for (const auto& header : ValueSplittingHeaderList(header_list)) {
-    // These strings are owned by |*header_list|.
+  for (const auto& header : ValueSplittingHeaderList(&header_list)) {
+    // These strings are owned by |header_list|.
     QuicStringPiece name = header.first;
     QuicStringPiece value = header.second;
 
@@ -296,7 +296,7 @@
 
 std::string QpackEncoder::EncodeHeaderList(
     QuicStreamId stream_id,
-    const spdy::SpdyHeaderBlock* header_list) {
+    const spdy::SpdyHeaderBlock& header_list) {
   // Keep track of all dynamic table indices that this header block refers to so
   // that it can be passed to QpackBlockingManager.
   QpackBlockingManager::IndexSet referred_indices;
diff --git a/quic/core/qpack/qpack_encoder.h b/quic/core/qpack/qpack_encoder.h
index 55dd1e9..67f1faa 100644
--- a/quic/core/qpack/qpack_encoder.h
+++ b/quic/core/qpack/qpack_encoder.h
@@ -50,9 +50,8 @@
   ~QpackEncoder() override;
 
   // Encode a header list.
-  // TODO(bnc): Take |header_list| by const reference instead of pointer.
   std::string EncodeHeaderList(QuicStreamId stream_id,
-                               const spdy::SpdyHeaderBlock* header_list);
+                               const spdy::SpdyHeaderBlock& header_list);
 
   // Set maximum capacity of dynamic table, measured in bytes.
   // Called when SETTINGS_QPACK_MAX_TABLE_CAPACITY is received.
@@ -125,9 +124,8 @@
   // header field representations, with all dynamic table entries referred to
   // with absolute indices.  Returned Instructions object may have
   // QuicStringPieces pointing to strings owned by |*header_list|.
-  // TODO(bnc): Take |header_list| by const reference instead of pointer.
   Instructions FirstPassEncode(
-      const spdy::SpdyHeaderBlock* header_list,
+      const spdy::SpdyHeaderBlock& header_list,
       QpackBlockingManager::IndexSet* referred_indices);
 
   // Performs second pass of two-pass encoding: serializes representations
diff --git a/quic/core/qpack/qpack_encoder_test.cc b/quic/core/qpack/qpack_encoder_test.cc
index 01452ab..f23cb8b 100644
--- a/quic/core/qpack/qpack_encoder_test.cc
+++ b/quic/core/qpack/qpack_encoder_test.cc
@@ -30,7 +30,7 @@
 
   ~QpackEncoderTest() override = default;
 
-  std::string Encode(const spdy::SpdyHeaderBlock* header_list) {
+  std::string Encode(const spdy::SpdyHeaderBlock& header_list) {
     return encoder_.EncodeHeaderList(/* stream_id = */ 1, header_list);
   }
 
@@ -41,7 +41,7 @@
 
 TEST_F(QpackEncoderTest, Empty) {
   spdy::SpdyHeaderBlock header_list;
-  std::string output = Encode(&header_list);
+  std::string output = Encode(header_list);
 
   EXPECT_EQ(QuicTextUtils::HexDecode("0000"), output);
 }
@@ -49,7 +49,7 @@
 TEST_F(QpackEncoderTest, EmptyName) {
   spdy::SpdyHeaderBlock header_list;
   header_list[""] = "foo";
-  std::string output = Encode(&header_list);
+  std::string output = Encode(header_list);
 
   EXPECT_EQ(QuicTextUtils::HexDecode("0000208294e7"), output);
 }
@@ -57,7 +57,7 @@
 TEST_F(QpackEncoderTest, EmptyValue) {
   spdy::SpdyHeaderBlock header_list;
   header_list["foo"] = "";
-  std::string output = Encode(&header_list);
+  std::string output = Encode(header_list);
 
   EXPECT_EQ(QuicTextUtils::HexDecode("00002a94e700"), output);
 }
@@ -65,7 +65,7 @@
 TEST_F(QpackEncoderTest, EmptyNameAndValue) {
   spdy::SpdyHeaderBlock header_list;
   header_list[""] = "";
-  std::string output = Encode(&header_list);
+  std::string output = Encode(header_list);
 
   EXPECT_EQ(QuicTextUtils::HexDecode("00002000"), output);
 }
@@ -73,7 +73,7 @@
 TEST_F(QpackEncoderTest, Simple) {
   spdy::SpdyHeaderBlock header_list;
   header_list["foo"] = "bar";
-  std::string output = Encode(&header_list);
+  std::string output = Encode(header_list);
 
   EXPECT_EQ(QuicTextUtils::HexDecode("00002a94e703626172"), output);
 }
@@ -83,7 +83,7 @@
   header_list["foo"] = "bar";
   // 'Z' would be Huffman encoded to 8 bits, so no Huffman encoding is used.
   header_list["ZZZZZZZ"] = std::string(127, 'Z');
-  std::string output = Encode(&header_list);
+  std::string output = Encode(header_list);
 
   EXPECT_EQ(
       QuicTextUtils::HexDecode(
@@ -107,7 +107,7 @@
     header_list["accept-encoding"] = "gzip, deflate, br";
     header_list["location"] = "";
 
-    std::string output = Encode(&header_list);
+    std::string output = Encode(header_list);
     EXPECT_EQ(QuicTextUtils::HexDecode("0000d1dfcc"), output);
   }
   {
@@ -116,7 +116,7 @@
     header_list["accept-encoding"] = "compress";
     header_list["location"] = "foo";
 
-    std::string output = Encode(&header_list);
+    std::string output = Encode(header_list);
     EXPECT_EQ(QuicTextUtils::HexDecode("0000d45f108621e9aec2a11f5c8294e7"),
               output);
   }
@@ -125,7 +125,7 @@
     header_list[":method"] = "TRACE";
     header_list["accept-encoding"] = "";
 
-    std::string output = Encode(&header_list);
+    std::string output = Encode(header_list);
     EXPECT_EQ(QuicTextUtils::HexDecode("00005f000554524143455f1000"), output);
   }
 }
@@ -143,7 +143,7 @@
 TEST_F(QpackEncoderTest, SplitAlongNullCharacter) {
   spdy::SpdyHeaderBlock header_list;
   header_list["foo"] = QuicStringPiece("bar\0bar\0baz", 11);
-  std::string output = Encode(&header_list);
+  std::string output = Encode(header_list);
 
   EXPECT_EQ(QuicTextUtils::HexDecode("0000"            // prefix
                                      "2a94e703626172"  // foo: bar
@@ -209,7 +209,7 @@
   EXPECT_EQ(QuicTextUtils::HexDecode(
                 "0400"      // prefix
                 "828180"),  // dynamic entries with relative index 0, 1, and 2
-            Encode(&header_list));
+            Encode(header_list));
 }
 
 // There is no room in the dynamic table after inserting the first entry.
@@ -239,7 +239,7 @@
                                      "0362617a"    // with literal value "baz"
                                      "23626172"    // literal name "bar"
                                      "0362617a"),  // with literal value "baz"
-            Encode(&header_list));
+            Encode(header_list));
 }
 
 TEST_F(QpackEncoderTest, BlockedStream) {
@@ -258,7 +258,7 @@
 
   EXPECT_EQ(QuicTextUtils::HexDecode("0200"  // prefix
                                      "80"),  // dynamic entry 0
-            encoder_.EncodeHeaderList(/* stream_id = */ 1, &header_list1));
+            encoder_.EncodeHeaderList(/* stream_id = */ 1, header_list1));
 
   // Stream 1 is blocked.  Stream 2 is not allowed to block.
   spdy::SpdyHeaderBlock header_list2;
@@ -277,7 +277,7 @@
                                      "0362617a"    // with literal value "baz"
                                      "23626172"    // literal name "bar"
                                      "0362617a"),  // with literal value "baz"
-            encoder_.EncodeHeaderList(/* stream_id = */ 2, &header_list2));
+            encoder_.EncodeHeaderList(/* stream_id = */ 2, header_list2));
 
   // Peer acknowledges receipt of one dynamic table entry.
   // Stream 1 is no longer blocked.
@@ -299,7 +299,7 @@
                   "0362617a"))));            // value "baz"
   EXPECT_EQ(QuicTextUtils::HexDecode("0500"  // prefix
                                      "83828180"),  // dynamic entries
-            encoder_.EncodeHeaderList(/* stream_id = */ 3, &header_list2));
+            encoder_.EncodeHeaderList(/* stream_id = */ 3, header_list2));
 
   // Stream 3 is blocked.  Stream 4 is not allowed to block, but it can
   // reference already acknowledged dynamic entry 0.
@@ -311,7 +311,7 @@
                                      "0362617a"    // with literal value "baz"
                                      "23626172"    // literal name "bar"
                                      "0362617a"),  // with literal value "baz"
-            encoder_.EncodeHeaderList(/* stream_id = */ 4, &header_list2));
+            encoder_.EncodeHeaderList(/* stream_id = */ 4, header_list2));
 
   // Peer acknowledges receipt of two more dynamic table entries.
   // Stream 3 is still blocked.
@@ -323,7 +323,7 @@
                                      "828180"      // dynamic entries
                                      "23626172"    // literal name "bar"
                                      "0362617a"),  // with literal value "baz"
-            encoder_.EncodeHeaderList(/* stream_id = */ 5, &header_list2));
+            encoder_.EncodeHeaderList(/* stream_id = */ 5, header_list2));
 
   // Peer acknowledges decoding header block on stream 3.
   // Stream 3 is not blocked any longer.
@@ -331,7 +331,7 @@
 
   EXPECT_EQ(QuicTextUtils::HexDecode("0500"        // prefix
                                      "83828180"),  // dynamic entries
-            encoder_.EncodeHeaderList(/* stream_id = */ 6, &header_list2));
+            encoder_.EncodeHeaderList(/* stream_id = */ 6, header_list2));
 }
 
 TEST_F(QpackEncoderTest, Draining) {
@@ -368,7 +368,7 @@
   EXPECT_EQ(
       QuicTextUtils::HexDecode("0b00"                    // prefix
                                "89888786858483828180"),  // dynamic entries
-      Encode(&header_list1));
+      Encode(header_list1));
 
   // Entry is identical to oldest one, which is draining.  It will be
   // duplicated and referenced.
@@ -381,7 +381,7 @@
 
   EXPECT_EQ(QuicTextUtils::HexDecode("0c00"  // prefix
                                      "80"),  // most recent dynamic table entry
-            Encode(&header_list2));
+            Encode(header_list2));
 
   spdy::SpdyHeaderBlock header_list3;
   // Entry is identical to second oldest one, which is draining.  There is no
@@ -396,7 +396,7 @@
                                      "8294e7"      // literal value "foo"
                                      "2374776f"    // literal name "two"
                                      "03626172"),  // literal value "bar"
-            Encode(&header_list3));
+            Encode(header_list3));
 }
 
 }  // namespace
diff --git a/quic/core/qpack/qpack_round_trip_test.cc b/quic/core/qpack/qpack_round_trip_test.cc
index 48249b0..9441b82 100644
--- a/quic/core/qpack/qpack_round_trip_test.cc
+++ b/quic/core/qpack/qpack_round_trip_test.cc
@@ -32,7 +32,7 @@
     QpackEncoder encoder(&decoder_stream_error_delegate);
     encoder.set_qpack_stream_sender_delegate(&encoder_stream_sender_delegate);
     std::string encoded_header_block =
-        encoder.EncodeHeaderList(/* stream_id = */ 1, &header_list);
+        encoder.EncodeHeaderList(/* stream_id = */ 1, header_list);
 
     TestHeadersHandler handler;
     NoopEncoderStreamErrorDelegate encoder_stream_error_delegate;
