Replace uses of std::function with quiche::UnretainedCallback where appropriate
UnretainedCallback is not nullable, unlike std::function, so in one of the places it gets replaced with an absl::optional<UnretainedCallback>.
PiperOrigin-RevId: 536781656
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;