diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
index 6cd0efefe7..4322ee43a5 100644
--- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
+++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp
@@ -149,4 +149,35 @@ Vector TraversableNavigable::get_all_used_history_steps() const
return sorted_steps;
}
+// https://html.spec.whatwg.org/multipage/browsing-the-web.html#clear-the-forward-session-history
+void TraversableNavigable::clear_the_forward_session_history()
+{
+ // FIXME: 1. Assert: this is running within navigable's session history traversal queue.
+
+ // 2. Let step be the navigable's current session history step.
+ auto step = current_session_history_step();
+
+ // 3. Let entryLists be the ordered set « navigable's session history entries ».
+ Vector>&> entry_lists;
+ entry_lists.append(session_history_entries());
+
+ // 4. For each entryList of entryLists:
+ while (!entry_lists.is_empty()) {
+ auto& entry_list = entry_lists.take_first();
+
+ // 1. Remove every session history entry from entryList that has a step greater than step.
+ entry_list.remove_all_matching([step](auto& entry) {
+ return entry->step.template get() > step;
+ });
+
+ // 2. For each entry of entryList:
+ for (auto& entry : entry_list) {
+ // 1. 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);
+ }
+ }
+ }
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h
index 80b2c685d9..cbfad5964f 100644
--- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h
+++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h
@@ -31,6 +31,7 @@ public:
VisibilityState system_visibility_state() const { return m_system_visibility_state; };
Vector get_all_used_history_steps() const;
+ void clear_the_forward_session_history();
private:
TraversableNavigable();