diff --git a/quic/core/http/end_to_end_test.cc b/quic/core/http/end_to_end_test.cc
index a7d714a..433ae3b 100644
--- a/quic/core/http/end_to_end_test.cc
+++ b/quic/core/http/end_to_end_test.cc
@@ -5213,7 +5213,6 @@
 }
 
 TEST_P(EndToEndTest, KeyUpdateInitiatedByConfidentialityLimit) {
-  SetQuicReloadableFlag(quic_enable_aead_limits, true);
   SetQuicFlag(FLAGS_quic_key_update_confidentiality_limit, 4U);
 
   if (!version_.UsesTls()) {
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 825a0e9..bc959e7 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -283,8 +283,6 @@
       direct_peer_address_(initial_peer_address),
       active_effective_peer_migration_type_(NO_CHANGE),
       support_key_update_for_connection_(false),
-      enable_aead_limits_(GetQuicReloadableFlag(quic_enable_aead_limits) &&
-                          version().UsesTls()),
       last_packet_decrypted_(false),
       last_size_(0),
       current_packet_data_(nullptr),
@@ -381,9 +379,6 @@
   DCHECK(perspective_ == Perspective::IS_CLIENT ||
          self_address_.IsInitialized());
 
-  if (enable_aead_limits_) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_enable_aead_limits);
-  }
   if (use_encryption_level_context_) {
     QUIC_RELOADABLE_FLAG_COUNT(quic_use_encryption_level_context);
   }
@@ -2274,7 +2269,7 @@
 
   if (has_decryption_key) {
     stats_.num_failed_authentication_packets_received++;
-    if (enable_aead_limits_) {
+    if (version().UsesTls()) {
       // Should always be non-null if has_decryption_key is true.
       DCHECK(framer_.GetDecrypter(decryption_level));
       const QuicPacketCount integrity_limit =
@@ -3193,7 +3188,7 @@
 
 bool QuicConnection::MaybeHandleAeadConfidentialityLimits(
     const SerializedPacket& packet) {
-  if (!enable_aead_limits_) {
+  if (!version().UsesTls()) {
     return false;
   }
 
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 8cc3a4b..bd29005 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -1612,10 +1612,6 @@
   // key update but before the first packet has been sent.
   QuicPacketNumber lowest_packet_sent_in_current_key_phase_;
 
-  // Honor the AEAD confidentiality and integrity limits by initiating key
-  // update (if allowed) and/or closing the connection, as necessary.
-  bool enable_aead_limits_;
-
   // True if the last packet has gotten far enough in the framer to be
   // decrypted.
   bool last_packet_decrypted_;
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index e06eb86..0242cbe 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -12164,7 +12164,6 @@
     return;
   }
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
   SetQuicFlag(FLAGS_quic_key_update_confidentiality_limit, 3U);
 
   std::string error_details;
@@ -12260,7 +12259,6 @@
     return;
   }
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
   // Set key update confidentiality limit to 1 packet.
   SetQuicFlag(FLAGS_quic_key_update_confidentiality_limit, 1U);
   // Use confidentiality limit for connection close of 3 packets.
@@ -12316,7 +12314,6 @@
     return;
   }
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
   // Set key update confidentiality limit to 1 packet.
   SetQuicFlag(FLAGS_quic_key_update_confidentiality_limit, 1U);
   // Use confidentiality limit for connection close of 3 packets.
@@ -12383,7 +12380,6 @@
     return;
   }
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
   // Set key update confidentiality limit to 1 packet.
   SetQuicFlag(FLAGS_quic_key_update_confidentiality_limit, 1U);
   // Use confidentiality limit for connection close of 3 packets.
@@ -12448,8 +12444,6 @@
     return;
   }
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
-
   constexpr uint8_t correct_tag = 0x01;
   constexpr uint8_t wrong_tag = 0xFE;
   constexpr QuicPacketCount kIntegrityLimit = 3;
@@ -12481,8 +12475,6 @@
     return;
   }
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
-
   constexpr uint8_t correct_tag = 0x01;
   constexpr uint8_t wrong_tag = 0xFE;
   constexpr QuicPacketCount kIntegrityLimit = 3;
@@ -12519,8 +12511,6 @@
     return;
   }
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
-
   constexpr uint8_t correct_tag = 0x01;
   constexpr uint8_t wrong_tag = 0xFE;
   constexpr QuicPacketCount kIntegrityLimit = 4;
@@ -12572,8 +12562,6 @@
     return;
   }
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
-
   constexpr uint8_t correct_tag = 0x01;
   constexpr uint8_t wrong_tag = 0xFE;
   constexpr QuicPacketCount kIntegrityLimit = 3;
@@ -12605,7 +12593,6 @@
 
   constexpr QuicPacketCount kIntegrityLimit = 4;
 
-  QuicConnectionPeer::SetEnableAeadLimits(&connection_, true);
   TransportParameters params;
   params.key_update_not_yet_supported = false;
   QuicConfig config;
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index 7a8bde0..0edd9db 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -32,7 +32,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_do_not_clip_received_error_code, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_donot_reset_ideal_next_packet_send_time, false)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_aead_limits, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_mtu_discovery_at_server, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_server_on_wire_ping, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_encrypted_control_frames, false)
diff --git a/quic/test_tools/quic_connection_peer.cc b/quic/test_tools/quic_connection_peer.cc
index dfdc4f7..068aebe 100644
--- a/quic/test_tools/quic_connection_peer.cc
+++ b/quic/test_tools/quic_connection_peer.cc
@@ -303,12 +303,6 @@
 }
 
 // static
-void QuicConnectionPeer::SetEnableAeadLimits(QuicConnection* connection,
-                                             bool enabled) {
-  connection->enable_aead_limits_ = enabled;
-}
-
-// static
 void QuicConnectionPeer::SendConnectionClosePacket(QuicConnection* connection,
                                                    QuicErrorCode error,
                                                    const std::string& details) {
diff --git a/quic/test_tools/quic_connection_peer.h b/quic/test_tools/quic_connection_peer.h
index 889c06f..da9a4ba 100644
--- a/quic/test_tools/quic_connection_peer.h
+++ b/quic/test_tools/quic_connection_peer.h
@@ -126,7 +126,6 @@
                                   PacketHeaderFormat format);
   static void AddBytesReceived(QuicConnection* connection, size_t length);
   static void SetAddressValidated(QuicConnection* connection);
-  static void SetEnableAeadLimits(QuicConnection* connection, bool enabled);
 
   static void SendConnectionClosePacket(QuicConnection* connection,
                                         QuicErrorCode error,
