Deprecate gfe2_reloadable_flag_quic_encrypted_control_frames.
Note the chrome_value of this flag is false, and failed tests (with the flag flipped) got fixed in https://chromium-review.googlesource.com/c/chromium/src/+/2933982.
PiperOrigin-RevId: 385205431
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index 5d5c71a..c42b8ff 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -1501,61 +1501,6 @@
EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
}
-TEST_P(QuicSpdySessionTestServer,
- HandshakeUnblocksFlowControlBlockedCryptoStream) {
- if (QuicVersionUsesCryptoFrames(transport_version()) ||
- connection_->encrypted_control_frames()) {
- // QUIC version 47 onwards uses CRYPTO frames for the handshake, so this
- // test doesn't make sense for those versions. With
- // use_encryption_level_context, control frames can only be sent when
- // encryption gets established, do not send BLOCKED for crypto streams.
- return;
- }
- // Test that if the crypto stream is flow control blocked, then if the SHLO
- // contains a larger send window offset, the stream becomes unblocked.
- session_.set_writev_consumes_all_data(true);
- TestCryptoStream* crypto_stream = session_.GetMutableCryptoStream();
- EXPECT_FALSE(crypto_stream->IsFlowControlBlocked());
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
- QuicHeadersStream* headers_stream =
- QuicSpdySessionPeer::GetHeadersStream(&session_);
- EXPECT_FALSE(headers_stream->IsFlowControlBlocked());
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
- EXPECT_CALL(*connection_, SendControlFrame(_))
- .WillOnce(Invoke(&ClearControlFrame));
- for (QuicStreamId i = 0; !crypto_stream->IsFlowControlBlocked() && i < 1000u;
- i++) {
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
- QuicStreamOffset offset = crypto_stream->stream_bytes_written();
- QuicConfig config;
- CryptoHandshakeMessage crypto_message;
- config.ToHandshakeMessage(&crypto_message, transport_version());
- crypto_stream->SendHandshakeMessage(crypto_message, ENCRYPTION_INITIAL);
- char buf[1000];
- QuicDataWriter writer(1000, buf, quiche::NETWORK_BYTE_ORDER);
- crypto_stream->WriteStreamData(offset, crypto_message.size(), &writer);
- }
- EXPECT_TRUE(crypto_stream->IsFlowControlBlocked());
- EXPECT_FALSE(headers_stream->IsFlowControlBlocked());
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_TRUE(session_.IsStreamFlowControlBlocked());
- EXPECT_FALSE(session_.HasDataToWrite());
- EXPECT_TRUE(crypto_stream->HasBufferedData());
-
- // Now complete the crypto handshake, resulting in an increased flow control
- // send window.
- CompleteHandshake();
- EXPECT_TRUE(QuicSessionPeer::IsStreamWriteBlocked(
- &session_, QuicUtils::GetCryptoStreamId(transport_version())));
- // Stream is now unblocked and will no longer have buffered data.
- EXPECT_FALSE(crypto_stream->IsFlowControlBlocked());
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
-}
-
#if !defined(OS_IOS)
// This test is failing flakily for iOS bots.
// http://crbug.com/425050
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 04f4afe..7bcf5a4 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -364,10 +364,7 @@
clock_->ApproximateNow(),
&arena_,
alarm_factory_),
- encrypted_control_frames_(
- GetQuicReloadableFlag(quic_encrypted_control_frames)),
use_encryption_level_context_(
- encrypted_control_frames_ &&
GetQuicReloadableFlag(quic_use_encryption_level_context)),
path_validator_(alarm_factory_, &arena_, this, random_generator_),
most_recent_frame_type_(NUM_FRAME_TYPES) {
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 22fd83e..173f648 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -1201,8 +1201,6 @@
bool is_processing_packet() const { return framer_.is_processing_packet(); }
- bool encrypted_control_frames() const { return encrypted_control_frames_; }
-
bool use_encryption_level_context() const {
return use_encryption_level_context_;
}
@@ -2237,8 +2235,6 @@
// True if we are currently processing OnRetransmissionTimeout.
bool in_on_retransmission_time_out_ = false;
- const bool encrypted_control_frames_;
-
const bool use_encryption_level_context_;
QuicPathValidator path_validator_;
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index e70ae9f..08922c7 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -65,8 +65,6 @@
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_count_bytes_on_alternative_path_seperately, true)
// If true, do not re-arm PTO while sending application data during handshake.
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_donot_rearm_pto_on_application_data_during_handshake, true)
-// If true, do not send control frames before encryption is established.
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_encrypted_control_frames, false)
// If true, do not send stream data when PTO fires.
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_donot_pto_half_rtt_data, true)
// If true, do not write stream data and control frames in the middle of packet processing.
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index f4b88a3..dd96a57 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -866,15 +866,12 @@
TransmissionType type) {
QUICHE_DCHECK(connection()->connected())
<< ENDPOINT << "Try to write control frames when connection is closed.";
- if (connection_->encrypted_control_frames()) {
- QUIC_RELOADABLE_FLAG_COUNT(quic_encrypted_control_frames);
- if (!IsEncryptionEstablished()) {
- QUIC_BUG(quic_bug_10866_4)
- << ENDPOINT << "Tried to send control frame " << frame
- << " before encryption is established. Last decrypted level: "
- << EncryptionLevelToString(connection_->last_decrypted_level());
- return false;
- }
+ if (!IsEncryptionEstablished()) {
+ QUIC_BUG(quic_bug_10866_4)
+ << ENDPOINT << "Tried to send control frame " << frame
+ << " before encryption is established. Last decrypted level: "
+ << EncryptionLevelToString(connection_->last_decrypted_level());
+ return false;
}
SetTransmissionType(type);
QuicConnection::ScopedEncryptionLevelContext context(
diff --git a/quic/core/quic_session_test.cc b/quic/core/quic_session_test.cc
index ba5b975..e77355c 100644
--- a/quic/core/quic_session_test.cc
+++ b/quic/core/quic_session_test.cc
@@ -1528,56 +1528,6 @@
EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
}
-TEST_P(QuicSessionTestServer, HandshakeUnblocksFlowControlBlockedCryptoStream) {
- if (QuicVersionUsesCryptoFrames(GetParam().transport_version) ||
- connection_->encrypted_control_frames()) {
- // QUIC version 47 onwards uses CRYPTO frames for the handshake, so this
- // test doesn't make sense for those versions since CRYPTO frames aren't
- // flow controlled.
- return;
- }
- // Test that if the crypto stream is flow control blocked, then if the SHLO
- // contains a larger send window offset, the stream becomes unblocked.
- session_.set_writev_consumes_all_data(true);
- TestCryptoStream* crypto_stream = session_.GetMutableCryptoStream();
- EXPECT_FALSE(crypto_stream->IsFlowControlBlocked());
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
- EXPECT_CALL(*connection_, SendControlFrame(_))
- .WillOnce(Invoke(&ClearControlFrame));
- for (QuicStreamId i = 0; !crypto_stream->IsFlowControlBlocked() && i < 1000u;
- i++) {
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
- QuicStreamOffset offset = crypto_stream->stream_bytes_written();
- QuicConfig config;
- CryptoHandshakeMessage crypto_message;
- config.ToHandshakeMessage(&crypto_message, transport_version());
- crypto_stream->SendHandshakeMessage(crypto_message, ENCRYPTION_INITIAL);
- char buf[1000];
- QuicDataWriter writer(1000, buf, quiche::NETWORK_BYTE_ORDER);
- crypto_stream->WriteStreamData(offset, crypto_message.size(), &writer);
- }
- EXPECT_TRUE(crypto_stream->IsFlowControlBlocked());
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_TRUE(session_.IsStreamFlowControlBlocked());
- EXPECT_FALSE(session_.HasDataToWrite());
- EXPECT_TRUE(crypto_stream->HasBufferedData());
-
- // Now complete the crypto handshake, resulting in an increased flow control
- // send window.
- CompleteHandshake();
- EXPECT_TRUE(QuicSessionPeer::IsStreamWriteBlocked(
- &session_,
- QuicUtils::GetCryptoStreamId(connection_->transport_version())));
- // Stream is now unblocked and will no longer have buffered data.
- EXPECT_FALSE(crypto_stream->IsFlowControlBlocked());
- EXPECT_FALSE(session_.IsConnectionFlowControlBlocked());
- EXPECT_FALSE(session_.IsStreamFlowControlBlocked());
-}
-
TEST_P(QuicSessionTestServer, ConnectionFlowControlAccountingRstOutOfOrder) {
CompleteHandshake();
// Test that when we receive an out of order stream RST we correctly adjust