diff --git a/quic/core/qpack/qpack_encoder.cc b/quic/core/qpack/qpack_encoder.cc
index f19e163..9d96aa9 100644
--- a/quic/core/qpack/qpack_encoder.cc
+++ b/quic/core/qpack/qpack_encoder.cc
@@ -78,7 +78,7 @@
 
 QpackEncoder::Instructions QpackEncoder::FirstPassEncode(
     QuicStreamId stream_id,
-    const spdy::SpdyHeaderBlock& header_list,
+    const spdy::Http2HeaderBlock& header_list,
     QpackBlockingManager::IndexSet* referred_indices,
     QuicByteCount* encoder_stream_sent_byte_count) {
   // If previous instructions are buffered in |encoder_stream_sender_|,
@@ -356,7 +356,7 @@
 
 std::string QpackEncoder::EncodeHeaderList(
     QuicStreamId stream_id,
-    const spdy::SpdyHeaderBlock& header_list,
+    const spdy::Http2HeaderBlock& header_list,
     QuicByteCount* encoder_stream_sent_byte_count) {
   // Keep track of all dynamic table indices that this header block refers to so
   // that it can be passed to QpackBlockingManager.
diff --git a/quic/core/qpack/qpack_encoder.h b/quic/core/qpack/qpack_encoder.h
index 7b99a65..c6c8aa5 100644
--- a/quic/core/qpack/qpack_encoder.h
+++ b/quic/core/qpack/qpack_encoder.h
@@ -52,7 +52,7 @@
   // |*encoder_stream_sent_byte_count| will be set to the number of bytes sent
   // on the encoder stream to insert dynamic table entries.
   std::string EncodeHeaderList(QuicStreamId stream_id,
-                               const spdy::SpdyHeaderBlock& header_list,
+                               const spdy::Http2HeaderBlock& header_list,
                                QuicByteCount* encoder_stream_sent_byte_count);
 
   // Set maximum dynamic table capacity to |maximum_dynamic_table_capacity|,
@@ -139,7 +139,7 @@
   // absolute indices.  Returned Instructions object may have
   // absl::string_views pointing to strings owned by |*header_list|.
   Instructions FirstPassEncode(QuicStreamId stream_id,
-                               const spdy::SpdyHeaderBlock& header_list,
+                               const spdy::Http2HeaderBlock& header_list,
                                QpackBlockingManager::IndexSet* referred_indices,
                                QuicByteCount* encoder_stream_sent_byte_count);
 
diff --git a/quic/core/qpack/qpack_encoder_test.cc b/quic/core/qpack/qpack_encoder_test.cc
index 8c0756f..9bc377e 100644
--- a/quic/core/qpack/qpack_encoder_test.cc
+++ b/quic/core/qpack/qpack_encoder_test.cc
@@ -36,7 +36,7 @@
 
   ~QpackEncoderTest() override = default;
 
-  std::string Encode(const spdy::SpdyHeaderBlock& header_list) {
+  std::string Encode(const spdy::Http2HeaderBlock& header_list) {
     return encoder_.EncodeHeaderList(/* stream_id = */ 1, header_list,
                                      &encoder_stream_sent_byte_count_);
   }
@@ -48,14 +48,14 @@
 };
 
 TEST_F(QpackEncoderTest, Empty) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   std::string output = Encode(header_list);
 
   EXPECT_EQ(quiche::QuicheTextUtils::HexDecode("0000"), output);
 }
 
 TEST_F(QpackEncoderTest, EmptyName) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list[""] = "foo";
   std::string output = Encode(header_list);
 
@@ -63,7 +63,7 @@
 }
 
 TEST_F(QpackEncoderTest, EmptyValue) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = "";
   std::string output = Encode(header_list);
 
@@ -71,7 +71,7 @@
 }
 
 TEST_F(QpackEncoderTest, EmptyNameAndValue) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list[""] = "";
   std::string output = Encode(header_list);
 
@@ -79,7 +79,7 @@
 }
 
 TEST_F(QpackEncoderTest, Simple) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = "bar";
   std::string output = Encode(header_list);
 
@@ -87,7 +87,7 @@
 }
 
 TEST_F(QpackEncoderTest, Multiple) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   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');
@@ -110,7 +110,7 @@
 
 TEST_F(QpackEncoderTest, StaticTable) {
   {
-    spdy::SpdyHeaderBlock header_list;
+    spdy::Http2HeaderBlock header_list;
     header_list[":method"] = "GET";
     header_list["accept-encoding"] = "gzip, deflate, br";
     header_list["location"] = "";
@@ -119,7 +119,7 @@
     EXPECT_EQ(quiche::QuicheTextUtils::HexDecode("0000d1dfcc"), output);
   }
   {
-    spdy::SpdyHeaderBlock header_list;
+    spdy::Http2HeaderBlock header_list;
     header_list[":method"] = "POST";
     header_list["accept-encoding"] = "compress";
     header_list["location"] = "foo";
@@ -130,7 +130,7 @@
         output);
   }
   {
-    spdy::SpdyHeaderBlock header_list;
+    spdy::Http2HeaderBlock header_list;
     header_list[":method"] = "TRACE";
     header_list["accept-encoding"] = "";
 
@@ -155,7 +155,7 @@
 }
 
 TEST_F(QpackEncoderTest, SplitAlongNullCharacter) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = absl::string_view("bar\0bar\0baz", 11);
   std::string output = Encode(header_list);
 
@@ -234,7 +234,7 @@
   encoder_.SetMaximumDynamicTableCapacity(4096);
   encoder_.SetDynamicTableCapacity(4096);
 
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = "bar";
   header_list.AppendValueOrAddHeader("foo",
                                      "baz");  // name matches dynamic entry
@@ -270,7 +270,7 @@
   encoder_.SetMaximumDynamicTableCapacity(QpackEntry::Size("foo", "bar"));
   encoder_.SetDynamicTableCapacity(QpackEntry::Size("foo", "bar"));
 
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = "bar";
   header_list.AppendValueOrAddHeader("foo",
                                      "baz");  // name matches dynamic entry
@@ -308,7 +308,7 @@
   encoder_.SetMaximumDynamicTableCapacity(4096);
   encoder_.SetDynamicTableCapacity(4096);
 
-  spdy::SpdyHeaderBlock header_list1;
+  spdy::Http2HeaderBlock header_list1;
   header_list1["foo"] = "bar";
 
   // Set Dynamic Table Capacity instruction.
@@ -330,7 +330,7 @@
   EXPECT_EQ(insert_entry1.size(), encoder_stream_sent_byte_count_);
 
   // Stream 1 is blocked.  Stream 2 is not allowed to block.
-  spdy::SpdyHeaderBlock header_list2;
+  spdy::Http2HeaderBlock header_list2;
   header_list2["foo"] = "bar";  // name and value match dynamic entry
   header_list2.AppendValueOrAddHeader("foo",
                                       "baz");  // name matches dynamic entry
@@ -415,7 +415,7 @@
 }
 
 TEST_F(QpackEncoderTest, Draining) {
-  spdy::SpdyHeaderBlock header_list1;
+  spdy::Http2HeaderBlock header_list1;
   header_list1["one"] = "foo";
   header_list1["two"] = "foo";
   header_list1["three"] = "foo";
@@ -450,7 +450,7 @@
 
   // Entry is identical to oldest one, which is draining.  It will be
   // duplicated and referenced.
-  spdy::SpdyHeaderBlock header_list2;
+  spdy::Http2HeaderBlock header_list2;
   header_list2["one"] = "foo";
 
   // Duplicate oldest entry.
@@ -462,7 +462,7 @@
                 "80"),  // most recent dynamic table entry
             Encode(header_list2));
 
-  spdy::SpdyHeaderBlock header_list3;
+  spdy::Http2HeaderBlock header_list3;
   // Entry is identical to second oldest one, which is draining.  There is no
   // room to duplicate, it will be encoded with string literals.
   header_list3.AppendValueOrAddHeader("two", "foo");
diff --git a/quic/core/qpack/qpack_round_trip_test.cc b/quic/core/qpack/qpack_round_trip_test.cc
index 0cf21fc..46e7e88 100644
--- a/quic/core/qpack/qpack_round_trip_test.cc
+++ b/quic/core/qpack/qpack_round_trip_test.cc
@@ -23,8 +23,8 @@
   QpackRoundTripTest() = default;
   ~QpackRoundTripTest() override = default;
 
-  spdy::SpdyHeaderBlock EncodeThenDecode(
-      const spdy::SpdyHeaderBlock& header_list) {
+  spdy::Http2HeaderBlock EncodeThenDecode(
+      const spdy::Http2HeaderBlock& header_list) {
     NoopDecoderStreamErrorDelegate decoder_stream_error_delegate;
     NoopQpackStreamSenderDelegate encoder_stream_sender_delegate;
     QpackEncoder encoder(&decoder_stream_error_delegate);
@@ -55,80 +55,80 @@
                                 FragmentMode::kOctetByOctet));
 
 TEST_P(QpackRoundTripTest, Empty) {
-  spdy::SpdyHeaderBlock header_list;
-  spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
+  spdy::Http2HeaderBlock header_list;
+  spdy::Http2HeaderBlock output = EncodeThenDecode(header_list);
   EXPECT_EQ(header_list, output);
 }
 
 TEST_P(QpackRoundTripTest, EmptyName) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = "bar";
   header_list[""] = "bar";
 
-  spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
+  spdy::Http2HeaderBlock output = EncodeThenDecode(header_list);
   EXPECT_EQ(header_list, output);
 }
 
 TEST_P(QpackRoundTripTest, EmptyValue) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = "";
   header_list[""] = "";
 
-  spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
+  spdy::Http2HeaderBlock output = EncodeThenDecode(header_list);
   EXPECT_EQ(header_list, output);
 }
 
 TEST_P(QpackRoundTripTest, MultipleWithLongEntries) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = "bar";
   header_list[":path"] = "/";
   header_list["foobaar"] = std::string(127, 'Z');
   header_list[std::string(1000, 'b')] = std::string(1000, 'c');
 
-  spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
+  spdy::Http2HeaderBlock output = EncodeThenDecode(header_list);
   EXPECT_EQ(header_list, output);
 }
 
 TEST_P(QpackRoundTripTest, StaticTable) {
   {
-    spdy::SpdyHeaderBlock header_list;
+    spdy::Http2HeaderBlock header_list;
     header_list[":method"] = "GET";
     header_list["accept-encoding"] = "gzip, deflate";
     header_list["cache-control"] = "";
     header_list["foo"] = "bar";
     header_list[":path"] = "/";
 
-    spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
+    spdy::Http2HeaderBlock output = EncodeThenDecode(header_list);
     EXPECT_EQ(header_list, output);
   }
   {
-    spdy::SpdyHeaderBlock header_list;
+    spdy::Http2HeaderBlock header_list;
     header_list[":method"] = "POST";
     header_list["accept-encoding"] = "brotli";
     header_list["cache-control"] = "foo";
     header_list["foo"] = "bar";
     header_list[":path"] = "/";
 
-    spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
+    spdy::Http2HeaderBlock output = EncodeThenDecode(header_list);
     EXPECT_EQ(header_list, output);
   }
   {
-    spdy::SpdyHeaderBlock header_list;
+    spdy::Http2HeaderBlock header_list;
     header_list[":method"] = "CONNECT";
     header_list["accept-encoding"] = "";
     header_list["foo"] = "bar";
     header_list[":path"] = "/";
 
-    spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
+    spdy::Http2HeaderBlock output = EncodeThenDecode(header_list);
     EXPECT_EQ(header_list, output);
   }
 }
 
 TEST_P(QpackRoundTripTest, ValueHasNullCharacter) {
-  spdy::SpdyHeaderBlock header_list;
+  spdy::Http2HeaderBlock header_list;
   header_list["foo"] = absl::string_view("bar\0bar\0baz", 11);
 
-  spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
+  spdy::Http2HeaderBlock output = EncodeThenDecode(header_list);
   EXPECT_EQ(header_list, output);
 }
 
diff --git a/quic/core/qpack/value_splitting_header_list.cc b/quic/core/qpack/value_splitting_header_list.cc
index 3bbae10..c186109 100644
--- a/quic/core/qpack/value_splitting_header_list.cc
+++ b/quic/core/qpack/value_splitting_header_list.cc
@@ -16,8 +16,8 @@
 }  // namespace
 
 ValueSplittingHeaderList::const_iterator::const_iterator(
-    const spdy::SpdyHeaderBlock* header_list,
-    spdy::SpdyHeaderBlock::const_iterator header_list_iterator)
+    const spdy::Http2HeaderBlock* header_list,
+    spdy::Http2HeaderBlock::const_iterator header_list_iterator)
     : header_list_(header_list),
       header_list_iterator_(header_list_iterator),
       value_start_(0) {
@@ -89,7 +89,7 @@
 }
 
 ValueSplittingHeaderList::ValueSplittingHeaderList(
-    const spdy::SpdyHeaderBlock* header_list)
+    const spdy::Http2HeaderBlock* header_list)
     : header_list_(header_list) {
   DCHECK(header_list_);
 }
diff --git a/quic/core/qpack/value_splitting_header_list.h b/quic/core/qpack/value_splitting_header_list.h
index 3220997..06518a5 100644
--- a/quic/core/qpack/value_splitting_header_list.h
+++ b/quic/core/qpack/value_splitting_header_list.h
@@ -11,18 +11,18 @@
 
 namespace quic {
 
-// A wrapper class around SpdyHeaderBlock that splits header values along ';'
+// A wrapper class around Http2HeaderBlock that splits header values along ';'
 // separators (while also removing optional space following separator) for
 // cookies and along '\0' separators for other header fields.
 class QUIC_EXPORT_PRIVATE ValueSplittingHeaderList {
  public:
-  using value_type = spdy::SpdyHeaderBlock::value_type;
+  using value_type = spdy::Http2HeaderBlock::value_type;
 
   class QUIC_EXPORT_PRIVATE const_iterator {
    public:
     // |header_list| must outlive this object.
-    const_iterator(const spdy::SpdyHeaderBlock* header_list,
-                   spdy::SpdyHeaderBlock::const_iterator header_list_iterator);
+    const_iterator(const spdy::Http2HeaderBlock* header_list,
+                   spdy::Http2HeaderBlock::const_iterator header_list_iterator);
     const_iterator(const const_iterator&) = default;
     const_iterator& operator=(const const_iterator&) = delete;
 
@@ -38,15 +38,15 @@
     // Find next separator; update |value_end_| and |header_field_|.
     void UpdateHeaderField();
 
-    const spdy::SpdyHeaderBlock* const header_list_;
-    spdy::SpdyHeaderBlock::const_iterator header_list_iterator_;
+    const spdy::Http2HeaderBlock* const header_list_;
+    spdy::Http2HeaderBlock::const_iterator header_list_iterator_;
     absl::string_view::size_type value_start_;
     absl::string_view::size_type value_end_;
     value_type header_field_;
   };
 
   // |header_list| must outlive this object.
-  explicit ValueSplittingHeaderList(const spdy::SpdyHeaderBlock* header_list);
+  explicit ValueSplittingHeaderList(const spdy::Http2HeaderBlock* header_list);
   ValueSplittingHeaderList(const ValueSplittingHeaderList&) = delete;
   ValueSplittingHeaderList& operator=(const ValueSplittingHeaderList&) = delete;
 
@@ -54,7 +54,7 @@
   const_iterator end() const;
 
  private:
-  const spdy::SpdyHeaderBlock* const header_list_;
+  const spdy::Http2HeaderBlock* const header_list_;
 };
 
 }  // namespace quic
diff --git a/quic/core/qpack/value_splitting_header_list_test.cc b/quic/core/qpack/value_splitting_header_list_test.cc
index 2d0d6b4..0fc04cc 100644
--- a/quic/core/qpack/value_splitting_header_list_test.cc
+++ b/quic/core/qpack/value_splitting_header_list_test.cc
@@ -16,7 +16,7 @@
 using ::testing::Pair;
 
 TEST(ValueSplittingHeaderListTest, Comparison) {
-  spdy::SpdyHeaderBlock block;
+  spdy::Http2HeaderBlock block;
   block["foo"] = absl::string_view("bar\0baz", 7);
   block["baz"] = "qux";
   block["cookie"] = "foo; bar";
@@ -75,7 +75,7 @@
 }
 
 TEST(ValueSplittingHeaderListTest, Empty) {
-  spdy::SpdyHeaderBlock block;
+  spdy::Http2HeaderBlock block;
 
   ValueSplittingHeaderList headers(&block);
   EXPECT_THAT(headers, ElementsAre());
@@ -114,7 +114,7 @@
   };
 
   for (size_t i = 0; i < ABSL_ARRAYSIZE(kTestData); ++i) {
-    spdy::SpdyHeaderBlock block;
+    spdy::Http2HeaderBlock block;
     block[kTestData[i].name] = kTestData[i].value;
 
     ValueSplittingHeaderList headers(&block);
@@ -130,7 +130,7 @@
 }
 
 TEST(ValueSplittingHeaderListTest, MultipleFields) {
-  spdy::SpdyHeaderBlock block;
+  spdy::Http2HeaderBlock block;
   block["foo"] = absl::string_view("bar\0baz\0", 8);
   block["cookie"] = "foo; bar";
   block["bar"] = absl::string_view("qux\0foo", 7);
@@ -143,7 +143,7 @@
 }
 
 TEST(ValueSplittingHeaderListTest, CookieStartsWithSpace) {
-  spdy::SpdyHeaderBlock block;
+  spdy::Http2HeaderBlock block;
   block["foo"] = "bar";
   block["cookie"] = " foo";
   block["bar"] = "baz";
diff --git a/quic/masque/masque_client_tools.cc b/quic/masque/masque_client_tools.cc
index 7b96abe..e59204a 100644
--- a/quic/masque/masque_client_tools.cc
+++ b/quic/masque/masque_client_tools.cc
@@ -69,7 +69,7 @@
   const std::string body = "";
 
   // Construct a GET or POST request for supplied URL.
-  spdy::SpdyHeaderBlock header_block;
+  spdy::Http2HeaderBlock header_block;
   header_block[":method"] = "GET";
   header_block[":scheme"] = url.scheme();
   header_block[":authority"] = url.HostPort();
diff --git a/quic/masque/masque_epoll_client.cc b/quic/masque/masque_epoll_client.cc
index 24cbaa6..3b7c201 100644
--- a/quic/masque/masque_epoll_client.cc
+++ b/quic/masque/masque_epoll_client.cc
@@ -82,7 +82,7 @@
   std::string body = "foo";
 
   // Construct a GET or POST request for supplied URL.
-  spdy::SpdyHeaderBlock header_block;
+  spdy::Http2HeaderBlock header_block;
   header_block[":method"] = "POST";
   header_block[":scheme"] = "https";
   header_block[":authority"] = masque_client->authority_;
@@ -115,7 +115,7 @@
   std::string body(client_connection_id.data(), client_connection_id.length());
 
   // Construct a GET or POST request for supplied URL.
-  spdy::SpdyHeaderBlock header_block;
+  spdy::Http2HeaderBlock header_block;
   header_block[":method"] = "POST";
   header_block[":scheme"] = "https";
   header_block[":authority"] = authority_;
diff --git a/quic/masque/masque_server_backend.cc b/quic/masque/masque_server_backend.cc
index a8944f0..fc2fdc0 100644
--- a/quic/masque/masque_server_backend.cc
+++ b/quic/masque/masque_server_backend.cc
@@ -28,7 +28,7 @@
 }
 
 bool MasqueServerBackend::MaybeHandleMasqueRequest(
-    const spdy::SpdyHeaderBlock& request_headers,
+    const spdy::Http2HeaderBlock& request_headers,
     const std::string& request_body,
     QuicSimpleServerBackend::RequestHandler* request_handler) {
   auto path_pair = request_headers.find(":path");
@@ -100,7 +100,7 @@
 }
 
 void MasqueServerBackend::FetchResponseFromBackend(
-    const spdy::SpdyHeaderBlock& request_headers,
+    const spdy::Http2HeaderBlock& request_headers,
     const std::string& request_body,
     QuicSimpleServerBackend::RequestHandler* request_handler) {
   if (MaybeHandleMasqueRequest(request_headers, request_body,
diff --git a/quic/masque/masque_server_backend.h b/quic/masque/masque_server_backend.h
index 481d90d..52260b7 100644
--- a/quic/masque/masque_server_backend.h
+++ b/quic/masque/masque_server_backend.h
@@ -20,7 +20,7 @@
    public:
     virtual std::unique_ptr<QuicBackendResponse> HandleMasqueRequest(
         const std::string& masque_path,
-        const spdy::SpdyHeaderBlock& request_headers,
+        const spdy::Http2HeaderBlock& request_headers,
         const std::string& request_body,
         QuicSimpleServerBackend::RequestHandler* request_handler) = 0;
     virtual ~BackendClient() = default;
@@ -35,7 +35,7 @@
 
   // From QuicMemoryCacheBackend.
   void FetchResponseFromBackend(
-      const spdy::SpdyHeaderBlock& request_headers,
+      const spdy::Http2HeaderBlock& request_headers,
       const std::string& request_body,
       QuicSimpleServerBackend::RequestHandler* request_handler) override;
 
@@ -52,7 +52,7 @@
  private:
   // Handle MASQUE request.
   bool MaybeHandleMasqueRequest(
-      const spdy::SpdyHeaderBlock& request_headers,
+      const spdy::Http2HeaderBlock& request_headers,
       const std::string& request_body,
       QuicSimpleServerBackend::RequestHandler* request_handler);
 
diff --git a/quic/masque/masque_server_session.cc b/quic/masque/masque_server_session.cc
index 940bb61..e6ca1f3 100644
--- a/quic/masque/masque_server_session.cc
+++ b/quic/masque/masque_server_session.cc
@@ -81,7 +81,7 @@
 
 std::unique_ptr<QuicBackendResponse> MasqueServerSession::HandleMasqueRequest(
     const std::string& masque_path,
-    const spdy::SpdyHeaderBlock& /*request_headers*/,
+    const spdy::Http2HeaderBlock& /*request_headers*/,
     const std::string& request_body,
     QuicSimpleServerBackend::RequestHandler* /*request_handler*/) {
   QUIC_DLOG(INFO) << "MasqueServerSession handling MASQUE request";
@@ -107,7 +107,7 @@
 
   // TODO(dschinazi) implement binary protocol sent in response body.
   const std::string response_body = "";
-  spdy::SpdyHeaderBlock response_headers;
+  spdy::Http2HeaderBlock response_headers;
   response_headers[":status"] = "200";
   auto response = std::make_unique<QuicBackendResponse>();
   response->set_response_type(QuicBackendResponse::REGULAR_RESPONSE);
diff --git a/quic/masque/masque_server_session.h b/quic/masque/masque_server_session.h
index f8688b3..63cadcd 100644
--- a/quic/masque/masque_server_session.h
+++ b/quic/masque/masque_server_session.h
@@ -58,7 +58,7 @@
   // From MasqueServerBackend::BackendClient.
   std::unique_ptr<QuicBackendResponse> HandleMasqueRequest(
       const std::string& masque_path,
-      const spdy::SpdyHeaderBlock& request_headers,
+      const spdy::Http2HeaderBlock& request_headers,
       const std::string& request_body,
       QuicSimpleServerBackend::RequestHandler* request_handler) override;
 
diff --git a/spdy/core/spdy_framer.cc b/spdy/core/spdy_framer.cc
index e5619df..d425bdd 100644
--- a/spdy/core/spdy_framer.cc
+++ b/spdy/core/spdy_framer.cc
@@ -45,7 +45,7 @@
 // The size of one parameter in SETTINGS frame.
 const size_t kOneSettingParameterSize = 6;
 
-size_t GetUncompressedSerializedLength(const SpdyHeaderBlock& headers) {
+size_t GetUncompressedSerializedLength(const Http2HeaderBlock& headers) {
   const size_t num_name_value_pairs_size = sizeof(uint32_t);
   const size_t length_of_name_size = num_name_value_pairs_size;
   const size_t length_of_value_size = num_name_value_pairs_size;
diff --git a/spdy/core/spdy_framer_test.cc b/spdy/core/spdy_framer_test.cc
index cd96457..3ddaec5 100644
--- a/spdy/core/spdy_framer_test.cc
+++ b/spdy/core/spdy_framer_test.cc
@@ -532,7 +532,7 @@
   SpdyFrameType header_control_type_;
   bool header_buffer_valid_;
   std::unique_ptr<TestHeadersHandler> headers_handler_;
-  SpdyHeaderBlock headers_;
+  Http2HeaderBlock headers_;
   bool header_has_priority_;
   SpdyStreamId header_parent_stream_id_;
   bool header_exclusive_;
@@ -1102,7 +1102,7 @@
   SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION);
   std::string value("value1\0value2", 13);
   // TODO(jgraettinger): If this pattern appears again, move to test class.
-  SpdyHeaderBlock header_set;
+  Http2HeaderBlock header_set;
   header_set["name"] = value;
   std::string buffer;
   HpackEncoder encoder;
@@ -2304,7 +2304,7 @@
   };
   // frame-format on
 
-  SpdyHeaderBlock header_block;
+  Http2HeaderBlock header_block;
   header_block["bar"] = "foo";
   header_block["foo"] = "bar";
   auto buffer = std::make_unique<std::string>();
diff --git a/spdy/core/spdy_protocol.cc b/spdy/core/spdy_protocol.cc
index 53901ab..f9a1800 100644
--- a/spdy/core/spdy_protocol.cc
+++ b/spdy/core/spdy_protocol.cc
@@ -276,7 +276,7 @@
 
 SpdyFrameWithHeaderBlockIR::SpdyFrameWithHeaderBlockIR(
     SpdyStreamId stream_id,
-    SpdyHeaderBlock header_block)
+    Http2HeaderBlock header_block)
     : SpdyFrameWithFinIR(stream_id), header_block_(std::move(header_block)) {}
 
 SpdyFrameWithHeaderBlockIR::~SpdyFrameWithHeaderBlockIR() = default;
diff --git a/spdy/core/spdy_protocol.h b/spdy/core/spdy_protocol.h
index 4c9c79a..a2b9c4d 100644
--- a/spdy/core/spdy_protocol.h
+++ b/spdy/core/spdy_protocol.h
@@ -492,8 +492,8 @@
  public:
   ~SpdyFrameWithHeaderBlockIR() override;
 
-  const SpdyHeaderBlock& header_block() const { return header_block_; }
-  void set_header_block(SpdyHeaderBlock header_block) {
+  const Http2HeaderBlock& header_block() const { return header_block_; }
+  void set_header_block(Http2HeaderBlock header_block) {
     // Deep copy.
     header_block_ = std::move(header_block);
   }
@@ -503,13 +503,13 @@
 
  protected:
   SpdyFrameWithHeaderBlockIR(SpdyStreamId stream_id,
-                             SpdyHeaderBlock header_block);
+                             Http2HeaderBlock header_block);
   SpdyFrameWithHeaderBlockIR(const SpdyFrameWithHeaderBlockIR&) = delete;
   SpdyFrameWithHeaderBlockIR& operator=(const SpdyFrameWithHeaderBlockIR&) =
       delete;
 
  private:
-  SpdyHeaderBlock header_block_;
+  Http2HeaderBlock header_block_;
 };
 
 class QUICHE_EXPORT_PRIVATE SpdyDataIR : public SpdyFrameWithFinIR {
@@ -706,8 +706,8 @@
 class QUICHE_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR {
  public:
   explicit SpdyHeadersIR(SpdyStreamId stream_id)
-      : SpdyHeadersIR(stream_id, SpdyHeaderBlock()) {}
-  SpdyHeadersIR(SpdyStreamId stream_id, SpdyHeaderBlock header_block)
+      : SpdyHeadersIR(stream_id, Http2HeaderBlock()) {}
+  SpdyHeadersIR(SpdyStreamId stream_id, Http2HeaderBlock header_block)
       : SpdyFrameWithHeaderBlockIR(stream_id, std::move(header_block)) {}
   SpdyHeadersIR(const SpdyHeadersIR&) = delete;
   SpdyHeadersIR& operator=(const SpdyHeadersIR&) = delete;
@@ -775,10 +775,10 @@
     : public SpdyFrameWithHeaderBlockIR {
  public:
   SpdyPushPromiseIR(SpdyStreamId stream_id, SpdyStreamId promised_stream_id)
-      : SpdyPushPromiseIR(stream_id, promised_stream_id, SpdyHeaderBlock()) {}
+      : SpdyPushPromiseIR(stream_id, promised_stream_id, Http2HeaderBlock()) {}
   SpdyPushPromiseIR(SpdyStreamId stream_id,
                     SpdyStreamId promised_stream_id,
-                    SpdyHeaderBlock header_block)
+                    Http2HeaderBlock header_block)
       : SpdyFrameWithHeaderBlockIR(stream_id, std::move(header_block)),
         promised_stream_id_(promised_stream_id),
         padded_(false),
diff --git a/spdy/core/spdy_test_utils.h b/spdy/core/spdy_test_utils.h
index aaaa65a..c6390a7 100644
--- a/spdy/core/spdy_test_utils.h
+++ b/spdy/core/spdy_test_utils.h
@@ -18,7 +18,7 @@
 namespace spdy {
 
 inline bool operator==(absl::string_view x,
-                       const SpdyHeaderBlock::ValueProxy& y) {
+                       const Http2HeaderBlock::ValueProxy& y) {
   return y.operator==(x);
 }
 
@@ -54,14 +54,14 @@
   void OnHeaderBlockEnd(size_t header_bytes_parsed,
                         size_t compressed_header_bytes_parsed) override;
 
-  const SpdyHeaderBlock& decoded_block() const { return block_; }
+  const Http2HeaderBlock& decoded_block() const { return block_; }
   size_t header_bytes_parsed() const { return header_bytes_parsed_; }
   size_t compressed_header_bytes_parsed() const {
     return compressed_header_bytes_parsed_;
   }
 
  private:
-  SpdyHeaderBlock block_;
+  Http2HeaderBlock block_;
   size_t header_bytes_parsed_ = 0;
   size_t compressed_header_bytes_parsed_ = 0;
 };
