diff --git a/quiche/spdy/core/hpack/hpack_decoder_adapter.cc b/quiche/spdy/core/hpack/hpack_decoder_adapter.cc
index 874a794..122fe45 100644
--- a/quiche/spdy/core/hpack/hpack_decoder_adapter.cc
+++ b/quiche/spdy/core/hpack/hpack_decoder_adapter.cc
@@ -98,7 +98,7 @@
   return true;
 }
 
-const SpdyHeaderBlock& HpackDecoderAdapter::decoded_block() const {
+const Http2HeaderBlock& HpackDecoderAdapter::decoded_block() const {
   return listener_adapter_.decoded_block();
 }
 
@@ -148,7 +148,7 @@
 
 void HpackDecoderAdapter::ListenerAdapter::OnHeaderListEnd() {
   QUICHE_DVLOG(2) << "HpackDecoderAdapter::ListenerAdapter::OnHeaderListEnd";
-  // We don't clear the SpdyHeaderBlock here to allow access to it until the
+  // We don't clear the Http2HeaderBlock here to allow access to it until the
   // next HPACK block is decoded.
   if (handler_ != nullptr) {
     handler_->OnHeaderBlockEnd(total_uncompressed_bytes_, total_hpack_bytes_);
diff --git a/quiche/spdy/core/hpack/hpack_decoder_adapter.h b/quiche/spdy/core/hpack/hpack_decoder_adapter.h
index d1eefbd..5cd16fc 100644
--- a/quiche/spdy/core/hpack/hpack_decoder_adapter.h
+++ b/quiche/spdy/core/hpack/hpack_decoder_adapter.h
@@ -20,7 +20,7 @@
 #include "quiche/http2/hpack/http2_hpack_constants.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/spdy/core/hpack/hpack_header_table.h"
-#include "quiche/spdy/core/spdy_header_block.h"
+#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_headers_handler_interface.h"
 
 namespace spdy {
@@ -43,7 +43,7 @@
   size_t GetCurrentHeaderTableSizeSetting() const;
 
   // If a SpdyHeadersHandlerInterface is provided, the decoder will emit
-  // headers to it rather than accumulating them in a SpdyHeaderBlock.
+  // headers to it rather than accumulating them in a Http2HeaderBlock.
   // Does not take ownership of the handler, but does use the pointer until
   // the current HPACK block is completely decoded.
   void HandleControlFrameHeadersStart(SpdyHeadersHandlerInterface* handler);
@@ -65,7 +65,7 @@
   // call to HandleControlFrameHeadersData().
   // TODO(birenroy): Remove this method when all users of HpackDecoder specify
   // a SpdyHeadersHandlerInterface.
-  const SpdyHeaderBlock& decoded_block() const;
+  const Http2HeaderBlock& decoded_block() const;
 
   // Returns the current dynamic table size, including the 32 bytes per entry
   // overhead mentioned in RFC 7541 section 4.1.
@@ -98,11 +98,11 @@
     ~ListenerAdapter() override;
 
     // If a SpdyHeadersHandlerInterface is provided, the decoder will emit
-    // headers to it rather than accumulating them in a SpdyHeaderBlock.
+    // headers to it rather than accumulating them in a Http2HeaderBlock.
     // Does not take ownership of the handler, but does use the pointer until
     // the current HPACK block is completely decoded.
     void set_handler(SpdyHeadersHandlerInterface* handler);
-    const SpdyHeaderBlock& decoded_block() const { return decoded_block_; }
+    const Http2HeaderBlock& decoded_block() const { return decoded_block_; }
 
     // Override the HpackDecoderListener methods:
     void OnHeaderListStart() override;
@@ -115,8 +115,8 @@
 
    private:
     // If the caller doesn't provide a handler, the header list is stored in
-    // this SpdyHeaderBlock.
-    SpdyHeaderBlock decoded_block_;
+    // this Http2HeaderBlock.
+    Http2HeaderBlock decoded_block_;
 
     // If non-NULL, handles decoded headers. Not owned.
     SpdyHeadersHandlerInterface* handler_;
diff --git a/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc b/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc
index 5df9d82..2143807 100644
--- a/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc
+++ b/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc
@@ -197,7 +197,7 @@
     return DecodeHeaderBlock(hbb.buffer());
   }
 
-  const SpdyHeaderBlock& decoded_block() const {
+  const Http2HeaderBlock& decoded_block() const {
     if (start_choice_ == START_WITH_HANDLER) {
       return handler_.decoded_block();
     } else {
@@ -205,7 +205,7 @@
     }
   }
 
-  static size_t SizeOfHeaders(const SpdyHeaderBlock& headers) {
+  static size_t SizeOfHeaders(const Http2HeaderBlock& headers) {
     size_t size = 0;
     for (const auto& kv : headers) {
       if (kv.first == kCookieKey) {
@@ -221,7 +221,7 @@
     return size;
   }
 
-  const SpdyHeaderBlock& DecodeBlockExpectingSuccess(absl::string_view str) {
+  const Http2HeaderBlock& DecodeBlockExpectingSuccess(absl::string_view str) {
     EXPECT_TRUE(DecodeHeaderBlock(str));
     return decoded_block();
   }
@@ -234,9 +234,9 @@
     EXPECT_EQ(size, entry->size());
   }
 
-  SpdyHeaderBlock MakeHeaderBlock(
+  Http2HeaderBlock MakeHeaderBlock(
       const std::vector<std::pair<std::string, std::string>>& headers) {
-    SpdyHeaderBlock result;
+    Http2HeaderBlock result;
     for (const auto& kv : headers) {
       result.AppendValueOrAddHeader(kv.first, kv.second);
     }
@@ -289,7 +289,7 @@
   EXPECT_TRUE(HandleControlFrameHeadersData(s.substr(s.size() / 2)));
 
   EXPECT_FALSE(HandleControlFrameHeadersData(s));
-  SpdyHeaderBlock expected_block = MakeHeaderBlock({{"a", a_value}});
+  Http2HeaderBlock expected_block = MakeHeaderBlock({{"a", a_value}});
   EXPECT_EQ(expected_block, decoded_block());
 }
 
@@ -365,7 +365,7 @@
   std::vector<std::pair<std::string, std::string>> expected_headers = {
       {":method", "GET"}, {":path", "/index.html"}, {":method", "GET"}};
 
-  SpdyHeaderBlock expected_block1 = MakeHeaderBlock(expected_headers);
+  Http2HeaderBlock expected_block1 = MakeHeaderBlock(expected_headers);
   EXPECT_EQ(expected_block1, decoded_block());
 
   // Full and partial headers, won't add partial to the headers.
@@ -375,7 +375,7 @@
   expected_headers.push_back({"goo", "gar"});
   expected_headers.push_back({"goo", "gar"});
 
-  SpdyHeaderBlock expected_block2 = MakeHeaderBlock(expected_headers);
+  Http2HeaderBlock expected_block2 = MakeHeaderBlock(expected_headers);
   EXPECT_EQ(expected_block2, decoded_block());
 
   // Add the needed data.
@@ -385,7 +385,7 @@
 
   expected_headers.push_back({"spam", "gggs"});
 
-  SpdyHeaderBlock expected_block3 = MakeHeaderBlock(expected_headers);
+  Http2HeaderBlock expected_block3 = MakeHeaderBlock(expected_headers);
   EXPECT_EQ(expected_block3, decoded_block());
 }
 
@@ -437,44 +437,44 @@
 // Decoding indexed static table field should work.
 TEST_P(HpackDecoderAdapterTest, IndexedHeaderStatic) {
   // Reference static table entries #2 and #5.
-  const SpdyHeaderBlock& header_set1 = DecodeBlockExpectingSuccess("\x82\x85");
-  SpdyHeaderBlock expected_header_set1;
+  const Http2HeaderBlock& header_set1 = DecodeBlockExpectingSuccess("\x82\x85");
+  Http2HeaderBlock expected_header_set1;
   expected_header_set1[":method"] = "GET";
   expected_header_set1[":path"] = "/index.html";
   EXPECT_EQ(expected_header_set1, header_set1);
 
   // Reference static table entry #2.
-  const SpdyHeaderBlock& header_set2 = DecodeBlockExpectingSuccess("\x82");
-  SpdyHeaderBlock expected_header_set2;
+  const Http2HeaderBlock& header_set2 = DecodeBlockExpectingSuccess("\x82");
+  Http2HeaderBlock expected_header_set2;
   expected_header_set2[":method"] = "GET";
   EXPECT_EQ(expected_header_set2, header_set2);
 }
 
 TEST_P(HpackDecoderAdapterTest, IndexedHeaderDynamic) {
   // First header block: add an entry to header table.
-  const SpdyHeaderBlock& header_set1 = DecodeBlockExpectingSuccess(
+  const Http2HeaderBlock& header_set1 = DecodeBlockExpectingSuccess(
       "\x40\x03"
       "foo"
       "\x03"
       "bar");
-  SpdyHeaderBlock expected_header_set1;
+  Http2HeaderBlock expected_header_set1;
   expected_header_set1["foo"] = "bar";
   EXPECT_EQ(expected_header_set1, header_set1);
 
   // Second header block: add another entry to header table.
-  const SpdyHeaderBlock& header_set2 = DecodeBlockExpectingSuccess(
+  const Http2HeaderBlock& header_set2 = DecodeBlockExpectingSuccess(
       "\xbe\x40\x04"
       "spam"
       "\x04"
       "eggs");
-  SpdyHeaderBlock expected_header_set2;
+  Http2HeaderBlock expected_header_set2;
   expected_header_set2["foo"] = "bar";
   expected_header_set2["spam"] = "eggs";
   EXPECT_EQ(expected_header_set2, header_set2);
 
   // Third header block: refer to most recently added entry.
-  const SpdyHeaderBlock& header_set3 = DecodeBlockExpectingSuccess("\xbe");
-  SpdyHeaderBlock expected_header_set3;
+  const Http2HeaderBlock& header_set3 = DecodeBlockExpectingSuccess("\xbe");
+  Http2HeaderBlock expected_header_set3;
   expected_header_set3["spam"] = "eggs";
   EXPECT_EQ(expected_header_set3, header_set3);
 }
@@ -608,10 +608,10 @@
   // First header with indexed name, second header with string literal
   // name.
   const char input[] = "\x04\x0c/sample/path\x00\x06:path2\x0e/sample/path/2";
-  const SpdyHeaderBlock& header_set = DecodeBlockExpectingSuccess(
+  const Http2HeaderBlock& header_set = DecodeBlockExpectingSuccess(
       absl::string_view(input, ABSL_ARRAYSIZE(input) - 1));
 
-  SpdyHeaderBlock expected_header_set;
+  Http2HeaderBlock expected_header_set;
   expected_header_set[":path"] = "/sample/path";
   expected_header_set[":path2"] = "/sample/path/2";
   EXPECT_EQ(expected_header_set, header_set);
@@ -621,10 +621,10 @@
 // indexing and string literal names should work.
 TEST_P(HpackDecoderAdapterTest, LiteralHeaderIncrementalIndexing) {
   const char input[] = "\x44\x0c/sample/path\x40\x06:path2\x0e/sample/path/2";
-  const SpdyHeaderBlock& header_set = DecodeBlockExpectingSuccess(
+  const Http2HeaderBlock& header_set = DecodeBlockExpectingSuccess(
       absl::string_view(input, ABSL_ARRAYSIZE(input) - 1));
 
-  SpdyHeaderBlock expected_header_set;
+  Http2HeaderBlock expected_header_set;
   expected_header_set[":path"] = "/sample/path";
   expected_header_set[":path2"] = "/sample/path/2";
   EXPECT_EQ(expected_header_set, header_set);
@@ -705,7 +705,7 @@
 TEST_P(HpackDecoderAdapterTest, BasicC31) {
   HpackEncoder encoder;
 
-  SpdyHeaderBlock expected_header_set;
+  Http2HeaderBlock expected_header_set;
   expected_header_set[":method"] = "GET";
   expected_header_set[":scheme"] = "http";
   expected_header_set[":path"] = "/";
@@ -744,7 +744,7 @@
   //                                         | -> :authority: www.example.com
   std::string first =
       absl::HexStringToBytes("828684418cf1e3c2e5f23a6ba0ab90f4ff");
-  const SpdyHeaderBlock& first_header_set = DecodeBlockExpectingSuccess(first);
+  const Http2HeaderBlock& first_header_set = DecodeBlockExpectingSuccess(first);
 
   EXPECT_THAT(first_header_set,
               ElementsAre(
@@ -781,7 +781,7 @@
   //                                         | -> cache-control: no-cache
 
   std::string second = absl::HexStringToBytes("828684be5886a8eb10649cbf");
-  const SpdyHeaderBlock& second_header_set =
+  const Http2HeaderBlock& second_header_set =
       DecodeBlockExpectingSuccess(second);
 
   EXPECT_THAT(second_header_set,
@@ -824,7 +824,7 @@
   //                                         | -> custom-key: custom-value
   std::string third = absl::HexStringToBytes(
       "828785bf408825a849e95ba97d7f8925a849e95bb8e8b4bf");
-  const SpdyHeaderBlock& third_header_set = DecodeBlockExpectingSuccess(third);
+  const Http2HeaderBlock& third_header_set = DecodeBlockExpectingSuccess(third);
 
   EXPECT_THAT(
       third_header_set,
@@ -897,7 +897,7 @@
       "941054d444a8200595040b8166e082a6"
       "2d1bff6e919d29ad171863c78f0b97c8"
       "e9ae82ae43d3");
-  const SpdyHeaderBlock& first_header_set = DecodeBlockExpectingSuccess(first);
+  const Http2HeaderBlock& first_header_set = DecodeBlockExpectingSuccess(first);
 
   EXPECT_THAT(first_header_set,
               ElementsAre(
@@ -936,7 +936,7 @@
   //                                         | -> location:
   //                                         |   https://www.example.com
   std::string second = absl::HexStringToBytes("4883640effc1c0bf");
-  const SpdyHeaderBlock& second_header_set =
+  const Http2HeaderBlock& second_header_set =
       DecodeBlockExpectingSuccess(second);
 
   EXPECT_THAT(second_header_set,
@@ -1013,7 +1013,7 @@
       "77ad94e7821dd7f2e6c7b335dfdfcd5b"
       "3960d5af27087f3672c1ab270fb5291f"
       "9587316065c003ed4ee5b1063d5007");
-  const SpdyHeaderBlock& third_header_set = DecodeBlockExpectingSuccess(third);
+  const Http2HeaderBlock& third_header_set = DecodeBlockExpectingSuccess(third);
 
   EXPECT_THAT(third_header_set,
               ElementsAre(
@@ -1077,12 +1077,12 @@
   hbb.AppendIndexedHeader(62);
 
   // Can't have DecodeHeaderBlock do the default check for size of the decoded
-  // data because SpdyHeaderBlock will join multiple headers with the same
+  // data because Http2HeaderBlock will join multiple headers with the same
   // name into a single entry, thus we won't see repeated occurrences of the
   // name, instead seeing separators between values.
   EXPECT_TRUE(DecodeHeaderBlock(hbb.buffer(), kNoCheckDecodedSize));
 
-  SpdyHeaderBlock expected_header_set;
+  Http2HeaderBlock expected_header_set;
   expected_header_set.AppendValueOrAddHeader(name, value1);
   expected_header_set.AppendValueOrAddHeader(name, value1);
   expected_header_set.AppendValueOrAddHeader(name, value2);
@@ -1090,7 +1090,7 @@
   expected_header_set.AppendValueOrAddHeader(name, value3);
   expected_header_set.AppendValueOrAddHeader(name, value3);
 
-  // SpdyHeaderBlock stores these 6 strings as '\0' separated values.
+  // Http2HeaderBlock stores these 6 strings as '\0' separated values.
   // Make sure that is what happened.
   std::string joined_values = expected_header_set[name].as_string();
   EXPECT_EQ(joined_values.size(),
@@ -1107,7 +1107,7 @@
 
 // Regression test for https://crbug.com/747395.
 TEST_P(HpackDecoderAdapterTest, Cookies) {
-  SpdyHeaderBlock expected_header_set;
+  Http2HeaderBlock expected_header_set;
   expected_header_set["cookie"] = "foo; bar";
 
   EXPECT_TRUE(DecodeHeaderBlock(absl::HexStringToBytes("608294e76003626172")));
diff --git a/quiche/spdy/core/hpack/hpack_encoder.cc b/quiche/spdy/core/hpack/hpack_encoder.cc
index 7bfb8a4..3b95cfe 100644
--- a/quiche/spdy/core/hpack/hpack_encoder.cc
+++ b/quiche/spdy/core/hpack/hpack_encoder.cc
@@ -84,7 +84,8 @@
 
 HpackEncoder::~HpackEncoder() = default;
 
-std::string HpackEncoder::EncodeHeaderBlock(const SpdyHeaderBlock& header_set) {
+std::string HpackEncoder::EncodeHeaderBlock(
+    const Http2HeaderBlock& header_set) {
   // Separate header set into pseudo-headers and regular headers.
   Representations pseudo_headers;
   Representations regular_headers;
@@ -265,10 +266,10 @@
   }
 }
 
-// Iteratively encodes a SpdyHeaderBlock.
+// Iteratively encodes a Http2HeaderBlock.
 class HpackEncoder::Encoderator : public ProgressiveEncoder {
  public:
-  Encoderator(const SpdyHeaderBlock& header_set, HpackEncoder* encoder);
+  Encoderator(const Http2HeaderBlock& header_set, HpackEncoder* encoder);
   Encoderator(const Representations& representations, HpackEncoder* encoder);
 
   // Encoderator is neither copyable nor movable.
@@ -289,7 +290,7 @@
   bool has_next_;
 };
 
-HpackEncoder::Encoderator::Encoderator(const SpdyHeaderBlock& header_set,
+HpackEncoder::Encoderator::Encoderator(const Http2HeaderBlock& header_set,
                                        HpackEncoder* encoder)
     : encoder_(encoder), has_next_(true) {
   // Separate header set into pseudo-headers and regular headers.
@@ -362,7 +363,7 @@
 }
 
 std::unique_ptr<HpackEncoder::ProgressiveEncoder> HpackEncoder::EncodeHeaderSet(
-    const SpdyHeaderBlock& header_set) {
+    const Http2HeaderBlock& header_set) {
   return std::make_unique<Encoderator>(header_set, this);
 }
 
diff --git a/quiche/spdy/core/hpack/hpack_encoder.h b/quiche/spdy/core/hpack/hpack_encoder.h
index 4974e19..d63c9f2 100644
--- a/quiche/spdy/core/hpack/hpack_encoder.h
+++ b/quiche/spdy/core/hpack/hpack_encoder.h
@@ -18,6 +18,7 @@
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/spdy/core/hpack/hpack_header_table.h"
 #include "quiche/spdy/core/hpack/hpack_output_stream.h"
+#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
 // An HpackEncoder encodes header sets as outlined in
@@ -50,7 +51,7 @@
   ~HpackEncoder();
 
   // Encodes and returns the given header set as a string.
-  std::string EncodeHeaderBlock(const SpdyHeaderBlock& header_set);
+  std::string EncodeHeaderBlock(const Http2HeaderBlock& header_set);
 
   class QUICHE_EXPORT_PRIVATE ProgressiveEncoder {
    public:
@@ -64,9 +65,9 @@
   };
 
   // Returns a ProgressiveEncoder which must be outlived by both the given
-  // SpdyHeaderBlock and this object.
+  // Http2HeaderBlock and this object.
   std::unique_ptr<ProgressiveEncoder> EncodeHeaderSet(
-      const SpdyHeaderBlock& header_set);
+      const Http2HeaderBlock& header_set);
   // Returns a ProgressiveEncoder which must be outlived by this HpackEncoder.
   // The encoder will not attempt to split any \0-delimited values in
   // |representations|. If such splitting is desired, it must be performed by
diff --git a/quiche/spdy/core/hpack/hpack_encoder_test.cc b/quiche/spdy/core/hpack/hpack_encoder_test.cc
index 9402512..fe80ffe 100644
--- a/quiche/spdy/core/hpack/hpack_encoder_test.cc
+++ b/quiche/spdy/core/hpack/hpack_encoder_test.cc
@@ -72,12 +72,12 @@
   // TODO(dahollings): Remove or clean up these methods when deprecating
   // non-incremental encoding path.
   static std::string EncodeHeaderBlock(HpackEncoder* encoder,
-                                       const SpdyHeaderBlock& header_set) {
+                                       const Http2HeaderBlock& header_set) {
     return encoder->EncodeHeaderBlock(header_set);
   }
 
   static bool EncodeIncremental(HpackEncoder* encoder,
-                                const SpdyHeaderBlock& header_set,
+                                const Http2HeaderBlock& header_set,
                                 std::string* output) {
     std::unique_ptr<HpackEncoder::ProgressiveEncoder> encoderator =
         encoder->EncodeHeaderSet(header_set);
@@ -209,14 +209,14 @@
     expected_.AppendPrefix(kHeaderTableSizeUpdateOpcode);
     expected_.AppendUint32(size);
   }
-  Representations MakeRepresentations(const SpdyHeaderBlock& header_set) {
+  Representations MakeRepresentations(const Http2HeaderBlock& header_set) {
     Representations r;
     for (const auto& header : header_set) {
       r.push_back(header);
     }
     return r;
   }
-  void CompareWithExpectedEncoding(const SpdyHeaderBlock& header_set) {
+  void CompareWithExpectedEncoding(const Http2HeaderBlock& header_set) {
     std::string actual_out;
     std::string expected_out = expected_.TakeString();
     switch (strategy_) {
@@ -348,7 +348,7 @@
 
   ExpectIndex(DynamicIndexToWireIndex(key_2_index_));
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers[key_2_->name()] = key_2_->value();
   CompareWithExpectedEncoding(headers);
   EXPECT_THAT(headers_observed_,
@@ -358,7 +358,7 @@
 TEST_P(HpackEncoderTest, SingleStaticIndex) {
   ExpectIndex(kStaticEntryIndex);
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers[static_->name()] = static_->value();
   CompareWithExpectedEncoding(headers);
 }
@@ -367,7 +367,7 @@
   peer_.table()->SetMaxSize(1);  // Also evicts all fixtures.
   ExpectIndex(kStaticEntryIndex);
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers[static_->name()] = static_->value();
   CompareWithExpectedEncoding(headers);
 
@@ -377,7 +377,7 @@
 TEST_P(HpackEncoderTest, SingleLiteralWithIndexName) {
   ExpectIndexedLiteral(DynamicIndexToWireIndex(key_2_index_), "value3");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers[key_2_->name()] = "value3";
   CompareWithExpectedEncoding(headers);
 
@@ -390,7 +390,7 @@
 TEST_P(HpackEncoderTest, SingleLiteralWithLiteralName) {
   ExpectIndexedLiteral("key3", "value3");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers["key3"] = "value3";
   CompareWithExpectedEncoding(headers);
 
@@ -406,7 +406,7 @@
 
   // A header overflowing the header table is still emitted.
   // The header table is empty.
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers["key3"] = "value3";
   CompareWithExpectedEncoding(headers);
 
@@ -419,7 +419,7 @@
   ExpectIndex(DynamicIndexToWireIndex(key_1_index_));
   ExpectIndexedLiteral("key3", "value3");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers[key_1_->name()] = key_1_->value();
   headers["key3"] = "value3";
   CompareWithExpectedEncoding(headers);
@@ -430,14 +430,14 @@
   ExpectIndex(DynamicIndexToWireIndex(cookie_c_index_));
   ExpectIndexedLiteral(peer_.table()->GetByName("cookie"), "e=ff");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers["cookie"] = "a=bb; c=dd; e=ff";
   CompareWithExpectedEncoding(headers);
 }
 
 TEST_P(HpackEncoderTest, MultiValuedHeadersNotCrumbled) {
   ExpectIndexedLiteral("foo", "bar, baz");
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers["foo"] = "bar, baz";
   CompareWithExpectedEncoding(headers);
 }
@@ -479,7 +479,7 @@
   }
   ExpectNonIndexedLiteral("multivalue", "value1, value2");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers[":path"] = "/index.html";
   headers["cookie"] = "foo=bar; baz=bing";
   headers["hello"] = "goodbye";
@@ -514,7 +514,7 @@
 
   // Pass 1.
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers["key1"] = "value1";
     headers["cookie"] = "a=bb";
 
@@ -529,7 +529,7 @@
   // 62: cookie: c=dd
   // Pass 2.
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers["key2"] = "value2";
     headers["cookie"] = "c=dd; e=ff";
 
@@ -550,7 +550,7 @@
   // 62: cookie: e=ff
   // Pass 3.
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers["key2"] = "value2";
     headers["cookie"] = "a=bb; b=cc; c=dd";
 
@@ -584,7 +584,7 @@
 }
 
 TEST_P(HpackEncoderTest, PseudoHeadersFirst) {
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   // A pseudo-header that should not be indexed.
   headers[":path"] = "/spam/eggs.html";
   // A pseudo-header to be indexed.
@@ -672,7 +672,7 @@
     // caller must crumble null-delimited values.
     return;
   }
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   // A header field to be crumbled: "spam: foo\0bar".
   headers["spam"] = std::string("foo\0bar", 7);
 
@@ -690,7 +690,7 @@
   ExpectHeaderTableSizeUpdate(1024);
   ExpectIndexedLiteral("key3", "value3");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers["key3"] = "value3";
   CompareWithExpectedEncoding(headers);
 
@@ -709,7 +709,7 @@
   ExpectHeaderTableSizeUpdate(starting_size - 1);
   ExpectIndexedLiteral("key3", "value3");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers["key3"] = "value3";
   CompareWithExpectedEncoding(headers);
 
@@ -723,7 +723,7 @@
   // No encoded size update.
   ExpectIndexedLiteral("key3", "value3");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers["key3"] = "value3";
   CompareWithExpectedEncoding(headers);
 
@@ -740,7 +740,7 @@
   ExpectHeaderTableSizeUpdate(starting_size + 2);
   ExpectIndexedLiteral("key3", "value3");
 
-  SpdyHeaderBlock headers;
+  Http2HeaderBlock headers;
   headers["key3"] = "value3";
   CompareWithExpectedEncoding(headers);
 
diff --git a/quiche/spdy/core/hpack/hpack_round_trip_test.cc b/quiche/spdy/core/hpack/hpack_round_trip_test.cc
index 27e1bcc..44a36d3 100644
--- a/quiche/spdy/core/hpack/hpack_round_trip_test.cc
+++ b/quiche/spdy/core/hpack/hpack_round_trip_test.cc
@@ -12,6 +12,7 @@
 #include "quiche/spdy/core/hpack/hpack_constants.h"
 #include "quiche/spdy/core/hpack/hpack_decoder_adapter.h"
 #include "quiche/spdy/core/hpack/hpack_encoder.h"
+#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/test_tools/spdy_test_utils.h"
 
 namespace spdy {
@@ -31,7 +32,7 @@
     decoder_.ApplyHeaderTableSizeSetting(256);
   }
 
-  bool RoundTrip(const SpdyHeaderBlock& header_set) {
+  bool RoundTrip(const Http2HeaderBlock& header_set) {
     std::string encoded = encoder_.EncodeHeaderBlock(header_set);
 
     bool success = true;
@@ -81,7 +82,7 @@
 
 TEST_P(HpackRoundTripTest, ResponseFixtures) {
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers[":status"] = "302";
     headers["cache-control"] = "private";
     headers["date"] = "Mon, 21 Oct 2013 20:13:21 GMT";
@@ -89,7 +90,7 @@
     EXPECT_TRUE(RoundTrip(headers));
   }
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers[":status"] = "200";
     headers["cache-control"] = "private";
     headers["date"] = "Mon, 21 Oct 2013 20:13:21 GMT";
@@ -97,7 +98,7 @@
     EXPECT_TRUE(RoundTrip(headers));
   }
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers[":status"] = "200";
     headers["cache-control"] = "private";
     headers["content-encoding"] = "gzip";
@@ -113,7 +114,7 @@
 
 TEST_P(HpackRoundTripTest, RequestFixtures) {
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers[":authority"] = "www.example.com";
     headers[":method"] = "GET";
     headers[":path"] = "/";
@@ -122,7 +123,7 @@
     EXPECT_TRUE(RoundTrip(headers));
   }
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers[":authority"] = "www.example.com";
     headers[":method"] = "GET";
     headers[":path"] = "/";
@@ -132,7 +133,7 @@
     EXPECT_TRUE(RoundTrip(headers));
   }
   {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
     headers[":authority"] = "www.example.com";
     headers[":method"] = "GET";
     headers[":path"] = "/index.html";
@@ -166,7 +167,7 @@
   values.push_back("baz=bing; fizzle=fazzle; garbage");
 
   for (size_t i = 0; i != 2000; ++i) {
-    SpdyHeaderBlock headers;
+    Http2HeaderBlock headers;
 
     // Choose a random number of headers to add, and of these a random subset
     // will be HTTP/2 pseudo headers.
diff --git a/quiche/spdy/core/http2_frame_decoder_adapter.cc b/quiche/spdy/core/http2_frame_decoder_adapter.cc
index fb48a7d..303f037 100644
--- a/quiche/spdy/core/http2_frame_decoder_adapter.cc
+++ b/quiche/spdy/core/http2_frame_decoder_adapter.cc
@@ -27,7 +27,6 @@
 #include "quiche/spdy/core/hpack/hpack_decoder_adapter.h"
 #include "quiche/spdy/core/hpack/hpack_header_table.h"
 #include "quiche/spdy/core/spdy_alt_svc_wire_format.h"
-#include "quiche/spdy/core/spdy_header_block.h"
 #include "quiche/spdy/core/spdy_headers_handler_interface.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
diff --git a/quiche/spdy/core/http2_header_block_hpack_listener.h b/quiche/spdy/core/http2_header_block_hpack_listener.h
index 0c21632..598ec96 100644
--- a/quiche/spdy/core/http2_header_block_hpack_listener.h
+++ b/quiche/spdy/core/http2_header_block_hpack_listener.h
@@ -5,12 +5,12 @@
 #include "quiche/http2/hpack/decoder/hpack_decoder_listener.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/spdy/core/spdy_header_block.h"
+#include "quiche/spdy/core/http2_header_block.h"
 
 namespace spdy {
 
 // This class simply gathers the key-value pairs emitted by an HpackDecoder in
-// a SpdyHeaderBlock.
+// a Http2HeaderBlock.
 class QUICHE_EXPORT_PRIVATE Http2HeaderBlockHpackListener
     : public http2::HpackDecoderListener {
  public:
@@ -32,15 +32,15 @@
     hpack_error_ = true;
   }
 
-  SpdyHeaderBlock release_header_block() {
-    SpdyHeaderBlock block = std::move(header_block_);
+  Http2HeaderBlock release_header_block() {
+    Http2HeaderBlock block = std::move(header_block_);
     header_block_ = {};
     return block;
   }
   bool hpack_error() const { return hpack_error_; }
 
  private:
-  SpdyHeaderBlock header_block_;
+  Http2HeaderBlock header_block_;
   bool hpack_error_ = false;
 };
 
diff --git a/quiche/spdy/core/metadata_extension.h b/quiche/spdy/core/metadata_extension.h
index 12d817c..2b757b5 100644
--- a/quiche/spdy/core/metadata_extension.h
+++ b/quiche/spdy/core/metadata_extension.h
@@ -9,7 +9,7 @@
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/spdy/core/hpack/hpack_encoder.h"
 #include "quiche/spdy/core/http2_frame_decoder_adapter.h"
-#include "quiche/spdy/core/spdy_header_block.h"
+#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 #include "quiche/spdy/core/zero_copy_output_buffer.h"
 
@@ -24,7 +24,7 @@
 class QUICHE_EXPORT_PRIVATE MetadataVisitor
     : public spdy::ExtensionVisitorInterface {
  public:
-  using MetadataPayload = spdy::SpdyHeaderBlock;
+  using MetadataPayload = spdy::Http2HeaderBlock;
 
   static_assert(!std::is_copy_constructible<MetadataPayload>::value,
                 "MetadataPayload should be a move-only type!");
diff --git a/quiche/spdy/core/metadata_extension_test.cc b/quiche/spdy/core/metadata_extension_test.cc
index 628b7c4..dae1e7e 100644
--- a/quiche/spdy/core/metadata_extension_test.cc
+++ b/quiche/spdy/core/metadata_extension_test.cc
@@ -7,7 +7,6 @@
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/spdy/core/array_output_buffer.h"
 #include "quiche/spdy/core/spdy_framer.h"
-#include "quiche/spdy/core/spdy_header_block.h"
 #include "quiche/spdy/core/spdy_no_op_visitor.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 #include "quiche/spdy/test_tools/mock_spdy_framer_visitor.h"
@@ -53,7 +52,7 @@
   }
 
   std::unique_ptr<MetadataVisitor> extension_;
-  absl::flat_hash_map<spdy::SpdyStreamId, SpdyHeaderBlock>
+  absl::flat_hash_map<spdy::SpdyStreamId, Http2HeaderBlock>
       received_payload_map_;
   std::vector<bool> received_metadata_support_;
   size_t received_count_ = 0;
@@ -83,7 +82,7 @@
 
 TEST_F(MetadataExtensionTest, MetadataDeliveredToUnknownFrameCallbacks) {
   const char kData[] = "some payload";
-  SpdyHeaderBlock payload = PayloadForData(kData);
+  Http2HeaderBlock payload = PayloadForData(kData);
 
   extension_->OnSetting(MetadataVisitor::kMetadataExtensionId, 1);
   ASSERT_TRUE(extension_->PeerSupportsMetadata());
@@ -123,9 +122,9 @@
 // This test verifies that the METADATA frame emitted by a MetadataExtension
 // can be parsed by another SpdyFramer with a MetadataVisitor.
 TEST_F(MetadataExtensionTest, MetadataPayloadEndToEnd) {
-  SpdyHeaderBlock block1;
+  Http2HeaderBlock block1;
   block1["foo"] = "Some metadata value.";
-  SpdyHeaderBlock block2;
+  Http2HeaderBlock block2;
   block2["bar"] =
       "The color taupe truly represents a triumph of the human spirit over "
       "adversity.";
@@ -135,7 +134,7 @@
   const absl::string_view binary_payload{"binary\0payload", 14};
   block2["qux"] = binary_payload;
   EXPECT_EQ(binary_payload, block2["qux"]);
-  for (const SpdyHeaderBlock& payload_block :
+  for (const Http2HeaderBlock& payload_block :
        {std::move(block1), std::move(block2)}) {
     extension_->OnSetting(MetadataVisitor::kMetadataExtensionId, 1);
     ASSERT_TRUE(extension_->PeerSupportsMetadata());
@@ -173,8 +172,8 @@
 TEST_F(MetadataExtensionTest, MetadataPayloadInterleaved) {
   const std::string kData1 = std::string(65 * 1024, 'a');
   const std::string kData2 = std::string(65 * 1024, 'b');
-  const SpdyHeaderBlock payload1 = PayloadForData(kData1);
-  const SpdyHeaderBlock payload2 = PayloadForData(kData2);
+  const Http2HeaderBlock payload1 = PayloadForData(kData1);
+  const Http2HeaderBlock payload2 = PayloadForData(kData2);
 
   extension_->OnSetting(MetadataVisitor::kMetadataExtensionId, 1);
   ASSERT_TRUE(extension_->PeerSupportsMetadata());
diff --git a/quiche/spdy/core/recording_headers_handler.h b/quiche/spdy/core/recording_headers_handler.h
index a2c06ec..a605944 100644
--- a/quiche/spdy/core/recording_headers_handler.h
+++ b/quiche/spdy/core/recording_headers_handler.h
@@ -11,7 +11,7 @@
 
 #include "absl/strings/string_view.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/spdy/core/spdy_header_block.h"
+#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_headers_handler_interface.h"
 
 namespace spdy {
diff --git a/quiche/spdy/core/spdy_framer.cc b/quiche/spdy/core/spdy_framer.cc
index a127c1b..8b7d69e 100644
--- a/quiche/spdy/core/spdy_framer.cc
+++ b/quiche/spdy/core/spdy_framer.cc
@@ -90,7 +90,7 @@
 }
 
 // Serializes a HEADERS frame from the given SpdyHeadersIR and encoded header
-// block. Does not need or use the SpdyHeaderBlock inside SpdyHeadersIR.
+// block. Does not need or use the Http2HeaderBlock inside SpdyHeadersIR.
 // Return false if the serialization fails. |encoding| should not be empty.
 bool SerializeHeadersGivenEncoding(const SpdyHeadersIR& headers,
                                    const std::string& encoding,
@@ -133,7 +133,7 @@
 }
 
 // Serializes a PUSH_PROMISE frame from the given SpdyPushPromiseIR and
-// encoded header block. Does not need or use the SpdyHeaderBlock inside
+// encoded header block. Does not need or use the Http2HeaderBlock inside
 // SpdyPushPromiseIR.
 bool SerializePushPromiseGivenEncoding(const SpdyPushPromiseIR& push_promise,
                                        const std::string& encoding,
diff --git a/quiche/spdy/core/spdy_framer.h b/quiche/spdy/core/spdy_framer.h
index 8af13f5..db8a64a 100644
--- a/quiche/spdy/core/spdy_framer.h
+++ b/quiche/spdy/core/spdy_framer.h
@@ -16,8 +16,8 @@
 #include "absl/strings/string_view.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/spdy/core/hpack/hpack_encoder.h"
+#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_alt_svc_wire_format.h"
-#include "quiche/spdy/core/spdy_header_block.h"
 #include "quiche/spdy/core/spdy_headers_handler_interface.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 #include "quiche/spdy/core/zero_copy_output_buffer.h"
@@ -293,7 +293,7 @@
   };
 
   // Iteratively converts a SpdyHeadersIR (with a possibly huge
-  // SpdyHeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
+  // Http2HeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
   // write to the output.
   class QUICHE_EXPORT_PRIVATE SpdyHeaderFrameIterator
       : public SpdyFrameIterator {
@@ -314,7 +314,7 @@
   };
 
   // Iteratively converts a SpdyPushPromiseIR (with a possibly huge
-  // SpdyHeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
+  // Http2HeaderBlock) into an appropriate sequence of SpdySerializedFrames, and
   // write to the output.
   class QUICHE_EXPORT_PRIVATE SpdyPushPromiseFrameIterator
       : public SpdyFrameIterator {
diff --git a/quiche/spdy/core/spdy_framer_test.cc b/quiche/spdy/core/spdy_framer_test.cc
index 1fbb650..dbc6073 100644
--- a/quiche/spdy/core/spdy_framer_test.cc
+++ b/quiche/spdy/core/spdy_framer_test.cc
@@ -629,7 +629,7 @@
 INSTANTIATE_TEST_SUITE_P(SpdyFramerTests, SpdyFramerTest,
                          ::testing::Values(USE, NOT_USE));
 
-// Test that we can encode and decode a SpdyHeaderBlock in serialized form.
+// Test that we can encode and decode a Http2HeaderBlock in serialized form.
 TEST_P(SpdyFramerTest, HeaderBlockInBuffer) {
   SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION);
 
diff --git a/quiche/spdy/core/spdy_protocol.h b/quiche/spdy/core/spdy_protocol.h
index 81db503..1166125 100644
--- a/quiche/spdy/core/spdy_protocol.h
+++ b/quiche/spdy/core/spdy_protocol.h
@@ -22,9 +22,9 @@
 #include "absl/strings/string_view.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_logging.h"
+#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_alt_svc_wire_format.h"
 #include "quiche/spdy/core/spdy_bitmasks.h"
-#include "quiche/spdy/core/spdy_header_block.h"
 
 namespace spdy {
 
diff --git a/quiche/spdy/test_tools/spdy_test_utils.h b/quiche/spdy/test_tools/spdy_test_utils.h
index ccbba8c..366f249 100644
--- a/quiche/spdy/test_tools/spdy_test_utils.h
+++ b/quiche/spdy/test_tools/spdy_test_utils.h
@@ -10,7 +10,7 @@
 #include <string>
 
 #include "absl/strings/string_view.h"
-#include "quiche/spdy/core/spdy_header_block.h"
+#include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
 namespace spdy {
