Deprecate --gfe2_restart_flag_quic_server_temporarily_retain_tls_zero_rtt_keys

PiperOrigin-RevId: 357759506
Change-Id: Iaef5f5f31c58b3f437560187edd255ee99eff3d3
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index e63b953..4d16aa4 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -1138,15 +1138,13 @@
   if (level == ENCRYPTION_FORWARD_SECURE &&
       !have_decrypted_first_one_rtt_packet_) {
     have_decrypted_first_one_rtt_packet_ = true;
-    if (GetQuicRestartFlag(quic_server_temporarily_retain_tls_zero_rtt_keys) &&
-        version().UsesTls() && perspective_ == Perspective::IS_SERVER) {
+    if (version().UsesTls() && perspective_ == Perspective::IS_SERVER) {
       // Servers MAY temporarily retain 0-RTT keys to allow decrypting reordered
       // packets without requiring their contents to be retransmitted with 1-RTT
       // keys. After receiving a 1-RTT packet, servers MUST discard 0-RTT keys
       // within a short time; the RECOMMENDED time period is three times the
       // Probe Timeout.
       // https://quicwg.org/base-drafts/draft-ietf-quic-tls.html#name-discarding-0-rtt-keys
-      QUIC_RESTART_FLAG_COUNT(quic_server_temporarily_retain_tls_zero_rtt_keys);
       discard_zero_rtt_decryption_keys_alarm_->Set(
           clock_->ApproximateNow() + sent_packet_manager_.GetPtoDelay() * 3);
     }
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 30d9144..74534df 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -13004,50 +13004,7 @@
 }
 
 TEST_P(QuicConnectionTest,
-       ServerReceivedZeroRttPacketAfterOneRttPacketWithoutRetainedKey) {
-  SetQuicRestartFlag(quic_server_temporarily_retain_tls_zero_rtt_keys, false);
-  if (!connection_.version().UsesTls()) {
-    return;
-  }
-
-  set_perspective(Perspective::IS_SERVER);
-  SetDecrypter(ENCRYPTION_ZERO_RTT,
-               std::make_unique<NullDecrypter>(Perspective::IS_SERVER));
-
-  EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
-  ProcessDataPacketAtLevel(1, !kHasStopWaiting, ENCRYPTION_ZERO_RTT);
-
-  // Finish handshake.
-  connection_.SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
-  notifier_.NeuterUnencryptedData();
-  connection_.NeuterUnencryptedPackets();
-  connection_.OnHandshakeComplete();
-  EXPECT_CALL(visitor_, GetHandshakeState())
-      .WillRepeatedly(Return(HANDSHAKE_COMPLETE));
-  // When quic_server_temporarily_retain_tls_zero_rtt_keys=false,
-  // TlsServerHandshaker::FinishHandshake will remove the ENCRYPTION_ZERO_RTT
-  // decrypter, simulate that here:
-  connection_.RemoveDecrypter(ENCRYPTION_ZERO_RTT);
-
-  EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
-  ProcessDataPacketAtLevel(3, !kHasStopWaiting, ENCRYPTION_FORWARD_SECURE);
-  EXPECT_FALSE(connection_.GetDiscardZeroRttDecryptionKeysAlarm()->IsSet());
-  EXPECT_EQ(
-      0u,
-      connection_.GetStats()
-          .num_tls_server_zero_rtt_packets_received_after_discarding_decrypter);
-
-  EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(0);
-  ProcessDataPacketAtLevel(2, !kHasStopWaiting, ENCRYPTION_ZERO_RTT);
-  EXPECT_EQ(
-      1u,
-      connection_.GetStats()
-          .num_tls_server_zero_rtt_packets_received_after_discarding_decrypter);
-}
-
-TEST_P(QuicConnectionTest,
        ServerReceivedZeroRttPacketAfterOneRttPacketWithRetainedKey) {
-  SetQuicRestartFlag(quic_server_temporarily_retain_tls_zero_rtt_keys, true);
   if (!connection_.version().UsesTls()) {
     return;
   }
@@ -13167,7 +13124,6 @@
 
 TEST_P(QuicConnectionTest,
        ServerReceivedZeroRttWithHigherPacketNumberThanOneRttAndFlagDisabled) {
-  SetQuicRestartFlag(quic_server_temporarily_retain_tls_zero_rtt_keys, true);
   SetQuicReloadableFlag(
       quic_close_connection_on_0rtt_packet_number_higher_than_1rtt, false);
   if (!connection_.version().UsesTls()) {
@@ -13223,7 +13179,6 @@
 
 TEST_P(QuicConnectionTest,
        ServerReceivedZeroRttWithHigherPacketNumberThanOneRtt) {
-  SetQuicRestartFlag(quic_server_temporarily_retain_tls_zero_rtt_keys, true);
   SetQuicReloadableFlag(
       quic_close_connection_on_0rtt_packet_number_higher_than_1rtt, true);
   if (!connection_.version().UsesTls()) {
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 7b6bd95..82c923a 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -69,7 +69,6 @@
 QUIC_FLAG(FLAGS_quic_restart_flag_quic_dispatcher_support_multiple_cid_per_connection_v2, true)
 QUIC_FLAG(FLAGS_quic_restart_flag_quic_enable_zero_rtt_for_tls_v2, true)
 QUIC_FLAG(FLAGS_quic_restart_flag_quic_offload_pacing_to_usps2, false)
-QUIC_FLAG(FLAGS_quic_restart_flag_quic_server_temporarily_retain_tls_zero_rtt_keys, true)
 QUIC_FLAG(FLAGS_quic_restart_flag_quic_session_tickets_always_enabled, true)
 QUIC_FLAG(FLAGS_quic_restart_flag_quic_support_release_time_for_gso, false)
 QUIC_FLAG(FLAGS_quic_restart_flag_quic_testonly_default_false, false)
diff --git a/quic/core/tls_server_handshaker.cc b/quic/core/tls_server_handshaker.cc
index 29ffa58..81c7559 100644
--- a/quic/core/tls_server_handshaker.cc
+++ b/quic/core/tls_server_handshaker.cc
@@ -557,15 +557,11 @@
   handshaker_delegate()->OnTlsHandshakeComplete();
   handshaker_delegate()->DiscardOldEncryptionKey(ENCRYPTION_HANDSHAKE);
   handshaker_delegate()->DiscardOldDecryptionKey(ENCRYPTION_HANDSHAKE);
-  if (!GetQuicRestartFlag(quic_server_temporarily_retain_tls_zero_rtt_keys)) {
-    handshaker_delegate()->DiscardOldDecryptionKey(ENCRYPTION_ZERO_RTT);
-  } else {
-    // ENCRYPTION_ZERO_RTT decryption key is not discarded here as "Servers MAY
-    // temporarily retain 0-RTT keys to allow decrypting reordered packets
-    // without requiring their contents to be retransmitted with 1-RTT keys."
-    // It is expected that QuicConnection will discard the key at an
-    // appropriate time.
-  }
+  // ENCRYPTION_ZERO_RTT decryption key is not discarded here as "Servers MAY
+  // temporarily retain 0-RTT keys to allow decrypting reordered packets
+  // without requiring their contents to be retransmitted with 1-RTT keys."
+  // It is expected that QuicConnection will discard the key at an
+  // appropriate time.
 }
 
 QuicAsyncStatus TlsServerHandshaker::VerifyCertChain(