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; }