From 861d46be3e69aeb1ca4a9e75029b4ce653bbcf47 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 6 Aug 2024 14:35:28 +0200 Subject: [PATCH] LibWeb: Use a HashTable when querying SessionHistoryTraversalQueue Instead of asking "do you have an entry not in this Vector", let's ask "do you have an entry not in this HashTable". --- .../Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.cpp | 6 +++--- .../Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h | 2 +- Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.cpp b/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.cpp index 3914bfa9c00..0d28f64dfe3 100644 --- a/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.cpp +++ b/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.cpp @@ -63,10 +63,10 @@ void SessionHistoryTraversalQueue::append_sync(Function steps, JS::GCPtr } // https://html.spec.whatwg.org/multipage/browsing-the-web.html#sync-navigations-jump-queue -JS::GCPtr SessionHistoryTraversalQueue::first_synchronous_navigation_steps_with_target_navigable_not_contained_in(Vector> const& list) +JS::GCPtr SessionHistoryTraversalQueue::first_synchronous_navigation_steps_with_target_navigable_not_contained_in(HashTable> const& set) { - auto index = m_queue.find_first_index_if([&list](auto const& entry) -> bool { - return (entry->target_navigable() != nullptr) && !list.contains_slow(entry->target_navigable()); + auto index = m_queue.find_first_index_if([&set](auto const& entry) -> bool { + return (entry->target_navigable() != nullptr) && !set.contains(*entry->target_navigable()); }); if (index.has_value()) return m_queue.take(*index); diff --git a/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h b/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h index 06e4f1ad4ea..02b597f4ebe 100644 --- a/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h +++ b/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h @@ -53,7 +53,7 @@ public: void append_sync(Function steps, JS::GCPtr target_navigable); // https://html.spec.whatwg.org/multipage/browsing-the-web.html#sync-navigations-jump-queue - JS::GCPtr first_synchronous_navigation_steps_with_target_navigable_not_contained_in(Vector> const& list); + JS::GCPtr first_synchronous_navigation_steps_with_target_navigable_not_contained_in(HashTable> const&); private: virtual void visit_edges(Cell::Visitor&) override; diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp index 97f04d895b4..e7b07400fde 100644 --- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp @@ -648,7 +648,7 @@ TraversableNavigable::HistoryStepResult TraversableNavigable::apply_the_history_ } // 13. Let navigablesThatMustWaitBeforeHandlingSyncNavigation be an empty set. - Vector> navigables_that_must_wait_before_handling_sync_navigation; + HashTable> navigables_that_must_wait_before_handling_sync_navigation; // 14. While completedChangeJobs does not equal totalChangeJobs: while (!changing_navigable_continuations.is_empty()) { @@ -701,7 +701,7 @@ TraversableNavigable::HistoryStepResult TraversableNavigable::apply_the_history_ auto script_history_index = history_object_length_and_index.script_history_index; // 8. Append navigable to navigablesThatMustWaitBeforeHandlingSyncNavigation. - navigables_that_must_wait_before_handling_sync_navigation.append(*navigable); + navigables_that_must_wait_before_handling_sync_navigation.set(*navigable); // 9. Let entriesForNavigationAPI be the result of getting session history entries for the navigation API given navigable and targetStep. auto entries_for_navigation_api = get_session_history_entries_for_the_navigation_api(*navigable, target_step);