Consider address has been validated by successfully processing a HANDSHAKE or 1-RTT packet.

Protected by FLAGS_quic_reloadable_flag_quic_fix_address_validation.

PiperOrigin-RevId: 336756590
Change-Id: I9b28e79d68de8f511c24d6eab524db50bd616a63
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 77fd2c5..cfb6b3e 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -1128,10 +1128,20 @@
 void QuicConnection::OnDecryptedPacket(EncryptionLevel level) {
   last_decrypted_packet_level_ = level;
   last_packet_decrypted_ = true;
-  if (EnforceAntiAmplificationLimit() &&
-      last_decrypted_packet_level_ >= ENCRYPTION_HANDSHAKE) {
-    // Address is validated by successfully processing a HANDSHAKE packet.
-    address_validated_ = true;
+  if (EnforceAntiAmplificationLimit()) {
+    bool address_validated =
+        last_decrypted_packet_level_ >= ENCRYPTION_HANDSHAKE;
+    if (GetQuicReloadableFlag(quic_fix_address_validation)) {
+      QUIC_RELOADABLE_FLAG_COUNT(quic_fix_address_validation);
+      address_validated =
+          (last_decrypted_packet_level_ == ENCRYPTION_HANDSHAKE ||
+           last_decrypted_packet_level_ == ENCRYPTION_FORWARD_SECURE);
+    }
+    if (address_validated) {
+      // Address is validated by successfully processing a HANDSHAKE or 1-RTT
+      // packet.
+      address_validated_ = true;
+    }
   }
   idle_network_detector_.OnPacketReceived(time_of_last_received_packet_);