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) {