diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
index 70d21aa1a8..6cd0efefe7 100644
--- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
+++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
@@ -117,4 +117,36 @@ bool TraversableNavigable::is_top_level_traversable() const
return parent() == nullptr;
}
+// https://html.spec.whatwg.org/multipage/browsing-the-web.html#getting-all-used-history-steps
+Vector TraversableNavigable::get_all_used_history_steps() const
+{
+ // FIXME: 1. Assert: this is running within traversable's session history traversal queue.
+
+ // 2. Let steps be an empty ordered set of non-negative integers.
+ OrderedHashTable steps;
+
+ // 3. Let entryLists be the ordered set « traversable's session history entries ».
+ Vector>> entry_lists { session_history_entries() };
+
+ // 4. For each entryList of entryLists:
+ while (!entry_lists.is_empty()) {
+ auto entry_list = entry_lists.take_first();
+
+ // 1. For each entry of entryList:
+ for (auto& entry : entry_list) {
+ // 1. Append entry's step to steps.
+ steps.set(entry->step.get());
+
+ // 2. For each nestedHistory of entry's document state's nested histories, append nestedHistory's entries list to entryLists.
+ for (auto& nested_history : entry->document_state->nested_histories())
+ entry_lists.append(nested_history.entries);
+ }
+ }
+
+ // 5. Return steps, sorted.
+ auto sorted_steps = steps.values();
+ quick_sort(sorted_steps);
+ return sorted_steps;
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h
index 79c64315a4..80b2c685d9 100644
--- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h
+++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h
@@ -30,6 +30,8 @@ public:
bool running_nested_apply_history_step() const { return m_running_nested_apply_history_step; };
VisibilityState system_visibility_state() const { return m_system_visibility_state; };
+ Vector get_all_used_history_steps() const;
+
private:
TraversableNavigable();