diff --git a/http2/hpack/decoder/hpack_decoder_listener.cc b/http2/hpack/decoder/hpack_decoder_listener.cc
index 60341a0..e6bddf8 100644
--- a/http2/hpack/decoder/hpack_decoder_listener.cc
+++ b/http2/hpack/decoder/hpack_decoder_listener.cc
@@ -13,8 +13,7 @@
 HpackDecoderNoOpListener::~HpackDecoderNoOpListener() = default;
 
 void HpackDecoderNoOpListener::OnHeaderListStart() {}
-void HpackDecoderNoOpListener::OnHeader(HpackEntryType entry_type,
-                                        const HpackString& name,
+void HpackDecoderNoOpListener::OnHeader(const HpackString& name,
                                         const HpackString& value) {}
 void HpackDecoderNoOpListener::OnHeaderListEnd() {}
 void HpackDecoderNoOpListener::OnHeaderErrorDetected(
diff --git a/http2/hpack/decoder/hpack_decoder_listener.h b/http2/hpack/decoder/hpack_decoder_listener.h
index 2db8157..84eaf4a 100644
--- a/http2/hpack/decoder/hpack_decoder_listener.h
+++ b/http2/hpack/decoder/hpack_decoder_listener.h
@@ -28,9 +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(HpackEntryType entry_type,
-                        const HpackString& name,
-                        const HpackString& value) = 0;
+  virtual void OnHeader(const HpackString& name, const HpackString& 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
@@ -52,9 +50,7 @@
   ~HpackDecoderNoOpListener() override;
 
   void OnHeaderListStart() override;
-  void OnHeader(HpackEntryType entry_type,
-                const HpackString& name,
-                const HpackString& value) override;
+  void OnHeader(const HpackString& name, const HpackString& value) override;
   void OnHeaderListEnd() override;
   void OnHeaderErrorDetected(quiche::QuicheStringPiece error_message) override;
 
diff --git a/http2/hpack/decoder/hpack_decoder_state.cc b/http2/hpack/decoder/hpack_decoder_state.cc
index c01ae74..7c10b52 100644
--- a/http2/hpack/decoder/hpack_decoder_state.cc
+++ b/http2/hpack/decoder/hpack_decoder_state.cc
@@ -90,8 +90,7 @@
   allow_dynamic_table_size_update_ = false;
   const HpackStringPair* entry = decoder_tables_.Lookup(index);
   if (entry != nullptr) {
-    listener_->OnHeader(HpackEntryType::kIndexedHeader, entry->name,
-                        entry->value);
+    listener_->OnHeader(entry->name, entry->value);
   } else {
     ReportError("Invalid index.");
   }
@@ -115,7 +114,7 @@
   const HpackStringPair* entry = decoder_tables_.Lookup(name_index);
   if (entry != nullptr) {
     HpackString value(ExtractHpackString(value_buffer));
-    listener_->OnHeader(entry_type, entry->name, value);
+    listener_->OnHeader(entry->name, value);
     if (entry_type == HpackEntryType::kIndexedLiteralHeader) {
       decoder_tables_.Insert(entry->name, value);
     }
@@ -140,7 +139,7 @@
   allow_dynamic_table_size_update_ = false;
   HpackString name(ExtractHpackString(name_buffer));
   HpackString value(ExtractHpackString(value_buffer));
-  listener_->OnHeader(entry_type, name, value);
+  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 743d0d9..6f54cdb 100644
--- a/http2/hpack/decoder/hpack_decoder_state_test.cc
+++ b/http2/hpack/decoder/hpack_decoder_state_test.cc
@@ -39,10 +39,8 @@
 class MockHpackDecoderListener : public HpackDecoderListener {
  public:
   MOCK_METHOD0(OnHeaderListStart, void());
-  MOCK_METHOD3(OnHeader,
-               void(HpackEntryType entry_type,
-                    const HpackString& name,
-                    const HpackString& value));
+  MOCK_METHOD2(OnHeader,
+               void(const HpackString& name, const HpackString& value));
   MOCK_METHOD0(OnHeaderListEnd, void());
   MOCK_METHOD1(OnHeaderErrorDetected,
                void(quiche::QuicheStringPiece error_message));
@@ -114,8 +112,7 @@
                                   HpackEntryType expected_type,
                                   const char* expected_name,
                                   const char* expected_value) {
-    EXPECT_CALL(listener_,
-                OnHeader(expected_type, Eq(expected_name), Eq(expected_value)));
+    EXPECT_CALL(listener_, OnHeader(Eq(expected_name), Eq(expected_value)));
     decoder_state_.OnIndexedHeader(index);
     Mock::VerifyAndClearExpectations(&listener_);
   }
@@ -126,7 +123,7 @@
                                   const char* value,
                                   StringBacking value_backing) {
     SetValue(value, value_backing);
-    EXPECT_CALL(listener_, OnHeader(entry_type, Eq(name), Eq(value)));
+    EXPECT_CALL(listener_, OnHeader(Eq(name), Eq(value)));
     decoder_state_.OnNameIndexAndLiteralValue(entry_type, name_index,
                                               &value_buffer_);
     Mock::VerifyAndClearExpectations(&listener_);
@@ -139,7 +136,7 @@
                                          StringBacking value_backing) {
     SetName(name, name_backing);
     SetValue(value, value_backing);
-    EXPECT_CALL(listener_, OnHeader(entry_type, Eq(name), Eq(value)));
+    EXPECT_CALL(listener_, OnHeader(Eq(name), Eq(value)));
     decoder_state_.OnLiteralNameAndValue(entry_type, &name_buffer_,
                                          &value_buffer_);
     Mock::VerifyAndClearExpectations(&listener_);
diff --git a/http2/hpack/decoder/hpack_decoder_test.cc b/http2/hpack/decoder/hpack_decoder_test.cc
index f2ff8c2..185ada6 100644
--- a/http2/hpack/decoder/hpack_decoder_test.cc
+++ b/http2/hpack/decoder/hpack_decoder_test.cc
@@ -57,7 +57,7 @@
 
 namespace {
 
-typedef std::tuple<HpackEntryType, std::string, std::string> HpackHeaderEntry;
+typedef std::pair<std::string, std::string> HpackHeaderEntry;
 typedef std::vector<HpackHeaderEntry> HpackHeaderEntries;
 
 // TODO(jamessynge): Create a ...test_utils.h file with the mock listener
@@ -65,10 +65,8 @@
 class MockHpackDecoderListener : public HpackDecoderListener {
  public:
   MOCK_METHOD0(OnHeaderListStart, void());
-  MOCK_METHOD3(OnHeader,
-               void(HpackEntryType entry_type,
-                    const HpackString& name,
-                    const HpackString& value));
+  MOCK_METHOD2(OnHeader,
+               void(const HpackString& name, const HpackString& value));
   MOCK_METHOD0(OnHeaderListEnd, void());
   MOCK_METHOD1(OnHeaderErrorDetected,
                void(quiche::QuicheStringPiece error_message));
@@ -96,14 +94,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(HpackEntryType entry_type,
-                const HpackString& name,
-                const HpackString& value) override {
+  void OnHeader(const HpackString& name, const HpackString& value) override {
     ASSERT_TRUE(saw_start_);
     ASSERT_FALSE(saw_end_);
-    //     header_entries_.push_back({entry_type, name.ToString(),
-    //     value.ToString()});
-    header_entries_.emplace_back(entry_type, name.ToString(), value.ToString());
+    header_entries_.emplace_back(name.ToString(), value.ToString());
   }
 
   // OnHeaderBlockEnd is called after successfully decoding an HPACK block. Will
@@ -252,15 +246,13 @@
                                               |   www.example.com
   )");
   EXPECT_TRUE(DecodeBlock(hpack_block));
-  ASSERT_THAT(
-      header_entries_,
-      ElementsAreArray({
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":method", "GET"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":scheme", "http"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":path", "/"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader, ":authority",
-                           "www.example.com"},
-      }));
+  ASSERT_THAT(header_entries_,
+              ElementsAreArray({
+                  HpackHeaderEntry{":method", "GET"},
+                  HpackHeaderEntry{":scheme", "http"},
+                  HpackHeaderEntry{":path", "/"},
+                  HpackHeaderEntry{":authority", "www.example.com"},
+              }));
 
   // Dynamic Table (after decoding):
   //
@@ -292,17 +284,14 @@
                                               | -> cache-control: no-cache
   )");
   EXPECT_TRUE(DecodeBlock(hpack_block));
-  ASSERT_THAT(
-      header_entries_,
-      ElementsAreArray({
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":method", "GET"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":scheme", "http"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":path", "/"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":authority",
-                           "www.example.com"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                           "cache-control", "no-cache"},
-      }));
+  ASSERT_THAT(header_entries_,
+              ElementsAreArray({
+                  HpackHeaderEntry{":method", "GET"},
+                  HpackHeaderEntry{":scheme", "http"},
+                  HpackHeaderEntry{":path", "/"},
+                  HpackHeaderEntry{":authority", "www.example.com"},
+                  HpackHeaderEntry{"cache-control", "no-cache"},
+              }));
 
   // Dynamic Table (after decoding):
   //
@@ -337,18 +326,14 @@
                                               |   custom-value
   )");
   EXPECT_TRUE(DecodeBlock(hpack_block));
-  ASSERT_THAT(
-      header_entries_,
-      ElementsAreArray({
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":method", "GET"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":scheme", "https"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":path",
-                           "/index.html"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":authority",
-                           "www.example.com"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader, "custom-key",
-                           "custom-value"},
-      }));
+  ASSERT_THAT(header_entries_,
+              ElementsAreArray({
+                  HpackHeaderEntry{":method", "GET"},
+                  HpackHeaderEntry{":scheme", "https"},
+                  HpackHeaderEntry{":path", "/index.html"},
+                  HpackHeaderEntry{":authority", "www.example.com"},
+                  HpackHeaderEntry{"custom-key", "custom-value"},
+              }));
 
   // Dynamic Table (after decoding):
   //
@@ -390,15 +375,13 @@
                                               |   www.example.com
   )");
   EXPECT_TRUE(DecodeBlock(hpack_block));
-  ASSERT_THAT(
-      header_entries_,
-      ElementsAreArray({
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":method", "GET"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":scheme", "http"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":path", "/"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader, ":authority",
-                           "www.example.com"},
-      }));
+  ASSERT_THAT(header_entries_,
+              ElementsAreArray({
+                  HpackHeaderEntry{":method", "GET"},
+                  HpackHeaderEntry{":scheme", "http"},
+                  HpackHeaderEntry{":path", "/"},
+                  HpackHeaderEntry{":authority", "www.example.com"},
+              }));
 
   // Dynamic Table (after decoding):
   //
@@ -433,17 +416,14 @@
                                               | -> cache-control: no-cache
   )");
   EXPECT_TRUE(DecodeBlock(hpack_block));
-  ASSERT_THAT(
-      header_entries_,
-      ElementsAreArray({
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":method", "GET"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":scheme", "http"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":path", "/"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":authority",
-                           "www.example.com"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                           "cache-control", "no-cache"},
-      }));
+  ASSERT_THAT(header_entries_,
+              ElementsAreArray({
+                  HpackHeaderEntry{":method", "GET"},
+                  HpackHeaderEntry{":scheme", "http"},
+                  HpackHeaderEntry{":path", "/"},
+                  HpackHeaderEntry{":authority", "www.example.com"},
+                  HpackHeaderEntry{"cache-control", "no-cache"},
+              }));
 
   // Dynamic Table (after decoding):
   //
@@ -484,18 +464,14 @@
                                             |   custom-value
   )");
   EXPECT_TRUE(DecodeBlock(hpack_block));
-  ASSERT_THAT(
-      header_entries_,
-      ElementsAreArray({
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":method", "GET"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":scheme", "https"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":path",
-                           "/index.html"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":authority",
-                           "www.example.com"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader, "custom-key",
-                           "custom-value"},
-      }));
+  ASSERT_THAT(header_entries_,
+              ElementsAreArray({
+                  HpackHeaderEntry{":method", "GET"},
+                  HpackHeaderEntry{":scheme", "https"},
+                  HpackHeaderEntry{":path", "/index.html"},
+                  HpackHeaderEntry{":authority", "www.example.com"},
+                  HpackHeaderEntry{"custom-key", "custom-value"},
+              }));
 
   // Dynamic Table (after decoding):
   //
@@ -560,14 +536,10 @@
   EXPECT_TRUE(DecodeBlock(hpack_block));
   ASSERT_THAT(header_entries_,
               ElementsAreArray({
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   ":status", "302"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   "cache-control", "private"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   "date", "Mon, 21 Oct 2013 20:13:21 GMT"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   "location", "https://www.example.com"},
+                  HpackHeaderEntry{":status", "302"},
+                  HpackHeaderEntry{"cache-control", "private"},
+                  HpackHeaderEntry{"date", "Mon, 21 Oct 2013 20:13:21 GMT"},
+                  HpackHeaderEntry{"location", "https://www.example.com"},
               }));
 
   // Dynamic Table (after decoding):
@@ -619,14 +591,10 @@
   EXPECT_TRUE(DecodeBlock(hpack_block));
   ASSERT_THAT(header_entries_,
               ElementsAreArray({
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   ":status", "307"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedHeader,
-                                   "cache-control", "private"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedHeader, "date",
-                                   "Mon, 21 Oct 2013 20:13:21 GMT"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedHeader, "location",
-                                   "https://www.example.com"},
+                  HpackHeaderEntry{":status", "307"},
+                  HpackHeaderEntry{"cache-control", "private"},
+                  HpackHeaderEntry{"date", "Mon, 21 Oct 2013 20:13:21 GMT"},
+                  HpackHeaderEntry{"location", "https://www.example.com"},
               }));
 
   // Dynamic Table (after decoding):
@@ -705,17 +673,13 @@
   ASSERT_THAT(
       header_entries_,
       ElementsAreArray({
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":status", "200"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, "cache-control",
-                           "private"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader, "date",
-                           "Mon, 21 Oct 2013 20:13:22 GMT"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, "location",
-                           "https://www.example.com"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                           "content-encoding", "gzip"},
+          HpackHeaderEntry{":status", "200"},
+          HpackHeaderEntry{"cache-control", "private"},
+          HpackHeaderEntry{"date", "Mon, 21 Oct 2013 20:13:22 GMT"},
+          HpackHeaderEntry{"location", "https://www.example.com"},
+          HpackHeaderEntry{"content-encoding", "gzip"},
           HpackHeaderEntry{
-              HpackEntryType::kIndexedLiteralHeader, "set-cookie",
+              "set-cookie",
               "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"},
       }));
 
@@ -785,14 +749,10 @@
   EXPECT_TRUE(DecodeBlock(hpack_block));
   ASSERT_THAT(header_entries_,
               ElementsAreArray({
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   ":status", "302"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   "cache-control", "private"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   "date", "Mon, 21 Oct 2013 20:13:21 GMT"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   "location", "https://www.example.com"},
+                  HpackHeaderEntry{":status", "302"},
+                  HpackHeaderEntry{"cache-control", "private"},
+                  HpackHeaderEntry{"date", "Mon, 21 Oct 2013 20:13:21 GMT"},
+                  HpackHeaderEntry{"location", "https://www.example.com"},
               }));
 
   // Dynamic Table (after decoding):
@@ -843,14 +803,10 @@
   EXPECT_TRUE(DecodeBlock(hpack_block));
   ASSERT_THAT(header_entries_,
               ElementsAreArray({
-                  HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                                   ":status", "307"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedHeader,
-                                   "cache-control", "private"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedHeader, "date",
-                                   "Mon, 21 Oct 2013 20:13:21 GMT"},
-                  HpackHeaderEntry{HpackEntryType::kIndexedHeader, "location",
-                                   "https://www.example.com"},
+                  HpackHeaderEntry{":status", "307"},
+                  HpackHeaderEntry{"cache-control", "private"},
+                  HpackHeaderEntry{"date", "Mon, 21 Oct 2013 20:13:21 GMT"},
+                  HpackHeaderEntry{"location", "https://www.example.com"},
               }));
 
   // Dynamic Table (after decoding):
@@ -928,17 +884,13 @@
   ASSERT_THAT(
       header_entries_,
       ElementsAreArray({
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, ":status", "200"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, "cache-control",
-                           "private"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader, "date",
-                           "Mon, 21 Oct 2013 20:13:22 GMT"},
-          HpackHeaderEntry{HpackEntryType::kIndexedHeader, "location",
-                           "https://www.example.com"},
-          HpackHeaderEntry{HpackEntryType::kIndexedLiteralHeader,
-                           "content-encoding", "gzip"},
+          HpackHeaderEntry{":status", "200"},
+          HpackHeaderEntry{"cache-control", "private"},
+          HpackHeaderEntry{"date", "Mon, 21 Oct 2013 20:13:22 GMT"},
+          HpackHeaderEntry{"location", "https://www.example.com"},
+          HpackHeaderEntry{"content-encoding", "gzip"},
           HpackHeaderEntry{
-              HpackEntryType::kIndexedLiteralHeader, "set-cookie",
+              "set-cookie",
               "foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1"},
       }));
 
@@ -1015,8 +967,7 @@
     hbb.AppendIndexedHeader(4);  // :path: /
     EXPECT_TRUE(DecodeBlock(hbb.buffer()));
     EXPECT_THAT(header_entries_,
-                ElementsAreArray({HpackHeaderEntry{
-                    HpackEntryType::kIndexedHeader, ":path", "/"}}));
+                ElementsAreArray({HpackHeaderEntry{":path", "/"}}));
     EXPECT_EQ(1024u, header_table_size_limit());
     EXPECT_EQ(0u, current_header_table_size());
   }
@@ -1030,8 +981,7 @@
     hbb.AppendIndexedHeader(5);  // :path: /index.html
     EXPECT_TRUE(DecodeBlock(hbb.buffer()));
     EXPECT_THAT(header_entries_,
-                ElementsAreArray({HpackHeaderEntry{
-                    HpackEntryType::kIndexedHeader, ":path", "/index.html"}}));
+                ElementsAreArray({HpackHeaderEntry{":path", "/index.html"}}));
     EXPECT_EQ(1250u, header_table_size_limit());
     EXPECT_EQ(0u, current_header_table_size());
   }
@@ -1197,19 +1147,14 @@
   // Normally able to decode this block.
   EXPECT_TRUE(DecodeBlock(hbb.buffer()));
   EXPECT_THAT(header_entries_,
-              ElementsAreArray(
-                  {HpackHeaderEntry{HpackEntryType::kNeverIndexedLiteralHeader,
-                                    "name", "some data."},
-                   HpackHeaderEntry{HpackEntryType::kUnindexedLiteralHeader,
-                                    "name2", "longer data"}}));
+              ElementsAreArray({HpackHeaderEntry{"name", "some data."},
+                                HpackHeaderEntry{"name2", "longer data"}}));
 
   // But not if the maximum size of strings is less than the longest string.
   decoder_.set_max_string_size_bytes(10);
   EXPECT_FALSE(DecodeBlock(hbb.buffer()));
-  EXPECT_THAT(
-      header_entries_,
-      ElementsAreArray({HpackHeaderEntry{
-          HpackEntryType::kNeverIndexedLiteralHeader, "name", "some data."}}));
+  EXPECT_THAT(header_entries_,
+              ElementsAreArray({HpackHeaderEntry{"name", "some data."}}));
   EXPECT_FALSE(saw_end_);
   EXPECT_EQ(1u, error_messages_.size());
   EXPECT_THAT(error_messages_[0], HasSubstr("too long"));
diff --git a/spdy/core/hpack/hpack_decoder_adapter.cc b/spdy/core/hpack/hpack_decoder_adapter.cc
index 278eaab..b3bce70 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter.cc
@@ -10,7 +10,6 @@
 #include "net/third_party/quiche/src/spdy/platform/api/spdy_logging.h"
 
 using ::http2::DecodeBuffer;
-using ::http2::HpackEntryType;
 using ::http2::HpackString;
 
 namespace spdy {
@@ -146,8 +145,7 @@
   }
 }
 
-void HpackDecoderAdapter::ListenerAdapter::OnHeader(HpackEntryType entry_type,
-                                                    const HpackString& name,
+void HpackDecoderAdapter::ListenerAdapter::OnHeader(const HpackString& name,
                                                     const HpackString& value) {
   SPDY_DVLOG(2) << "HpackDecoderAdapter::ListenerAdapter::OnHeader:\n name: "
                 << name << "\n value: " << value;
@@ -178,16 +176,17 @@
 }
 
 int64_t HpackDecoderAdapter::ListenerAdapter::OnEntryInserted(
-    const http2::HpackStringPair& sp,
+    const http2::HpackStringPair& entry,
     size_t insert_count) {
   SPDY_DVLOG(2) << "HpackDecoderAdapter::ListenerAdapter::OnEntryInserted: "
-                << sp << ",  insert_count=" << insert_count;
+                << entry << ",  insert_count=" << insert_count;
   if (visitor_ == nullptr) {
     return 0;
   }
-  HpackEntry entry(sp.name.ToStringPiece(), sp.value.ToStringPiece(),
-                   /*is_static*/ false, insert_count);
-  int64_t time_added = visitor_->OnNewEntry(entry);
+  HpackEntry hpack_entry(entry.name.ToStringPiece(),
+                         entry.value.ToStringPiece(),
+                         /*is_static*/ false, insert_count);
+  int64_t time_added = visitor_->OnNewEntry(hpack_entry);
   SPDY_DVLOG(2)
       << "HpackDecoderAdapter::ListenerAdapter::OnEntryInserted: time_added="
       << time_added;
@@ -195,17 +194,18 @@
 }
 
 void HpackDecoderAdapter::ListenerAdapter::OnUseEntry(
-    const http2::HpackStringPair& sp,
+    const http2::HpackStringPair& entry,
     size_t insert_count,
     int64_t time_added) {
-  SPDY_DVLOG(2) << "HpackDecoderAdapter::ListenerAdapter::OnUseEntry: " << sp
+  SPDY_DVLOG(2) << "HpackDecoderAdapter::ListenerAdapter::OnUseEntry: " << entry
                 << ",  insert_count=" << insert_count
                 << ",  time_added=" << time_added;
   if (visitor_ != nullptr) {
-    HpackEntry entry(sp.name.ToStringPiece(), sp.value.ToStringPiece(),
-                     /*is_static*/ false, insert_count);
-    entry.set_time_added(time_added);
-    visitor_->OnUseEntry(entry);
+    HpackEntry hpack_entry(entry.name.ToStringPiece(),
+                           entry.value.ToStringPiece(), /*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 17c4461..cdea661 100644
--- a/spdy/core/hpack/hpack_decoder_adapter.h
+++ b/spdy/core/hpack/hpack_decoder_adapter.h
@@ -105,8 +105,7 @@
 
     // Override the HpackDecoderListener methods:
     void OnHeaderListStart() override;
-    void OnHeader(http2::HpackEntryType entry_type,
-                  const http2::HpackString& name,
+    void OnHeader(const http2::HpackString& name,
                   const http2::HpackString& value) override;
     void OnHeaderListEnd() override;
     void OnHeaderErrorDetected(SpdyStringPiece error_message) override;
@@ -116,7 +115,7 @@
                             size_t insert_count) override;
     void OnUseEntry(const http2::HpackStringPair& entry,
                     size_t insert_count,
-                    int64_t insert_time) override;
+                    int64_t time_added) override;
 
     void AddToTotalHpackBytes(size_t delta) { total_hpack_bytes_ += delta; }
     size_t total_hpack_bytes() const { return total_hpack_bytes_; }
diff --git a/spdy/core/hpack/hpack_decoder_adapter_test.cc b/spdy/core/hpack/hpack_decoder_adapter_test.cc
index 73c33eb..88318fb 100644
--- a/spdy/core/hpack/hpack_decoder_adapter_test.cc
+++ b/spdy/core/hpack/hpack_decoder_adapter_test.cc
@@ -66,8 +66,7 @@
       : decoder_(decoder) {}
 
   void HandleHeaderRepresentation(SpdyStringPiece name, SpdyStringPiece value) {
-    decoder_->listener_adapter_.OnHeader(HpackEntryType::kIndexedLiteralHeader,
-                                         HpackString(name), HpackString(value));
+    decoder_->listener_adapter_.OnHeader(HpackString(name), HpackString(value));
   }
 
   http2::HpackDecoderTables* GetDecoderTables() {
diff --git a/spdy/core/hpack/hpack_encoder_test.cc b/spdy/core/hpack/hpack_encoder_test.cc
index b905214..a878866 100644
--- a/spdy/core/hpack/hpack_encoder_test.cc
+++ b/spdy/core/hpack/hpack_encoder_test.cc
@@ -326,7 +326,7 @@
   headers[static_->name()] = static_->value();
   CompareWithExpectedEncoding(headers);
 
-  EXPECT_EQ(0u, peer_.table_peer().dynamic_entries()->size());
+  EXPECT_EQ(0, peer_.table_peer().dynamic_entries()->size());
 }
 
 TEST_P(HpackEncoderTest, SingleLiteralWithIndexName) {
