diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp index 0400afb16f..e2d4a8e261 100644 --- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp +++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.cpp @@ -16,7 +16,10 @@ namespace Web::HTML { -TraversableNavigable::TraversableNavigable() = default; +TraversableNavigable::TraversableNavigable(Page& page) + : m_page(page) +{ +} TraversableNavigable::~TraversableNavigable() = default; @@ -76,7 +79,7 @@ WebIDL::ExceptionOr> TraversableNavigable document_state->set_navigable_target_name(target_name); // 5. Let traversable be a new traversable navigable. - auto traversable = vm.heap().allocate_without_realm(); + auto traversable = vm.heap().allocate_without_realm(page); // 6. Initialize the navigable traversable given documentState. TRY_OR_THROW_OOM(vm, traversable->initialize_navigable(document_state, nullptr)); diff --git a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h index b28931acc8..6f46dcb577 100644 --- a/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h +++ b/Userland/Libraries/LibWeb/HTML/TraversableNavigable.h @@ -54,8 +54,11 @@ public: m_session_history_traversal_queue.append(move(steps)); } + Page* page() { return m_page; } + Page const* page() const { return m_page; } + private: - TraversableNavigable(); + TraversableNavigable(Page&); virtual void visit_edges(Cell::Visitor&) override; @@ -74,6 +77,8 @@ private: VisibilityState m_system_visibility_state { VisibilityState::Visible }; SessionHistoryTraversalQueue m_session_history_traversal_queue; + + WeakPtr m_page; }; void finalize_a_same_document_navigation(JS::NonnullGCPtr traversable, JS::NonnullGCPtr target_navigable, JS::NonnullGCPtr target_entry, JS::GCPtr entry_to_replace);