diff --git a/spdy/core/hpack/hpack_decoder_adapter.cc b/spdy/core/hpack/hpack_decoder_adapter.cc
index cf9a0e7..fa54464 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter.cc
@@ -185,7 +185,7 @@
 }
 
 void HpackDecoderAdapter::ListenerAdapter::OnHeaderErrorDetected(
-    quiche::QuicheStringPiece error_message) {
+    absl::string_view error_message) {
   SPDY_VLOG(1) << error_message;
 }
 
diff --git a/spdy/core/hpack/hpack_decoder_adapter.h b/spdy/core/hpack/hpack_decoder_adapter.h
index f521ee1..36f42b7 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.h
+++ b/spdy/core/hpack/hpack_decoder_adapter.h
@@ -13,13 +13,13 @@
 #include <cstdint>
 #include <memory>
 
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/http2/hpack/decoder/hpack_decoder.h"
 #include "net/third_party/quiche/src/http2/hpack/decoder/hpack_decoder_listener.h"
 #include "net/third_party/quiche/src/http2/hpack/decoder/hpack_decoder_tables.h"
 #include "net/third_party/quiche/src/http2/hpack/hpack_string.h"
 #include "net/third_party/quiche/src/http2/hpack/http2_hpack_constants.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_export.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_header_table.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_header_block.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_headers_handler_interface.h"
@@ -113,8 +113,7 @@
     void OnHeader(const http2::HpackString& name,
                   const http2::HpackString& value) override;
     void OnHeaderListEnd() override;
-    void OnHeaderErrorDetected(
-        quiche::QuicheStringPiece error_message) override;
+    void OnHeaderErrorDetected(absl::string_view error_message) override;
 
     // Override the HpackDecoderTablesDebugListener methods:
     int64_t OnEntryInserted(const http2::HpackStringPair& entry,
diff --git a/spdy/core/hpack/hpack_decoder_adapter_test.cc b/spdy/core/hpack/hpack_decoder_adapter_test.cc
index fb9bfbd..c1ed5d6 100644
--- a/spdy/core/hpack/hpack_decoder_adapter_test.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter_test.cc
@@ -65,8 +65,8 @@
   explicit HpackDecoderAdapterPeer(HpackDecoderAdapter* decoder)
       : decoder_(decoder) {}
 
-  void HandleHeaderRepresentation(quiche::QuicheStringPiece name,
-                                  quiche::QuicheStringPiece value) {
+  void HandleHeaderRepresentation(absl::string_view name,
+                                  absl::string_view value) {
     decoder_->listener_adapter_.OnHeader(HpackString(name), HpackString(value));
   }
 
@@ -133,7 +133,7 @@
     }
   }
 
-  bool HandleControlFrameHeadersData(quiche::QuicheStringPiece str) {
+  bool HandleControlFrameHeadersData(absl::string_view str) {
     SPDY_VLOG(3) << "HandleControlFrameHeadersData:\n" << SpdyHexDump(str);
     bytes_passed_in_ += str.size();
     return decoder_.HandleControlFrameHeadersData(str.data(), str.size());
@@ -147,7 +147,7 @@
     return rc;
   }
 
-  bool DecodeHeaderBlock(quiche::QuicheStringPiece str,
+  bool DecodeHeaderBlock(absl::string_view str,
                          bool check_decoded_size = true) {
     // Don't call this again if HandleControlFrameHeadersData failed previously.
     EXPECT_FALSE(decode_has_failed_);
@@ -225,8 +225,7 @@
     return size;
   }
 
-  const SpdyHeaderBlock& DecodeBlockExpectingSuccess(
-      quiche::QuicheStringPiece str) {
+  const SpdyHeaderBlock& DecodeBlockExpectingSuccess(absl::string_view str) {
     EXPECT_TRUE(DecodeHeaderBlock(str));
     return decoded_block();
   }
@@ -434,11 +433,10 @@
       decoded_block(),
       ElementsAre(
           Pair("cookie", " part 1; part 2 ; part3;  fin!"),
-          Pair("passed-through", quiche::QuicheStringPiece("foo\0baz", 7)),
-          Pair("joined",
-               quiche::QuicheStringPiece("joined\0value 1\0value 2", 22)),
+          Pair("passed-through", absl::string_view("foo\0baz", 7)),
+          Pair("joined", absl::string_view("joined\0value 1\0value 2", 22)),
           Pair("empty", ""),
-          Pair("empty-joined", quiche::QuicheStringPiece("\0foo\0\0", 6))));
+          Pair("empty-joined", absl::string_view("\0foo\0\0", 6))));
 }
 
 // Decoding indexed static table field should work.
@@ -503,7 +501,7 @@
     output_stream.AppendUint32(126);
 
     output_stream.TakeString(&input);
-    EXPECT_TRUE(DecodeHeaderBlock(quiche::QuicheStringPiece(input)));
+    EXPECT_TRUE(DecodeHeaderBlock(absl::string_view(input)));
     EXPECT_EQ(126u, decoder_peer_.header_table_size_limit());
   }
   {
@@ -513,7 +511,7 @@
     output_stream.AppendUint32(kDefaultHeaderTableSizeSetting);
 
     output_stream.TakeString(&input);
-    EXPECT_TRUE(DecodeHeaderBlock(quiche::QuicheStringPiece(input)));
+    EXPECT_TRUE(DecodeHeaderBlock(absl::string_view(input)));
     EXPECT_EQ(kDefaultHeaderTableSizeSetting,
               decoder_peer_.header_table_size_limit());
   }
@@ -524,7 +522,7 @@
     output_stream.AppendUint32(kDefaultHeaderTableSizeSetting + 1);
 
     output_stream.TakeString(&input);
-    EXPECT_FALSE(DecodeHeaderBlock(quiche::QuicheStringPiece(input)));
+    EXPECT_FALSE(DecodeHeaderBlock(absl::string_view(input)));
     EXPECT_EQ(kDefaultHeaderTableSizeSetting,
               decoder_peer_.header_table_size_limit());
   }
@@ -542,7 +540,7 @@
     output_stream.AppendUint32(122);
 
     output_stream.TakeString(&input);
-    EXPECT_TRUE(DecodeHeaderBlock(quiche::QuicheStringPiece(input)));
+    EXPECT_TRUE(DecodeHeaderBlock(absl::string_view(input)));
     EXPECT_EQ(122u, decoder_peer_.header_table_size_limit());
   }
 }
@@ -562,7 +560,7 @@
 
     output_stream.TakeString(&input);
 
-    EXPECT_FALSE(DecodeHeaderBlock(quiche::QuicheStringPiece(input)));
+    EXPECT_FALSE(DecodeHeaderBlock(absl::string_view(input)));
     EXPECT_EQ(10u, decoder_peer_.header_table_size_limit());
   }
 }
@@ -581,7 +579,7 @@
 
     output_stream.TakeString(&input);
 
-    EXPECT_FALSE(DecodeHeaderBlock(quiche::QuicheStringPiece(input)));
+    EXPECT_FALSE(DecodeHeaderBlock(absl::string_view(input)));
     EXPECT_EQ(kDefaultHeaderTableSizeSetting,
               decoder_peer_.header_table_size_limit());
   }
@@ -604,7 +602,7 @@
 
     output_stream.TakeString(&input);
 
-    EXPECT_FALSE(DecodeHeaderBlock(quiche::QuicheStringPiece(input)));
+    EXPECT_FALSE(DecodeHeaderBlock(absl::string_view(input)));
     EXPECT_EQ(60u, decoder_peer_.header_table_size_limit());
   }
 }
@@ -616,7 +614,7 @@
   // name.
   const char input[] = "\x04\x0c/sample/path\x00\x06:path2\x0e/sample/path/2";
   const SpdyHeaderBlock& header_set = DecodeBlockExpectingSuccess(
-      quiche::QuicheStringPiece(input, QUICHE_ARRAYSIZE(input) - 1));
+      absl::string_view(input, QUICHE_ARRAYSIZE(input) - 1));
 
   SpdyHeaderBlock expected_header_set;
   expected_header_set[":path"] = "/sample/path";
@@ -629,7 +627,7 @@
 TEST_P(HpackDecoderAdapterTest, LiteralHeaderIncrementalIndexing) {
   const char input[] = "\x44\x0c/sample/path\x40\x06:path2\x0e/sample/path/2";
   const SpdyHeaderBlock& header_set = DecodeBlockExpectingSuccess(
-      quiche::QuicheStringPiece(input, QUICHE_ARRAYSIZE(input) - 1));
+      absl::string_view(input, QUICHE_ARRAYSIZE(input) - 1));
 
   SpdyHeaderBlock expected_header_set;
   expected_header_set[":path"] = "/sample/path";
@@ -642,23 +640,23 @@
   EXPECT_TRUE(EncodeAndDecodeDynamicTableSizeUpdates(0, 0));
 
   // Name is the last static index. Works.
-  EXPECT_TRUE(DecodeHeaderBlock(quiche::QuicheStringPiece("\x7d\x03ooo")));
+  EXPECT_TRUE(DecodeHeaderBlock(absl::string_view("\x7d\x03ooo")));
   // Name is one beyond the last static index. Fails.
-  EXPECT_FALSE(DecodeHeaderBlock(quiche::QuicheStringPiece("\x7e\x03ooo")));
+  EXPECT_FALSE(DecodeHeaderBlock(absl::string_view("\x7e\x03ooo")));
 }
 
 TEST_P(HpackDecoderAdapterTest, LiteralHeaderNoIndexingInvalidNameIndex) {
   // Name is the last static index. Works.
-  EXPECT_TRUE(DecodeHeaderBlock(quiche::QuicheStringPiece("\x0f\x2e\x03ooo")));
+  EXPECT_TRUE(DecodeHeaderBlock(absl::string_view("\x0f\x2e\x03ooo")));
   // Name is one beyond the last static index. Fails.
-  EXPECT_FALSE(DecodeHeaderBlock(quiche::QuicheStringPiece("\x0f\x2f\x03ooo")));
+  EXPECT_FALSE(DecodeHeaderBlock(absl::string_view("\x0f\x2f\x03ooo")));
 }
 
 TEST_P(HpackDecoderAdapterTest, LiteralHeaderNeverIndexedInvalidNameIndex) {
   // Name is the last static index. Works.
-  EXPECT_TRUE(DecodeHeaderBlock(quiche::QuicheStringPiece("\x1f\x2e\x03ooo")));
+  EXPECT_TRUE(DecodeHeaderBlock(absl::string_view("\x1f\x2e\x03ooo")));
   // Name is one beyond the last static index. Fails.
-  EXPECT_FALSE(DecodeHeaderBlock(quiche::QuicheStringPiece("\x1f\x2f\x03ooo")));
+  EXPECT_FALSE(DecodeHeaderBlock(absl::string_view("\x1f\x2f\x03ooo")));
 }
 
 TEST_P(HpackDecoderAdapterTest, TruncatedIndex) {
@@ -1055,10 +1053,10 @@
   hbb.AppendDynamicTableSizeUpdate(0);
   hbb.AppendDynamicTableSizeUpdate(63);
 
-  const quiche::QuicheStringPiece name("some-name");
-  const quiche::QuicheStringPiece value1("some-value");
-  const quiche::QuicheStringPiece value2("another-value");
-  const quiche::QuicheStringPiece value3("yet-another-value");
+  const absl::string_view name("some-name");
+  const absl::string_view value1("some-value");
+  const absl::string_view value2("another-value");
+  const absl::string_view value3("yet-another-value");
 
   // Add an entry that will become the first in the dynamic table, entry 62.
   hbb.AppendLiteralNameAndValue(HpackEntryType::kIndexedLiteralHeader, false,
diff --git a/spdy/core/hpack/hpack_encoder.cc b/spdy/core/hpack/hpack_encoder.cc
index 566f4ee..6ad6a5f 100644
--- a/spdy/core/hpack/hpack_encoder.cc
+++ b/spdy/core/hpack/hpack_encoder.cc
@@ -58,12 +58,10 @@
 namespace {
 
 // The default header listener.
-void NoOpListener(quiche::QuicheStringPiece /*name*/,
-                  quiche::QuicheStringPiece /*value*/) {}
+void NoOpListener(absl::string_view /*name*/, absl::string_view /*value*/) {}
 
 // The default HPACK indexing policy.
-bool DefaultPolicy(quiche::QuicheStringPiece name,
-                   quiche::QuicheStringPiece /* value */) {
+bool DefaultPolicy(absl::string_view name, absl::string_view /* value */) {
   if (name.empty()) {
     return false;
   }
@@ -200,7 +198,7 @@
   EmitString(representation.second);
 }
 
-void HpackEncoder::EmitString(quiche::QuicheStringPiece str) {
+void HpackEncoder::EmitString(absl::string_view str) {
   size_t encoded_size =
       enable_compression_
           ? (use_fast_huffman_encoder_ ? http2::HuffmanSize(str)
@@ -249,21 +247,19 @@
   // See Section 8.1.2.5. "Compressing the Cookie Header Field" in the HTTP/2
   // specification at https://tools.ietf.org/html/draft-ietf-httpbis-http2-14.
   // Cookie values are split into individually-encoded HPACK representations.
-  quiche::QuicheStringPiece cookie_value = cookie.second;
+  absl::string_view cookie_value = cookie.second;
   // Consume leading and trailing whitespace if present.
-  quiche::QuicheStringPiece::size_type first =
-      cookie_value.find_first_not_of(" \t");
-  quiche::QuicheStringPiece::size_type last =
-      cookie_value.find_last_not_of(" \t");
-  if (first == quiche::QuicheStringPiece::npos) {
-    cookie_value = quiche::QuicheStringPiece();
+  absl::string_view::size_type first = cookie_value.find_first_not_of(" \t");
+  absl::string_view::size_type last = cookie_value.find_last_not_of(" \t");
+  if (first == absl::string_view::npos) {
+    cookie_value = absl::string_view();
   } else {
     cookie_value = cookie_value.substr(first, (last - first) + 1);
   }
   for (size_t pos = 0;;) {
     size_t end = cookie_value.find(";", pos);
 
-    if (end == quiche::QuicheStringPiece::npos) {
+    if (end == absl::string_view::npos) {
       out->push_back(std::make_pair(cookie.first, cookie_value.substr(pos)));
       break;
     }
@@ -283,12 +279,12 @@
                                            Representations* out) {
   size_t pos = 0;
   size_t end = 0;
-  while (end != quiche::QuicheStringPiece::npos) {
+  while (end != absl::string_view::npos) {
     end = header_field.second.find('\0', pos);
     out->push_back(std::make_pair(
         header_field.first,
         header_field.second.substr(
-            pos, end == quiche::QuicheStringPiece::npos ? end : end - pos)));
+            pos, end == absl::string_view::npos ? end : end - pos)));
     pos = end + 1;
   }
 }
diff --git a/spdy/core/hpack/hpack_encoder.h b/spdy/core/hpack/hpack_encoder.h
index 3b3e0d1..f9cc0d1 100644
--- a/spdy/core/hpack/hpack_encoder.h
+++ b/spdy/core/hpack/hpack_encoder.h
@@ -14,8 +14,8 @@
 #include <utility>
 #include <vector>
 
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_export.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_header_table.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_output_stream.h"
 #include "net/third_party/quiche/src/spdy/core/spdy_protocol.h"
@@ -33,19 +33,18 @@
 
 class QUICHE_EXPORT_PRIVATE HpackEncoder {
  public:
-  using Representation =
-      std::pair<quiche::QuicheStringPiece, quiche::QuicheStringPiece>;
+  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 =
-      std::function<void(quiche::QuicheStringPiece, quiche::QuicheStringPiece)>;
+      std::function<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 =
-      std::function<bool(quiche::QuicheStringPiece, quiche::QuicheStringPiece)>;
+      std::function<bool(absl::string_view, absl::string_view)>;
 
   HpackEncoder();
   HpackEncoder(const HpackEncoder&) = delete;
@@ -125,7 +124,7 @@
   void EmitLiteral(const Representation& representation);
 
   // Emits a Huffman or identity string (whichever is smaller).
-  void EmitString(quiche::QuicheStringPiece str);
+  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).
diff --git a/spdy/core/hpack/hpack_encoder_test.cc b/spdy/core/hpack/hpack_encoder_test.cc
index 62c7887..52693db 100644
--- a/spdy/core/hpack/hpack_encoder_test.cc
+++ b/spdy/core/hpack/hpack_encoder_test.cc
@@ -40,12 +40,12 @@
   bool compression_enabled() const { return encoder_->enable_compression_; }
   HpackHeaderTable* table() { return &encoder_->header_table_; }
   HpackHeaderTablePeer table_peer() { return HpackHeaderTablePeer(table()); }
-  void EmitString(quiche::QuicheStringPiece str) { encoder_->EmitString(str); }
+  void EmitString(absl::string_view str) { encoder_->EmitString(str); }
   void TakeString(std::string* out) {
     encoder_->output_stream_.TakeString(out);
   }
-  static void CookieToCrumbs(quiche::QuicheStringPiece cookie,
-                             std::vector<quiche::QuicheStringPiece>* out) {
+  static void CookieToCrumbs(absl::string_view cookie,
+                             std::vector<absl::string_view>* out) {
     Representations tmp;
     HpackEncoder::CookieToCrumbs(std::make_pair("", cookie), &tmp);
 
@@ -54,9 +54,8 @@
       out->push_back(tmp[i].second);
     }
   }
-  static void DecomposeRepresentation(
-      quiche::QuicheStringPiece value,
-      std::vector<quiche::QuicheStringPiece>* out) {
+  static void DecomposeRepresentation(absl::string_view value,
+                                      std::vector<absl::string_view>* out) {
     Representations tmp;
     HpackEncoder::DecomposeRepresentation(std::make_pair("foobar", value),
                                           &tmp);
@@ -150,12 +149,11 @@
     peer_.table()->SetMaxSize(peer_.table()->size());
   }
 
-  void SaveHeaders(quiche::QuicheStringPiece name,
-                   quiche::QuicheStringPiece value) {
-    quiche::QuicheStringPiece n(
-        headers_storage_.Memdup(name.data(), name.size()), name.size());
-    quiche::QuicheStringPiece v(
-        headers_storage_.Memdup(value.data(), value.size()), value.size());
+  void SaveHeaders(absl::string_view name, absl::string_view value) {
+    absl::string_view n(headers_storage_.Memdup(name.data(), name.size()),
+                        name.size());
+    absl::string_view v(headers_storage_.Memdup(value.data(), value.size()),
+                        value.size());
     headers_observed_.push_back(std::make_pair(n, v));
   }
 
@@ -164,32 +162,31 @@
     expected_.AppendUint32(index);
   }
   void ExpectIndexedLiteral(const HpackEntry* key_entry,
-                            quiche::QuicheStringPiece value) {
+                            absl::string_view value) {
     expected_.AppendPrefix(kLiteralIncrementalIndexOpcode);
     expected_.AppendUint32(IndexOf(key_entry));
     ExpectString(&expected_, value);
   }
-  void ExpectIndexedLiteral(quiche::QuicheStringPiece name,
-                            quiche::QuicheStringPiece value) {
+  void ExpectIndexedLiteral(absl::string_view name, absl::string_view value) {
     expected_.AppendPrefix(kLiteralIncrementalIndexOpcode);
     expected_.AppendUint32(0);
     ExpectString(&expected_, name);
     ExpectString(&expected_, value);
   }
-  void ExpectNonIndexedLiteral(quiche::QuicheStringPiece name,
-                               quiche::QuicheStringPiece value) {
+  void ExpectNonIndexedLiteral(absl::string_view name,
+                               absl::string_view value) {
     expected_.AppendPrefix(kLiteralNoIndexOpcode);
     expected_.AppendUint32(0);
     ExpectString(&expected_, name);
     ExpectString(&expected_, value);
   }
   void ExpectNonIndexedLiteralWithNameIndex(const HpackEntry* key_entry,
-                                            quiche::QuicheStringPiece value) {
+                                            absl::string_view value) {
     expected_.AppendPrefix(kLiteralNoIndexOpcode);
     expected_.AppendUint32(IndexOf(key_entry));
     ExpectString(&expected_, value);
   }
-  void ExpectString(HpackOutputStream* stream, quiche::QuicheStringPiece str) {
+  void ExpectString(HpackOutputStream* stream, absl::string_view str) {
     const HpackHuffmanTable& huffman_table = ObtainHpackHuffmanTable();
     size_t encoded_size =
         peer_.compression_enabled()
@@ -261,7 +258,7 @@
   const HpackEntry* cookie_c_;
 
   SpdySimpleArena headers_storage_;
-  std::vector<std::pair<quiche::QuicheStringPiece, quiche::QuicheStringPiece>>
+  std::vector<std::pair<absl::string_view, absl::string_view>>
       headers_observed_;
 
   HpackOutputStream expected_;
@@ -278,16 +275,15 @@
 
 TEST_P(HpackEncoderTestWithDefaultStrategy, EncodeRepresentations) {
   encoder_.SetHeaderListener(
-      [this](quiche::QuicheStringPiece name, quiche::QuicheStringPiece value) {
+      [this](absl::string_view name, absl::string_view value) {
         this->SaveHeaders(name, value);
       });
-  const std::vector<
-      std::pair<quiche::QuicheStringPiece, quiche::QuicheStringPiece>>
+  const std::vector<std::pair<absl::string_view, absl::string_view>>
       header_list = {{"cookie", "val1; val2;val3"},
                      {":path", "/home"},
                      {"accept", "text/html, text/plain,application/xml"},
                      {"cookie", "val4"},
-                     {"withnul", quiche::QuicheStringPiece("one\0two", 7)}};
+                     {"withnul", absl::string_view("one\0two", 7)}};
   ExpectNonIndexedLiteralWithNameIndex(peer_.table()->GetByName(":path"),
                                        "/home");
   ExpectIndexedLiteral(peer_.table()->GetByName("cookie"), "val1");
@@ -296,7 +292,7 @@
   ExpectIndexedLiteral(peer_.table()->GetByName("accept"),
                        "text/html, text/plain,application/xml");
   ExpectIndexedLiteral(peer_.table()->GetByName("cookie"), "val4");
-  ExpectIndexedLiteral("withnul", quiche::QuicheStringPiece("one\0two", 7));
+  ExpectIndexedLiteral("withnul", absl::string_view("one\0two", 7));
 
   CompareWithExpectedEncoding(header_list);
   EXPECT_THAT(
@@ -305,7 +301,7 @@
                   Pair("cookie", "val2"), Pair("cookie", "val3"),
                   Pair("accept", "text/html, text/plain,application/xml"),
                   Pair("cookie", "val4"),
-                  Pair("withnul", quiche::QuicheStringPiece("one\0two", 7))));
+                  Pair("withnul", absl::string_view("one\0two", 7))));
 }
 
 INSTANTIATE_TEST_SUITE_P(HpackEncoderTests,
@@ -317,7 +313,7 @@
 
 TEST_P(HpackEncoderTest, SingleDynamicIndex) {
   encoder_.SetHeaderListener(
-      [this](quiche::QuicheStringPiece name, quiche::QuicheStringPiece value) {
+      [this](absl::string_view name, absl::string_view value) {
         this->SaveHeaders(name, value);
       });
 
@@ -438,7 +434,7 @@
 
 TEST_P(HpackEncoderTest, EncodingWithoutCompression) {
   encoder_.SetHeaderListener(
-      [this](quiche::QuicheStringPiece name, quiche::QuicheStringPiece value) {
+      [this](absl::string_view name, absl::string_view value) {
         this->SaveHeaders(name, value);
       });
   encoder_.DisableCompression();
@@ -466,11 +462,10 @@
   if (strategy_ == kRepresentations) {
     EXPECT_THAT(
         headers_observed_,
-        ElementsAre(
-            Pair(":path", "/index.html"), Pair("cookie", "foo=bar"),
-            Pair("cookie", "baz=bing"),
-            Pair("hello", quiche::QuicheStringPiece("goodbye\0aloha", 13)),
-            Pair("multivalue", "value1, value2")));
+        ElementsAre(Pair(":path", "/index.html"), Pair("cookie", "foo=bar"),
+                    Pair("cookie", "baz=bing"),
+                    Pair("hello", absl::string_view("goodbye\0aloha", 13)),
+                    Pair("multivalue", "value1, value2")));
   } else {
     EXPECT_THAT(
         headers_observed_,
@@ -483,7 +478,7 @@
 
 TEST_P(HpackEncoderTest, MultipleEncodingPasses) {
   encoder_.SetHeaderListener(
-      [this](quiche::QuicheStringPiece name, quiche::QuicheStringPiece value) {
+      [this](absl::string_view name, absl::string_view value) {
         this->SaveHeaders(name, value);
       });
 
@@ -580,7 +575,7 @@
 
 TEST_P(HpackEncoderTest, CookieToCrumbs) {
   test::HpackEncoderPeer peer(nullptr);
-  std::vector<quiche::QuicheStringPiece> out;
+  std::vector<absl::string_view> out;
 
   // Leading and trailing whitespace is consumed. A space after ';' is consumed.
   // All other spaces remain. ';' at beginning and end of string produce empty
@@ -614,7 +609,7 @@
 
 TEST_P(HpackEncoderTest, DecomposeRepresentation) {
   test::HpackEncoderPeer peer(nullptr);
-  std::vector<quiche::QuicheStringPiece> out;
+  std::vector<absl::string_view> out;
 
   peer.DecomposeRepresentation("", &out);
   EXPECT_THAT(out, ElementsAre(""));
@@ -622,19 +617,16 @@
   peer.DecomposeRepresentation("foobar", &out);
   EXPECT_THAT(out, ElementsAre("foobar"));
 
-  peer.DecomposeRepresentation(quiche::QuicheStringPiece("foo\0bar", 7), &out);
+  peer.DecomposeRepresentation(absl::string_view("foo\0bar", 7), &out);
   EXPECT_THAT(out, ElementsAre("foo", "bar"));
 
-  peer.DecomposeRepresentation(quiche::QuicheStringPiece("\0foo\0bar", 8),
-                               &out);
+  peer.DecomposeRepresentation(absl::string_view("\0foo\0bar", 8), &out);
   EXPECT_THAT(out, ElementsAre("", "foo", "bar"));
 
-  peer.DecomposeRepresentation(quiche::QuicheStringPiece("foo\0bar\0", 8),
-                               &out);
+  peer.DecomposeRepresentation(absl::string_view("foo\0bar\0", 8), &out);
   EXPECT_THAT(out, ElementsAre("foo", "bar", ""));
 
-  peer.DecomposeRepresentation(quiche::QuicheStringPiece("\0foo\0bar\0", 9),
-                               &out);
+  peer.DecomposeRepresentation(absl::string_view("\0foo\0bar\0", 9), &out);
   EXPECT_THAT(out, ElementsAre("", "foo", "bar", ""));
 }
 
diff --git a/spdy/core/hpack/hpack_entry.cc b/spdy/core/hpack/hpack_entry.cc
index 586f321..7f251e6 100644
--- a/spdy/core/hpack/hpack_entry.cc
+++ b/spdy/core/hpack/hpack_entry.cc
@@ -12,8 +12,8 @@
 
 const size_t HpackEntry::kSizeOverhead = 32;
 
-HpackEntry::HpackEntry(quiche::QuicheStringPiece name,
-                       quiche::QuicheStringPiece value,
+HpackEntry::HpackEntry(absl::string_view name,
+                       absl::string_view value,
                        bool is_static,
                        size_t insertion_index)
     : name_(name.data(), name.size()),
@@ -24,8 +24,7 @@
       type_(is_static ? STATIC : DYNAMIC),
       time_added_(0) {}
 
-HpackEntry::HpackEntry(quiche::QuicheStringPiece name,
-                       quiche::QuicheStringPiece value)
+HpackEntry::HpackEntry(absl::string_view name, absl::string_view value)
     : name_ref_(name),
       value_ref_(value),
       insertion_index_(0),
@@ -44,8 +43,8 @@
   } else {
     name_ = other.name_;
     value_ = other.value_;
-    name_ref_ = quiche::QuicheStringPiece(name_.data(), name_.size());
-    value_ref_ = quiche::QuicheStringPiece(value_.data(), value_.size());
+    name_ref_ = absl::string_view(name_.data(), name_.size());
+    value_ref_ = absl::string_view(value_.data(), value_.size());
   }
 }
 
@@ -61,16 +60,15 @@
   }
   name_ = other.name_;
   value_ = other.value_;
-  name_ref_ = quiche::QuicheStringPiece(name_.data(), name_.size());
-  value_ref_ = quiche::QuicheStringPiece(value_.data(), value_.size());
+  name_ref_ = absl::string_view(name_.data(), name_.size());
+  value_ref_ = absl::string_view(value_.data(), value_.size());
   return *this;
 }
 
 HpackEntry::~HpackEntry() = default;
 
 // static
-size_t HpackEntry::Size(quiche::QuicheStringPiece name,
-                        quiche::QuicheStringPiece value) {
+size_t HpackEntry::Size(absl::string_view name, absl::string_view value) {
   return name.size() + value.size() + kSizeOverhead;
 }
 size_t HpackEntry::Size() const {
diff --git a/spdy/core/hpack/hpack_entry.h b/spdy/core/hpack/hpack_entry.h
index 750c7e6..e9c4efc 100644
--- a/spdy/core/hpack/hpack_entry.h
+++ b/spdy/core/hpack/hpack_entry.h
@@ -9,8 +9,8 @@
 #include <cstdint>
 #include <string>
 
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_export.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 
 // All section references below are to
 // http://tools.ietf.org/html/draft-ietf-httpbis-header-compression-08
@@ -34,15 +34,15 @@
   // The combination of |is_static| and |insertion_index| allows an
   // HpackEntryTable to determine the index of an HpackEntry in O(1) time.
   // Copies |name| and |value|.
-  HpackEntry(quiche::QuicheStringPiece name,
-             quiche::QuicheStringPiece value,
+  HpackEntry(absl::string_view name,
+             absl::string_view value,
              bool is_static,
              size_t insertion_index);
 
   // Create a 'lookup' entry (only) suitable for querying a HpackEntrySet. The
   // instance InsertionIndex() always returns 0 and IsLookup() returns true.
   // The memory backing |name| and |value| must outlive this object.
-  HpackEntry(quiche::QuicheStringPiece name, quiche::QuicheStringPiece value);
+  HpackEntry(absl::string_view name, absl::string_view value);
 
   HpackEntry(const HpackEntry& other);
   HpackEntry& operator=(const HpackEntry& other);
@@ -53,8 +53,8 @@
 
   ~HpackEntry();
 
-  quiche::QuicheStringPiece name() const { return name_ref_; }
-  quiche::QuicheStringPiece value() const { return value_ref_; }
+  absl::string_view name() const { return name_ref_; }
+  absl::string_view value() const { return value_ref_; }
 
   // Returns whether this entry is a member of the static (as opposed to
   // dynamic) table.
@@ -67,8 +67,7 @@
   size_t InsertionIndex() const { return insertion_index_; }
 
   // Returns the size of an entry as defined in 5.1.
-  static size_t Size(quiche::QuicheStringPiece name,
-                     quiche::QuicheStringPiece value);
+  static size_t Size(absl::string_view name, absl::string_view value);
   size_t Size() const;
 
   std::string GetDebugString() const;
@@ -92,8 +91,8 @@
 
   // These members are always valid. For DYNAMIC and STATIC entries, they
   // always point to |name_| and |value_|.
-  quiche::QuicheStringPiece name_ref_;
-  quiche::QuicheStringPiece value_ref_;
+  absl::string_view name_ref_;
+  absl::string_view value_ref_;
 
   // The entry's index in the total set of entries ever inserted into the header
   // table.
diff --git a/spdy/core/hpack/hpack_header_table.cc b/spdy/core/hpack/hpack_header_table.cc
index 67a0a5f..1ecfd79 100644
--- a/spdy/core/hpack/hpack_header_table.cc
+++ b/spdy/core/hpack/hpack_header_table.cc
@@ -60,7 +60,7 @@
   return nullptr;
 }
 
-const HpackEntry* HpackHeaderTable::GetByName(quiche::QuicheStringPiece name) {
+const HpackEntry* HpackHeaderTable::GetByName(absl::string_view name) {
   {
     auto it = static_name_index_.find(name);
     if (it != static_name_index_.end()) {
@@ -80,9 +80,8 @@
   return nullptr;
 }
 
-const HpackEntry* HpackHeaderTable::GetByNameAndValue(
-    quiche::QuicheStringPiece name,
-    quiche::QuicheStringPiece value) {
+const HpackEntry* HpackHeaderTable::GetByNameAndValue(absl::string_view name,
+                                                      absl::string_view value) {
   HpackEntry query(name, value);
   {
     auto it = static_index_.find(&query);
@@ -128,8 +127,8 @@
   SetMaxSize(settings_size_bound_);
 }
 
-void HpackHeaderTable::EvictionSet(quiche::QuicheStringPiece name,
-                                   quiche::QuicheStringPiece value,
+void HpackHeaderTable::EvictionSet(absl::string_view name,
+                                   absl::string_view value,
                                    EntryTable::iterator* begin_out,
                                    EntryTable::iterator* end_out) {
   size_t eviction_count = EvictionCountForEntry(name, value);
@@ -137,9 +136,8 @@
   *end_out = dynamic_entries_.end();
 }
 
-size_t HpackHeaderTable::EvictionCountForEntry(
-    quiche::QuicheStringPiece name,
-    quiche::QuicheStringPiece value) const {
+size_t HpackHeaderTable::EvictionCountForEntry(absl::string_view name,
+                                               absl::string_view value) const {
   size_t available_size = max_size_ - size_;
   size_t entry_size = HpackEntry::Size(name, value);
 
@@ -185,9 +183,8 @@
   }
 }
 
-const HpackEntry* HpackHeaderTable::TryAddEntry(
-    quiche::QuicheStringPiece name,
-    quiche::QuicheStringPiece value) {
+const HpackEntry* HpackHeaderTable::TryAddEntry(absl::string_view name,
+                                                absl::string_view value) {
   Evict(EvictionCountForEntry(name, value));
 
   size_t entry_size = HpackEntry::Size(name, value);
diff --git a/spdy/core/hpack/hpack_header_table.h b/spdy/core/hpack/hpack_header_table.h
index 88ef6d7..7f558bd 100644
--- a/spdy/core/hpack/hpack_header_table.h
+++ b/spdy/core/hpack/hpack_header_table.h
@@ -10,6 +10,7 @@
 #include <deque>
 #include <memory>
 
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_export.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_entry.h"
@@ -67,7 +68,7 @@
     bool operator()(const HpackEntry* lhs, const HpackEntry* rhs) const;
   };
   using UnorderedEntrySet = SpdyHashSet<HpackEntry*, EntryHasher, EntriesEq>;
-  using NameToEntryMap = SpdyHashMap<quiche::QuicheStringPiece,
+  using NameToEntryMap = SpdyHashMap<absl::string_view,
                                      const HpackEntry*,
                                      quiche::QuicheStringPieceHash>;
 
@@ -89,11 +90,11 @@
   const HpackEntry* GetByIndex(size_t index);
 
   // Returns the lowest-value entry having |name|, or NULL.
-  const HpackEntry* GetByName(quiche::QuicheStringPiece name);
+  const HpackEntry* GetByName(absl::string_view name);
 
   // Returns the lowest-index matching entry, or NULL.
-  const HpackEntry* GetByNameAndValue(quiche::QuicheStringPiece name,
-                                      quiche::QuicheStringPiece value);
+  const HpackEntry* GetByNameAndValue(absl::string_view name,
+                                      absl::string_view value);
 
   // Returns the index of an entry within this header table.
   size_t IndexOf(const HpackEntry* entry) const;
@@ -109,8 +110,8 @@
   // Determine the set of entries which would be evicted by the insertion
   // of |name| & |value| into the table, as per section 4.4. No eviction
   // actually occurs. The set is returned via range [begin_out, end_out).
-  void EvictionSet(quiche::QuicheStringPiece name,
-                   quiche::QuicheStringPiece value,
+  void EvictionSet(absl::string_view name,
+                   absl::string_view value,
                    EntryTable::iterator* begin_out,
                    EntryTable::iterator* end_out);
 
@@ -118,8 +119,8 @@
   // and |value| must not be owned by an entry which could be evicted. The
   // added HpackEntry is returned, or NULL is returned if all entries were
   // evicted and the empty table is of insufficent size for the representation.
-  const HpackEntry* TryAddEntry(quiche::QuicheStringPiece name,
-                                quiche::QuicheStringPiece value);
+  const HpackEntry* TryAddEntry(absl::string_view name,
+                                absl::string_view value);
 
   void DebugLogTableState() const SPDY_UNUSED;
 
@@ -132,8 +133,8 @@
 
  private:
   // Returns number of evictions required to enter |name| & |value|.
-  size_t EvictionCountForEntry(quiche::QuicheStringPiece name,
-                               quiche::QuicheStringPiece value) const;
+  size_t EvictionCountForEntry(absl::string_view name,
+                               absl::string_view value) const;
 
   // Returns number of evictions required to reclaim |reclaim_size| table size.
   size_t EvictionCountToReclaim(size_t reclaim_size) const;
diff --git a/spdy/core/hpack/hpack_header_table_test.cc b/spdy/core/hpack/hpack_header_table_test.cc
index cc5674f..0b6799e 100644
--- a/spdy/core/hpack/hpack_header_table_test.cc
+++ b/spdy/core/hpack/hpack_header_table_test.cc
@@ -33,8 +33,8 @@
   size_t index_size() {
     return table_->static_index_.size() + table_->dynamic_index_.size();
   }
-  std::vector<HpackEntry*> EvictionSet(quiche::QuicheStringPiece name,
-                                       quiche::QuicheStringPiece value) {
+  std::vector<HpackEntry*> EvictionSet(absl::string_view name,
+                                       absl::string_view value) {
     HpackHeaderTable::EntryTable::iterator begin, end;
     table_->EvictionSet(name, value, &begin, &end);
     std::vector<HpackEntry*> result;
@@ -45,8 +45,8 @@
   }
   size_t total_insertions() { return table_->total_insertions_; }
   size_t dynamic_entries_count() { return table_->dynamic_entries_.size(); }
-  size_t EvictionCountForEntry(quiche::QuicheStringPiece name,
-                               quiche::QuicheStringPiece value) {
+  size_t EvictionCountForEntry(absl::string_view name,
+                               absl::string_view value) {
     return table_->EvictionCountForEntry(name, value);
   }
   size_t EvictionCountToReclaim(size_t reclaim_size) {
@@ -54,8 +54,7 @@
   }
   void Evict(size_t count) { return table_->Evict(count); }
 
-  void AddDynamicEntry(quiche::QuicheStringPiece name,
-                       quiche::QuicheStringPiece value) {
+  void AddDynamicEntry(absl::string_view name, absl::string_view value) {
     table_->dynamic_entries_.push_back(
         HpackEntry(name, value, false, table_->total_insertions_++));
   }
diff --git a/spdy/core/hpack/hpack_huffman_table.cc b/spdy/core/hpack/hpack_huffman_table.cc
index eb799d0..aac6d1b 100644
--- a/spdy/core/hpack/hpack_huffman_table.cc
+++ b/spdy/core/hpack/hpack_huffman_table.cc
@@ -96,7 +96,7 @@
   return !code_by_id_.empty();
 }
 
-void HpackHuffmanTable::EncodeString(quiche::QuicheStringPiece in,
+void HpackHuffmanTable::EncodeString(absl::string_view in,
                                      HpackOutputStream* out) const {
   size_t bit_remnant = 0;
   for (size_t i = 0; i != in.size(); i++) {
@@ -129,7 +129,7 @@
   }
 }
 
-size_t HpackHuffmanTable::EncodedSize(quiche::QuicheStringPiece in) const {
+size_t HpackHuffmanTable::EncodedSize(absl::string_view in) const {
   size_t bit_count = 0;
   for (size_t i = 0; i != in.size(); i++) {
     uint16_t symbol_id = static_cast<uint8_t>(in[i]);
diff --git a/spdy/core/hpack/hpack_huffman_table.h b/spdy/core/hpack/hpack_huffman_table.h
index b7c2649..81af770 100644
--- a/spdy/core/hpack/hpack_huffman_table.h
+++ b/spdy/core/hpack/hpack_huffman_table.h
@@ -9,8 +9,8 @@
 #include <cstdint>
 #include <vector>
 
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_export.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_constants.h"
 
 namespace spdy {
@@ -45,10 +45,10 @@
 
   // Encodes the input string to the output stream using the table's Huffman
   // context.
-  void EncodeString(quiche::QuicheStringPiece in, HpackOutputStream* out) const;
+  void EncodeString(absl::string_view in, HpackOutputStream* out) const;
 
   // Returns the encoded size of the input string.
-  size_t EncodedSize(quiche::QuicheStringPiece in) const;
+  size_t EncodedSize(absl::string_view in) const;
 
   // Returns the estimate of dynamically allocated memory in bytes.
   size_t EstimateMemoryUsage() const;
diff --git a/spdy/core/hpack/hpack_huffman_table_test.cc b/spdy/core/hpack/hpack_huffman_table_test.cc
index f49c73d..b820f5e 100644
--- a/spdy/core/hpack/hpack_huffman_table_test.cc
+++ b/spdy/core/hpack/hpack_huffman_table_test.cc
@@ -42,7 +42,7 @@
  protected:
   GenericHuffmanTableTest() : table_(), peer_(table_) {}
 
-  std::string EncodeString(quiche::QuicheStringPiece input) {
+  std::string EncodeString(absl::string_view input) {
     std::string result;
     HpackOutputStream output_stream;
     table_.EncodeString(input, &output_stream);
@@ -171,12 +171,10 @@
   EXPECT_EQ(0b10011000, peer_.pad_bits());
 
   char input_storage[] = {2, 3, 2, 7, 4};
-  quiche::QuicheStringPiece input(input_storage,
-                                  QUICHE_ARRAYSIZE(input_storage));
+  absl::string_view input(input_storage, QUICHE_ARRAYSIZE(input_storage));
   // By symbol: (2) 00 (3) 010 (2) 00 (7) 10010 (4) 10000 (6 as pad) 1001100.
   char expect_storage[] = {0b00010001, 0b00101000, 0b01001100};
-  quiche::QuicheStringPiece expect(expect_storage,
-                                   QUICHE_ARRAYSIZE(expect_storage));
+  absl::string_view expect(expect_storage, QUICHE_ARRAYSIZE(expect_storage));
   EXPECT_EQ(expect, EncodeString(input));
 }
 
@@ -258,7 +256,7 @@
   for (size_t i = 0; i != 256; i++) {
     char c = static_cast<char>(i);
     char storage[3] = {c, c, c};
-    quiche::QuicheStringPiece input(storage, QUICHE_ARRAYSIZE(storage));
+    absl::string_view input(storage, QUICHE_ARRAYSIZE(storage));
     std::string buffer_in = EncodeString(input);
     std::string buffer_out;
     DecodeString(buffer_in, &buffer_out);
@@ -272,7 +270,7 @@
     storage[i] = static_cast<char>(i);
     storage[511 - i] = static_cast<char>(i);
   }
-  quiche::QuicheStringPiece input(storage, QUICHE_ARRAYSIZE(storage));
+  absl::string_view input(storage, QUICHE_ARRAYSIZE(storage));
   std::string buffer_in = EncodeString(input);
   std::string buffer_out;
   DecodeString(buffer_in, &buffer_out);
diff --git a/spdy/core/hpack/hpack_output_stream.cc b/spdy/core/hpack/hpack_output_stream.cc
index c53f07f..a532f0b 100644
--- a/spdy/core/hpack/hpack_output_stream.cc
+++ b/spdy/core/hpack/hpack_output_stream.cc
@@ -41,7 +41,7 @@
   AppendBits(prefix.bits, prefix.bit_size);
 }
 
-void HpackOutputStream::AppendBytes(quiche::QuicheStringPiece buffer) {
+void HpackOutputStream::AppendBytes(absl::string_view buffer) {
   DCHECK_EQ(bit_offset_, 0u);
   buffer_.append(buffer.data(), buffer.size());
 }
diff --git a/spdy/core/hpack/hpack_output_stream.h b/spdy/core/hpack/hpack_output_stream.h
index f99097a..b94aa0c 100644
--- a/spdy/core/hpack/hpack_output_stream.h
+++ b/spdy/core/hpack/hpack_output_stream.h
@@ -9,8 +9,8 @@
 #include <map>
 #include <string>
 
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_export.h"
-#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_constants.h"
 
 // All section references below are to
@@ -37,7 +37,7 @@
   void AppendPrefix(HpackPrefix prefix);
 
   // Directly appends |buffer|.
-  void AppendBytes(quiche::QuicheStringPiece buffer);
+  void AppendBytes(absl::string_view buffer);
 
   // Appends the given integer using the representation described in
   // 6.1. If the internal buffer ends on a byte boundary, the prefix
diff --git a/spdy/core/hpack/hpack_static_table.cc b/spdy/core/hpack/hpack_static_table.cc
index e8b07f1..c0815ce 100644
--- a/spdy/core/hpack/hpack_static_table.cc
+++ b/spdy/core/hpack/hpack_static_table.cc
@@ -4,7 +4,7 @@
 
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_static_table.h"
 
-#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_constants.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_entry.h"
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_estimate_memory_usage.h"
@@ -24,8 +24,8 @@
   for (const HpackStaticEntry* it = static_entry_table;
        it != static_entry_table + static_entry_count; ++it) {
     static_entries_.push_back(
-        HpackEntry(quiche::QuicheStringPiece(it->name, it->name_len),
-                   quiche::QuicheStringPiece(it->value, it->value_len),
+        HpackEntry(absl::string_view(it->name, it->name_len),
+                   absl::string_view(it->value, it->value_len),
                    true,  // is_static
                    total_insertions));
     HpackEntry* entry = &static_entries_.back();
diff --git a/spdy/core/hpack/hpack_static_table_test.cc b/spdy/core/hpack/hpack_static_table_test.cc
index 42c6254..36eb831 100644
--- a/spdy/core/hpack/hpack_static_table_test.cc
+++ b/spdy/core/hpack/hpack_static_table_test.cc
@@ -7,7 +7,7 @@
 #include <set>
 #include <vector>
 
-#include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h"
+#include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_test.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_constants.h"
 
@@ -39,7 +39,7 @@
 
   HpackHeaderTable::NameToEntryMap static_name_index =
       table_.GetStaticNameIndex();
-  std::set<quiche::QuicheStringPiece> names;
+  std::set<absl::string_view> names;
   for (auto* entry : static_index) {
     names.insert(entry->name());
   }
