1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 10:47:35 +00:00

LibWeb+Browser+Ladybird: Use JS::SafeFunction for EventLoop callbacks

This automatically protects captured objects from being GC'd before the
callback runs.
This commit is contained in:
Sam Atkins 2023-04-21 12:13:04 +01:00 committed by Linus Groh
parent 892470a912
commit 6d93e03211
11 changed files with 19 additions and 19 deletions

View file

@ -18,13 +18,13 @@ namespace Ladybird {
EventLoopPluginQt::EventLoopPluginQt() = default;
EventLoopPluginQt::~EventLoopPluginQt() = default;
void EventLoopPluginQt::spin_until(Function<bool()> goal_condition)
void EventLoopPluginQt::spin_until(JS::SafeFunction<bool()> goal_condition)
{
while (!goal_condition())
QCoreApplication::processEvents(QEventLoop::ProcessEventsFlag::AllEvents | QEventLoop::ProcessEventsFlag::WaitForMoreEvents);
}
void EventLoopPluginQt::deferred_invoke(Function<void()> function)
void EventLoopPluginQt::deferred_invoke(JS::SafeFunction<void()> function)
{
VERIFY(function);
QTimer::singleShot(0, [function = move(function)] {

View file

@ -15,8 +15,8 @@ public:
EventLoopPluginQt();
virtual ~EventLoopPluginQt() override;
virtual void spin_until(Function<bool()> goal_condition) override;
virtual void deferred_invoke(Function<void()>) override;
virtual void spin_until(JS::SafeFunction<bool()> goal_condition) override;
virtual void deferred_invoke(JS::SafeFunction<void()>) override;
virtual NonnullRefPtr<Web::Platform::Timer> create_timer() override;
virtual void quit() override;
};