Switch uses of std::function to QUICHE callback aliases as appropriate. PiperOrigin-RevId: 537898189
diff --git a/quiche/binary_http/binary_http_message.cc b/quiche/binary_http/binary_http_message.cc index 6d333ac..11ae79d 100644 --- a/quiche/binary_http/binary_http_message.cc +++ b/quiche/binary_http/binary_http_message.cc
@@ -15,6 +15,7 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_join.h" #include "absl/strings/string_view.h" +#include "quiche/common/quiche_callbacks.h" #include "quiche/common/quiche_data_reader.h" #include "quiche/common/quiche_data_writer.h" @@ -56,10 +57,10 @@ return control_data; } -absl::Status DecodeFields( - quiche::QuicheDataReader& reader, - const std::function<void(absl::string_view name, absl::string_view value)>& - callback) { +absl::Status DecodeFields(quiche::QuicheDataReader& reader, + quiche::UnretainedCallback<void( + absl::string_view name, absl::string_view value)> + callback) { absl::string_view fields; if (!reader.ReadStringPieceVarInt62(&fields)) { return absl::InvalidArgumentError("Failed to read fields.");
diff --git a/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc b/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc index 37cb607..b0d4406 100644 --- a/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc +++ b/quiche/quic/core/io/event_loop_connecting_client_socket_test.cc
@@ -32,6 +32,7 @@ #include "quiche/common/platform/api/quiche_test.h" #include "quiche/common/platform/api/quiche_test_loopback.h" #include "quiche/common/platform/api/quiche_thread.h" +#include "quiche/common/quiche_callbacks.h" #include "quiche/common/simple_buffer_allocator.h" namespace quic::test { @@ -43,7 +44,7 @@ class TestServerSocketRunner : public quiche::QuicheThread { public: - using SocketBehavior = std::function<void( + using SocketBehavior = quiche::MultiUseCallback<void( SocketFd connected_socket, socket_api::SocketProtocol protocol)>; TestServerSocketRunner(SocketFd server_socket_descriptor, @@ -80,7 +81,7 @@ // closes the accepted connection socket. TestTcpServerSocketRunner(SocketFd server_socket_descriptor, SocketBehavior behavior) - : TestServerSocketRunner(server_socket_descriptor, behavior) { + : TestServerSocketRunner(server_socket_descriptor, std::move(behavior)) { Start(); } @@ -119,7 +120,7 @@ TestUdpServerSocketRunner(SocketFd server_socket_descriptor, SocketBehavior behavior, QuicSocketAddress client_socket_address) - : TestServerSocketRunner(server_socket_descriptor, behavior), + : TestServerSocketRunner(server_socket_descriptor, std::move(behavior)), client_socket_address_(std::move(client_socket_address)) { Start(); }
diff --git a/quiche/quic/qbone/bonnet/tun_device_controller.cc b/quiche/quic/qbone/bonnet/tun_device_controller.cc index b6e3d76..fe9e2a0 100644 --- a/quiche/quic/qbone/bonnet/tun_device_controller.cc +++ b/quiche/quic/qbone/bonnet/tun_device_controller.cc
@@ -9,6 +9,7 @@ #include "absl/time/clock.h" #include "quiche/quic/platform/api/quic_logging.h" #include "quiche/quic/qbone/qbone_constants.h" +#include "quiche/common/quiche_callbacks.h" ABSL_FLAG(bool, qbone_tun_device_replace_default_routing_rules, true, "If true, will define a rule that points packets sourced from the " @@ -169,8 +170,8 @@ } void TunDeviceController::RegisterAddressUpdateCallback( - const std::function<void(QuicIpAddress)>& cb) { - address_update_cbs_.push_back(cb); + quiche::MultiUseCallback<void(QuicIpAddress)> cb) { + address_update_cbs_.push_back(std::move(cb)); } } // namespace quic
diff --git a/quiche/quic/qbone/bonnet/tun_device_controller.h b/quiche/quic/qbone/bonnet/tun_device_controller.h index 3043583..350a056 100644 --- a/quiche/quic/qbone/bonnet/tun_device_controller.h +++ b/quiche/quic/qbone/bonnet/tun_device_controller.h
@@ -5,10 +5,12 @@ #ifndef QUICHE_QUIC_QBONE_BONNET_TUN_DEVICE_CONTROLLER_H_ #define QUICHE_QUIC_QBONE_BONNET_TUN_DEVICE_CONTROLLER_H_ +#include "quiche/quic/platform/api/quic_ip_address.h" #include "quiche/quic/qbone/bonnet/tun_device.h" #include "quiche/quic/qbone/platform/netlink_interface.h" #include "quiche/quic/qbone/qbone_control.pb.h" #include "quiche/quic/qbone/qbone_control_stream.h" +#include "quiche/common/quiche_callbacks.h" namespace quic { @@ -50,7 +52,7 @@ int retries); virtual void RegisterAddressUpdateCallback( - const std::function<void(QuicIpAddress)>& cb); + quiche::MultiUseCallback<void(QuicIpAddress)> cb); virtual QuicIpAddress current_address(); @@ -65,7 +67,8 @@ QuicIpAddress current_address_; - std::vector<std::function<void(QuicIpAddress)>> address_update_cbs_; + std::vector<quiche::MultiUseCallback<void(QuicIpAddress)>> + address_update_cbs_; }; } // namespace quic
diff --git a/quiche/quic/qbone/qbone_session_test.cc b/quiche/quic/qbone/qbone_session_test.cc index ab92c1c..46a41d9 100644 --- a/quiche/quic/qbone/qbone_session_test.cc +++ b/quiche/quic/qbone/qbone_session_test.cc
@@ -26,6 +26,7 @@ #include "quiche/quic/test_tools/quic_connection_peer.h" #include "quiche/quic/test_tools/quic_session_peer.h" #include "quiche/quic/test_tools/quic_test_utils.h" +#include "quiche/common/quiche_callbacks.h" namespace quic { namespace test { @@ -238,7 +239,7 @@ void Run() { if (!cancelled_) { - task_(); + std::move(task_)(); } } @@ -246,7 +247,7 @@ private: bool cancelled_ = false; - std::function<void()> task_; + quiche::SingleUseCallback<void()> task_; QuicTime time_; }; @@ -260,8 +261,9 @@ private: using TaskType = std::shared_ptr<InnerTask>; - std::priority_queue<TaskType, std::vector<TaskType>, - std::function<bool(const TaskType&, const TaskType&)>> + std::priority_queue< + TaskType, std::vector<TaskType>, + quiche::UnretainedCallback<bool(const TaskType&, const TaskType&)>> tasks_; MockQuicConnectionHelper* helper_; };
diff --git a/quiche/quic/test_tools/qpack/qpack_test_utils.h b/quiche/quic/test_tools/qpack/qpack_test_utils.h index c6f1c65..4c19d3a 100644 --- a/quiche/quic/test_tools/qpack/qpack_test_utils.h +++ b/quiche/quic/test_tools/qpack/qpack_test_utils.h
@@ -11,13 +11,14 @@ #include "absl/strings/string_view.h" #include "quiche/quic/core/qpack/qpack_stream_sender_delegate.h" #include "quiche/quic/platform/api/quic_test.h" +#include "quiche/common/quiche_callbacks.h" namespace quic { namespace test { // Called repeatedly to determine the size of each fragment when encoding or // decoding. Must return a positive value. -using FragmentSizeGenerator = std::function<size_t()>; +using FragmentSizeGenerator = quiche::MultiUseCallback<size_t()>; enum class FragmentMode { kSingleChunk,
diff --git a/quiche/quic/test_tools/server_thread.cc b/quiche/quic/test_tools/server_thread.cc index c0d32ea..5667410 100644 --- a/quiche/quic/test_tools/server_thread.cc +++ b/quiche/quic/test_tools/server_thread.cc
@@ -9,6 +9,7 @@ #include "quiche/quic/test_tools/crypto_test_utils.h" #include "quiche/quic/test_tools/quic_dispatcher_peer.h" #include "quiche/quic/test_tools/quic_server_peer.h" +#include "quiche/common/quiche_callbacks.h" namespace quic { namespace test { @@ -62,7 +63,7 @@ return rc; } -void ServerThread::Schedule(std::function<void()> action) { +void ServerThread::Schedule(quiche::SingleUseCallback<void()> action) { QUICHE_DCHECK(!quit_.HasBeenNotified()); QuicWriterMutexLock lock(&scheduled_actions_lock_); scheduled_actions_.push_back(std::move(action)); @@ -72,8 +73,9 @@ confirmed_.WaitForNotification(); } -bool ServerThread::WaitUntil(std::function<bool()> termination_predicate, - QuicTime::Delta timeout) { +bool ServerThread::WaitUntil( + quiche::UnretainedCallback<bool()> termination_predicate, + QuicTime::Delta timeout) { const QuicTime deadline = clock_->Now() + timeout; while (clock_->Now() < deadline) { QuicNotification done_checking; @@ -128,13 +130,13 @@ } void ServerThread::ExecuteScheduledActions() { - quiche::QuicheCircularDeque<std::function<void()>> actions; + quiche::QuicheCircularDeque<quiche::SingleUseCallback<void()>> actions; { QuicWriterMutexLock lock(&scheduled_actions_lock_); actions.swap(scheduled_actions_); } while (!actions.empty()) { - actions.front()(); + std::move(actions.front())(); actions.pop_front(); } }
diff --git a/quiche/quic/test_tools/server_thread.h b/quiche/quic/test_tools/server_thread.h index c29d633..baaa693 100644 --- a/quiche/quic/test_tools/server_thread.h +++ b/quiche/quic/test_tools/server_thread.h
@@ -12,6 +12,7 @@ #include "quiche/quic/platform/api/quic_socket_address.h" #include "quiche/quic/platform/api/quic_thread.h" #include "quiche/quic/tools/quic_server.h" +#include "quiche/common/quiche_callbacks.h" namespace quic { namespace test { @@ -34,7 +35,7 @@ void Run() override; // Schedules the given action for execution in the event loop. - void Schedule(std::function<void()> action); + void Schedule(quiche::SingleUseCallback<void()> action); // Waits for the handshake to be confirmed for the first session created. void WaitForCryptoHandshakeConfirmed(); @@ -43,7 +44,7 @@ // reached |timeout|. Must be called from an external thread. // Return whether the function returned after |termination_predicate| become // true. - bool WaitUntil(std::function<bool()> termination_predicate, + bool WaitUntil(quiche::UnretainedCallback<bool()> termination_predicate, QuicTime::Delta timeout); // Pauses execution of the server until Resume() is called. May only be @@ -86,8 +87,8 @@ bool initialized_; QuicMutex scheduled_actions_lock_; - quiche::QuicheCircularDeque<std::function<void()>> scheduled_actions_ - QUIC_GUARDED_BY(scheduled_actions_lock_); + quiche::QuicheCircularDeque<quiche::SingleUseCallback<void()>> + scheduled_actions_ QUIC_GUARDED_BY(scheduled_actions_lock_); }; } // namespace test
diff --git a/quiche/quic/tools/quic_simple_client_session.cc b/quiche/quic/tools/quic_simple_client_session.cc index c2c266f..ab44f5f 100644 --- a/quiche/quic/tools/quic_simple_client_session.cc +++ b/quiche/quic/tools/quic_simple_client_session.cc
@@ -7,6 +7,7 @@ #include <utility> #include "quiche/quic/core/quic_path_validator.h" +#include "quiche/spdy/core/http2_header_block.h" namespace quic { @@ -39,7 +40,9 @@ auto stream = std::make_unique<QuicSimpleClientStream>( GetNextOutgoingBidirectionalStreamId(), this, BIDIRECTIONAL, drop_response_body_); - stream->set_on_interim_headers(on_interim_headers_); + stream->set_on_interim_headers([this](const spdy::Http2HeaderBlock& headers) { + on_interim_headers_(headers); + }); return stream; }
diff --git a/quiche/quic/tools/quic_simple_client_session.h b/quiche/quic/tools/quic_simple_client_session.h index 1017341..9d1b4c7 100644 --- a/quiche/quic/tools/quic_simple_client_session.h +++ b/quiche/quic/tools/quic_simple_client_session.h
@@ -11,6 +11,7 @@ #include "quiche/quic/core/http/quic_spdy_client_session.h" #include "quiche/quic/tools/quic_client_base.h" #include "quiche/quic/tools/quic_simple_client_stream.h" +#include "quiche/common/quiche_callbacks.h" #include "quiche/spdy/core/http2_header_block.h" namespace quic { @@ -46,12 +47,14 @@ bool drop_response_body() const { return drop_response_body_; } void set_on_interim_headers( - std::function<void(const spdy::Http2HeaderBlock&)> on_interim_headers) { + quiche::MultiUseCallback<void(const spdy::Http2HeaderBlock&)> + on_interim_headers) { on_interim_headers_ = std::move(on_interim_headers); } private: - std::function<void(const spdy::Http2HeaderBlock&)> on_interim_headers_; + quiche::MultiUseCallback<void(const spdy::Http2HeaderBlock&)> + on_interim_headers_; QuicClientBase::NetworkHelper* network_helper_; const bool drop_response_body_; const bool enable_web_transport_;
diff --git a/quiche/quic/tools/quic_simple_client_stream.h b/quiche/quic/tools/quic_simple_client_stream.h index fd7ede4..db7588b 100644 --- a/quiche/quic/tools/quic_simple_client_stream.h +++ b/quiche/quic/tools/quic_simple_client_stream.h
@@ -9,6 +9,7 @@ #include <utility> #include "quiche/quic/core/http/quic_spdy_client_stream.h" +#include "quiche/common/quiche_callbacks.h" namespace quic { @@ -21,7 +22,8 @@ void OnBodyAvailable() override; void set_on_interim_headers( - std::function<void(const spdy::Http2HeaderBlock&)> on_interim_headers) { + quiche::MultiUseCallback<void(const spdy::Http2HeaderBlock&)> + on_interim_headers) { on_interim_headers_ = std::move(on_interim_headers); } @@ -29,7 +31,8 @@ bool ParseAndValidateStatusCode() override; private: - std::function<void(const spdy::Http2HeaderBlock&)> on_interim_headers_; + quiche::MultiUseCallback<void(const spdy::Http2HeaderBlock&)> + on_interim_headers_; const bool drop_response_body_; };
diff --git a/quiche/quic/tools/web_transport_test_visitors.h b/quiche/quic/tools/web_transport_test_visitors.h index 5fc3fbd..be7932f 100644 --- a/quiche/quic/tools/web_transport_test_visitors.h +++ b/quiche/quic/tools/web_transport_test_visitors.h
@@ -12,6 +12,7 @@ #include "quiche/quic/platform/api/quic_logging.h" #include "quiche/common/platform/api/quiche_logging.h" #include "quiche/common/platform/api/quiche_mem_slice.h" +#include "quiche/common/quiche_callbacks.h" #include "quiche/common/quiche_circular_deque.h" #include "quiche/common/quiche_stream.h" #include "quiche/common/simple_buffer_allocator.h" @@ -111,7 +112,7 @@ class WebTransportUnidirectionalEchoReadVisitor : public WebTransportStreamVisitor { public: - using Callback = std::function<void(const std::string&)>; + using Callback = quiche::MultiUseCallback<void(const std::string&)>; WebTransportUnidirectionalEchoReadVisitor(WebTransportStream* stream, Callback callback)