Revert "Internal QUICHE change"

This reverts commit 7805361f3a79b463da1e88a9e307a2455d819a0a.
diff --git a/quic/core/qpack/qpack_encoder.cc b/quic/core/qpack/qpack_encoder.cc
index 09c4286..108ffd5 100644
--- a/quic/core/qpack/qpack_encoder.cc
+++ b/quic/core/qpack/qpack_encoder.cc
@@ -9,6 +9,7 @@
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_progressive_encoder.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_ptr_util.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
 
 namespace quic {
 
diff --git a/quic/core/qpack/qpack_encoder.h b/quic/core/qpack/qpack_encoder.h
index 2c450b1..4e65532 100644
--- a/quic/core/qpack/qpack_encoder.h
+++ b/quic/core/qpack/qpack_encoder.h
@@ -13,7 +13,6 @@
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_header_table.h"
 #include "net/third_party/quiche/src/quic/core/quic_types.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_encoder.h"
 
 namespace spdy {
diff --git a/quic/core/qpack/qpack_encoder_test.cc b/quic/core/qpack/qpack_encoder_test.cc
index 8200e14..49edadc 100644
--- a/quic/core/qpack/qpack_encoder_test.cc
+++ b/quic/core/qpack/qpack_encoder_test.cc
@@ -162,19 +162,6 @@
       QuicTextUtils::HexDecode("ffffffffffffffffffffff"));
 }
 
-TEST_P(QpackEncoderTest, SplitAlongNullCharacter) {
-  spdy::SpdyHeaderBlock header_list;
-  header_list["foo"] = QuicStringPiece("bar\0bar\0baz", 11);
-  std::string output = Encode(&header_list);
-
-  EXPECT_EQ(QuicTextUtils::HexDecode("0000"            // prefix
-                                     "2a94e703626172"  // foo: bar
-                                     "2a94e703626172"  // foo: bar
-                                     "2a94e70362617a"  // foo: baz
-                                     ),
-            output);
-}
-
 }  // namespace
 }  // namespace test
 }  // namespace quic
diff --git a/quic/core/qpack/qpack_progressive_encoder.cc b/quic/core/qpack/qpack_progressive_encoder.cc
index 731ec10..05a025b 100644
--- a/quic/core/qpack/qpack_progressive_encoder.cc
+++ b/quic/core/qpack/qpack_progressive_encoder.cc
@@ -22,7 +22,7 @@
       header_table_(header_table),
       encoder_stream_sender_(encoder_stream_sender),
       header_list_(header_list),
-      header_list_iterator_(header_list_.begin()),
+      header_list_iterator_(header_list_->begin()),
       prefix_encoded_(false) {
   // TODO(bnc): Use |stream_id_| for dynamic table entry management, and
   // remove this dummy DCHECK.
@@ -30,10 +30,11 @@
 
   DCHECK(header_table_);
   DCHECK(encoder_stream_sender_);
+  DCHECK(header_list_);
 }
 
 bool QpackProgressiveEncoder::HasNext() const {
-  return header_list_iterator_ != header_list_.end() || !prefix_encoded_;
+  return header_list_iterator_ != header_list_->end() || !prefix_encoded_;
 }
 
 void QpackProgressiveEncoder::Next(size_t max_encoded_bytes,
@@ -60,7 +61,7 @@
   }
 
   do {
-    // Call QpackInstructionEncoder::Encode() for |*header_list_iterator_| if it
+    // Call QpackInstructionEncoder::Encode for |*header_list_iterator_| if it
     // has not been called yet.
     if (!instruction_encoder_.HasNext()) {
       DCHECK(prefix_encoded_);
diff --git a/quic/core/qpack/qpack_progressive_encoder.h b/quic/core/qpack/qpack_progressive_encoder.h
index 98a3cfe..8e204e2 100644
--- a/quic/core/qpack/qpack_progressive_encoder.h
+++ b/quic/core/qpack/qpack_progressive_encoder.h
@@ -9,7 +9,6 @@
 
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_stream_sender.h"
 #include "net/third_party/quiche/src/quic/core/qpack/qpack_instruction_encoder.h"
-#include "net/third_party/quiche/src/quic/core/qpack/value_splitting_header_list.h"
 #include "net/third_party/quiche/src/quic/core/quic_types.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
 #include "net/third_party/quiche/src/spdy/core/hpack/hpack_encoder.h"
@@ -25,8 +24,6 @@
     : public spdy::HpackEncoder::ProgressiveEncoder {
  public:
   QpackProgressiveEncoder() = delete;
-  // |header_table|, |encoder_stream_sender|, and |header_list| must all outlive
-  // this object.
   QpackProgressiveEncoder(QuicStreamId stream_id,
                           QpackHeaderTable* header_table,
                           QpackEncoderStreamSender* encoder_stream_sender,
@@ -46,10 +43,10 @@
   QpackInstructionEncoder instruction_encoder_;
   const QpackHeaderTable* const header_table_;
   QpackEncoderStreamSender* const encoder_stream_sender_;
-  const ValueSplittingHeaderList header_list_;
+  const spdy::SpdyHeaderBlock* const header_list_;
 
   // Header field currently being encoded.
-  ValueSplittingHeaderList::const_iterator header_list_iterator_;
+  spdy::SpdyHeaderBlock::const_iterator header_list_iterator_;
 
   // False until prefix is fully encoded.
   bool prefix_encoded_;
diff --git a/quic/core/qpack/qpack_round_trip_test.cc b/quic/core/qpack/qpack_round_trip_test.cc
index 45ad667..8ef05c4 100644
--- a/quic/core/qpack/qpack_round_trip_test.cc
+++ b/quic/core/qpack/qpack_round_trip_test.cc
@@ -131,14 +131,6 @@
   }
 }
 
-TEST_P(QpackRoundTripTest, ValueHasNullCharacter) {
-  spdy::SpdyHeaderBlock header_list;
-  header_list["foo"] = QuicStringPiece("bar\0bar\0baz", 11);
-
-  spdy::SpdyHeaderBlock output = EncodeThenDecode(header_list);
-  EXPECT_EQ(header_list, output);
-}
-
 }  // namespace
 }  // namespace test
 }  // namespace quic
diff --git a/quic/core/qpack/value_splitting_header_list.cc b/quic/core/qpack/value_splitting_header_list.cc
deleted file mode 100644
index d8a0ee8..0000000
--- a/quic/core/qpack/value_splitting_header_list.cc
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (c) 2019 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 "net/third_party/quiche/src/quic/core/qpack/value_splitting_header_list.h"
-
-namespace quic {
-
-ValueSplittingHeaderList::const_iterator::const_iterator(
-    const spdy::SpdyHeaderBlock* header_list,
-    spdy::SpdyHeaderBlock::const_iterator header_list_iterator)
-    : header_list_(header_list),
-      header_list_iterator_(header_list_iterator),
-      value_start_(0) {
-  UpdateHeaderField();
-}
-
-bool ValueSplittingHeaderList::const_iterator::operator==(
-    const const_iterator& other) const {
-  return header_list_iterator_ == other.header_list_iterator_ &&
-         value_start_ == other.value_start_;
-}
-
-bool ValueSplittingHeaderList::const_iterator::operator!=(
-    const const_iterator& other) const {
-  return !(*this == other);
-}
-
-const ValueSplittingHeaderList::const_iterator&
-ValueSplittingHeaderList::const_iterator::operator++() {
-  if (value_end_ == QuicStringPiece::npos) {
-    // This was the last frament within |*header_list_iterator_|,
-    // move on to the next header element of |header_list_|.
-    ++header_list_iterator_;
-    value_start_ = 0;
-  } else {
-    // Find the next fragment within |*header_list_iterator_|.
-    value_start_ = value_end_ + 1;
-  }
-  UpdateHeaderField();
-
-  return *this;
-}
-
-const ValueSplittingHeaderList::value_type&
-    ValueSplittingHeaderList::const_iterator::operator*() const {
-  return header_field_;
-}
-const ValueSplittingHeaderList::value_type*
-    ValueSplittingHeaderList::const_iterator::operator->() const {
-  return &header_field_;
-}
-
-void ValueSplittingHeaderList::const_iterator::UpdateHeaderField() {
-  DCHECK(value_start_ != QuicStringPiece::npos);
-
-  if (header_list_iterator_ == header_list_->end()) {
-    return;
-  }
-
-  const QuicStringPiece name = header_list_iterator_->first;
-
-  value_end_ = header_list_iterator_->second.find('\0', value_start_);
-  const QuicStringPiece::size_type value_length =
-      value_end_ == QuicStringPiece::npos ? QuicStringPiece::npos
-                                          : value_end_ - value_start_;
-  const QuicStringPiece value =
-      header_list_iterator_->second.substr(value_start_, value_length);
-
-  header_field_ = std::make_pair(name, value);
-}
-
-ValueSplittingHeaderList::ValueSplittingHeaderList(
-    const spdy::SpdyHeaderBlock* header_list)
-    : header_list_(header_list) {
-  DCHECK(header_list_);
-}
-
-ValueSplittingHeaderList::const_iterator ValueSplittingHeaderList::begin()
-    const {
-  return const_iterator(header_list_, header_list_->begin());
-}
-
-ValueSplittingHeaderList::const_iterator ValueSplittingHeaderList::end() const {
-  return const_iterator(header_list_, header_list_->end());
-}
-
-}  // namespace quic
diff --git a/quic/core/qpack/value_splitting_header_list.h b/quic/core/qpack/value_splitting_header_list.h
deleted file mode 100644
index e47567e..0000000
--- a/quic/core/qpack/value_splitting_header_list.h
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef QUICHE_QUIC_CORE_QPACK_VALUE_SPLITTING_HEADER_LIST_H_
-#define QUICHE_QUIC_CORE_QPACK_VALUE_SPLITTING_HEADER_LIST_H_
-
-#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
-#include "net/third_party/quiche/src/quic/platform/api/quic_string_piece.h"
-#include "net/third_party/quiche/src/spdy/core/spdy_header_block.h"
-
-namespace quic {
-
-// A wrapper class around SpdyHeaderBlock that splits header values along '\0'
-// characters.
-class QUIC_EXPORT_PRIVATE ValueSplittingHeaderList {
- public:
-  using value_type = spdy::SpdyHeaderBlock::value_type;
-
-  class const_iterator {
-   public:
-    // |header_list| must outlive this object.
-    const_iterator(const spdy::SpdyHeaderBlock* header_list,
-                   spdy::SpdyHeaderBlock::const_iterator header_list_iterator);
-    const_iterator(const const_iterator&) = default;
-    const_iterator& operator=(const const_iterator&) = default;
-
-    bool operator==(const const_iterator& other) const;
-    bool operator!=(const const_iterator& other) const;
-
-    const const_iterator& operator++();
-
-    const value_type& operator*() const;
-    const value_type* operator->() const;
-
-   private:
-    // Find next '\0' character; update |value_end_| and |header_field_|.
-    void UpdateHeaderField();
-
-    const spdy::SpdyHeaderBlock* const header_list_;
-    spdy::SpdyHeaderBlock::const_iterator header_list_iterator_;
-    QuicStringPiece::size_type value_start_;
-    QuicStringPiece::size_type value_end_;
-    value_type header_field_;
-  };
-
-  // |header_list| must outlive this object.
-  explicit ValueSplittingHeaderList(const spdy::SpdyHeaderBlock* header_list);
-  ValueSplittingHeaderList(const ValueSplittingHeaderList&) = delete;
-  ValueSplittingHeaderList& operator=(const ValueSplittingHeaderList&) = delete;
-
-  const_iterator begin() const;
-  const_iterator end() const;
-
- private:
-  const spdy::SpdyHeaderBlock* const header_list_;
-};
-
-}  // namespace quic
-
-#endif  // QUICHE_QUIC_CORE_QPACK_VALUE_SPLITTING_HEADER_LIST_H_
diff --git a/quic/core/qpack/value_splitting_header_list_test.cc b/quic/core/qpack/value_splitting_header_list_test.cc
deleted file mode 100644
index 9ece65d..0000000
--- a/quic/core/qpack/value_splitting_header_list_test.cc
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (c) 2019 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 "net/third_party/quiche/src/quic/core/qpack/value_splitting_header_list.h"
-
-#include "net/third_party/quiche/src/quic/platform/api/quic_test.h"
-
-namespace quic {
-namespace test {
-namespace {
-
-using ::testing::ElementsAre;
-using ::testing::Pair;
-
-TEST(ValueSplittingHeaderListTest, Comparison) {
-  spdy::SpdyHeaderBlock block;
-  block["foo"] = QuicStringPiece("bar\0baz", 7);
-  block["baz"] = "qux";
-
-  ValueSplittingHeaderList headers(&block);
-  ValueSplittingHeaderList::const_iterator it1 = headers.begin();
-  const int kEnd = 4;
-  for (int i = 0; i < kEnd; ++i) {
-    // Compare to begin().
-    if (i == 0) {
-      EXPECT_TRUE(it1 == headers.begin());
-      EXPECT_TRUE(headers.begin() == it1);
-      EXPECT_FALSE(it1 != headers.begin());
-      EXPECT_FALSE(headers.begin() != it1);
-    } else {
-      EXPECT_FALSE(it1 == headers.begin());
-      EXPECT_FALSE(headers.begin() == it1);
-      EXPECT_TRUE(it1 != headers.begin());
-      EXPECT_TRUE(headers.begin() != it1);
-    }
-
-    // Compare to end().
-    if (i == kEnd - 1) {
-      EXPECT_TRUE(it1 == headers.end());
-      EXPECT_TRUE(headers.end() == it1);
-      EXPECT_FALSE(it1 != headers.end());
-      EXPECT_FALSE(headers.end() != it1);
-    } else {
-      EXPECT_FALSE(it1 == headers.end());
-      EXPECT_FALSE(headers.end() == it1);
-      EXPECT_TRUE(it1 != headers.end());
-      EXPECT_TRUE(headers.end() != it1);
-    }
-
-    // Compare to another iterator walking through the container.
-    ValueSplittingHeaderList::const_iterator it2 = headers.begin();
-    for (int j = 0; j < kEnd; ++j) {
-      if (i == j) {
-        EXPECT_TRUE(it1 == it2);
-        EXPECT_FALSE(it1 != it2);
-      } else {
-        EXPECT_FALSE(it1 == it2);
-        EXPECT_TRUE(it1 != it2);
-      }
-      ++it2;
-    }
-
-    ++it1;
-  }
-}
-
-TEST(ValueSplittingHeaderListTest, Empty) {
-  spdy::SpdyHeaderBlock block;
-
-  ValueSplittingHeaderList headers(&block);
-  EXPECT_THAT(headers, ElementsAre());
-  EXPECT_EQ(headers.begin(), headers.end());
-}
-
-TEST(ValueSplittingHeaderListTest, Simple) {
-  spdy::SpdyHeaderBlock block;
-  block["foo"] = "bar";
-  block["baz"] = "qux";
-
-  ValueSplittingHeaderList headers(&block);
-  EXPECT_THAT(headers, ElementsAre(Pair("foo", "bar"), Pair("baz", "qux")));
-  EXPECT_NE(headers.begin(), headers.end());
-}
-
-TEST(ValueSplittingHeaderListTest, EmptyValue) {
-  spdy::SpdyHeaderBlock block;
-  block["foo"] = "";
-
-  ValueSplittingHeaderList headers(&block);
-  EXPECT_THAT(headers, ElementsAre(Pair("foo", "")));
-}
-
-TEST(ValueSplittingHeaderListTest, SimpleSplit) {
-  spdy::SpdyHeaderBlock block;
-  block["foo"] = QuicStringPiece("bar\0baz", 7);
-  block["baz"] = QuicStringPiece("foo\0foo", 7);
-
-  ValueSplittingHeaderList headers(&block);
-  EXPECT_THAT(headers, ElementsAre(Pair("foo", "bar"), Pair("foo", "baz"),
-                                   Pair("baz", "foo"), Pair("baz", "foo")));
-}
-
-TEST(ValueSplittingHeaderListTest, EmptyFragments) {
-  spdy::SpdyHeaderBlock block;
-  block["foo"] = QuicStringPiece("\0", 1);
-  block["bar"] = QuicStringPiece("foo\0", 4);
-  block["baz"] = QuicStringPiece("\0bar", 4);
-  block["qux"] = QuicStringPiece("\0foobar\0", 8);
-
-  ValueSplittingHeaderList headers(&block);
-  EXPECT_THAT(
-      headers,
-      ElementsAre(Pair("foo", ""), Pair("foo", ""), Pair("bar", "foo"),
-                  Pair("bar", ""), Pair("baz", ""), Pair("baz", "bar"),
-                  Pair("qux", ""), Pair("qux", "foobar"), Pair("qux", "")));
-}
-
-}  // namespace
-}  // namespace test
-}  // namespace quic