diff --git a/quiche/balsa/balsa_headers.cc b/quiche/balsa/balsa_headers.cc
index 80642c3..e6ee93c 100644
--- a/quiche/balsa/balsa_headers.cc
+++ b/quiche/balsa/balsa_headers.cc
@@ -873,8 +873,8 @@
 }
 
 bool BalsaHeaders::ForEachHeader(
-    std::function<bool(const absl::string_view key,
-                       const absl::string_view value)>
+    quiche::UnretainedCallback<bool(const absl::string_view key,
+                                    const absl::string_view value)>
         fn) const {
   int s = header_lines_.size();
   for (int i = 0; i < s; ++i) {
@@ -980,7 +980,7 @@
 void BalsaHeaders::RemoveAuthority() { RemoveAllOfHeader(kHost); }
 
 void BalsaHeaders::ApplyToCookie(
-    std::function<void(absl::string_view cookie)> f) const {
+    quiche::UnretainedCallback<void(absl::string_view cookie)> f) const {
   f(GetHeader(kCookie));
 }
 
diff --git a/quiche/balsa/balsa_headers.h b/quiche/balsa/balsa_headers.h
index 0005bb5..d0a4b6f 100644
--- a/quiche/balsa/balsa_headers.h
+++ b/quiche/balsa/balsa_headers.h
@@ -30,6 +30,7 @@
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_logging.h"
+#include "quiche/common/quiche_callbacks.h"
 
 namespace gfe2 {
 class Http2HeaderValidator;
@@ -834,9 +835,10 @@
   void DumpToString(std::string* str) const;
   std::string DebugString() const override;
 
-  bool ForEachHeader(std::function<bool(const absl::string_view key,
-                                        const absl::string_view value)>
-                         fn) const override;
+  bool ForEachHeader(
+      quiche::UnretainedCallback<bool(const absl::string_view key,
+                                      const absl::string_view value)>
+          fn) const override;
 
   void DumpToPrefixedString(const char* spaces, std::string* str) const;
 
@@ -1007,8 +1009,8 @@
   absl::string_view Authority() const override;
   void ReplaceOrAppendAuthority(absl::string_view value) override;
   void RemoveAuthority() override;
-  void ApplyToCookie(
-      std::function<void(absl::string_view cookie)> f) const override;
+  void ApplyToCookie(quiche::UnretainedCallback<void(absl::string_view cookie)>
+                         f) const override;
 
   void set_enforce_header_policy(bool enforce) override {
     enforce_header_policy_ = enforce;
diff --git a/quiche/balsa/header_api.h b/quiche/balsa/header_api.h
index 889c984..e607172 100644
--- a/quiche/balsa/header_api.h
+++ b/quiche/balsa/header_api.h
@@ -13,6 +13,7 @@
 #include "absl/strings/string_view.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_lower_case_string.h"
+#include "quiche/common/quiche_callbacks.h"
 
 namespace quiche {
 
@@ -116,9 +117,10 @@
   // Applies the argument function to each header line.  If the argument
   // function returns false, iteration stops and ForEachHeader returns false;
   // otherwise, ForEachHeader returns true.
-  virtual bool ForEachHeader(std::function<bool(const absl::string_view key,
-                                                const absl::string_view value)>
-                                 fn) const = 0;
+  virtual bool ForEachHeader(
+      quiche::UnretainedCallback<bool(const absl::string_view key,
+                                      const absl::string_view value)>
+          fn) const = 0;
 
   // Returns the upper bound byte size of the headers. This can be used to size
   // a Buffer when serializing headers.
@@ -167,7 +169,7 @@
   // cookie.data() will be nullptr. The lifetime of the cookie isn't guaranteed
   // to extend beyond this call.
   virtual void ApplyToCookie(
-      std::function<void(absl::string_view cookie)> f) const = 0;
+      quiche::UnretainedCallback<void(absl::string_view cookie)> f) const = 0;
 
   virtual size_t content_length() const = 0;
   virtual bool content_length_valid() const = 0;
diff --git a/quiche/quic/core/quic_dispatcher.cc b/quiche/quic/core/quic_dispatcher.cc
index d92ffff..70e4e6b 100644
--- a/quiche/quic/core/quic_dispatcher.cc
+++ b/quiche/quic/core/quic_dispatcher.cc
@@ -27,6 +27,7 @@
 #include "quiche/quic/platform/api/quic_logging.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/quic/platform/api/quic_stack_trace.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_text_utils.h"
 
 namespace quic {
@@ -791,7 +792,7 @@
 }
 
 void QuicDispatcher::PerformActionOnActiveSessions(
-    std::function<void(QuicSession*)> operation) const {
+    quiche::UnretainedCallback<void(QuicSession*)> operation) const {
   absl::flat_hash_set<QuicSession*> visited_session;
   visited_session.reserve(reference_counted_session_map_.size());
   for (auto const& kv : reference_counted_session_map_) {
diff --git a/quiche/quic/core/quic_dispatcher.h b/quiche/quic/core/quic_dispatcher.h
index 24602b3..82a8618 100644
--- a/quiche/quic/core/quic_dispatcher.h
+++ b/quiche/quic/core/quic_dispatcher.h
@@ -30,6 +30,7 @@
 #include "quiche/quic/core/quic_version_manager.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/common/platform/api/quiche_reference_counted.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_linked_hash_map.h"
 
 namespace quic {
@@ -163,7 +164,7 @@
 
   // Apply an operation for each session.
   void PerformActionOnActiveSessions(
-      std::function<void(QuicSession*)> operation) const;
+      quiche::UnretainedCallback<void(QuicSession*)> operation) const;
 
   // Get a snapshot of all sessions.
   std::vector<std::shared_ptr<QuicSession>> GetSessionsSnapshot() const;
diff --git a/quiche/quic/core/quic_linux_socket_utils.h b/quiche/quic/core/quic_linux_socket_utils.h
index 8d53e47..41be945 100644
--- a/quiche/quic/core/quic_linux_socket_utils.h
+++ b/quiche/quic/core/quic_linux_socket_utils.h
@@ -24,6 +24,7 @@
 #include "quiche/quic/platform/api/quic_ip_address.h"
 #include "quiche/quic/platform/api/quic_logging.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
+#include "quiche/common/quiche_callbacks.h"
 
 #ifndef SOL_UDP
 #define SOL_UDP 17
@@ -156,11 +157,13 @@
 //   QuicSocketUtils::WriteMultiplePackets(fd, &mhdr, &num_packets_sent);
 class QUIC_EXPORT_PRIVATE QuicMMsgHdr {
  public:
-  using ControlBufferInitializer = std::function<void(
+  using ControlBufferInitializer = quiche::UnretainedCallback<void(
       QuicMMsgHdr* mhdr, int i, const BufferedWrite& buffered_write)>;
   template <typename IteratorT>
-  QuicMMsgHdr(const IteratorT& first, const IteratorT& last, size_t cbuf_size,
-              ControlBufferInitializer cbuf_initializer)
+  QuicMMsgHdr(
+      const IteratorT& first, const IteratorT& last, size_t cbuf_size,
+      ControlBufferInitializer cbuf_initializer =
+          +[](quic::QuicMMsgHdr*, int, const quic::BufferedWrite&) {})
       : num_msgs_(std::distance(first, last)), cbuf_size_(cbuf_size) {
     static_assert(
         std::is_same<typename std::iterator_traits<IteratorT>::value_type,
@@ -180,9 +183,7 @@
       ++i;
 
       InitOneHeader(i, *it);
-      if (cbuf_initializer) {
-        cbuf_initializer(this, i, *it);
-      }
+      cbuf_initializer(this, i, *it);
     }
   }
 
diff --git a/quiche/quic/core/quic_linux_socket_utils_test.cc b/quiche/quic/core/quic_linux_socket_utils_test.cc
index e9d1b14..9c45662 100644
--- a/quiche/quic/core/quic_linux_socket_utils_test.cc
+++ b/quiche/quic/core/quic_linux_socket_utils_test.cc
@@ -178,7 +178,7 @@
       QuicSocketAddress(QuicIpAddress::Loopback6(), 6));
 
   QuicMMsgHdr quic_mhdr_without_cbuf(buffered_writes.begin(),
-                                     buffered_writes.end(), 0, nullptr);
+                                     buffered_writes.end(), 0);
   for (size_t i = 0; i < buffered_writes.size(); ++i) {
     const BufferedWrite& bw = buffered_writes[i];
     CheckMsghdrWithoutCbuf(&quic_mhdr_without_cbuf.mhdr()[i].msg_hdr, bw.buffer,
diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc
index 39fef52..74a0fc0 100644
--- a/quiche/quic/core/quic_session.cc
+++ b/quiche/quic/core/quic_session.cc
@@ -29,6 +29,7 @@
 #include "quiche/quic/platform/api/quic_server_stats.h"
 #include "quiche/quic/platform/api/quic_stack_trace.h"
 #include "quiche/common/platform/api/quiche_logging.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_text_utils.h"
 
 namespace quic {
@@ -2641,7 +2642,7 @@
 }
 
 void QuicSession::PerformActionOnActiveStreams(
-    std::function<bool(QuicStream*)> action) {
+    quiche::UnretainedCallback<bool(QuicStream*)> action) {
   std::vector<QuicStream*> active_streams;
   for (const auto& it : stream_map_) {
     if (!it.second->is_static() && !it.second->IsZombie()) {
@@ -2657,7 +2658,7 @@
 }
 
 void QuicSession::PerformActionOnActiveStreams(
-    std::function<bool(QuicStream*)> action) const {
+    quiche::UnretainedCallback<bool(QuicStream*)> action) const {
   for (const auto& it : stream_map_) {
     if (!it.second->is_static() && !it.second->IsZombie() &&
         !action(it.second.get())) {
diff --git a/quiche/quic/core/quic_session.h b/quiche/quic/core/quic_session.h
index d503b01..fe7e4bb 100644
--- a/quiche/quic/core/quic_session.h
+++ b/quiche/quic/core/quic_session.h
@@ -45,6 +45,7 @@
 #include "quiche/quic/platform/api/quic_flags.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
 #include "quiche/common/platform/api/quiche_mem_slice.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_linked_hash_map.h"
 
 namespace quic {
@@ -804,9 +805,10 @@
 
   // Called by applications to perform |action| on active streams.
   // Stream iteration will be stopped if action returns false.
-  void PerformActionOnActiveStreams(std::function<bool(QuicStream*)> action);
   void PerformActionOnActiveStreams(
-      std::function<bool(QuicStream*)> action) const;
+      quiche::UnretainedCallback<bool(QuicStream*)> action);
+  void PerformActionOnActiveStreams(
+      quiche::UnretainedCallback<bool(QuicStream*)> action) const;
 
   // Return the largest peer created stream id depending on directionality
   // indicated by |unidirectional|.
diff --git a/quiche/quic/qbone/platform/icmp_packet.cc b/quiche/quic/qbone/platform/icmp_packet.cc
index 3f15bb7..79df687 100644
--- a/quiche/quic/qbone/platform/icmp_packet.cc
+++ b/quiche/quic/qbone/platform/icmp_packet.cc
@@ -8,6 +8,7 @@
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/qbone/platform/internet_checksum.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_endian.h"
 
 namespace quic {
@@ -41,7 +42,7 @@
 
 void CreateIcmpPacket(in6_addr src, in6_addr dst, const icmp6_hdr& icmp_header,
                       absl::string_view body,
-                      const std::function<void(absl::string_view)>& cb) {
+                      quiche::UnretainedCallback<void(absl::string_view)> cb) {
   const size_t body_size = std::min(body.size(), kICMPv6BodyMaxSize);
   const size_t payload_size = kICMPv6HeaderSize + body_size;
 
diff --git a/quiche/quic/qbone/platform/icmp_packet.h b/quiche/quic/qbone/platform/icmp_packet.h
index c83513c..82608a7 100644
--- a/quiche/quic/qbone/platform/icmp_packet.h
+++ b/quiche/quic/qbone/platform/icmp_packet.h
@@ -12,6 +12,7 @@
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/platform/api/quic_ip_address.h"
+#include "quiche/common/quiche_callbacks.h"
 
 namespace quic {
 
@@ -20,7 +21,7 @@
 // stack allocated inside CreateIcmpPacket.
 void CreateIcmpPacket(in6_addr src, in6_addr dst, const icmp6_hdr& icmp_header,
                       absl::string_view body,
-                      const std::function<void(absl::string_view)>& cb);
+                      quiche::UnretainedCallback<void(absl::string_view)> cb);
 
 }  // namespace quic
 
diff --git a/quiche/quic/qbone/platform/tcp_packet.cc b/quiche/quic/qbone/platform/tcp_packet.cc
index e73e284..9c2f409 100644
--- a/quiche/quic/qbone/platform/tcp_packet.cc
+++ b/quiche/quic/qbone/platform/tcp_packet.cc
@@ -10,6 +10,7 @@
 #include "absl/strings/string_view.h"
 #include "quiche/quic/platform/api/quic_logging.h"
 #include "quiche/quic/qbone/platform/internet_checksum.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_endian.h"
 
 namespace quic {
@@ -31,8 +32,9 @@
 
 }  // namespace
 
-void CreateTcpResetPacket(absl::string_view original_packet,
-                          const std::function<void(absl::string_view)>& cb) {
+void CreateTcpResetPacket(
+    absl::string_view original_packet,
+    quiche::UnretainedCallback<void(absl::string_view)> cb) {
   // By the time this method is called, original_packet should be fairly
   // strongly validated. However, it's better to be more paranoid than not, so
   // here are a bunch of very obvious checks.
diff --git a/quiche/quic/qbone/platform/tcp_packet.h b/quiche/quic/qbone/platform/tcp_packet.h
index 7e9550f..bb4acd0 100644
--- a/quiche/quic/qbone/platform/tcp_packet.h
+++ b/quiche/quic/qbone/platform/tcp_packet.h
@@ -12,13 +12,15 @@
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/platform/api/quic_ip_address.h"
+#include "quiche/common/quiche_callbacks.h"
 
 namespace quic {
 
 // Creates an TCPv6 RST packet, returning a packed string representation of the
 // packet to |cb|.
-void CreateTcpResetPacket(absl::string_view original_packet,
-                          const std::function<void(absl::string_view)>& cb);
+void CreateTcpResetPacket(
+    absl::string_view original_packet,
+    quiche::UnretainedCallback<void(absl::string_view)> cb);
 
 }  // namespace quic
 
diff --git a/quiche/quic/test_tools/crypto_test_utils.cc b/quiche/quic/test_tools/crypto_test_utils.cc
index 4df4f8f..f7cf1cf 100644
--- a/quiche/quic/test_tools/crypto_test_utils.cc
+++ b/quiche/quic/test_tools/crypto_test_utils.cc
@@ -47,6 +47,7 @@
 #include "quiche/quic/test_tools/quic_test_utils.h"
 #include "quiche/quic/test_tools/simple_quic_framer.h"
 #include "quiche/quic/test_tools/test_certificates.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/test_tools/quiche_test_utils.h"
 
 namespace quic {
@@ -399,13 +400,12 @@
   }
 }
 
-bool CommunicateHandshakeMessagesUntil(PacketSavingConnection* client_conn,
-                                       QuicCryptoStream* client,
-                                       std::function<bool()> client_condition,
-                                       PacketSavingConnection* server_conn,
-                                       QuicCryptoStream* server,
-                                       std::function<bool()> server_condition,
-                                       bool process_stream_data) {
+bool CommunicateHandshakeMessagesUntil(
+    PacketSavingConnection* client_conn, QuicCryptoStream* client,
+    quiche::UnretainedCallback<bool()> client_condition,
+    PacketSavingConnection* server_conn, QuicCryptoStream* server,
+    quiche::UnretainedCallback<bool()> server_condition,
+    bool process_stream_data) {
   size_t client_next_packet_to_deliver =
       client_conn->number_of_packets_delivered_;
   size_t server_next_packet_to_deliver =
diff --git a/quiche/quic/test_tools/crypto_test_utils.h b/quiche/quic/test_tools/crypto_test_utils.h
index d650706..42738e4 100644
--- a/quiche/quic/test_tools/crypto_test_utils.h
+++ b/quiche/quic/test_tools/crypto_test_utils.h
@@ -18,6 +18,7 @@
 #include "quiche/quic/core/quic_framer.h"
 #include "quiche/quic/core/quic_packets.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
+#include "quiche/common/quiche_callbacks.h"
 
 namespace quic {
 
@@ -114,13 +115,12 @@
 // 4) Returns true if both conditions are met.
 // 5) Returns false if either connection is closed or there is no more packet to
 // deliver before both conditions are met.
-bool CommunicateHandshakeMessagesUntil(PacketSavingConnection* client_conn,
-                                       QuicCryptoStream* client,
-                                       std::function<bool()> client_condition,
-                                       PacketSavingConnection* server_conn,
-                                       QuicCryptoStream* server,
-                                       std::function<bool()> server_condition,
-                                       bool process_stream_data);
+bool CommunicateHandshakeMessagesUntil(
+    PacketSavingConnection* client_conn, QuicCryptoStream* client,
+    quiche::UnretainedCallback<bool()> client_condition,
+    PacketSavingConnection* server_conn, QuicCryptoStream* server,
+    quiche::UnretainedCallback<bool()> server_condition,
+    bool process_stream_data);
 
 // AdvanceHandshake attempts to moves messages from |client| to |server| and
 // |server| to |client|. Returns the number of messages moved.
diff --git a/quiche/quic/test_tools/quic_test_client.cc b/quiche/quic/test_tools/quic_test_client.cc
index 5835800..223ef87 100644
--- a/quiche/quic/test_tools/quic_test_client.cc
+++ b/quiche/quic/test_tools/quic_test_client.cc
@@ -29,6 +29,7 @@
 #include "quiche/quic/test_tools/quic_spdy_stream_peer.h"
 #include "quiche/quic/test_tools/quic_test_utils.h"
 #include "quiche/quic/tools/quic_url.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_text_utils.h"
 
 namespace quic {
@@ -627,17 +628,19 @@
   return push_promise_data_to_resend_.get() || !open_streams_.empty();
 }
 
-bool QuicTestClient::WaitUntil(int timeout_ms, std::function<bool()> trigger) {
+bool QuicTestClient::WaitUntil(
+    int timeout_ms,
+    absl::optional<quiche::UnretainedCallback<bool()>> trigger) {
   QuicTime::Delta timeout = QuicTime::Delta::FromMilliseconds(timeout_ms);
   const QuicClock* clock = client()->session()->connection()->clock();
   QuicTime end_waiting_time = clock->Now() + timeout;
-  while (connected() && !(trigger && trigger()) &&
+  while (connected() && !(trigger.has_value() && (*trigger)()) &&
          (timeout_ms < 0 || clock->Now() < end_waiting_time)) {
     event_loop_->RunEventLoopOnce(timeout);
     client_->WaitForEventsPostprocessing();
   }
   ReadNextResponse();
-  if (trigger && !trigger()) {
+  if (trigger.has_value() && !(*trigger)()) {
     QUIC_VLOG(1) << "Client WaitUntil returning with trigger returning false.";
     return false;
   }
@@ -839,8 +842,7 @@
 QuicTestClient::PerStreamState::PerStreamState(
     QuicRstStreamErrorCode stream_error, bool response_complete,
     bool response_headers_complete,
-    const spdy::Http2HeaderBlock& response_headers,
-    const std::string& response,
+    const spdy::Http2HeaderBlock& response_headers, const std::string& response,
     const spdy::Http2HeaderBlock& response_trailers, uint64_t bytes_read,
     uint64_t bytes_written, int64_t response_body_size)
     : stream_error(stream_error),
diff --git a/quiche/quic/test_tools/quic_test_client.h b/quiche/quic/test_tools/quic_test_client.h
index 4b95046..8d5ba85 100644
--- a/quiche/quic/test_tools/quic_test_client.h
+++ b/quiche/quic/test_tools/quic_test_client.h
@@ -17,6 +17,7 @@
 #include "quiche/quic/core/quic_packets.h"
 #include "quiche/quic/platform/api/quic_test.h"
 #include "quiche/quic/tools/quic_default_client.h"
+#include "quiche/common/quiche_callbacks.h"
 #include "quiche/common/quiche_linked_hash_map.h"
 #include "quiche/spdy/core/http2_header_block.h"
 
@@ -160,7 +161,8 @@
   void Disconnect();
   QuicSocketAddress local_address() const;
   void ClearPerRequestState();
-  bool WaitUntil(int timeout_ms, std::function<bool()> trigger);
+  bool WaitUntil(int timeout_ms,
+                 absl::optional<quiche::UnretainedCallback<bool()>> trigger);
   int64_t Send(absl::string_view data);
   bool connected() const;
   bool buffer_body() const;
