Selaa lähdekoodia

LibWeb: Implement "get the used step" for traversable navigables

Implements https://html.spec.whatwg.org/multipage/browsing-the-web.html#getting-the-used-step
Aliaksandr Kalenik 2 vuotta sitten
vanhempi
commit
9c1087de8c

+ 19 - 0
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<int> 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()
 {

+ 1 - 0
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<int> get_all_used_history_steps() const;
     void clear_the_forward_session_history();