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);