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