diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp index 518cd8c8a5..03f590b337 100644 --- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp @@ -171,6 +171,25 @@ TraversableNavigable::HistoryObjectLengthAndIndex TraversableNavigable::get_the_ }; } +// https://html.spec.whatwg.org/multipage/browsing-the-web.html#getting-the-used-step +int TraversableNavigable::get_the_used_step(int step) const +{ + // 1. Let steps be the result of getting all used history steps within traversable. + auto steps = get_all_used_history_steps(); + + // 2. Return the greatest item in steps that is less than or equal to step. + VERIFY(!steps.is_empty()); + Optional result; + for (size_t i = 0; i < steps.size(); i++) { + if (steps[i] <= step) { + if (!result.has_value() || (result.value() < steps[i])) { + result = steps[i]; + } + } + } + return result.value(); +} + // https://html.spec.whatwg.org/multipage/browsing-the-web.html#clear-the-forward-session-history void TraversableNavigable::clear_the_forward_session_history() { diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h index 5a92fb25b5..74ee782fb1 100644 --- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h +++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h @@ -36,6 +36,7 @@ public: }; HistoryObjectLengthAndIndex get_the_history_object_length_and_index(int) const; + int get_the_used_step(int step) const; Vector get_all_used_history_steps() const; void clear_the_forward_session_history();