diff --git a/quiche/quic/core/quic_framer.cc b/quiche/quic/core/quic_framer.cc
index 73f79c1..85b5f0c 100644
--- a/quiche/quic/core/quic_framer.cc
+++ b/quiche/quic/core/quic_framer.cc
@@ -432,11 +432,8 @@
       alternative_decrypter_latch_(false),
       perspective_(perspective),
       validate_flags_(true),
-      process_timestamps_(false),
-      peer_max_receive_timestamps_per_ack_(
-          std::numeric_limits<uint32_t>::max()),
-      local_max_receive_timestamps_per_ack_(
-          std::numeric_limits<uint32_t>::max()),
+      peer_max_receive_timestamps_per_ack_(0),
+      local_max_receive_timestamps_per_ack_(0),
       peer_receive_timestamps_exponent_(0),
       local_receive_timestamps_exponent_(0),
       process_reset_stream_at_(false),
@@ -3105,7 +3102,7 @@
         }
         case IETF_ACK_RECEIVE_TIMESTAMPS:
         case IETF_ACK_RECEIVE_TIMESTAMPS_ECN:
-          if (!process_timestamps_) {
+          if (local_max_receive_timestamps_per_ack_ == 0) {
             set_detailed_error("Unsupported frame type.");
             QUIC_DLOG(WARNING)
                 << ENDPOINT << "IETF_ACK_RECEIVE_TIMESTAMPS not supported";
@@ -3835,7 +3832,7 @@
   }
 
   if (AckHasTimestamps(frame_type)) {
-    QUICHE_DCHECK(process_timestamps_);
+    QUICHE_DCHECK_GT(local_max_receive_timestamps_per_ack_, 0u);
     if (!ProcessIetfTimestampsInAckFrame(ack_frame->largest_acked, reader)) {
       return false;
     }
diff --git a/quiche/quic/core/quic_framer.h b/quiche/quic/core/quic_framer.h
index c0c9f2f..3ca0db2 100644
--- a/quiche/quic/core/quic_framer.h
+++ b/quiche/quic/core/quic_framer.h
@@ -325,11 +325,6 @@
   // TODO(b/132632465): Remove the const in timestamp-related setters once
   // timestamps are negotiated via transport params.
 
-  // Allows enabling or disabling of timestamp processing and serialization.
-  void set_process_timestamps(bool process_timestamps) const {
-    process_timestamps_ = process_timestamps;
-  }
-
   // Sets the max number of receive timestamps to parse per ACK frame.
   void set_local_max_receive_timestamps_per_ack(uint32_t max_timestamps) const {
     local_max_receive_timestamps_per_ack_ = max_timestamps;
@@ -1126,7 +1121,6 @@
   // IETF_ACK_RECEIVE_TIMESTAMPS frame type.
   bool UseIetfAckWithReceiveTimestamp(const QuicAckFrame& frame) const {
     return VersionIsIetfQuic(version_.transport_version) &&
-           process_timestamps_ &&
            std::min<uint64_t>(peer_max_receive_timestamps_per_ack_,
                               frame.received_packet_times.size()) > 0;
   }
@@ -1167,10 +1161,6 @@
   bool validate_flags_;
   // The diversification nonce from the last received packet.
   DiversificationNonce last_nonce_;
-  // If true, send and process timestamps in the ACK frame.
-  // TODO(ianswett): Remove the mutables once set_process_timestamps and
-  // set_receive_timestamp_exponent_ aren't const.
-  mutable bool process_timestamps_;
   // The max number of receive timestamps to send per ACK frame.
   mutable uint32_t peer_max_receive_timestamps_per_ack_;
   // The max number of receive timestamps to allow in an incoming ACK frame.
@@ -1183,7 +1173,7 @@
   bool process_reset_stream_at_;
   // The creation time of the connection, used to calculate timestamps.
   QuicTime creation_time_;
-  // The last timestamp received if process_timestamps_ is true.
+  // The last timestamp received if local_max_receive_timestamps_per_ack_ > 0.
   QuicTime::Delta last_timestamp_;
 
   // Whether IETF QUIC Key Update is supported on this connection.
diff --git a/quiche/quic/core/quic_framer_test.cc b/quiche/quic/core/quic_framer_test.cc
index 547c70a..b6da809 100644
--- a/quiche/quic/core/quic_framer_test.cc
+++ b/quiche/quic/core/quic_framer_test.cc
@@ -3683,7 +3683,7 @@
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(fragments));
 
-  framer_.set_process_timestamps(true);
+  framer_.set_local_max_receive_timestamps_per_ack(1000);
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
 
   EXPECT_THAT(framer_.error(), IsQuicNoError());
@@ -3778,7 +3778,7 @@
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(packet_ietf));
 
-  framer_.set_process_timestamps(true);
+  framer_.set_local_max_receive_timestamps_per_ack(1000);
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
   EXPECT_THAT(framer_.error(), IsQuicNoError());
   ASSERT_TRUE(visitor_.header_.get());
@@ -3858,7 +3858,7 @@
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(packet_ietf));
 
-  framer_.set_process_timestamps(true);
+  framer_.set_local_max_receive_timestamps_per_ack(1000);
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
   EXPECT_THAT(framer_.error(), IsQuicNoError());
   ASSERT_TRUE(visitor_.header_.get());
@@ -3930,7 +3930,7 @@
       AssemblePacketFromFragments(packet_ietf));
 
   framer_.set_local_receive_timestamps_exponent(3);
-  framer_.set_process_timestamps(true);
+  framer_.set_local_max_receive_timestamps_per_ack(1000);
   EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
   EXPECT_THAT(framer_.error(), IsQuicNoError());
   ASSERT_TRUE(visitor_.header_.get());
@@ -3993,7 +3993,7 @@
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(packet_ietf));
 
-  framer_.set_process_timestamps(true);
+  framer_.set_local_max_receive_timestamps_per_ack(1000);
   EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
   EXPECT_TRUE(absl::StartsWith(framer_.detailed_error(),
                                "Receive delta largest acked too high."));
@@ -4049,7 +4049,7 @@
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(packet_ietf));
 
-  framer_.set_process_timestamps(true);
+  framer_.set_local_max_receive_timestamps_per_ack(1000);
   EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
   EXPECT_TRUE(absl::StartsWith(framer_.detailed_error(),
                                "Receive timestamp delta too high."));
@@ -4103,7 +4103,7 @@
   std::unique_ptr<QuicEncryptedPacket> encrypted(
       AssemblePacketFromFragments(packet_ietf));
 
-  framer_.set_process_timestamps(true);
+  framer_.set_local_max_receive_timestamps_per_ack(1000);
   EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
   EXPECT_TRUE(absl::StartsWith(framer_.detailed_error(),
                                "Receive timestamp count too high."));
@@ -6642,7 +6642,6 @@
   };
   // clang-format on
 
-  framer_.set_process_timestamps(true);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
@@ -6744,7 +6743,6 @@
   };
   // clang-format on
 
-  framer_.set_process_timestamps(true);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
@@ -6838,7 +6836,6 @@
   };
   // clang-format on
 
-  framer_.set_process_timestamps(true);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
@@ -6940,7 +6937,6 @@
   };
   // clang-format on
 
-  framer_.set_process_timestamps(true);
   framer_.set_peer_max_receive_timestamps_per_ack(4);
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
   ASSERT_TRUE(data != nullptr);
@@ -7048,7 +7044,6 @@
   };
   // clang-format on
 
-  framer_.set_process_timestamps(true);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   framer_.set_peer_receive_timestamps_exponent(3);
   std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -7065,7 +7060,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
 
@@ -7119,7 +7113,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(2);
   framer_.set_peer_max_receive_timestamps_per_ack(2);
 
@@ -7168,7 +7161,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   framer_.set_local_receive_timestamps_exponent(3);
@@ -7218,7 +7210,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   framer_.set_local_receive_timestamps_exponent(3);
@@ -7273,7 +7264,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   framer_.set_local_receive_timestamps_exponent(3);
@@ -7323,7 +7313,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
 
@@ -7377,7 +7366,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
 
@@ -7424,7 +7412,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   framer_.set_peer_receive_timestamps_exponent(3);
 
@@ -7455,7 +7442,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   framer_.set_local_receive_timestamps_exponent(3);
@@ -7501,7 +7487,6 @@
   framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
                            std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
   framer_.SetKeyUpdateSupportForConnection(true);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8192);
   framer_.set_peer_max_receive_timestamps_per_ack(8192);
   framer_.set_local_receive_timestamps_exponent(3);
@@ -7544,7 +7529,6 @@
     return;
   }
   SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
-  framer_.set_process_timestamps(true);
   framer_.set_local_max_receive_timestamps_per_ack(8);
   framer_.set_peer_max_receive_timestamps_per_ack(8);
   framer_.set_local_receive_timestamps_exponent(3);
@@ -7594,6 +7578,89 @@
   EXPECT_TRUE(processed_ack_frame.received_packet_times.empty());
 }
 
+TEST_P(QuicFramerTest, AckReceiveTimestampsDisabledByDefault) {
+  if (!VersionIsIetfQuic(framer_.transport_version())) {
+    return;
+  }
+  SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
+  framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
+                           std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
+  framer_.SetKeyUpdateSupportForConnection(true);
+
+  // Do NOT configure peer_max_receive_timestamps_per_ack or
+  // local_max_receive_timestamps_per_ack. They should default to 0.
+
+  QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
+  QuicPacketHeader header;
+  header.destination_connection_id = FramerTestConnectionId();
+  header.reset_flag = false;
+  header.version_flag = false;
+  header.packet_number = kPacketNumber;
+
+  QuicAckFrame ack_frame = InitAckFrame(kSmallLargestObserved);
+  ack_frame.received_packet_times = PacketTimeVector{
+      {kSmallLargestObserved - 5, CreationTimePlus((0x29ff << 3))},
+      {kSmallLargestObserved - 4, CreationTimePlus((0x29ff << 3))},
+  };
+  ack_frame.ack_delay_time = QuicTime::Delta::Zero();
+  QuicFrames frames = {QuicFrame(&ack_frame)};
+
+  std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
+  ASSERT_TRUE(data != nullptr);
+  std::unique_ptr<QuicEncryptedPacket> encrypted(
+      EncryptPacketWithTagAndPhase(*data, 0, false));
+  ASSERT_TRUE(encrypted);
+  QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_SERVER);
+  EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
+  EXPECT_THAT(framer_.error(), IsQuicNoError());
+
+  const QuicAckFrame& frame = *visitor_.ack_frames_[0];
+  // Timestamps should not be sent.
+  EXPECT_TRUE(frame.received_packet_times.empty());
+}
+
+TEST_P(QuicFramerTest, AckReceiveTimestampsErrorByDefault) {
+  if (!VersionIsIetfQuic(framer_.transport_version())) {
+    return;
+  }
+  SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
+  framer_.InstallDecrypter(ENCRYPTION_FORWARD_SECURE,
+                           std::make_unique<StrictTaggingDecrypter>(/*key=*/0));
+  framer_.SetKeyUpdateSupportForConnection(true);
+
+  // Configure peer_max_receive_timestamps_per_ack on the client side so it
+  // generates a packet with timestamps.
+  framer_.set_peer_max_receive_timestamps_per_ack(8);
+
+  QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
+  QuicPacketHeader header;
+  header.destination_connection_id = FramerTestConnectionId();
+  header.reset_flag = false;
+  header.version_flag = false;
+  header.packet_number = kPacketNumber;
+
+  QuicAckFrame ack_frame = InitAckFrame(kSmallLargestObserved);
+  ack_frame.received_packet_times = PacketTimeVector{
+      {kSmallLargestObserved - 5, CreationTimePlus((0x29ff << 3))},
+      {kSmallLargestObserved - 4, CreationTimePlus((0x29ff << 3))},
+  };
+  ack_frame.ack_delay_time = QuicTime::Delta::Zero();
+  QuicFrames frames = {QuicFrame(&ack_frame)};
+
+  std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
+  ASSERT_TRUE(data != nullptr);
+  std::unique_ptr<QuicEncryptedPacket> encrypted(
+      EncryptPacketWithTagAndPhase(*data, 0, false));
+  ASSERT_TRUE(encrypted);
+
+  QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_SERVER);
+  // local_max_receive_timestamps_per_ack should be 0 by default.
+
+  EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
+  EXPECT_THAT(framer_.error(), IsError(QUIC_INVALID_FRAME_DATA));
+  EXPECT_EQ("Unsupported frame type.", framer_.detailed_error());
+}
+
 TEST_P(QuicFramerTest, BuildAckFramePacketOneAckBlockMaxLength) {
   QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
   QuicPacketHeader header;
@@ -15830,7 +15897,7 @@
   // - The timestamp count always has to be included, meaning 1 extra byte.
   // - The timestamps themselves are truncatable, but the range specified above
   //   is 3 bytes.
-  framer_.set_process_timestamps(true);
+  framer_.set_peer_max_receive_timestamps_per_ack(1000);
   ack_frame.ecn_counters = std::nullopt;
   EXPECT_THAT(GetAckFrameSizes(ack_frame), ElementsAre(9, 12));
   ack_frame.ecn_counters = QuicEcnCounts(1, 2, 3);
@@ -15877,7 +15944,7 @@
   // - The timestamps themselves are truncatable 3 extra bytes.
   // This means that the minimum size is now 12 bytes; the extra 3 bytes of
   // timestamps will be truncated before the extra 2 bytes of ACK ranges.
-  framer_.set_process_timestamps(true);
+  framer_.set_peer_max_receive_timestamps_per_ack(1000);
   ack_frame.received_packet_times.push_back(
       {QuicPacketNumber(3), CreationTimePlus(11)});
   EXPECT_THAT(GetAckFrameSizes(ack_frame), ElementsAre(12, 14, 17));
