mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-23 01:32:14 -05:00
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".
This commit is contained in:
parent
a1519e67fb
commit
861d46be3e
Notes:
github-actions[bot]
2024-08-06 14:34:06 +00:00
Author: https://github.com/awesomekling Commit: https://github.com/LadybirdBrowser/ladybird/commit/861d46be3e6 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/993
3 changed files with 6 additions and 6 deletions
|
@ -63,10 +63,10 @@ void SessionHistoryTraversalQueue::append_sync(Function<void()> steps, JS::GCPtr
|
|||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#sync-navigations-jump-queue
|
||||
JS::GCPtr<SessionHistoryTraversalQueueEntry> SessionHistoryTraversalQueue::first_synchronous_navigation_steps_with_target_navigable_not_contained_in(Vector<JS::GCPtr<Navigable>> const& list)
|
||||
JS::GCPtr<SessionHistoryTraversalQueueEntry> SessionHistoryTraversalQueue::first_synchronous_navigation_steps_with_target_navigable_not_contained_in(HashTable<JS::NonnullGCPtr<Navigable>> 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);
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
void append_sync(Function<void()> steps, JS::GCPtr<Navigable> target_navigable);
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/browsing-the-web.html#sync-navigations-jump-queue
|
||||
JS::GCPtr<SessionHistoryTraversalQueueEntry> first_synchronous_navigation_steps_with_target_navigable_not_contained_in(Vector<JS::GCPtr<Navigable>> const& list);
|
||||
JS::GCPtr<SessionHistoryTraversalQueueEntry> first_synchronous_navigation_steps_with_target_navigable_not_contained_in(HashTable<JS::NonnullGCPtr<Navigable>> const&);
|
||||
|
||||
private:
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
|
|
|
@ -648,7 +648,7 @@ TraversableNavigable::HistoryStepResult TraversableNavigable::apply_the_history_
|
|||
}
|
||||
|
||||
// 13. Let navigablesThatMustWaitBeforeHandlingSyncNavigation be an empty set.
|
||||
Vector<JS::GCPtr<Navigable>> navigables_that_must_wait_before_handling_sync_navigation;
|
||||
HashTable<JS::NonnullGCPtr<Navigable>> 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);
|
||||
|
|
Loading…
Reference in a new issue