diff --git a/quic/core/crypto/quic_crypto_client_config.cc b/quic/core/crypto/quic_crypto_client_config.cc
index 4400fea..3da127a 100644
--- a/quic/core/crypto/quic_crypto_client_config.cc
+++ b/quic/core/crypto/quic_crypto_client_config.cc
@@ -959,8 +959,9 @@
   return ssl_ctx_.get();
 }
 
-void QuicCryptoClientConfig::SetChannelIDSource(ChannelIDSource* source) {
-  channel_id_source_.reset(source);
+void QuicCryptoClientConfig::SetChannelIDSource(
+    std::unique_ptr<ChannelIDSource> source) {
+  channel_id_source_ = std::move(source);
 }
 
 void QuicCryptoClientConfig::InitializeFrom(
diff --git a/quic/core/crypto/quic_crypto_client_config.h b/quic/core/crypto/quic_crypto_client_config.h
index c50c97d..d4b7150 100644
--- a/quic/core/crypto/quic_crypto_client_config.h
+++ b/quic/core/crypto/quic_crypto_client_config.h
@@ -318,9 +318,8 @@
 
   // SetChannelIDSource sets a ChannelIDSource that will be called, when the
   // server supports channel IDs, to obtain a channel ID for signing a message
-  // proving possession of the channel ID. This object takes ownership of
-  // |source|.
-  void SetChannelIDSource(ChannelIDSource* source);
+  // proving possession of the channel ID.
+  void SetChannelIDSource(std::unique_ptr<ChannelIDSource> source);
 
   // Initialize the CachedState from |canonical_crypto_config| for the
   // |canonical_server_id| as the initial CachedState for |server_id|. We will
diff --git a/quic/test_tools/crypto_test_utils.cc b/quic/test_tools/crypto_test_utils.cc
index f20878f..78bbc4e 100644
--- a/quic/test_tools/crypto_test_utils.cc
+++ b/quic/test_tools/crypto_test_utils.cc
@@ -211,9 +211,10 @@
 // argument to GetChannelIDKey is nullptr.
 class AsyncTestChannelIDSource : public ChannelIDSource, public CallbackSource {
  public:
-  // Takes ownership of |sync_source|, a synchronous ChannelIDSource.
-  explicit AsyncTestChannelIDSource(ChannelIDSource* sync_source)
-      : sync_source_(sync_source) {}
+  // |sync_source| is a synchronous ChannelIDSource.
+  explicit AsyncTestChannelIDSource(
+      std::unique_ptr<ChannelIDSource> sync_source)
+      : sync_source_(std::move(sync_source)) {}
   ~AsyncTestChannelIDSource() override {}
 
   // ChannelIDSource implementation.
@@ -447,12 +448,13 @@
                                        TlsClientHandshaker::CreateSslCtx());
   AsyncTestChannelIDSource* async_channel_id_source = nullptr;
   if (options.channel_id_enabled) {
-    ChannelIDSource* source = ChannelIDSourceForTesting();
+    std::unique_ptr<ChannelIDSource> source = ChannelIDSourceForTesting();
     if (options.channel_id_source_async) {
-      async_channel_id_source = new AsyncTestChannelIDSource(source);
-      source = async_channel_id_source;
+      auto temp = QuicMakeUnique<AsyncTestChannelIDSource>(std::move(source));
+      async_channel_id_source = temp.get();
+      source = std::move(temp);
     }
-    crypto_config.SetChannelIDSource(source);
+    crypto_config.SetChannelIDSource(std::move(source));
   }
   if (!options.token_binding_params.empty()) {
     crypto_config.tb_key_params = options.token_binding_params;
@@ -919,8 +921,8 @@
   return *parsed;
 }
 
-ChannelIDSource* ChannelIDSourceForTesting() {
-  return new TestChannelIDSource();
+std::unique_ptr<ChannelIDSource> ChannelIDSourceForTesting() {
+  return QuicMakeUnique<TestChannelIDSource>();
 }
 
 void MovePackets(PacketSavingConnection* source_conn,
diff --git a/quic/test_tools/crypto_test_utils.h b/quic/test_tools/crypto_test_utils.h
index c70747f..5bb4b4e 100644
--- a/quic/test_tools/crypto_test_utils.h
+++ b/quic/test_tools/crypto_test_utils.h
@@ -226,7 +226,7 @@
 // deterministically based on the hostname given in the GetChannelIDKey call.
 // This ChannelIDSource works in synchronous mode, i.e., its GetChannelIDKey
 // method never returns QUIC_PENDING.
-ChannelIDSource* ChannelIDSourceForTesting();
+std::unique_ptr<ChannelIDSource> ChannelIDSourceForTesting();
 
 // MovePackets parses crypto handshake messages from packet number
 // |*inout_packet_index| through to the last packet (or until a packet fails
diff --git a/quic/tools/quic_client_base.h b/quic/tools/quic_client_base.h
index 261fc2b..6ad326e 100644
--- a/quic/tools/quic_client_base.h
+++ b/quic/tools/quic_client_base.h
@@ -133,10 +133,9 @@
 
   // SetChannelIDSource sets a ChannelIDSource that will be called, when the
   // server supports channel IDs, to obtain a channel ID for signing a message
-  // proving possession of the channel ID. This object takes ownership of
-  // |source|.
-  void SetChannelIDSource(ChannelIDSource* source) {
-    crypto_config_.SetChannelIDSource(source);
+  // proving possession of the channel ID.
+  void SetChannelIDSource(std::unique_ptr<ChannelIDSource> source) {
+    crypto_config_.SetChannelIDSource(std::move(source));
   }
 
   const ParsedQuicVersionVector& supported_versions() const {
