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