diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.cpp b/Userland/Libraries/LibWeb/HTML/Navigable.cpp index 59bec56476..80b2478ab0 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/Navigable.cpp @@ -934,6 +934,8 @@ WebIDL::ExceptionOr Navigable::navigate( // 1. Navigate to a fragment given navigable, url, historyHandling, and navigationId. TRY(navigate_to_a_fragment(url, to_history_handling_behavior(history_handling), navigation_id)); + traversable_navigable()->process_session_history_traversal_queue(); + // 2. Return. return {}; } diff --git a/Userland/Libraries/LibWeb/HTML/NavigableContainer.cpp b/Userland/Libraries/LibWeb/HTML/NavigableContainer.cpp index 5c39271f07..afbb0d12c6 100644 --- a/Userland/Libraries/LibWeb/HTML/NavigableContainer.cpp +++ b/Userland/Libraries/LibWeb/HTML/NavigableContainer.cpp @@ -208,6 +208,9 @@ Optional NavigableContainer::shared_attribute_processing_steps_for_ifra // 4. If url matches about:blank and initialInsertion is true, then perform the URL and history update steps given element's content navigable's active document and url. if (url_matches_about_blank(url) && initial_insertion) { perform_url_and_history_update_steps(*m_content_navigable->active_document(), url); + // NOTE: Not in the spec but we need to make sure that "apply the history step" for initial navigation to about:blank + // is applied before subsequent navigation. + navigable()->traversable_navigable()->process_session_history_traversal_queue(); } // 5. Return url. diff --git a/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h b/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h index c2cc7f8b88..bafb802ed7 100644 --- a/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h +++ b/Userland/Libraries/LibWeb/HTML/SessionHistoryTraversalQueue.h @@ -31,6 +31,14 @@ public: } } + void process() + { + while (m_queue.size() > 0) { + auto steps = m_queue.take_first(); + steps(); + } + } + private: Vector> m_queue; RefPtr m_timer; diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h index 72c6bb139b..4efd9d4465 100644 --- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h +++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h @@ -55,6 +55,11 @@ public: m_session_history_traversal_queue.append(move(steps)); } + void process_session_history_traversal_queue() + { + m_session_history_traversal_queue.process(); + } + Page* page() { return m_page; } Page const* page() const { return m_page; }