Deprecate --gfe2_reloadable_flag_quic_parse_accept_ch_frame.
PiperOrigin-RevId: 359827183
Change-Id: I91f8989e4943055d1aed7c96baca8e2dd8086a54
diff --git a/quic/core/http/http_decoder.cc b/quic/core/http/http_decoder.cc
index fe33a81..95f5079 100644
--- a/quic/core/http/http_decoder.cc
+++ b/quic/core/http/http_decoder.cc
@@ -238,13 +238,7 @@
continue_processing = visitor_->OnPriorityUpdateFrameStart(header_length);
break;
case static_cast<uint64_t>(HttpFrameType::ACCEPT_CH):
- if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
- QUIC_RELOADABLE_FLAG_COUNT(quic_parse_accept_ch_frame);
- continue_processing = visitor_->OnAcceptChFrameStart(header_length);
- } else {
- continue_processing = visitor_->OnUnknownFrameStart(
- current_frame_type_, header_length, current_frame_length_);
- }
+ continue_processing = visitor_->OnAcceptChFrameStart(header_length);
break;
default:
continue_processing = visitor_->OnUnknownFrameStart(
@@ -381,13 +375,9 @@
break;
}
case static_cast<uint64_t>(HttpFrameType::ACCEPT_CH): {
- if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
- // TODO(bnc): Avoid buffering if the entire frame is present, and
- // instead parse directly out of |reader|.
- BufferFramePayload(reader);
- } else {
- continue_processing = HandleUnknownFramePayload(reader);
- }
+ // TODO(bnc): Avoid buffering if the entire frame is present, and
+ // instead parse directly out of |reader|.
+ BufferFramePayload(reader);
break;
}
default: {
@@ -499,18 +489,14 @@
break;
}
case static_cast<uint64_t>(HttpFrameType::ACCEPT_CH): {
- if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
- // TODO(bnc): Avoid buffering if the entire frame is present, and
- // instead parse directly out of |reader|.
- AcceptChFrame frame;
- QuicDataReader reader(buffer_.data(), current_frame_length_);
- if (!ParseAcceptChFrame(&reader, &frame)) {
- return false;
- }
- continue_processing = visitor_->OnAcceptChFrame(frame);
- } else {
- continue_processing = visitor_->OnUnknownFrameEnd();
+ // TODO(bnc): Avoid buffering if the entire frame is present, and
+ // instead parse directly out of |reader|.
+ AcceptChFrame frame;
+ QuicDataReader reader(buffer_.data(), current_frame_length_);
+ if (!ParseAcceptChFrame(&reader, &frame)) {
+ return false;
}
+ continue_processing = visitor_->OnAcceptChFrame(frame);
break;
}
default:
diff --git a/quic/core/http/http_decoder_test.cc b/quic/core/http/http_decoder_test.cc
index 1be5084..4f518a4 100644
--- a/quic/core/http/http_decoder_test.cc
+++ b/quic/core/http/http_decoder_test.cc
@@ -867,11 +867,43 @@
"\x04" // length
"\x05" // valid stream id
"foo", // superfluous data
- "Superfluous data in GOAWAY frame."}};
+ "Superfluous data in GOAWAY frame."},
+ {"\x40\x89" // type (ACCEPT_CH)
+ "\x01" // length
+ "\x40", // first byte of two-byte varint origin length
+ "Unable to read ACCEPT_CH origin."},
+ {"\x40\x89" // type (ACCEPT_CH)
+ "\x01" // length
+ "\x05", // valid origin length but no origin string
+ "Unable to read ACCEPT_CH origin."},
+ {"\x40\x89" // type (ACCEPT_CH)
+ "\x04" // length
+ "\x05" // valid origin length
+ "foo", // payload ends before origin ends
+ "Unable to read ACCEPT_CH origin."},
+ {"\x40\x89" // type (ACCEPT_CH)
+ "\x04" // length
+ "\x03" // valid origin length
+ "foo", // payload ends at end of origin: no value
+ "Unable to read ACCEPT_CH value."},
+ {"\x40\x89" // type (ACCEPT_CH)
+ "\x05" // length
+ "\x03" // valid origin length
+ "foo" // payload ends at end of origin: no value
+ "\x40", // first byte of two-byte varint value length
+ "Unable to read ACCEPT_CH value."},
+ {"\x40\x89" // type (ACCEPT_CH)
+ "\x08" // length
+ "\x03" // valid origin length
+ "foo" // origin
+ "\x05" // valid value length
+ "bar", // payload ends before value ends
+ "Unable to read ACCEPT_CH value."}};
for (const auto& test_data : kTestData) {
{
HttpDecoder decoder(&visitor_);
+ EXPECT_CALL(visitor_, OnAcceptChFrameStart(_)).Times(AnyNumber());
EXPECT_CALL(visitor_, OnError(&decoder));
absl::string_view input(test_data.input);
@@ -881,6 +913,7 @@
}
{
HttpDecoder decoder(&visitor_);
+ EXPECT_CALL(visitor_, OnAcceptChFrameStart(_)).Times(AnyNumber());
EXPECT_CALL(visitor_, OnError(&decoder));
absl::string_view input(test_data.input);
@@ -1194,10 +1227,6 @@
}
TEST_F(HttpDecoderTest, AcceptChFrame) {
- if (!GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
- return;
- }
-
InSequence s;
std::string input1 = absl::HexStringToBytes(
"4089" // type (ACCEPT_CH)
@@ -1272,74 +1301,6 @@
EXPECT_EQ("", decoder_.error_detail());
}
-TEST_F(HttpDecoderTest, CorruptAcceptChFrame) {
- if (!GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
- // TODO(bnc): merge this test into HttpDecoderTest.CorruptFrame when
- // deprecating flag.
- return;
- }
-
- EXPECT_CALL(visitor_, OnAcceptChFrameStart(_)).Times(AnyNumber());
-
- struct {
- const char* const input;
- const char* const error_message;
- } kTestData[] = {{"\x40\x89" // type (ACCEPT_CH)
- "\x01" // length
- "\x40", // first byte of two-byte varint origin length
- "Unable to read ACCEPT_CH origin."},
- {"\x40\x89" // type (ACCEPT_CH)
- "\x01" // length
- "\x05", // valid origin length but no origin string
- "Unable to read ACCEPT_CH origin."},
- {"\x40\x89" // type (ACCEPT_CH)
- "\x04" // length
- "\x05" // valid origin length
- "foo", // payload ends before origin ends
- "Unable to read ACCEPT_CH origin."},
- {"\x40\x89" // type (ACCEPT_CH)
- "\x04" // length
- "\x03" // valid origin length
- "foo", // payload ends at end of origin: no value
- "Unable to read ACCEPT_CH value."},
- {"\x40\x89" // type (ACCEPT_CH)
- "\x05" // length
- "\x03" // valid origin length
- "foo" // payload ends at end of origin: no value
- "\x40", // first byte of two-byte varint value length
- "Unable to read ACCEPT_CH value."},
- {"\x40\x89" // type (ACCEPT_CH)
- "\x08" // length
- "\x03" // valid origin length
- "foo" // origin
- "\x05" // valid value length
- "bar", // payload ends before value ends
- "Unable to read ACCEPT_CH value."}};
-
- for (const auto& test_data : kTestData) {
- {
- HttpDecoder decoder(&visitor_);
- EXPECT_CALL(visitor_, OnError(&decoder));
-
- absl::string_view input(test_data.input);
- decoder.ProcessInput(input.data(), input.size());
- EXPECT_THAT(decoder.error(), IsError(QUIC_HTTP_FRAME_ERROR));
- EXPECT_EQ(test_data.error_message, decoder.error_detail());
- }
- {
- HttpDecoder decoder(&visitor_);
- EXPECT_CALL(visitor_, OnError(&decoder));
-
- absl::string_view input(test_data.input);
- for (auto c : input) {
- decoder.ProcessInput(&c, 1);
- }
- EXPECT_THAT(decoder.error(), IsError(QUIC_HTTP_FRAME_ERROR));
- EXPECT_EQ(test_data.error_message, decoder.error_detail());
- }
- }
-}
-
TEST_F(HttpDecoderTest, DecodeSettings) {
std::string input = absl::HexStringToBytes(
"04" // type (SETTINGS)
diff --git a/quic/core/http/quic_receive_control_stream.cc b/quic/core/http/quic_receive_control_stream.cc
index 35d5902..ffc38a0 100644
--- a/quic/core/http/quic_receive_control_stream.cc
+++ b/quic/core/http/quic_receive_control_stream.cc
@@ -263,8 +263,7 @@
frame_type == HttpFrameType::PUSH_PROMISE) ||
(spdy_session()->perspective() == Perspective::IS_CLIENT &&
frame_type == HttpFrameType::MAX_PUSH_ID) ||
- (GetQuicReloadableFlag(quic_parse_accept_ch_frame) &&
- spdy_session()->perspective() == Perspective::IS_SERVER &&
+ (spdy_session()->perspective() == Perspective::IS_SERVER &&
frame_type == HttpFrameType::ACCEPT_CH)) {
stream_delegate()->OnStreamError(
QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc
index 3e4532f..491255d 100644
--- a/quic/core/http/quic_receive_control_stream_test.cc
+++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -404,8 +404,7 @@
"4089" // type (ACCEPT_CH)
"00"); // length
- if (GetQuicReloadableFlag(quic_parse_accept_ch_frame) &&
- perspective() == Perspective::IS_SERVER) {
+ if (perspective() == Perspective::IS_SERVER) {
EXPECT_CALL(*connection_,
CloseConnection(
QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
@@ -449,23 +448,17 @@
"4089" // type (ACCEPT_CH)
"00"); // length
- if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
- if (perspective() == Perspective::IS_CLIENT) {
- EXPECT_CALL(debug_visitor, OnAcceptChFrameReceived(_));
- } else {
- EXPECT_CALL(*connection_,
- CloseConnection(
- QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
- "Invalid frame type 137 received on control stream.", _))
- .WillOnce(
- Invoke(connection_, &MockQuicConnection::ReallyCloseConnection));
- EXPECT_CALL(*connection_, SendConnectionClosePacket(_, _, _));
- EXPECT_CALL(session_, OnConnectionClosed(_, _));
- }
+ if (perspective() == Perspective::IS_CLIENT) {
+ EXPECT_CALL(debug_visitor, OnAcceptChFrameReceived(_));
} else {
- EXPECT_CALL(debug_visitor,
- OnUnknownFrameReceived(id, /* frame_type = */ 0x89,
- /* payload_length = */ 0));
+ EXPECT_CALL(*connection_,
+ CloseConnection(
+ QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM,
+ "Invalid frame type 137 received on control stream.", _))
+ .WillOnce(
+ Invoke(connection_, &MockQuicConnection::ReallyCloseConnection));
+ EXPECT_CALL(*connection_, SendConnectionClosePacket(_, _, _));
+ EXPECT_CALL(session_, OnConnectionClosed(_, _));
}
receive_control_stream_->OnStreamFrame(
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index b266633..3985769 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -3203,10 +3203,6 @@
return;
}
- if (!GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
- return;
- }
-
StrictMock<MockHttp3DebugVisitor> debug_visitor;
session_.set_debug_visitor(&debug_visitor);
@@ -3265,11 +3261,9 @@
"03" // length of value
"626172"); // value "bar"
- if (GetQuicReloadableFlag(quic_parse_accept_ch_frame)) {
- AcceptChFrame expected_accept_ch_frame{{{"foo", "bar"}}};
- EXPECT_CALL(debug_visitor,
- OnAcceptChFrameReceivedViaAlps(expected_accept_ch_frame));
- }
+ AcceptChFrame expected_accept_ch_frame{{{"foo", "bar"}}};
+ EXPECT_CALL(debug_visitor,
+ OnAcceptChFrameReceivedViaAlps(expected_accept_ch_frame));
auto error = session_.OnAlpsData(
reinterpret_cast<const uint8_t*>(serialized_accept_ch_frame.data()),
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 40f8502..d2a66e0 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -46,7 +46,6 @@
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_on_stream_reset, true)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_willing_and_able_to_write2, true)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_h3_datagram, false)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_parse_accept_ch_frame, true)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_pass_path_response_to_validator, false)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_require_handshake_confirmation, false)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_send_goaway_with_connection_close, true)