Add BalsaHeadersSequence::IsEmpty().
This method will eventually replace the BackendResponder calls to
HasContinueResponseHeaders() in [1], as these conditions should be generalized
to other interim headers.
[1] http://google3/gfe/gfe2/jetstream/backend_responder.cc;l=985,1002;rcl=538013523
PiperOrigin-RevId: 540667259
diff --git a/quiche/balsa/balsa_headers_sequence.h b/quiche/balsa/balsa_headers_sequence.h
index 3fe10fd..5c2c43f 100644
--- a/quiche/balsa/balsa_headers_sequence.h
+++ b/quiche/balsa/balsa_headers_sequence.h
@@ -21,6 +21,10 @@
// `Next()`. IFF true, `Next()` will return non-nullptr.
bool HasNext() const;
+ // Returns true if the sequence has no BalsaHeaders. It is possible to have
+ // both !HasNext() and !IsEmpty() if all BalsaHeaders have been consumed.
+ bool IsEmpty() const { return sequence_.empty(); }
+
// Returns a non-owning pointer to the next BalsaHeaders in the sequence, or
// nullptr if the next does not exist.
BalsaHeaders* Next();
diff --git a/quiche/balsa/balsa_headers_sequence_test.cc b/quiche/balsa/balsa_headers_sequence_test.cc
index ac62f5e..da6f7ce 100644
--- a/quiche/balsa/balsa_headers_sequence_test.cc
+++ b/quiche/balsa/balsa_headers_sequence_test.cc
@@ -14,6 +14,7 @@
BalsaHeadersSequence sequence;
EXPECT_FALSE(sequence.HasNext());
EXPECT_EQ(sequence.Next(), nullptr);
+ EXPECT_TRUE(sequence.IsEmpty());
}
TEST(BalsaHeadersSequenceTest, Basic) {
@@ -23,21 +24,25 @@
headers_one->AppendHeader("one", "fish");
sequence.Append(std::move(headers_one));
EXPECT_TRUE(sequence.HasNext());
+ EXPECT_FALSE(sequence.IsEmpty());
auto headers_two = std::make_unique<BalsaHeaders>();
headers_two->AppendHeader("two", "fish");
sequence.Append(std::move(headers_two));
EXPECT_TRUE(sequence.HasNext());
+ EXPECT_FALSE(sequence.IsEmpty());
const BalsaHeaders* headers = sequence.Next();
ASSERT_NE(headers, nullptr);
EXPECT_TRUE(headers->HasHeader("one"));
EXPECT_TRUE(sequence.HasNext());
+ EXPECT_FALSE(sequence.IsEmpty());
headers = sequence.Next();
ASSERT_NE(headers, nullptr);
EXPECT_TRUE(headers->HasHeader("two"));
EXPECT_FALSE(sequence.HasNext());
+ EXPECT_FALSE(sequence.IsEmpty());
EXPECT_EQ(sequence.Next(), nullptr);
}
@@ -49,15 +54,18 @@
headers_one->AppendHeader("one", "fish");
sequence.Append(std::move(headers_one));
EXPECT_TRUE(sequence.HasNext());
+ EXPECT_FALSE(sequence.IsEmpty());
auto headers_two = std::make_unique<BalsaHeaders>();
headers_two->AppendHeader("two", "fish");
sequence.Append(std::move(headers_two));
EXPECT_TRUE(sequence.HasNext());
+ EXPECT_FALSE(sequence.IsEmpty());
sequence.Clear();
EXPECT_FALSE(sequence.HasNext());
EXPECT_EQ(sequence.Next(), nullptr);
+ EXPECT_TRUE(sequence.IsEmpty());
}
TEST(BalsaHeadersSequenceTest, PeekNext) {