From 6ec88b36b9e4aabfc4c6c79ffcd23ad75b8101c5 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Thu, 6 Apr 2023 23:30:02 +0300 Subject: [PATCH] LibWeb: Implement "get the target history entry" for navigables --- Userland/Libraries/LibWeb/HTML/Navigable.cpp | 20 ++++++++++++++++++++ Userland/Libraries/LibWeb/HTML/Navigable.h | 2 ++ 2 files changed, 22 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.cpp b/Userland/Libraries/LibWeb/HTML/Navigable.cpp index 60702bd5183..18a7a0286fb 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/Navigable.cpp @@ -77,6 +77,26 @@ ErrorOr Navigable::initialize_navigable(JS::NonnullGCPtr do return {}; } +// https://html.spec.whatwg.org/multipage/browsing-the-web.html#getting-the-target-history-entry +JS::GCPtr Navigable::get_the_target_history_entry(int target_step) const +{ + // 1. Let entries be the result of getting session history entries for navigable. + auto& entries = get_session_history_entries(); + + // 2. Return the item in entries that has the greatest step less than or equal to step. + JS::GCPtr result = nullptr; + for (auto& entry : entries) { + auto entry_step = entry->step.get(); + if (entry_step <= target_step) { + if (!result || result->step.get() < entry_step) { + result = entry; + } + } + } + + return result; +} + // https://html.spec.whatwg.org/multipage/document-sequences.html#nav-document JS::GCPtr Navigable::active_document() { diff --git a/Userland/Libraries/LibWeb/HTML/Navigable.h b/Userland/Libraries/LibWeb/HTML/Navigable.h index 61c1d9d7f8a..6340f18acfa 100644 --- a/Userland/Libraries/LibWeb/HTML/Navigable.h +++ b/Userland/Libraries/LibWeb/HTML/Navigable.h @@ -42,6 +42,8 @@ public: JS::GCPtr active_window_proxy(); JS::GCPtr active_window(); + JS::GCPtr get_the_target_history_entry(int target_step) const; + String target_name() const; JS::GCPtr container() const;