LibWeb: Avoid Vector filtering when performing find in page queries

This commit is contained in:
Tim Ledbetter 2024-11-24 16:46:42 +00:00 committed by Tim Ledbetter
parent 26f32b11f9
commit c322603c42
Notes: github-actions[bot] 2024-11-24 19:29:20 +00:00
3 changed files with 5 additions and 8 deletions
Libraries/LibWeb

View file

@ -513,7 +513,7 @@ void EventLoop::perform_a_microtask_checkpoint()
// FIXME: 8. Record timing info for microtask checkpoint.
}
Vector<GC::Root<DOM::Document>> EventLoop::documents_in_this_event_loop_matching(auto callback) const
Vector<GC::Root<DOM::Document>> EventLoop::documents_in_this_event_loop_matching(Function<bool(DOM::Document&)> callback) const
{
Vector<GC::Root<DOM::Document>> documents;
for (auto& document : m_documents) {

View file

@ -73,6 +73,7 @@ public:
void unregister_document(Badge<DOM::Document>, DOM::Document&);
Vector<GC::Root<DOM::Document>> documents_in_this_event_loop() const;
[[nodiscard]] Vector<GC::Root<DOM::Document>> documents_in_this_event_loop_matching(Function<bool(DOM::Document&)> callback) const;
Vector<GC::Root<HTML::Window>> same_loop_windows() const;
@ -95,8 +96,6 @@ private:
virtual void visit_edges(Visitor&) override;
[[nodiscard]] Vector<GC::Root<DOM::Document>> documents_in_this_event_loop_matching(auto callback) const;
void update_the_rendering();
Type m_type { Type::Window };

View file

@ -569,11 +569,9 @@ Vector<GC::Root<DOM::Document>> Page::documents_in_active_window() const
if (!top_level_traversable_is_initialized())
return {};
auto documents = HTML::main_thread_event_loop().documents_in_this_event_loop();
for (ssize_t i = documents.size() - 1; i >= 0; --i) {
if (documents[i]->window() != top_level_traversable()->active_window())
documents.remove(i);
}
auto documents = HTML::main_thread_event_loop().documents_in_this_event_loop_matching([&](auto& document) {
return document.window() == top_level_traversable()->active_window();
});
return documents;
}