浏览代码

LibWeb: Implement Navigable::initialize_navigable()

Aliaksandr Kalenik 2 年之前
父节点
当前提交
9a19bdbfcf
共有 2 个文件被更改,包括 29 次插入0 次删除
  1. 27 0
      Userland/Libraries/LibWeb/HTML/Navigable.cpp
  2. 2 0
      Userland/Libraries/LibWeb/HTML/Navigable.h

+ 27 - 0
Userland/Libraries/LibWeb/HTML/Navigable.cpp

@@ -50,6 +50,33 @@ JS::GCPtr<Navigable> Navigable::navigable_with_active_document(JS::NonnullGCPtr<
     return nullptr;
 }
 
+// https://html.spec.whatwg.org/multipage/document-sequences.html#initialize-the-navigable
+ErrorOr<void> Navigable::initialize_navigable(JS::NonnullGCPtr<DocumentState> document_state, JS::GCPtr<Navigable> parent)
+{
+    static int next_id = 0;
+    m_id = TRY(String::number(next_id++));
+
+    // 1. Let entry be a new session history entry, with
+    JS::NonnullGCPtr<SessionHistoryEntry> entry = *heap().allocate_without_realm<SessionHistoryEntry>();
+
+    // URL: document's URL
+    entry->url = document_state->document()->url();
+
+    // document state: documentState
+    entry->document_state = document_state;
+
+    // 2. Set navigable's current session history entry to entry.
+    m_current_session_history_entry = entry;
+
+    // 3. Set navigable's active session history entry to entry.
+    m_active_session_history_entry = entry;
+
+    // 4. Set navigable's parent to parent.
+    m_parent = parent;
+
+    return {};
+}
+
 // https://html.spec.whatwg.org/multipage/document-sequences.html#nav-document
 JS::GCPtr<DOM::Document> Navigable::active_document()
 {

+ 2 - 0
Userland/Libraries/LibWeb/HTML/Navigable.h

@@ -21,6 +21,8 @@ class Navigable : public JS::Cell {
 public:
     virtual ~Navigable() override;
 
+    ErrorOr<void> initialize_navigable(JS::NonnullGCPtr<DocumentState> document_state, JS::GCPtr<Navigable> parent);
+
     String const& id() const { return m_id; };
     JS::GCPtr<Navigable> parent() const { return m_parent; };