diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.cpp b/Userland/Libraries/LibWeb/HTML/Navigable.cpp
index aee12fcfc2..fb6ea215a9 100644
--- a/Userland/Libraries/LibWeb/HTML/Navigable.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Navigable.cpp
@@ -260,6 +260,19 @@ JS::GCPtr Navigable::top_level_traversable()
return verify_cast(navigable);
}
+// https://html.spec.whatwg.org/multipage/browsing-the-web.html#set-the-ongoing-navigation
+void Navigable::set_ongoing_navigation(Variant ongoing_navigation)
+{
+ // 1. If navigable's ongoing navigation is equal to newValue, then return.
+ if (m_ongoing_navigation == ongoing_navigation)
+ return;
+
+ // FIXME: 2. Inform the navigation API about aborting navigation given navigable.
+
+ // 3. Set navigable's ongoing navigation to newValue.
+ m_ongoing_navigation = ongoing_navigation;
+}
+
Navigable::ChosenNavigable Navigable::choose_a_navigable(StringView name, TokenizedFeature::NoOpener, ActivateTab)
{
// 1. Let chosen be null.
@@ -919,7 +932,7 @@ WebIDL::ExceptionOr Navigable::navigate(
}
// 17. Set navigable's ongoing navigation to navigationId.
- m_ongoing_navigation = navigation_id;
+ set_ongoing_navigation(navigation_id);
// 18. If url's scheme is "javascript", then:
if (url.scheme() == "javascript"sv) {
diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.h b/Userland/Libraries/LibWeb/HTML/Navigable.h
index 6dad69e67f..b8366ea200 100644
--- a/Userland/Libraries/LibWeb/HTML/Navigable.h
+++ b/Userland/Libraries/LibWeb/HTML/Navigable.h
@@ -105,6 +105,7 @@ public:
};
Variant ongoing_navigation() const { return m_ongoing_navigation; }
+ void set_ongoing_navigation(Variant ongoing_navigation);
WebIDL::ExceptionOr populate_session_history_entry_document(JS::GCPtr, Optional, Optional navigation_id, SourceSnapshotParams const&, bool allow_POST, Function);
diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
index dbc0636516..690ac14f97 100644
--- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
+++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
@@ -256,7 +256,7 @@ void TraversableNavigable::apply_the_history_step(int step, Optionalset_current_session_history_entry(target_entry);
// 3. Set navigable's ongoing navigation to "traversal".
- m_ongoing_navigation = Traversal::Tag;
+ set_ongoing_navigation(Traversal::Tag);
}
// 9. Let totalChangeJobs be the size of changingNavigables.
@@ -390,7 +390,7 @@ void TraversableNavigable::apply_the_history_step(int step, Optional