diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 1272359..4a21277 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -1034,13 +1034,10 @@
     // Address is validated by successfully processing a HANDSHAKE packet.
     address_validated_ = true;
   }
-  if (extend_idle_time_on_decryptable_packets_) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_extend_idle_time_on_decryptable_packets);
-    if (use_idle_network_detector_) {
-      idle_network_detector_.OnPacketReceived(time_of_last_received_packet_);
-    } else {
-      time_of_last_decryptable_packet_ = time_of_last_received_packet_;
-    }
+  if (use_idle_network_detector_) {
+    idle_network_detector_.OnPacketReceived(time_of_last_received_packet_);
+  } else {
+    time_of_last_decryptable_packet_ = time_of_last_received_packet_;
   }
 
   visitor_->OnPacketDecrypted(level);
@@ -2135,14 +2132,9 @@
              << " too far from current time:"
              << clock_->ApproximateNow().ToDebuggingValue();
   }
-  if (!extend_idle_time_on_decryptable_packets_ && use_idle_network_detector_) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_use_idle_network_detector, 1, 6);
-    idle_network_detector_.OnPacketReceived(packet.receipt_time());
-  } else {
-    time_of_last_received_packet_ = packet.receipt_time();
-    QUIC_DVLOG(1) << ENDPOINT << "time of last received packet: "
-                  << packet.receipt_time().ToDebuggingValue();
-  }
+  time_of_last_received_packet_ = packet.receipt_time();
+  QUIC_DVLOG(1) << ENDPOINT << "time of last received packet: "
+                << packet.receipt_time().ToDebuggingValue();
 
   ScopedPacketFlusher flusher(this);
   if (!framer_.ProcessPacket(packet)) {
@@ -4816,12 +4808,9 @@
   if (use_idle_network_detector_) {
     return idle_network_detector_.time_of_last_received_packet();
   }
-  if (extend_idle_time_on_decryptable_packets_) {
-    DCHECK(time_of_last_decryptable_packet_ == time_of_last_received_packet_ ||
-           !last_packet_decrypted_);
-    return time_of_last_decryptable_packet_;
-  }
-  return time_of_last_received_packet_;
+  DCHECK(time_of_last_decryptable_packet_ == time_of_last_received_packet_ ||
+         !last_packet_decrypted_);
+  return time_of_last_decryptable_packet_;
 }
 
 #undef ENDPOINT  // undef for jumbo builds
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index deb5ed2..c0f722d 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -1709,9 +1709,6 @@
   const bool use_idle_network_detector_ =
       GetQuicReloadableFlag(quic_use_idle_network_detector);
 
-  const bool extend_idle_time_on_decryptable_packets_ =
-      GetQuicReloadableFlag(quic_extend_idle_time_on_decryptable_packets);
-
   const bool update_ack_alarm_in_send_all_pending_acks_ =
       GetQuicReloadableFlag(quic_update_ack_alarm_in_send_all_pending_acks);
 
diff --git a/quic/core/quic_connection_test.cc b/quic/core/quic_connection_test.cc
index 600c28a..7fc45ca 100644
--- a/quic/core/quic_connection_test.cc
+++ b/quic/core/quic_connection_test.cc
@@ -10943,28 +10943,14 @@
   peer_framer_.SetEncrypter(ENCRYPTION_FORWARD_SECURE,
                             std::make_unique<TaggingEncrypter>(tag));
   ProcessDataPacketAtLevel(1, !kHasStopWaiting, ENCRYPTION_FORWARD_SECURE);
-  if (GetQuicReloadableFlag(quic_extend_idle_time_on_decryptable_packets)) {
-    // Verify deadline does not get extended.
-    EXPECT_EQ(initial_deadline, connection_.GetTimeoutAlarm()->deadline());
-  }
-  if (GetQuicReloadableFlag(quic_extend_idle_time_on_decryptable_packets)) {
-    EXPECT_CALL(visitor_, OnConnectionClosed(_, _)).Times(1);
-  } else {
-    EXPECT_CALL(visitor_, OnConnectionClosed(_, _)).Times(0);
-  }
+  // Verify deadline does not get extended.
+  EXPECT_EQ(initial_deadline, connection_.GetTimeoutAlarm()->deadline());
+  EXPECT_CALL(visitor_, OnConnectionClosed(_, _)).Times(1);
   QuicTime::Delta delay = initial_deadline - clock_.ApproximateNow();
   clock_.AdvanceTime(delay);
-  if (GetQuicReloadableFlag(quic_extend_idle_time_on_decryptable_packets)) {
-    connection_.GetTimeoutAlarm()->Fire();
-  }
-  if (GetQuicReloadableFlag(quic_extend_idle_time_on_decryptable_packets)) {
-    // Verify connection gets closed.
-    EXPECT_FALSE(connection_.connected());
-  } else {
-    // Verify the timeout alarm deadline is updated.
-    EXPECT_TRUE(connection_.connected());
-    EXPECT_TRUE(connection_.GetTimeoutAlarm()->IsSet());
-  }
+  connection_.GetTimeoutAlarm()->Fire();
+  // Verify connection gets closed.
+  EXPECT_FALSE(connection_.connected());
 }
 
 TEST_P(QuicConnectionTest, BundleAckWithImmediateResponse) {
