Moves some build targets from //third_party/spdy/core/hpack to //third_party/http2/hpack.

This change leaves behind vestigial targets and an include file so that we can defer changes to //third_party/envoy.

Protected by refactoring, not protected.

PiperOrigin-RevId: 650714068
diff --git a/build/source_list.bzl b/build/source_list.bzl
index aa4e3cb..d1384fc 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -111,6 +111,12 @@
     "http2/hpack/decoder/hpack_string_decoder_listener.h",
     "http2/hpack/decoder/hpack_whole_entry_buffer.h",
     "http2/hpack/decoder/hpack_whole_entry_listener.h",
+    "http2/hpack/hpack_constants.h",
+    "http2/hpack/hpack_encoder.h",
+    "http2/hpack/hpack_entry.h",
+    "http2/hpack/hpack_header_table.h",
+    "http2/hpack/hpack_output_stream.h",
+    "http2/hpack/hpack_static_table.h",
     "http2/hpack/http2_hpack_constants.h",
     "http2/hpack/huffman/hpack_huffman_decoder.h",
     "http2/hpack/huffman/hpack_huffman_encoder.h",
@@ -375,13 +381,8 @@
     "quic/platform/api/quic_thread.h",
     "spdy/core/array_output_buffer.h",
     "spdy/core/header_byte_listener_interface.h",
-    "spdy/core/hpack/hpack_constants.h",
     "spdy/core/hpack/hpack_decoder_adapter.h",
     "spdy/core/hpack/hpack_encoder.h",
-    "spdy/core/hpack/hpack_entry.h",
-    "spdy/core/hpack/hpack_header_table.h",
-    "spdy/core/hpack/hpack_output_stream.h",
-    "spdy/core/hpack/hpack_static_table.h",
     "spdy/core/http2_frame_decoder_adapter.h",
     "spdy/core/http2_header_block.h",
     "spdy/core/http2_header_block_hpack_listener.h",
@@ -466,6 +467,12 @@
     "http2/hpack/decoder/hpack_string_decoder_listener.cc",
     "http2/hpack/decoder/hpack_whole_entry_buffer.cc",
     "http2/hpack/decoder/hpack_whole_entry_listener.cc",
+    "http2/hpack/hpack_constants.cc",
+    "http2/hpack/hpack_encoder.cc",
+    "http2/hpack/hpack_entry.cc",
+    "http2/hpack/hpack_header_table.cc",
+    "http2/hpack/hpack_output_stream.cc",
+    "http2/hpack/hpack_static_table.cc",
     "http2/hpack/http2_hpack_constants.cc",
     "http2/hpack/huffman/hpack_huffman_decoder.cc",
     "http2/hpack/huffman/hpack_huffman_encoder.cc",
@@ -677,13 +684,7 @@
     "quic/core/web_transport_write_blocked_list.cc",
     "quic/platform/api/quic_socket_address.cc",
     "spdy/core/array_output_buffer.cc",
-    "spdy/core/hpack/hpack_constants.cc",
     "spdy/core/hpack/hpack_decoder_adapter.cc",
-    "spdy/core/hpack/hpack_encoder.cc",
-    "spdy/core/hpack/hpack_entry.cc",
-    "spdy/core/hpack/hpack_header_table.cc",
-    "spdy/core/hpack/hpack_output_stream.cc",
-    "spdy/core/hpack/hpack_static_table.cc",
     "spdy/core/http2_frame_decoder_adapter.cc",
     "spdy/core/recording_headers_handler.cc",
     "spdy/core/spdy_alt_svc_wire_format.cc",
@@ -1138,6 +1139,11 @@
     "http2/hpack/decoder/hpack_entry_type_decoder_test.cc",
     "http2/hpack/decoder/hpack_string_decoder_test.cc",
     "http2/hpack/decoder/hpack_whole_entry_buffer_test.cc",
+    "http2/hpack/hpack_encoder_test.cc",
+    "http2/hpack/hpack_entry_test.cc",
+    "http2/hpack/hpack_header_table_test.cc",
+    "http2/hpack/hpack_output_stream_test.cc",
+    "http2/hpack/hpack_static_table_test.cc",
     "http2/hpack/http2_hpack_constants_test.cc",
     "http2/hpack/huffman/hpack_huffman_decoder_test.cc",
     "http2/hpack/huffman/hpack_huffman_encoder_test.cc",
@@ -1318,12 +1324,7 @@
     "quic/tools/simple_ticket_crypter_test.cc",
     "spdy/core/array_output_buffer_test.cc",
     "spdy/core/hpack/hpack_decoder_adapter_test.cc",
-    "spdy/core/hpack/hpack_encoder_test.cc",
-    "spdy/core/hpack/hpack_entry_test.cc",
-    "spdy/core/hpack/hpack_header_table_test.cc",
-    "spdy/core/hpack/hpack_output_stream_test.cc",
     "spdy/core/hpack/hpack_round_trip_test.cc",
-    "spdy/core/hpack/hpack_static_table_test.cc",
     "spdy/core/spdy_alt_svc_wire_format_test.cc",
     "spdy/core/spdy_frame_builder_test.cc",
     "spdy/core/spdy_framer_test.cc",
diff --git a/build/source_list.gni b/build/source_list.gni
index b73efd8..d6016bf 100644
--- a/build/source_list.gni
+++ b/build/source_list.gni
@@ -111,6 +111,12 @@
     "src/quiche/http2/hpack/decoder/hpack_string_decoder_listener.h",
     "src/quiche/http2/hpack/decoder/hpack_whole_entry_buffer.h",
     "src/quiche/http2/hpack/decoder/hpack_whole_entry_listener.h",
+    "src/quiche/http2/hpack/hpack_constants.h",
+    "src/quiche/http2/hpack/hpack_encoder.h",
+    "src/quiche/http2/hpack/hpack_entry.h",
+    "src/quiche/http2/hpack/hpack_header_table.h",
+    "src/quiche/http2/hpack/hpack_output_stream.h",
+    "src/quiche/http2/hpack/hpack_static_table.h",
     "src/quiche/http2/hpack/http2_hpack_constants.h",
     "src/quiche/http2/hpack/huffman/hpack_huffman_decoder.h",
     "src/quiche/http2/hpack/huffman/hpack_huffman_encoder.h",
@@ -375,13 +381,8 @@
     "src/quiche/quic/platform/api/quic_thread.h",
     "src/quiche/spdy/core/array_output_buffer.h",
     "src/quiche/spdy/core/header_byte_listener_interface.h",
-    "src/quiche/spdy/core/hpack/hpack_constants.h",
     "src/quiche/spdy/core/hpack/hpack_decoder_adapter.h",
     "src/quiche/spdy/core/hpack/hpack_encoder.h",
-    "src/quiche/spdy/core/hpack/hpack_entry.h",
-    "src/quiche/spdy/core/hpack/hpack_header_table.h",
-    "src/quiche/spdy/core/hpack/hpack_output_stream.h",
-    "src/quiche/spdy/core/hpack/hpack_static_table.h",
     "src/quiche/spdy/core/http2_frame_decoder_adapter.h",
     "src/quiche/spdy/core/http2_header_block.h",
     "src/quiche/spdy/core/http2_header_block_hpack_listener.h",
@@ -466,6 +467,12 @@
     "src/quiche/http2/hpack/decoder/hpack_string_decoder_listener.cc",
     "src/quiche/http2/hpack/decoder/hpack_whole_entry_buffer.cc",
     "src/quiche/http2/hpack/decoder/hpack_whole_entry_listener.cc",
+    "src/quiche/http2/hpack/hpack_constants.cc",
+    "src/quiche/http2/hpack/hpack_encoder.cc",
+    "src/quiche/http2/hpack/hpack_entry.cc",
+    "src/quiche/http2/hpack/hpack_header_table.cc",
+    "src/quiche/http2/hpack/hpack_output_stream.cc",
+    "src/quiche/http2/hpack/hpack_static_table.cc",
     "src/quiche/http2/hpack/http2_hpack_constants.cc",
     "src/quiche/http2/hpack/huffman/hpack_huffman_decoder.cc",
     "src/quiche/http2/hpack/huffman/hpack_huffman_encoder.cc",
@@ -677,13 +684,7 @@
     "src/quiche/quic/core/web_transport_write_blocked_list.cc",
     "src/quiche/quic/platform/api/quic_socket_address.cc",
     "src/quiche/spdy/core/array_output_buffer.cc",
-    "src/quiche/spdy/core/hpack/hpack_constants.cc",
     "src/quiche/spdy/core/hpack/hpack_decoder_adapter.cc",
-    "src/quiche/spdy/core/hpack/hpack_encoder.cc",
-    "src/quiche/spdy/core/hpack/hpack_entry.cc",
-    "src/quiche/spdy/core/hpack/hpack_header_table.cc",
-    "src/quiche/spdy/core/hpack/hpack_output_stream.cc",
-    "src/quiche/spdy/core/hpack/hpack_static_table.cc",
     "src/quiche/spdy/core/http2_frame_decoder_adapter.cc",
     "src/quiche/spdy/core/recording_headers_handler.cc",
     "src/quiche/spdy/core/spdy_alt_svc_wire_format.cc",
@@ -1139,6 +1140,11 @@
     "src/quiche/http2/hpack/decoder/hpack_entry_type_decoder_test.cc",
     "src/quiche/http2/hpack/decoder/hpack_string_decoder_test.cc",
     "src/quiche/http2/hpack/decoder/hpack_whole_entry_buffer_test.cc",
+    "src/quiche/http2/hpack/hpack_encoder_test.cc",
+    "src/quiche/http2/hpack/hpack_entry_test.cc",
+    "src/quiche/http2/hpack/hpack_header_table_test.cc",
+    "src/quiche/http2/hpack/hpack_output_stream_test.cc",
+    "src/quiche/http2/hpack/hpack_static_table_test.cc",
     "src/quiche/http2/hpack/http2_hpack_constants_test.cc",
     "src/quiche/http2/hpack/huffman/hpack_huffman_decoder_test.cc",
     "src/quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc",
@@ -1319,12 +1325,7 @@
     "src/quiche/quic/tools/simple_ticket_crypter_test.cc",
     "src/quiche/spdy/core/array_output_buffer_test.cc",
     "src/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc",
-    "src/quiche/spdy/core/hpack/hpack_encoder_test.cc",
-    "src/quiche/spdy/core/hpack/hpack_entry_test.cc",
-    "src/quiche/spdy/core/hpack/hpack_header_table_test.cc",
-    "src/quiche/spdy/core/hpack/hpack_output_stream_test.cc",
     "src/quiche/spdy/core/hpack/hpack_round_trip_test.cc",
-    "src/quiche/spdy/core/hpack/hpack_static_table_test.cc",
     "src/quiche/spdy/core/spdy_alt_svc_wire_format_test.cc",
     "src/quiche/spdy/core/spdy_frame_builder_test.cc",
     "src/quiche/spdy/core/spdy_framer_test.cc",
diff --git a/build/source_list.json b/build/source_list.json
index c6d3fdc..f2b726e 100644
--- a/build/source_list.json
+++ b/build/source_list.json
@@ -110,6 +110,12 @@
     "quiche/http2/hpack/decoder/hpack_string_decoder_listener.h",
     "quiche/http2/hpack/decoder/hpack_whole_entry_buffer.h",
     "quiche/http2/hpack/decoder/hpack_whole_entry_listener.h",
+    "quiche/http2/hpack/hpack_constants.h",
+    "quiche/http2/hpack/hpack_encoder.h",
+    "quiche/http2/hpack/hpack_entry.h",
+    "quiche/http2/hpack/hpack_header_table.h",
+    "quiche/http2/hpack/hpack_output_stream.h",
+    "quiche/http2/hpack/hpack_static_table.h",
     "quiche/http2/hpack/http2_hpack_constants.h",
     "quiche/http2/hpack/huffman/hpack_huffman_decoder.h",
     "quiche/http2/hpack/huffman/hpack_huffman_encoder.h",
@@ -374,13 +380,8 @@
     "quiche/quic/platform/api/quic_thread.h",
     "quiche/spdy/core/array_output_buffer.h",
     "quiche/spdy/core/header_byte_listener_interface.h",
-    "quiche/spdy/core/hpack/hpack_constants.h",
     "quiche/spdy/core/hpack/hpack_decoder_adapter.h",
     "quiche/spdy/core/hpack/hpack_encoder.h",
-    "quiche/spdy/core/hpack/hpack_entry.h",
-    "quiche/spdy/core/hpack/hpack_header_table.h",
-    "quiche/spdy/core/hpack/hpack_output_stream.h",
-    "quiche/spdy/core/hpack/hpack_static_table.h",
     "quiche/spdy/core/http2_frame_decoder_adapter.h",
     "quiche/spdy/core/http2_header_block.h",
     "quiche/spdy/core/http2_header_block_hpack_listener.h",
@@ -465,6 +466,12 @@
     "quiche/http2/hpack/decoder/hpack_string_decoder_listener.cc",
     "quiche/http2/hpack/decoder/hpack_whole_entry_buffer.cc",
     "quiche/http2/hpack/decoder/hpack_whole_entry_listener.cc",
+    "quiche/http2/hpack/hpack_constants.cc",
+    "quiche/http2/hpack/hpack_encoder.cc",
+    "quiche/http2/hpack/hpack_entry.cc",
+    "quiche/http2/hpack/hpack_header_table.cc",
+    "quiche/http2/hpack/hpack_output_stream.cc",
+    "quiche/http2/hpack/hpack_static_table.cc",
     "quiche/http2/hpack/http2_hpack_constants.cc",
     "quiche/http2/hpack/huffman/hpack_huffman_decoder.cc",
     "quiche/http2/hpack/huffman/hpack_huffman_encoder.cc",
@@ -676,13 +683,7 @@
     "quiche/quic/core/web_transport_write_blocked_list.cc",
     "quiche/quic/platform/api/quic_socket_address.cc",
     "quiche/spdy/core/array_output_buffer.cc",
-    "quiche/spdy/core/hpack/hpack_constants.cc",
     "quiche/spdy/core/hpack/hpack_decoder_adapter.cc",
-    "quiche/spdy/core/hpack/hpack_encoder.cc",
-    "quiche/spdy/core/hpack/hpack_entry.cc",
-    "quiche/spdy/core/hpack/hpack_header_table.cc",
-    "quiche/spdy/core/hpack/hpack_output_stream.cc",
-    "quiche/spdy/core/hpack/hpack_static_table.cc",
     "quiche/spdy/core/http2_frame_decoder_adapter.cc",
     "quiche/spdy/core/recording_headers_handler.cc",
     "quiche/spdy/core/spdy_alt_svc_wire_format.cc",
@@ -1138,6 +1139,11 @@
     "quiche/http2/hpack/decoder/hpack_entry_type_decoder_test.cc",
     "quiche/http2/hpack/decoder/hpack_string_decoder_test.cc",
     "quiche/http2/hpack/decoder/hpack_whole_entry_buffer_test.cc",
+    "quiche/http2/hpack/hpack_encoder_test.cc",
+    "quiche/http2/hpack/hpack_entry_test.cc",
+    "quiche/http2/hpack/hpack_header_table_test.cc",
+    "quiche/http2/hpack/hpack_output_stream_test.cc",
+    "quiche/http2/hpack/hpack_static_table_test.cc",
     "quiche/http2/hpack/http2_hpack_constants_test.cc",
     "quiche/http2/hpack/huffman/hpack_huffman_decoder_test.cc",
     "quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc",
@@ -1318,12 +1324,7 @@
     "quiche/quic/tools/simple_ticket_crypter_test.cc",
     "quiche/spdy/core/array_output_buffer_test.cc",
     "quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc",
-    "quiche/spdy/core/hpack/hpack_encoder_test.cc",
-    "quiche/spdy/core/hpack/hpack_entry_test.cc",
-    "quiche/spdy/core/hpack/hpack_header_table_test.cc",
-    "quiche/spdy/core/hpack/hpack_output_stream_test.cc",
     "quiche/spdy/core/hpack/hpack_round_trip_test.cc",
-    "quiche/spdy/core/hpack/hpack_static_table_test.cc",
     "quiche/spdy/core/spdy_alt_svc_wire_format_test.cc",
     "quiche/spdy/core/spdy_frame_builder_test.cc",
     "quiche/spdy/core/spdy_framer_test.cc",
diff --git a/quiche/http2/adapter/test_frame_sequence.cc b/quiche/http2/adapter/test_frame_sequence.cc
index bae140d..833d17a 100644
--- a/quiche/http2/adapter/test_frame_sequence.cc
+++ b/quiche/http2/adapter/test_frame_sequence.cc
@@ -8,7 +8,7 @@
 
 #include "quiche/http2/adapter/http2_util.h"
 #include "quiche/http2/adapter/oghttp2_util.h"
-#include "quiche/spdy/core/hpack/hpack_encoder.h"
+#include "quiche/http2/hpack/hpack_encoder.h"
 #include "quiche/spdy/core/spdy_framer.h"
 
 namespace http2 {
diff --git a/quiche/http2/adapter/test_utils.cc b/quiche/http2/adapter/test_utils.cc
index 8871f0a..b791443 100644
--- a/quiche/http2/adapter/test_utils.cc
+++ b/quiche/http2/adapter/test_utils.cc
@@ -7,8 +7,8 @@
 
 #include "absl/strings/str_format.h"
 #include "quiche/http2/adapter/http2_visitor_interface.h"
+#include "quiche/http2/hpack/hpack_encoder.h"
 #include "quiche/common/quiche_data_reader.h"
-#include "quiche/spdy/core/hpack/hpack_encoder.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 
 namespace http2 {
diff --git a/quiche/spdy/core/hpack/hpack_constants.cc b/quiche/http2/hpack/hpack_constants.cc
similarity index 99%
rename from quiche/spdy/core/hpack/hpack_constants.cc
rename to quiche/http2/hpack/hpack_constants.cc
index 12d720b..5eea1ae 100644
--- a/quiche/spdy/core/hpack/hpack_constants.cc
+++ b/quiche/http2/hpack/hpack_constants.cc
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_constants.h"
 
 #include <vector>
 
 #include "absl/base/macros.h"
+#include "quiche/http2/hpack/hpack_static_table.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/spdy/core/hpack/hpack_static_table.h"
 
 namespace spdy {
 
diff --git a/quiche/spdy/core/hpack/hpack_constants.h b/quiche/http2/hpack/hpack_constants.h
similarity index 94%
rename from quiche/spdy/core/hpack/hpack_constants.h
rename to quiche/http2/hpack/hpack_constants.h
index a92f975..65acab2 100644
--- a/quiche/spdy/core/hpack/hpack_constants.h
+++ b/quiche/http2/hpack/hpack_constants.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_SPDY_CORE_HPACK_HPACK_CONSTANTS_H_
-#define QUICHE_SPDY_CORE_HPACK_HPACK_CONSTANTS_H_
+#ifndef QUICHE_HTTP2_HPACK_HPACK_CONSTANTS_H_
+#define QUICHE_HTTP2_HPACK_HPACK_CONSTANTS_H_
 
 #include <cstddef>
 #include <cstdint>
@@ -85,4 +85,4 @@
 
 }  // namespace spdy
 
-#endif  // QUICHE_SPDY_CORE_HPACK_HPACK_CONSTANTS_H_
+#endif  // QUICHE_HTTP2_HPACK_HPACK_CONSTANTS_H_
diff --git a/quiche/spdy/core/hpack/hpack_encoder.cc b/quiche/http2/hpack/hpack_encoder.cc
similarity index 98%
rename from quiche/spdy/core/hpack/hpack_encoder.cc
rename to quiche/http2/hpack/hpack_encoder.cc
index 8d0e841..625ee70 100644
--- a/quiche/spdy/core/hpack/hpack_encoder.cc
+++ b/quiche/http2/hpack/hpack_encoder.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_encoder.h"
+#include "quiche/http2/hpack/hpack_encoder.h"
 
 #include <algorithm>
 #include <cstddef>
@@ -14,12 +14,12 @@
 
 #include "absl/strings/str_split.h"
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_header_table.h"
+#include "quiche/http2/hpack/hpack_output_stream.h"
 #include "quiche/http2/hpack/huffman/hpack_huffman_encoder.h"
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/spdy/core/hpack/hpack_constants.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"
 
 namespace spdy {
diff --git a/quiche/http2/hpack/hpack_encoder.h b/quiche/http2/hpack/hpack_encoder.h
new file mode 100644
index 0000000..3130ca5
--- /dev/null
+++ b/quiche/http2/hpack/hpack_encoder.h
@@ -0,0 +1,156 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef QUICHE_HTTP2_HPACK_HPACK_ENCODER_H_
+#define QUICHE_HTTP2_HPACK_HPACK_ENCODER_H_
+
+#include <stddef.h>
+
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_header_table.h"
+#include "quiche/http2/hpack/hpack_output_stream.h"
+#include "quiche/common/platform/api/quiche_export.h"
+#include "quiche/common/quiche_callbacks.h"
+#include "quiche/spdy/core/http2_header_block.h"
+
+// An HpackEncoder encodes header sets as outlined in
+// http://tools.ietf.org/html/rfc7541.
+
+namespace spdy {
+
+namespace test {
+class HpackEncoderPeer;
+}  // namespace test
+
+class QUICHE_EXPORT HpackEncoder {
+ public:
+  using Representation = std::pair<absl::string_view, absl::string_view>;
+  using Representations = std::vector<Representation>;
+
+  // Callers may provide a HeaderListener to be informed of header name-value
+  // pairs processed by this encoder.
+  using HeaderListener =
+      quiche::MultiUseCallback<void(absl::string_view, absl::string_view)>;
+
+  // An indexing policy should return true if the provided header name-value
+  // pair should be inserted into the HPACK dynamic table.
+  using IndexingPolicy =
+      quiche::MultiUseCallback<bool(absl::string_view, absl::string_view)>;
+
+  HpackEncoder();
+  HpackEncoder(const HpackEncoder&) = delete;
+  HpackEncoder& operator=(const HpackEncoder&) = delete;
+  ~HpackEncoder();
+
+  // Encodes and returns the given header set as a string.
+  std::string EncodeHeaderBlock(const Http2HeaderBlock& header_set);
+
+  class QUICHE_EXPORT ProgressiveEncoder {
+   public:
+    virtual ~ProgressiveEncoder() {}
+
+    // Returns true iff more remains to encode.
+    virtual bool HasNext() const = 0;
+
+    // Encodes and returns up to max_encoded_bytes of the current header block.
+    virtual std::string Next(size_t max_encoded_bytes) = 0;
+  };
+
+  // Returns a ProgressiveEncoder which must be outlived by both the given
+  // Http2HeaderBlock and this object.
+  std::unique_ptr<ProgressiveEncoder> EncodeHeaderSet(
+      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
+  // the caller when constructing the list of representations.
+  std::unique_ptr<ProgressiveEncoder> EncodeRepresentations(
+      const Representations& representations);
+
+  // Called upon a change to SETTINGS_HEADER_TABLE_SIZE. Specifically, this
+  // is to be called after receiving (and sending an acknowledgement for) a
+  // SETTINGS_HEADER_TABLE_SIZE update from the remote decoding endpoint.
+  void ApplyHeaderTableSizeSetting(size_t size_setting);
+
+  // TODO(birenroy): Rename this GetDynamicTableCapacity().
+  size_t CurrentHeaderTableSizeSetting() const {
+    return header_table_.settings_size_bound();
+  }
+
+  // This HpackEncoder will use |policy| to determine whether to insert header
+  // name-value pairs into the dynamic table.
+  void SetIndexingPolicy(IndexingPolicy policy) {
+    should_index_ = std::move(policy);
+  }
+
+  // |listener| will be invoked for each header name-value pair processed by
+  // this encoder.
+  void SetHeaderListener(HeaderListener listener) {
+    listener_ = std::move(listener);
+  }
+
+  void DisableCompression() { enable_compression_ = false; }
+
+  // Disables the deconstruction of Cookie header values into individual
+  // components, as described in
+  // https://httpwg.org/specs/rfc9113.html#CompressCookie. The deconstructed
+  // representation can cause problems for some HTTP/2 endpoints.
+  void DisableCookieCrumbling() { crumble_cookies_ = false; }
+
+  // Returns the current dynamic table size, including the 32 bytes per entry
+  // overhead mentioned in RFC 7541 section 4.1.
+  size_t GetDynamicTableSize() const { return header_table_.size(); }
+
+ private:
+  friend class test::HpackEncoderPeer;
+
+  class RepresentationIterator;
+  class Encoderator;
+
+  // Encodes a sequence of header name-value pairs as a single header block.
+  std::string EncodeRepresentations(RepresentationIterator* iter);
+
+  // Emits a static/dynamic indexed representation (Section 7.1).
+  void EmitIndex(size_t index);
+
+  // Emits a literal representation (Section 7.2).
+  void EmitIndexedLiteral(const Representation& representation);
+  void EmitNonIndexedLiteral(const Representation& representation,
+                             bool enable_compression);
+  void EmitLiteral(const Representation& representation);
+
+  // Emits a Huffman or identity string (whichever is smaller).
+  void EmitString(absl::string_view str);
+
+  // Emits the current dynamic table size if the table size was recently
+  // updated and we have not yet emitted it (Section 6.3).
+  void MaybeEmitTableSize();
+
+  // Crumbles a cookie header into ";" delimited crumbs.
+  static void CookieToCrumbs(const Representation& cookie,
+                             Representations* crumbs_out);
+
+  // Crumbles other header field values at \0 delimiters.
+  static void DecomposeRepresentation(const Representation& header_field,
+                                      Representations* out);
+
+  HpackHeaderTable header_table_;
+  HpackOutputStream output_stream_;
+
+  size_t min_table_size_setting_received_;
+  HeaderListener listener_;
+  IndexingPolicy should_index_;
+  bool enable_compression_;
+  bool should_emit_table_size_;
+  bool crumble_cookies_;
+};
+
+}  // namespace spdy
+
+#endif  // QUICHE_HTTP2_HPACK_HPACK_ENCODER_H_
diff --git a/quiche/spdy/core/hpack/hpack_encoder_test.cc b/quiche/http2/hpack/hpack_encoder_test.cc
similarity index 98%
rename from quiche/spdy/core/hpack/hpack_encoder_test.cc
rename to quiche/http2/hpack/hpack_encoder_test.cc
index 2d09358..48373e9 100644
--- a/quiche/spdy/core/hpack/hpack_encoder_test.cc
+++ b/quiche/http2/hpack/hpack_encoder_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_encoder.h"
+#include "quiche/http2/hpack/hpack_encoder.h"
 
 #include <cstddef>
 #include <cstdint>
@@ -12,16 +12,16 @@
 #include <vector>
 
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_entry.h"
+#include "quiche/http2/hpack/hpack_header_table.h"
+#include "quiche/http2/hpack/hpack_output_stream.h"
+#include "quiche/http2/hpack/hpack_static_table.h"
 #include "quiche/http2/hpack/huffman/hpack_huffman_encoder.h"
 #include "quiche/http2/test_tools/http2_random.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/quiche_simple_arena.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
-#include "quiche/spdy/core/hpack/hpack_entry.h"
-#include "quiche/spdy/core/hpack/hpack_header_table.h"
-#include "quiche/spdy/core/hpack/hpack_output_stream.h"
-#include "quiche/spdy/core/hpack/hpack_static_table.h"
 #include "quiche/spdy/core/http2_header_block.h"
 
 namespace spdy {
diff --git a/quiche/spdy/core/hpack/hpack_entry.cc b/quiche/http2/hpack/hpack_entry.cc
similarity index 94%
rename from quiche/spdy/core/hpack/hpack_entry.cc
rename to quiche/http2/hpack/hpack_entry.cc
index 365b623..bfdd9fa 100644
--- a/quiche/spdy/core/hpack/hpack_entry.cc
+++ b/quiche/http2/hpack/hpack_entry.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_entry.h"
+#include "quiche/http2/hpack/hpack_entry.h"
 
 #include <cstddef>
 #include <string>
diff --git a/quiche/spdy/core/hpack/hpack_entry.h b/quiche/http2/hpack/hpack_entry.h
similarity index 94%
rename from quiche/spdy/core/hpack/hpack_entry.h
rename to quiche/http2/hpack/hpack_entry.h
index b84e0da..67749e9 100644
--- a/quiche/spdy/core/hpack/hpack_entry.h
+++ b/quiche/http2/hpack/hpack_entry.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_SPDY_CORE_HPACK_HPACK_ENTRY_H_
-#define QUICHE_SPDY_CORE_HPACK_HPACK_ENTRY_H_
+#ifndef QUICHE_HTTP2_HPACK_HPACK_ENTRY_H_
+#define QUICHE_HTTP2_HPACK_HPACK_ENTRY_H_
 
 #include <cstddef>
 #include <string>
@@ -77,4 +77,4 @@
 
 }  // namespace spdy
 
-#endif  // QUICHE_SPDY_CORE_HPACK_HPACK_ENTRY_H_
+#endif  // QUICHE_HTTP2_HPACK_HPACK_ENTRY_H_
diff --git a/quiche/spdy/core/hpack/hpack_entry_test.cc b/quiche/http2/hpack/hpack_entry_test.cc
similarity index 96%
rename from quiche/spdy/core/hpack/hpack_entry_test.cc
rename to quiche/http2/hpack/hpack_entry_test.cc
index faf7786..e147987 100644
--- a/quiche/spdy/core/hpack/hpack_entry_test.cc
+++ b/quiche/http2/hpack/hpack_entry_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_entry.h"
+#include "quiche/http2/hpack/hpack_entry.h"
 
 #include "absl/hash/hash.h"
 #include "quiche/common/platform/api/quiche_test.h"
diff --git a/quiche/spdy/core/hpack/hpack_header_table.cc b/quiche/http2/hpack/hpack_header_table.cc
similarity index 96%
rename from quiche/spdy/core/hpack/hpack_header_table.cc
rename to quiche/http2/hpack/hpack_header_table.cc
index 6deb280..0fbcc6e 100644
--- a/quiche/spdy/core/hpack/hpack_header_table.cc
+++ b/quiche/http2/hpack/hpack_header_table.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_header_table.h"
+#include "quiche/http2/hpack/hpack_header_table.h"
 
 #include <algorithm>
 #include <cstddef>
@@ -11,10 +11,10 @@
 #include <utility>
 
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_entry.h"
+#include "quiche/http2/hpack/hpack_static_table.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
-#include "quiche/spdy/core/hpack/hpack_entry.h"
-#include "quiche/spdy/core/hpack/hpack_static_table.h"
 
 namespace spdy {
 
diff --git a/quiche/spdy/core/hpack/hpack_header_table.h b/quiche/http2/hpack/hpack_header_table.h
similarity index 96%
rename from quiche/spdy/core/hpack/hpack_header_table.h
rename to quiche/http2/hpack/hpack_header_table.h
index ab1842e..b6c2385 100644
--- a/quiche/spdy/core/hpack/hpack_header_table.h
+++ b/quiche/http2/hpack/hpack_header_table.h
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_SPDY_CORE_HPACK_HPACK_HEADER_TABLE_H_
-#define QUICHE_SPDY_CORE_HPACK_HPACK_HEADER_TABLE_H_
+#ifndef QUICHE_HTTP2_HPACK_HPACK_HEADER_TABLE_H_
+#define QUICHE_HTTP2_HPACK_HPACK_HEADER_TABLE_H_
 
 #include <cstddef>
 #include <memory>
@@ -11,9 +11,9 @@
 
 #include "absl/container/flat_hash_map.h"
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_entry.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/quiche_circular_deque.h"
-#include "quiche/spdy/core/hpack/hpack_entry.h"
 
 // All section references below are to http://tools.ietf.org/html/rfc7541.
 
@@ -146,4 +146,4 @@
 
 }  // namespace spdy
 
-#endif  // QUICHE_SPDY_CORE_HPACK_HPACK_HEADER_TABLE_H_
+#endif  // QUICHE_HTTP2_HPACK_HPACK_HEADER_TABLE_H_
diff --git a/quiche/spdy/core/hpack/hpack_header_table_test.cc b/quiche/http2/hpack/hpack_header_table_test.cc
similarity index 98%
rename from quiche/spdy/core/hpack/hpack_header_table_test.cc
rename to quiche/http2/hpack/hpack_header_table_test.cc
index 9cc3608..f634309 100644
--- a/quiche/spdy/core/hpack/hpack_header_table_test.cc
+++ b/quiche/http2/hpack/hpack_header_table_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_header_table.h"
+#include "quiche/http2/hpack/hpack_header_table.h"
 
 #include <algorithm>
 #include <cstddef>
@@ -11,10 +11,10 @@
 #include <vector>
 
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_entry.h"
+#include "quiche/http2/hpack/hpack_static_table.h"
 #include "quiche/common/platform/api/quiche_test.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
-#include "quiche/spdy/core/hpack/hpack_entry.h"
-#include "quiche/spdy/core/hpack/hpack_static_table.h"
 
 namespace spdy {
 
diff --git a/quiche/spdy/core/hpack/hpack_output_stream.cc b/quiche/http2/hpack/hpack_output_stream.cc
similarity index 96%
rename from quiche/spdy/core/hpack/hpack_output_stream.cc
rename to quiche/http2/hpack/hpack_output_stream.cc
index f41007e..aa50c0a 100644
--- a/quiche/spdy/core/hpack/hpack_output_stream.cc
+++ b/quiche/http2/hpack/hpack_output_stream.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_output_stream.h"
+#include "quiche/http2/hpack/hpack_output_stream.h"
 
 #include <cstddef>
 #include <cstdint>
@@ -10,8 +10,8 @@
 #include <utility>
 
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_constants.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
 
 namespace spdy {
 
diff --git a/quiche/spdy/core/hpack/hpack_output_stream.h b/quiche/http2/hpack/hpack_output_stream.h
similarity index 91%
rename from quiche/spdy/core/hpack/hpack_output_stream.h
rename to quiche/http2/hpack/hpack_output_stream.h
index 7640f80..c56ba87 100644
--- a/quiche/spdy/core/hpack/hpack_output_stream.h
+++ b/quiche/http2/hpack/hpack_output_stream.h
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_SPDY_CORE_HPACK_HPACK_OUTPUT_STREAM_H_
-#define QUICHE_SPDY_CORE_HPACK_HPACK_OUTPUT_STREAM_H_
+#ifndef QUICHE_HTTP2_HPACK_HPACK_OUTPUT_STREAM_H_
+#define QUICHE_HTTP2_HPACK_HPACK_OUTPUT_STREAM_H_
 
 #include <cstddef>
 #include <cstdint>
 #include <string>
 
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_constants.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
 
 // All section references below are to
 // http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08
@@ -72,4 +72,4 @@
 
 }  // namespace spdy
 
-#endif  // QUICHE_SPDY_CORE_HPACK_HPACK_OUTPUT_STREAM_H_
+#endif  // QUICHE_HTTP2_HPACK_HPACK_OUTPUT_STREAM_H_
diff --git a/quiche/spdy/core/hpack/hpack_output_stream_test.cc b/quiche/http2/hpack/hpack_output_stream_test.cc
similarity index 99%
rename from quiche/spdy/core/hpack/hpack_output_stream_test.cc
rename to quiche/http2/hpack/hpack_output_stream_test.cc
index a756eee..c5a764a 100644
--- a/quiche/spdy/core/hpack/hpack_output_stream_test.cc
+++ b/quiche/http2/hpack/hpack_output_stream_test.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_output_stream.h"
+#include "quiche/http2/hpack/hpack_output_stream.h"
 
 #include <cstdint>
 #include <string>
diff --git a/quiche/spdy/core/hpack/hpack_static_table.cc b/quiche/http2/hpack/hpack_static_table.cc
similarity index 90%
rename from quiche/spdy/core/hpack/hpack_static_table.cc
rename to quiche/http2/hpack/hpack_static_table.cc
index 30a88af..8a0d912 100644
--- a/quiche/spdy/core/hpack/hpack_static_table.cc
+++ b/quiche/http2/hpack/hpack_static_table.cc
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_static_table.h"
+#include "quiche/http2/hpack/hpack_static_table.h"
 
 #include <cstddef>
 #include <string>
 #include <utility>
 
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_entry.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
-#include "quiche/spdy/core/hpack/hpack_entry.h"
 
 namespace spdy {
 
diff --git a/quiche/spdy/core/hpack/hpack_static_table.h b/quiche/http2/hpack/hpack_static_table.h
similarity index 88%
rename from quiche/spdy/core/hpack/hpack_static_table.h
rename to quiche/http2/hpack/hpack_static_table.h
index 5973367..0280d37 100644
--- a/quiche/spdy/core/hpack/hpack_static_table.h
+++ b/quiche/http2/hpack/hpack_static_table.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef QUICHE_SPDY_CORE_HPACK_HPACK_STATIC_TABLE_H_
-#define QUICHE_SPDY_CORE_HPACK_HPACK_STATIC_TABLE_H_
+#ifndef QUICHE_HTTP2_HPACK_HPACK_STATIC_TABLE_H_
+#define QUICHE_HTTP2_HPACK_HPACK_STATIC_TABLE_H_
 
 #include <cstddef>
 
+#include "quiche/http2/hpack/hpack_header_table.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/spdy/core/hpack/hpack_header_table.h"
 
 namespace spdy {
 
@@ -55,4 +55,4 @@
 
 }  // namespace spdy
 
-#endif  // QUICHE_SPDY_CORE_HPACK_HPACK_STATIC_TABLE_H_
+#endif  // QUICHE_HTTP2_HPACK_HPACK_STATIC_TABLE_H_
diff --git a/quiche/spdy/core/hpack/hpack_static_table_test.cc b/quiche/http2/hpack/hpack_static_table_test.cc
similarity index 91%
rename from quiche/spdy/core/hpack/hpack_static_table_test.cc
rename to quiche/http2/hpack/hpack_static_table_test.cc
index ddb6787..3863b06 100644
--- a/quiche/spdy/core/hpack/hpack_static_table_test.cc
+++ b/quiche/http2/hpack/hpack_static_table_test.cc
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "quiche/spdy/core/hpack/hpack_static_table.h"
+#include "quiche/http2/hpack/hpack_static_table.h"
 
 #include <set>
 #include <vector>
 
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_header_table.h"
 #include "quiche/common/platform/api/quiche_test.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
-#include "quiche/spdy/core/hpack/hpack_header_table.h"
 
 namespace spdy {
 
diff --git a/quiche/quic/core/qpack/qpack_header_table.h b/quiche/quic/core/qpack/qpack_header_table.h
index 748c11b..a57b478 100644
--- a/quiche/quic/core/qpack/qpack_header_table.h
+++ b/quiche/quic/core/qpack/qpack_header_table.h
@@ -9,10 +9,10 @@
 #include <deque>
 
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_entry.h"
+#include "quiche/http2/hpack/hpack_header_table.h"
 #include "quiche/quic/platform/api/quic_export.h"
 #include "quiche/common/quiche_circular_deque.h"
-#include "quiche/spdy/core/hpack/hpack_entry.h"
-#include "quiche/spdy/core/hpack/hpack_header_table.h"
 
 namespace quic {
 
diff --git a/quiche/quic/core/qpack/qpack_header_table_test.cc b/quiche/quic/core/qpack/qpack_header_table_test.cc
index c4331a6..826273a 100644
--- a/quiche/quic/core/qpack/qpack_header_table_test.cc
+++ b/quiche/quic/core/qpack/qpack_header_table_test.cc
@@ -10,9 +10,9 @@
 
 #include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_entry.h"
 #include "quiche/quic/core/qpack/qpack_static_table.h"
 #include "quiche/quic/platform/api/quic_test.h"
-#include "quiche/spdy/core/hpack/hpack_entry.h"
 
 namespace quic {
 namespace test {
diff --git a/quiche/quic/core/qpack/qpack_static_table.h b/quiche/quic/core/qpack/qpack_static_table.h
index 89ec254..f3a1596 100644
--- a/quiche/quic/core/qpack/qpack_static_table.h
+++ b/quiche/quic/core/qpack/qpack_static_table.h
@@ -7,9 +7,9 @@
 
 #include <vector>
 
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_static_table.h"
 #include "quiche/quic/platform/api/quic_export.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
-#include "quiche/spdy/core/hpack/hpack_static_table.h"
 
 namespace quic {
 
diff --git a/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc b/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc
index 00309d0..fbd11ad 100644
--- a/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc
+++ b/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc
@@ -20,15 +20,15 @@
 #include "quiche/http2/hpack/decoder/hpack_decoder.h"
 #include "quiche/http2/hpack/decoder/hpack_decoder_state.h"
 #include "quiche/http2/hpack/decoder/hpack_decoder_tables.h"
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_encoder.h"
+#include "quiche/http2/hpack/hpack_output_stream.h"
 #include "quiche/http2/hpack/http2_hpack_constants.h"
 #include "quiche/http2/test_tools/hpack_block_builder.h"
 #include "quiche/http2/test_tools/http2_random.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/quiche_text_utils.h"
-#include "quiche/spdy/core/hpack/hpack_constants.h"
-#include "quiche/spdy/core/hpack/hpack_encoder.h"
-#include "quiche/spdy/core/hpack/hpack_output_stream.h"
 #include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/recording_headers_handler.h"
 
diff --git a/quiche/spdy/core/hpack/hpack_encoder.h b/quiche/spdy/core/hpack/hpack_encoder.h
index 35007c6..8e746c8 100644
--- a/quiche/spdy/core/hpack/hpack_encoder.h
+++ b/quiche/spdy/core/hpack/hpack_encoder.h
@@ -5,152 +5,8 @@
 #ifndef QUICHE_SPDY_CORE_HPACK_HPACK_ENCODER_H_
 #define QUICHE_SPDY_CORE_HPACK_HPACK_ENCODER_H_
 
-#include <stddef.h>
+#include "quiche/http2/hpack/hpack_encoder.h"
 
-#include <memory>
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "absl/strings/string_view.h"
-#include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/common/quiche_callbacks.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"
-
-// An HpackEncoder encodes header sets as outlined in
-// http://tools.ietf.org/html/rfc7541.
-
-namespace spdy {
-
-namespace test {
-class HpackEncoderPeer;
-}  // namespace test
-
-class QUICHE_EXPORT HpackEncoder {
- public:
-  using Representation = std::pair<absl::string_view, absl::string_view>;
-  using Representations = std::vector<Representation>;
-
-  // Callers may provide a HeaderListener to be informed of header name-value
-  // pairs processed by this encoder.
-  using HeaderListener =
-      quiche::MultiUseCallback<void(absl::string_view, absl::string_view)>;
-
-  // An indexing policy should return true if the provided header name-value
-  // pair should be inserted into the HPACK dynamic table.
-  using IndexingPolicy =
-      quiche::MultiUseCallback<bool(absl::string_view, absl::string_view)>;
-
-  HpackEncoder();
-  HpackEncoder(const HpackEncoder&) = delete;
-  HpackEncoder& operator=(const HpackEncoder&) = delete;
-  ~HpackEncoder();
-
-  // Encodes and returns the given header set as a string.
-  std::string EncodeHeaderBlock(const Http2HeaderBlock& header_set);
-
-  class QUICHE_EXPORT ProgressiveEncoder {
-   public:
-    virtual ~ProgressiveEncoder() {}
-
-    // Returns true iff more remains to encode.
-    virtual bool HasNext() const = 0;
-
-    // Encodes and returns up to max_encoded_bytes of the current header block.
-    virtual std::string Next(size_t max_encoded_bytes) = 0;
-  };
-
-  // Returns a ProgressiveEncoder which must be outlived by both the given
-  // Http2HeaderBlock and this object.
-  std::unique_ptr<ProgressiveEncoder> EncodeHeaderSet(
-      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
-  // the caller when constructing the list of representations.
-  std::unique_ptr<ProgressiveEncoder> EncodeRepresentations(
-      const Representations& representations);
-
-  // Called upon a change to SETTINGS_HEADER_TABLE_SIZE. Specifically, this
-  // is to be called after receiving (and sending an acknowledgement for) a
-  // SETTINGS_HEADER_TABLE_SIZE update from the remote decoding endpoint.
-  void ApplyHeaderTableSizeSetting(size_t size_setting);
-
-  // TODO(birenroy): Rename this GetDynamicTableCapacity().
-  size_t CurrentHeaderTableSizeSetting() const {
-    return header_table_.settings_size_bound();
-  }
-
-  // This HpackEncoder will use |policy| to determine whether to insert header
-  // name-value pairs into the dynamic table.
-  void SetIndexingPolicy(IndexingPolicy policy) {
-    should_index_ = std::move(policy);
-  }
-
-  // |listener| will be invoked for each header name-value pair processed by
-  // this encoder.
-  void SetHeaderListener(HeaderListener listener) {
-    listener_ = std::move(listener);
-  }
-
-  void DisableCompression() { enable_compression_ = false; }
-
-  // Disables the deconstruction of Cookie header values into individual
-  // components, as described in
-  // https://httpwg.org/specs/rfc9113.html#CompressCookie. The deconstructed
-  // representation can cause problems for some HTTP/2 endpoints.
-  void DisableCookieCrumbling() { crumble_cookies_ = false; }
-
-  // Returns the current dynamic table size, including the 32 bytes per entry
-  // overhead mentioned in RFC 7541 section 4.1.
-  size_t GetDynamicTableSize() const { return header_table_.size(); }
-
- private:
-  friend class test::HpackEncoderPeer;
-
-  class RepresentationIterator;
-  class Encoderator;
-
-  // Encodes a sequence of header name-value pairs as a single header block.
-  std::string EncodeRepresentations(RepresentationIterator* iter);
-
-  // Emits a static/dynamic indexed representation (Section 7.1).
-  void EmitIndex(size_t index);
-
-  // Emits a literal representation (Section 7.2).
-  void EmitIndexedLiteral(const Representation& representation);
-  void EmitNonIndexedLiteral(const Representation& representation,
-                             bool enable_compression);
-  void EmitLiteral(const Representation& representation);
-
-  // Emits a Huffman or identity string (whichever is smaller).
-  void EmitString(absl::string_view str);
-
-  // Emits the current dynamic table size if the table size was recently
-  // updated and we have not yet emitted it (Section 6.3).
-  void MaybeEmitTableSize();
-
-  // Crumbles a cookie header into ";" delimited crumbs.
-  static void CookieToCrumbs(const Representation& cookie,
-                             Representations* crumbs_out);
-
-  // Crumbles other header field values at \0 delimiters.
-  static void DecomposeRepresentation(const Representation& header_field,
-                                      Representations* out);
-
-  HpackHeaderTable header_table_;
-  HpackOutputStream output_stream_;
-
-  size_t min_table_size_setting_received_;
-  HeaderListener listener_;
-  IndexingPolicy should_index_;
-  bool enable_compression_;
-  bool should_emit_table_size_;
-  bool crumble_cookies_;
-};
-
-}  // namespace spdy
+// TODO(b/234438854): remove this file once Envoy has migrated to the new target
 
 #endif  // QUICHE_SPDY_CORE_HPACK_HPACK_ENCODER_H_
diff --git a/quiche/spdy/core/hpack/hpack_round_trip_test.cc b/quiche/spdy/core/hpack/hpack_round_trip_test.cc
index 4c044d5..db39349 100644
--- a/quiche/spdy/core/hpack/hpack_round_trip_test.cc
+++ b/quiche/spdy/core/hpack/hpack_round_trip_test.cc
@@ -8,10 +8,10 @@
 #include <string>
 #include <vector>
 
+#include "quiche/http2/hpack/hpack_encoder.h"
 #include "quiche/http2/test_tools/http2_random.h"
 #include "quiche/common/platform/api/quiche_test.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/core/recording_headers_handler.h"
 
diff --git a/quiche/spdy/core/http2_frame_decoder_adapter.cc b/quiche/spdy/core/http2_frame_decoder_adapter.cc
index 3896ebd..f8c7052 100644
--- a/quiche/spdy/core/http2_frame_decoder_adapter.cc
+++ b/quiche/spdy/core/http2_frame_decoder_adapter.cc
@@ -21,13 +21,13 @@
 #include "quiche/http2/decoder/decode_status.h"
 #include "quiche/http2/decoder/http2_frame_decoder.h"
 #include "quiche/http2/hpack/decoder/hpack_decoding_error.h"
+#include "quiche/http2/hpack/hpack_header_table.h"
 #include "quiche/http2/http2_constants.h"
 #include "quiche/http2/http2_structures.h"
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/quiche_endian.h"
 #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_headers_handler_interface.h"
 #include "quiche/spdy/core/spdy_protocol.h"
diff --git a/quiche/spdy/core/spdy_framer.cc b/quiche/spdy/core/spdy_framer.cc
index 654641a..097aaac 100644
--- a/quiche/spdy/core/spdy_framer.cc
+++ b/quiche/spdy/core/spdy_framer.cc
@@ -13,10 +13,10 @@
 
 #include "absl/base/attributes.h"
 #include "absl/memory/memory.h"
+#include "quiche/http2/hpack/hpack_constants.h"
+#include "quiche/http2/hpack/hpack_encoder.h"
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_logging.h"
-#include "quiche/spdy/core/hpack/hpack_constants.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_frame_builder.h"
diff --git a/quiche/spdy/core/spdy_framer.h b/quiche/spdy/core/spdy_framer.h
index de755e6..c9f8200 100644
--- a/quiche/spdy/core/spdy_framer.h
+++ b/quiche/spdy/core/spdy_framer.h
@@ -12,8 +12,8 @@
 #include <string>
 #include <utility>
 
+#include "quiche/http2/hpack/hpack_encoder.h"
 #include "quiche/common/platform/api/quiche_export.h"
-#include "quiche/spdy/core/hpack/hpack_encoder.h"
 #include "quiche/spdy/core/spdy_protocol.h"
 #include "quiche/spdy/core/zero_copy_output_buffer.h"
 
diff --git a/quiche/spdy/core/spdy_framer_test.cc b/quiche/spdy/core/spdy_framer_test.cc
index 9c52ada..7dc0a1a 100644
--- a/quiche/spdy/core/spdy_framer_test.cc
+++ b/quiche/spdy/core/spdy_framer_test.cc
@@ -18,11 +18,11 @@
 
 #include "absl/base/macros.h"
 #include "absl/strings/string_view.h"
+#include "quiche/http2/hpack/hpack_encoder.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/quiche_text_utils.h"
 #include "quiche/spdy/core/array_output_buffer.h"
-#include "quiche/spdy/core/hpack/hpack_encoder.h"
 #include "quiche/spdy/core/http2_frame_decoder_adapter.h"
 #include "quiche/spdy/core/http2_header_block.h"
 #include "quiche/spdy/core/recording_headers_handler.h"