diff --git a/quiche/quic/core/quic_connection_alarms.cc b/quiche/quic/core/quic_connection_alarms.cc
index 2ccbe42..d1361d9 100644
--- a/quiche/quic/core/quic_connection_alarms.cc
+++ b/quiche/quic/core/quic_connection_alarms.cc
@@ -45,110 +45,6 @@
   QuicConnectionAlarmsDelegate* connection_;
 };
 
-// An alarm that is scheduled to send an ack if a timeout occurs.
-class AckAlarmDelegate : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  void OnAlarm() override { connection_->OnAckAlarm(); }
-};
-
-// This alarm will be scheduled any time a data-bearing packet is sent out.
-// When the alarm goes off, the connection checks to see if the oldest packets
-// have been acked, and retransmit them if they have not.
-class RetransmissionAlarmDelegate : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  void OnAlarm() override { connection_->OnRetransmissionAlarm(); }
-};
-
-// An alarm that is scheduled when the SentPacketManager requires a delay
-// before sending packets and fires when the packet may be sent.
-class SendAlarmDelegate : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  void OnAlarm() override { connection_->OnSendAlarm(); }
-};
-
-class MtuDiscoveryAlarmDelegate : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  void OnAlarm() override { connection_->OnMtuDiscoveryAlarm(); }
-};
-
-class ProcessUndecryptablePacketsAlarmDelegate
-    : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  void OnAlarm() override { connection_->OnProcessUndecryptablePacketsAlarm(); }
-};
-
-class DiscardPreviousOneRttKeysAlarmDelegate
-    : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  void OnAlarm() override { connection_->OnDiscardPreviousOneRttKeysAlarm(); }
-};
-
-class DiscardZeroRttDecryptionKeysAlarmDelegate
-    : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  void OnAlarm() override {
-    connection_->OnDiscardZeroRttDecryptionKeysAlarm();
-  }
-};
-
-class MultiPortProbingAlarmDelegate : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  void OnAlarm() override {
-    QUIC_DLOG(INFO) << "Alternative path probing alarm fired";
-    connection_->MaybeProbeMultiPortPath();
-  }
-};
-
-class IdleDetectorAlarmDelegate : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  IdleDetectorAlarmDelegate(const IdleDetectorAlarmDelegate&) = delete;
-  IdleDetectorAlarmDelegate& operator=(const IdleDetectorAlarmDelegate&) =
-      delete;
-
-  void OnAlarm() override { connection_->OnIdleDetectorAlarm(); }
-};
-
-class NetworkBlackholeDetectorAlarmDelegate
-    : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  NetworkBlackholeDetectorAlarmDelegate(
-      const NetworkBlackholeDetectorAlarmDelegate&) = delete;
-  NetworkBlackholeDetectorAlarmDelegate& operator=(
-      const NetworkBlackholeDetectorAlarmDelegate&) = delete;
-
-  void OnAlarm() override { connection_->OnNetworkBlackholeDetectorAlarm(); }
-};
-
-class PingAlarmDelegate : public QuicConnectionAlarmDelegate {
- public:
-  using QuicConnectionAlarmDelegate::QuicConnectionAlarmDelegate;
-
-  PingAlarmDelegate(const PingAlarmDelegate&) = delete;
-  PingAlarmDelegate& operator=(const PingAlarmDelegate&) = delete;
-
-  void OnAlarm() override { connection_->OnPingAlarm(); }
-};
-
 class MultiplexerAlarmDelegate : public QuicAlarm::Delegate {
  public:
   explicit MultiplexerAlarmDelegate(QuicAlarmMultiplexer* multiplexer)
