diff --git a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
index 0cf022c..22e670e 100644
--- a/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
+++ b/quic/core/qpack/fuzzer/qpack_round_trip_fuzzer.cc
@@ -54,7 +54,7 @@
   }
 
   std::string EncodeHeaderList(QuicStreamId stream_id,
-                               const spdy::SpdyHeaderBlock& header_list) {
+                               const spdy::Http2HeaderBlock& header_list) {
     return encoder_.EncodeHeaderList(stream_id, header_list, nullptr);
   }
 
@@ -439,8 +439,8 @@
 };
 
 // Generate header list using fuzzer data.
-spdy::SpdyHeaderBlock GenerateHeaderList(QuicFuzzedDataProvider* provider) {
-  spdy::SpdyHeaderBlock header_list;
+spdy::Http2HeaderBlock GenerateHeaderList(QuicFuzzedDataProvider* provider) {
+  spdy::Http2HeaderBlock header_list;
   uint8_t header_count = provider->ConsumeIntegral<uint8_t>();
   for (uint8_t header_index = 0; header_index < header_count; ++header_index) {
     if (provider->remaining_bytes() == 0) {
@@ -537,7 +537,7 @@
 }
 
 // Splits |*header_list| header values along '\0' or ';' separators.
-QuicHeaderList SplitHeaderList(const spdy::SpdyHeaderBlock& header_list) {
+QuicHeaderList SplitHeaderList(const spdy::Http2HeaderBlock& header_list) {
   QuicHeaderList split_header_list;
   split_header_list.OnHeaderBlockStart();
 
@@ -600,7 +600,7 @@
     const QuicStreamId stream_id = provider.ConsumeIntegral<uint8_t>();
 
     // Generate header list.
-    spdy::SpdyHeaderBlock header_list = GenerateHeaderList(&provider);
+    spdy::Http2HeaderBlock header_list = GenerateHeaderList(&provider);
 
     // Encode header list.
     std::string encoded_header_block =
diff --git a/quic/test_tools/qpack/qpack_decoder_test_utils.cc b/quic/test_tools/qpack/qpack_decoder_test_utils.cc
index d7de01f..9a79515 100644
--- a/quic/test_tools/qpack/qpack_decoder_test_utils.cc
+++ b/quic/test_tools/qpack/qpack_decoder_test_utils.cc
@@ -45,7 +45,7 @@
   error_message_.assign(error_message.data(), error_message.size());
 }
 
-spdy::SpdyHeaderBlock TestHeadersHandler::ReleaseHeaderList() {
+spdy::Http2HeaderBlock TestHeadersHandler::ReleaseHeaderList() {
   DCHECK(decoding_completed_);
   DCHECK(!decoding_error_detected_);
 
diff --git a/quic/test_tools/qpack/qpack_decoder_test_utils.h b/quic/test_tools/qpack/qpack_decoder_test_utils.h
index 8b1b4e1..f38bf98 100644
--- a/quic/test_tools/qpack/qpack_decoder_test_utils.h
+++ b/quic/test_tools/qpack/qpack_decoder_test_utils.h
@@ -40,7 +40,7 @@
 };
 
 // HeadersHandlerInterface implementation that collects decoded headers
-// into a SpdyHeaderBlock.
+// into a Http2HeaderBlock.
 class TestHeadersHandler
     : public QpackProgressiveDecoder::HeadersHandlerInterface {
  public:
@@ -55,14 +55,14 @@
 
   // Release decoded header list.  Must only be called if decoding is complete
   // and no errors have been detected.
-  spdy::SpdyHeaderBlock ReleaseHeaderList();
+  spdy::Http2HeaderBlock ReleaseHeaderList();
 
   bool decoding_completed() const;
   bool decoding_error_detected() const;
   const std::string& error_message() const;
 
  private:
-  spdy::SpdyHeaderBlock header_list_;
+  spdy::Http2HeaderBlock header_list_;
   bool decoding_completed_;
   bool decoding_error_detected_;
   std::string error_message_;
diff --git a/quic/test_tools/qpack/qpack_offline_decoder.cc b/quic/test_tools/qpack/qpack_offline_decoder.cc
index 74c6fa1..2fcf62a 100644
--- a/quic/test_tools/qpack/qpack_offline_decoder.cc
+++ b/quic/test_tools/qpack/qpack_offline_decoder.cc
@@ -238,11 +238,11 @@
   absl::string_view expected_headers_data(expected_headers_data_storage);
 
   while (!decoded_header_lists_.empty()) {
-    spdy::SpdyHeaderBlock decoded_header_list =
+    spdy::Http2HeaderBlock decoded_header_list =
         std::move(decoded_header_lists_.front());
     decoded_header_lists_.pop_front();
 
-    spdy::SpdyHeaderBlock expected_header_list;
+    spdy::Http2HeaderBlock expected_header_list;
     if (!ReadNextExpectedHeaderList(&expected_headers_data,
                                     &expected_header_list)) {
       QUIC_LOG(ERROR)
@@ -269,7 +269,7 @@
 
 bool QpackOfflineDecoder::ReadNextExpectedHeaderList(
     absl::string_view* expected_headers_data,
-    spdy::SpdyHeaderBlock* expected_header_list) {
+    spdy::Http2HeaderBlock* expected_header_list) {
   while (true) {
     absl::string_view::size_type endline = expected_headers_data->find('\n');
 
@@ -300,8 +300,8 @@
 }
 
 bool QpackOfflineDecoder::CompareHeaderBlocks(
-    spdy::SpdyHeaderBlock decoded_header_list,
-    spdy::SpdyHeaderBlock expected_header_list) {
+    spdy::Http2HeaderBlock decoded_header_list,
+    spdy::Http2HeaderBlock expected_header_list) {
   if (decoded_header_list == expected_header_list) {
     return true;
   }
@@ -312,7 +312,8 @@
   // Remove such headers one by one if they match.
   const char* kContentLength = "content-length";
   const char* kPseudoHeaderPrefix = ":";
-  for (spdy::SpdyHeaderBlock::iterator decoded_it = decoded_header_list.begin();
+  for (spdy::Http2HeaderBlock::iterator decoded_it =
+           decoded_header_list.begin();
        decoded_it != decoded_header_list.end();) {
     const absl::string_view key = decoded_it->first;
     if (key != kContentLength &&
@@ -320,7 +321,7 @@
       ++decoded_it;
       continue;
     }
-    spdy::SpdyHeaderBlock::iterator expected_it =
+    spdy::Http2HeaderBlock::iterator expected_it =
         expected_header_list.find(key);
     if (expected_it == expected_header_list.end() ||
         decoded_it->second != expected_it->second) {
diff --git a/quic/test_tools/qpack/qpack_offline_decoder.h b/quic/test_tools/qpack/qpack_offline_decoder.h
index 47b93fc..eea0b06 100644
--- a/quic/test_tools/qpack/qpack_offline_decoder.h
+++ b/quic/test_tools/qpack/qpack_offline_decoder.h
@@ -64,13 +64,13 @@
   // |*expected_header_list|, removing consumed data from the beginning of
   // |*expected_headers_data|.  Returns true on success, false if parsing fails.
   bool ReadNextExpectedHeaderList(absl::string_view* expected_headers_data,
-                                  spdy::SpdyHeaderBlock* expected_header_list);
+                                  spdy::Http2HeaderBlock* expected_header_list);
 
   // Compare two header lists.  Allow for different orders of certain headers as
   // described at
   // https://github.com/qpackers/qifs/blob/master/encoded/qpack-03/h2o/README.md.
-  bool CompareHeaderBlocks(spdy::SpdyHeaderBlock decoded_header_list,
-                           spdy::SpdyHeaderBlock expected_header_list);
+  bool CompareHeaderBlocks(spdy::Http2HeaderBlock decoded_header_list,
+                           spdy::Http2HeaderBlock expected_header_list);
 
   bool encoder_stream_error_detected_;
   test::NoopQpackStreamSenderDelegate decoder_stream_sender_delegate_;
@@ -80,7 +80,7 @@
   std::list<Decoder> decoders_;
 
   // Decoded header lists.
-  std::list<spdy::SpdyHeaderBlock> decoded_header_lists_;
+  std::list<spdy::Http2HeaderBlock> decoded_header_lists_;
 };
 
 }  // namespace quic
