From 09013583f2730ea12ec67d27b0991b93cb4f9ca2 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Tue, 22 Aug 2023 15:22:50 +0200 Subject: [PATCH] LibWeb: Add `Navigable::set_ongoing_navigation()` --- Userland/Libraries/LibWeb/HTML/Navigable.cpp | 15 ++++++++++++++- Userland/Libraries/LibWeb/HTML/Navigable.h | 1 + .../LibWeb/HTML/TraversableNavigable.cpp | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.cpp b/Userland/Libraries/LibWeb/HTML/Navigable.cpp index aee12fcfc21..fb6ea215a9e 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 6dad69e67f8..b8366ea2007 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 dbc06365161..690ac14f97f 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