Remove http2::HpackString class.

Inlining std::string works just fine, no need for extra complexity.  There are
no plans to experiment with other string types.

Change HpackStringPair and HpackDecoderTableEntry constructors to take
std::string by value instead of const ref, and move in initializer list.  This
can be more efficient depending on how the constructor is called.

Also remove unused HpackStringPair constructor.

PiperOrigin-RevId: 362371728
Change-Id: Ifd4594be487632563cb81cb3703d90a1ed98bf1d
diff --git a/http2/hpack/decoder/hpack_decoder_listener.cc b/http2/hpack/decoder/hpack_decoder_listener.cc
index a665be8..d1dea19 100644
--- a/http2/hpack/decoder/hpack_decoder_listener.cc
+++ b/http2/hpack/decoder/hpack_decoder_listener.cc
@@ -13,8 +13,8 @@
 HpackDecoderNoOpListener::~HpackDecoderNoOpListener() = default;
 
 void HpackDecoderNoOpListener::OnHeaderListStart() {}
-void HpackDecoderNoOpListener::OnHeader(const HpackString& /*name*/,
-                                        const HpackString& /*value*/) {}
+void HpackDecoderNoOpListener::OnHeader(const std::string& /*name*/,
+                                        const std::string& /*value*/) {}
 void HpackDecoderNoOpListener::OnHeaderListEnd() {}
 void HpackDecoderNoOpListener::OnHeaderErrorDetected(
     absl::string_view /*error_message*/) {}
diff --git a/http2/hpack/decoder/hpack_decoder_listener.h b/http2/hpack/decoder/hpack_decoder_listener.h
index bbb0544..130e80b 100644
--- a/http2/hpack/decoder/hpack_decoder_listener.h
+++ b/http2/hpack/decoder/hpack_decoder_listener.h
@@ -28,7 +28,7 @@
   // Called for each header name-value pair that is decoded, in the order they
   // appear in the HPACK block. Multiple values for a given key will be emitted
   // as multiple calls to OnHeader.
-  virtual void OnHeader(const HpackString& name, const HpackString& value) = 0;
+  virtual void OnHeader(const std::string& name, const std::string& value) = 0;
 
   // OnHeaderListEnd is called after successfully decoding an HPACK block into
   // an HTTP/2 header list. Will only be called once per block, even if it
@@ -49,7 +49,7 @@
   ~HpackDecoderNoOpListener() override;
 
   void OnHeaderListStart() override;
-  void OnHeader(const HpackString& name, const HpackString& value) override;
+  void OnHeader(const std::string& name, const std::string& value) override;
   void OnHeaderListEnd() override;
   void OnHeaderErrorDetected(absl::string_view error_message) override;
 
diff --git a/http2/hpack/decoder/hpack_decoder_state.cc b/http2/hpack/decoder/hpack_decoder_state.cc
index 528f1b6..86df71b 100644
--- a/http2/hpack/decoder/hpack_decoder_state.cc
+++ b/http2/hpack/decoder/hpack_decoder_state.cc
@@ -12,11 +12,11 @@
 namespace http2 {
 namespace {
 
-HpackString ExtractHpackString(HpackDecoderStringBuffer* string_buffer) {
+std::string ExtractString(HpackDecoderStringBuffer* string_buffer) {
   if (string_buffer->IsBuffered()) {
-    return HpackString(string_buffer->ReleaseString());
+    return string_buffer->ReleaseString();
   } else {
-    auto result = HpackString(string_buffer->str());
+    auto result = std::string(string_buffer->str());
     string_buffer->Reset();
     return result;
   }
@@ -114,7 +114,7 @@
   allow_dynamic_table_size_update_ = false;
   const HpackStringPair* entry = decoder_tables_.Lookup(name_index);
   if (entry != nullptr) {
-    HpackString value(ExtractHpackString(value_buffer));
+    std::string value(ExtractString(value_buffer));
     listener_->OnHeader(entry->name, value);
     if (entry_type == HpackEntryType::kIndexedLiteralHeader) {
       decoder_tables_.Insert(entry->name, value);
@@ -138,8 +138,8 @@
     return;
   }
   allow_dynamic_table_size_update_ = false;
-  HpackString name(ExtractHpackString(name_buffer));
-  HpackString value(ExtractHpackString(value_buffer));
+  std::string name(ExtractString(name_buffer));
+  std::string value(ExtractString(value_buffer));
   listener_->OnHeader(name, value);
   if (entry_type == HpackEntryType::kIndexedLiteralHeader) {
     decoder_tables_.Insert(name, value);
diff --git a/http2/hpack/decoder/hpack_decoder_state_test.cc b/http2/hpack/decoder/hpack_decoder_state_test.cc
index 5001565..8dca4cd 100644
--- a/http2/hpack/decoder/hpack_decoder_state_test.cc
+++ b/http2/hpack/decoder/hpack_decoder_state_test.cc
@@ -38,7 +38,7 @@
  public:
   MOCK_METHOD0(OnHeaderListStart, void());
   MOCK_METHOD2(OnHeader,
-               void(const HpackString& name, const HpackString& value));
+               void(const std::string& name, const std::string& value));
   MOCK_METHOD0(OnHeaderListEnd, void());
   MOCK_METHOD(void,
               OnHeaderErrorDetected,
@@ -155,8 +155,8 @@
     const HpackStringPair* entry =
         Lookup(dynamic_index + kFirstDynamicTableIndex - 1);
     VERIFY_NE(entry, nullptr);
-    VERIFY_EQ(entry->name.ToStringPiece(), name);
-    VERIFY_EQ(entry->value.ToStringPiece(), value);
+    VERIFY_EQ(entry->name, name);
+    VERIFY_EQ(entry->value, value);
     return AssertionSuccess();
   }
   AssertionResult VerifyNoEntry(size_t dynamic_index) {
diff --git a/http2/hpack/decoder/hpack_decoder_tables.cc b/http2/hpack/decoder/hpack_decoder_tables.cc
index 1b2cc11..203aae0 100644
--- a/http2/hpack/decoder/hpack_decoder_tables.cc
+++ b/http2/hpack/decoder/hpack_decoder_tables.cc
@@ -51,9 +51,9 @@
 }
 
 HpackDecoderDynamicTable::HpackDecoderTableEntry::HpackDecoderTableEntry(
-    const HpackString& name,
-    const HpackString& value)
-    : HpackStringPair(name, value) {}
+    std::string name_arg,
+    std::string value_arg)
+    : HpackStringPair(std::move(name_arg), std::move(value_arg)) {}
 
 HpackDecoderDynamicTable::HpackDecoderDynamicTable()
     : insert_count_(kFirstDynamicTableIndex - 1), debug_listener_(nullptr) {}
@@ -69,8 +69,8 @@
 
 // TODO(jamessynge): Check somewhere before here that names received from the
 // peer are valid (e.g. are lower-case, no whitespace, etc.).
-void HpackDecoderDynamicTable::Insert(const HpackString& name,
-                                      const HpackString& value) {
+void HpackDecoderDynamicTable::Insert(const std::string& name,
+                                      const std::string& value) {
   HpackDecoderTableEntry entry(name, value);
   size_t entry_size = entry.size();
   HTTP2_DVLOG(2) << "InsertEntry of size=" << entry_size
diff --git a/http2/hpack/decoder/hpack_decoder_tables.h b/http2/hpack/decoder/hpack_decoder_tables.h
index 5f56cf2..6ad8ca9 100644
--- a/http2/hpack/decoder/hpack_decoder_tables.h
+++ b/http2/hpack/decoder/hpack_decoder_tables.h
@@ -108,7 +108,7 @@
 
   // Insert entry if possible.
   // If entry is too large to insert, then dynamic table will be empty.
-  void Insert(const HpackString& name, const HpackString& value);
+  void Insert(const std::string& name, const std::string& value);
 
   // If index is valid, returns a pointer to the entry, otherwise returns
   // nullptr.
@@ -120,7 +120,7 @@
  private:
   friend class test::HpackDecoderTablesPeer;
   struct HpackDecoderTableEntry : public HpackStringPair {
-    HpackDecoderTableEntry(const HpackString& name, const HpackString& value);
+    HpackDecoderTableEntry(std::string name_arg, std::string value_arg);
     int64_t time_added;
   };
 
@@ -169,7 +169,7 @@
   // If entry is too large to insert, then dynamic table will be empty.
   // TODO(jamessynge): Add methods for moving the string(s) into the table,
   // or for otherwise avoiding unnecessary copies.
-  void Insert(const HpackString& name, const HpackString& value) {
+  void Insert(const std::string& name, const std::string& value) {
     dynamic_table_.Insert(name, value);
   }
 
diff --git a/http2/hpack/decoder/hpack_decoder_tables_test.cc b/http2/hpack/decoder/hpack_decoder_tables_test.cc
index a3e4ee0..b7ed527 100644
--- a/http2/hpack/decoder/hpack_decoder_tables_test.cc
+++ b/http2/hpack/decoder/hpack_decoder_tables_test.cc
@@ -205,7 +205,7 @@
   // move up by 1 index.
   AssertionResult Insert(const std::string& name, const std::string& value) {
     size_t old_count = num_dynamic_entries();
-    tables_.Insert(HpackString(name), HpackString(value));
+    tables_.Insert(name, value);
     FakeInsert(name, value);
     VERIFY_EQ(old_count + 1, fake_dynamic_table_.size());
     FakeTrim(dynamic_size_limit());
diff --git a/http2/hpack/decoder/hpack_decoder_test.cc b/http2/hpack/decoder/hpack_decoder_test.cc
index dc6ab58..11a1987 100644
--- a/http2/hpack/decoder/hpack_decoder_test.cc
+++ b/http2/hpack/decoder/hpack_decoder_test.cc
@@ -65,7 +65,7 @@
  public:
   MOCK_METHOD0(OnHeaderListStart, void());
   MOCK_METHOD2(OnHeader,
-               void(const HpackString& name, const HpackString& value));
+               void(const std::string& name, const std::string& value));
   MOCK_METHOD0(OnHeaderListEnd, void());
   MOCK_METHOD(void,
               OnHeaderErrorDetected,
@@ -95,10 +95,10 @@
   // Called for each header name-value pair that is decoded, in the order they
   // appear in the HPACK block. Multiple values for a given key will be emitted
   // as multiple calls to OnHeader.
-  void OnHeader(const HpackString& name, const HpackString& value) override {
+  void OnHeader(const std::string& name, const std::string& value) override {
     ASSERT_TRUE(saw_start_);
     ASSERT_FALSE(saw_end_);
-    header_entries_.emplace_back(name.ToString(), value.ToString());
+    header_entries_.emplace_back(name, value);
   }
 
   // OnHeaderBlockEnd is called after successfully decoding an HPACK block. Will
@@ -190,8 +190,8 @@
     const HpackStringPair* entry =
         Lookup(dynamic_index + kFirstDynamicTableIndex - 1);
     VERIFY_NE(entry, nullptr);
-    VERIFY_EQ(entry->name.ToStringPiece(), name);
-    VERIFY_EQ(entry->value.ToStringPiece(), value);
+    VERIFY_EQ(entry->name, name);
+    VERIFY_EQ(entry->value, value);
     return AssertionSuccess();
   }
   AssertionResult VerifyNoEntry(size_t dynamic_index) {
diff --git a/http2/hpack/hpack_string.cc b/http2/hpack/hpack_string.cc
index fb9691c..ef7af73 100644
--- a/http2/hpack/hpack_string.cc
+++ b/http2/hpack/hpack_string.cc
@@ -11,48 +11,8 @@
 
 namespace http2 {
 
-HpackString::HpackString(const char* data) : str_(data) {}
-HpackString::HpackString(absl::string_view str) : str_(std::string(str)) {}
-HpackString::HpackString(std::string str) : str_(std::move(str)) {}
-HpackString::HpackString(const HpackString& other) = default;
-HpackString::~HpackString() = default;
-
-absl::string_view HpackString::ToStringPiece() const {
-  return str_;
-}
-
-bool HpackString::operator==(const HpackString& other) const {
-  return str_ == other.str_;
-}
-bool HpackString::operator==(absl::string_view str) const {
-  return str == str_;
-}
-
-bool operator==(absl::string_view a, const HpackString& b) {
-  return b == a;
-}
-bool operator!=(absl::string_view a, const HpackString& b) {
-  return !(b == a);
-}
-bool operator!=(const HpackString& a, const HpackString& b) {
-  return !(a == b);
-}
-bool operator!=(const HpackString& a, absl::string_view b) {
-  return !(a == b);
-}
-std::ostream& operator<<(std::ostream& out, const HpackString& v) {
-  return out << v.ToString();
-}
-
-HpackStringPair::HpackStringPair(const HpackString& name,
-                                 const HpackString& value)
-    : name(name), value(value) {
-  HTTP2_DVLOG(3) << DebugString() << " ctor";
-}
-
-HpackStringPair::HpackStringPair(absl::string_view name,
-                                 absl::string_view value)
-    : name(name), value(value) {
+HpackStringPair::HpackStringPair(std::string name, std::string value)
+    : name(std::move(name)), value(std::move(value)) {
   HTTP2_DVLOG(3) << DebugString() << " ctor";
 }
 
@@ -61,8 +21,7 @@
 }
 
 std::string HpackStringPair::DebugString() const {
-  return absl::StrCat("HpackStringPair(name=", name.ToString(),
-                      ", value=", value.ToString(), ")");
+  return absl::StrCat("HpackStringPair(name=", name, ", value=", value, ")");
 }
 
 std::ostream& operator<<(std::ostream& os, const HpackStringPair& p) {
diff --git a/http2/hpack/hpack_string.h b/http2/hpack/hpack_string.h
index 7896046..51520e8 100644
--- a/http2/hpack/hpack_string.h
+++ b/http2/hpack/hpack_string.h
@@ -5,11 +5,6 @@
 #ifndef QUICHE_HTTP2_HPACK_HPACK_STRING_H_
 #define QUICHE_HTTP2_HPACK_HPACK_STRING_H_
 
-// HpackString is currently a very simple container for a string, but allows us
-// to relatively easily experiment with alternate string storage mechanisms for
-// handling strings to be encoded with HPACK, or decoded from HPACK, such as
-// a ref-counted string.
-
 #include <stddef.h>
 
 #include <iosfwd>
@@ -20,44 +15,8 @@
 
 namespace http2 {
 
-class QUICHE_EXPORT_PRIVATE HpackString {
- public:
-  explicit HpackString(const char* data);
-  explicit HpackString(absl::string_view str);
-  explicit HpackString(std::string str);
-  HpackString(const HpackString& other);
-
-  // Not sure yet whether this move ctor is required/sensible.
-  HpackString(HpackString&& other) = default;
-
-  ~HpackString();
-
-  size_t size() const { return str_.size(); }
-  const std::string& ToString() const { return str_; }
-  absl::string_view ToStringPiece() const;
-
-  bool operator==(const HpackString& other) const;
-
-  bool operator==(absl::string_view str) const;
-
- private:
-  std::string str_;
-};
-
-QUICHE_EXPORT_PRIVATE bool operator==(absl::string_view a,
-                                      const HpackString& b);
-QUICHE_EXPORT_PRIVATE bool operator!=(absl::string_view a,
-                                      const HpackString& b);
-QUICHE_EXPORT_PRIVATE bool operator!=(const HpackString& a,
-                                      const HpackString& b);
-QUICHE_EXPORT_PRIVATE bool operator!=(const HpackString& a,
-                                      absl::string_view b);
-QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& out,
-                                               const HpackString& v);
-
 struct QUICHE_EXPORT_PRIVATE HpackStringPair {
-  HpackStringPair(const HpackString& name, const HpackString& value);
-  HpackStringPair(absl::string_view name, absl::string_view value);
+  HpackStringPair(std::string name, std::string value);
   ~HpackStringPair();
 
   // Returns the size of a header entry with this name and value, per the RFC:
@@ -66,8 +25,8 @@
 
   std::string DebugString() const;
 
-  const HpackString name;
-  const HpackString value;
+  const std::string name;
+  const std::string value;
 };
 
 QUICHE_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
diff --git a/http2/hpack/hpack_string_test.cc b/http2/hpack/hpack_string_test.cc
deleted file mode 100644
index c8462e8..0000000
--- a/http2/hpack/hpack_string_test.cc
+++ /dev/null
@@ -1,149 +0,0 @@
-// Copyright 2016 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.
-
-#include "http2/hpack/hpack_string.h"
-
-// Tests of HpackString.
-
-#include <utility>
-
-#include "http2/platform/api/http2_logging.h"
-#include "http2/platform/api/http2_test_helpers.h"
-#include "common/platform/api/quiche_test.h"
-
-using ::testing::AssertionFailure;
-using ::testing::AssertionResult;
-using ::testing::AssertionSuccess;
-
-namespace http2 {
-namespace test {
-namespace {
-
-const char kStr0[] = "s0: Some string to be copied into another string.";
-const char kStr1[] = "S1 - some string to be copied into yet another string.";
-
-class HpackStringTest : public QuicheTest {
- protected:
-  AssertionResult VerifyNotEqual(HpackString* actual,
-                                 const std::string& not_expected_str) {
-    const char* not_expected_ptr = not_expected_str.c_str();
-    absl::string_view not_expected_sp(not_expected_str);
-
-    VERIFY_NE(*actual, not_expected_ptr);
-    VERIFY_NE(*actual, not_expected_sp);
-    VERIFY_NE(*actual, not_expected_str);
-    VERIFY_NE(actual->ToStringPiece(), not_expected_sp);
-
-    if (!(not_expected_ptr != *actual)) {
-      return AssertionFailure();
-    }
-    if (!(not_expected_sp != *actual)) {
-      return AssertionFailure();
-    }
-    if (!(not_expected_str != *actual)) {
-      return AssertionFailure();
-    }
-    if (!(not_expected_sp != actual->ToStringPiece())) {
-      return AssertionFailure();
-    }
-
-    return AssertionSuccess();
-  }
-
-  AssertionResult VerifyEqual(HpackString* actual,
-                              const std::string& expected_str) {
-    VERIFY_EQ(actual->size(), expected_str.size());
-
-    const char* expected_ptr = expected_str.c_str();
-    const absl::string_view expected_sp(expected_str);
-
-    VERIFY_EQ(*actual, expected_ptr);
-    VERIFY_EQ(*actual, expected_sp);
-    VERIFY_EQ(*actual, expected_str);
-    VERIFY_EQ(actual->ToStringPiece(), expected_sp);
-
-    if (!(expected_sp == *actual)) {
-      return AssertionFailure();
-    }
-    if (!(expected_ptr == *actual)) {
-      return AssertionFailure();
-    }
-    if (!(expected_str == *actual)) {
-      return AssertionFailure();
-    }
-    if (!(expected_sp == actual->ToStringPiece())) {
-      return AssertionFailure();
-    }
-
-    return AssertionSuccess();
-  }
-};
-
-TEST_F(HpackStringTest, CharArrayConstructor) {
-  HpackString hs0(kStr0);
-  EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
-  EXPECT_TRUE(VerifyNotEqual(&hs0, kStr1));
-
-  HpackString hs1(kStr1);
-  EXPECT_TRUE(VerifyEqual(&hs1, kStr1));
-  EXPECT_TRUE(VerifyNotEqual(&hs1, kStr0));
-}
-
-TEST_F(HpackStringTest, StringPieceConstructor) {
-  absl::string_view sp0(kStr0);
-  HpackString hs0(sp0);
-  EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
-  EXPECT_TRUE(VerifyNotEqual(&hs0, kStr1));
-
-  absl::string_view sp1(kStr1);
-  HpackString hs1(sp1);
-  EXPECT_TRUE(VerifyEqual(&hs1, kStr1));
-  EXPECT_TRUE(VerifyNotEqual(&hs1, kStr0));
-}
-
-TEST_F(HpackStringTest, MoveStringConstructor) {
-  std::string str0(kStr0);
-  HpackString hs0(str0);
-  EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
-  EXPECT_TRUE(VerifyNotEqual(&hs0, kStr1));
-
-  std::string str1(kStr1);
-  HpackString hs1(str1);
-  EXPECT_TRUE(VerifyEqual(&hs1, kStr1));
-  EXPECT_TRUE(VerifyNotEqual(&hs1, kStr0));
-}
-
-TEST_F(HpackStringTest, CopyConstructor) {
-  absl::string_view sp0(kStr0);
-  HpackString hs0(sp0);
-  HpackString hs1(hs0);
-  EXPECT_EQ(hs0, hs1);
-
-  EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
-  EXPECT_TRUE(VerifyEqual(&hs1, kStr0));
-
-  EXPECT_TRUE(VerifyNotEqual(&hs0, kStr1));
-  EXPECT_TRUE(VerifyNotEqual(&hs1, kStr1));
-}
-
-TEST_F(HpackStringTest, MoveConstructor) {
-  absl::string_view sp0(kStr0);
-  HpackString hs0(sp0);
-  EXPECT_TRUE(VerifyEqual(&hs0, kStr0));
-  EXPECT_TRUE(VerifyNotEqual(&hs0, ""));
-
-  HpackString hs1(std::move(hs0));
-  EXPECT_NE(hs0, hs1);
-
-  EXPECT_TRUE(VerifyEqual(&hs1, kStr0));
-  EXPECT_TRUE(VerifyEqual(&hs0, ""));
-  EXPECT_TRUE(VerifyNotEqual(&hs1, ""));
-
-  HTTP2_LOG(INFO) << hs0;
-  HTTP2_LOG(INFO) << hs1;
-}
-
-}  // namespace
-}  // namespace test
-}  // namespace http2
diff --git a/spdy/core/hpack/hpack_decoder_adapter.cc b/spdy/core/hpack/hpack_decoder_adapter.cc
index 59ba669..6b9b425 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter.cc
@@ -11,7 +11,6 @@
 #include "spdy/platform/api/spdy_logging.h"
 
 using ::http2::DecodeBuffer;
-using ::http2::HpackString;
 
 namespace spdy {
 namespace {
@@ -159,18 +158,17 @@
   }
 }
 
-void HpackDecoderAdapter::ListenerAdapter::OnHeader(const HpackString& name,
-                                                    const HpackString& value) {
+void HpackDecoderAdapter::ListenerAdapter::OnHeader(const std::string& name,
+                                                    const std::string& value) {
   SPDY_DVLOG(2) << "HpackDecoderAdapter::ListenerAdapter::OnHeader:\n name: "
                 << name << "\n value: " << value;
   total_uncompressed_bytes_ += name.size() + value.size();
   if (handler_ == nullptr) {
     SPDY_DVLOG(3) << "Adding to decoded_block";
-    decoded_block_.AppendValueOrAddHeader(name.ToStringPiece(),
-                                          value.ToStringPiece());
+    decoded_block_.AppendValueOrAddHeader(name, value);
   } else {
     SPDY_DVLOG(3) << "Passing to handler";
-    handler_->OnHeader(name.ToStringPiece(), value.ToStringPiece());
+    handler_->OnHeader(name, value);
   }
 }
 
@@ -197,8 +195,7 @@
   if (visitor_ == nullptr) {
     return 0;
   }
-  HpackEntry hpack_entry(entry.name.ToStringPiece(),
-                         entry.value.ToStringPiece(),
+  HpackEntry hpack_entry(entry.name, entry.value,
                          /*is_static*/ false, insert_count);
   int64_t time_added = visitor_->OnNewEntry(hpack_entry);
   SPDY_DVLOG(2)
@@ -215,8 +212,7 @@
                 << ",  insert_count=" << insert_count
                 << ",  time_added=" << time_added;
   if (visitor_ != nullptr) {
-    HpackEntry hpack_entry(entry.name.ToStringPiece(),
-                           entry.value.ToStringPiece(), /*is_static*/ false,
+    HpackEntry hpack_entry(entry.name, entry.value, /*is_static*/ false,
                            insert_count);
     hpack_entry.set_time_added(time_added);
     visitor_->OnUseEntry(hpack_entry);
diff --git a/spdy/core/hpack/hpack_decoder_adapter.h b/spdy/core/hpack/hpack_decoder_adapter.h
index 5ec7046..2a21fd0 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.h
+++ b/spdy/core/hpack/hpack_decoder_adapter.h
@@ -110,8 +110,7 @@
 
     // Override the HpackDecoderListener methods:
     void OnHeaderListStart() override;
-    void OnHeader(const http2::HpackString& name,
-                  const http2::HpackString& value) override;
+    void OnHeader(const std::string& name, const std::string& value) override;
     void OnHeaderListEnd() override;
     void OnHeaderErrorDetected(absl::string_view error_message) override;
 
diff --git a/spdy/core/hpack/hpack_decoder_adapter_test.cc b/spdy/core/hpack/hpack_decoder_adapter_test.cc
index c768755..0a12fe4 100644
--- a/spdy/core/hpack/hpack_decoder_adapter_test.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter_test.cc
@@ -28,7 +28,6 @@
 #include "spdy/platform/api/spdy_string_utils.h"
 
 using ::http2::HpackEntryType;
-using ::http2::HpackString;
 using ::http2::HpackStringPair;
 using ::http2::test::HpackBlockBuilder;
 using ::http2::test::HpackDecoderPeer;
@@ -66,9 +65,9 @@
   explicit HpackDecoderAdapterPeer(HpackDecoderAdapter* decoder)
       : decoder_(decoder) {}
 
-  void HandleHeaderRepresentation(absl::string_view name,
-                                  absl::string_view value) {
-    decoder_->listener_adapter_.OnHeader(HpackString(name), HpackString(value));
+  void HandleHeaderRepresentation(const std::string& name,
+                                  const std::string& value) {
+    decoder_->listener_adapter_.OnHeader(name, value);
   }
 
   http2::HpackDecoderTables* GetDecoderTables() {