diff --git a/Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.cpp b/Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.cpp index a8c8a51905..dcfa458baf 100644 --- a/Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.cpp +++ b/Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.cpp @@ -53,4 +53,22 @@ void TaskQueue::remove_tasks_matching(Function filter) }); } +ErrorOr>> TaskQueue::take_tasks_matching(Function filter) +{ + Vector> matching_tasks; + + for (size_t i = 0; i < m_tasks.size();) { + auto& task = m_tasks.at(i); + + if (filter(*task)) { + TRY(matching_tasks.try_append(move(task))); + m_tasks.remove(i); + } else { + ++i; + } + } + + return matching_tasks; +} + } diff --git a/Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.h b/Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.h index f3e31c4fac..59454efa5a 100644 --- a/Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.h +++ b/Userland/Libraries/LibWeb/HTML/EventLoop/TaskQueue.h @@ -32,6 +32,7 @@ public: } void remove_tasks_matching(Function); + ErrorOr>> take_tasks_matching(Function); private: HTML::EventLoop& m_event_loop;