diff --git a/Userland/Libraries/LibJS/Runtime/Realm.cpp b/Userland/Libraries/LibJS/Runtime/Realm.cpp index 26b12a6bb6..5a70f10258 100644 --- a/Userland/Libraries/LibJS/Runtime/Realm.cpp +++ b/Userland/Libraries/LibJS/Runtime/Realm.cpp @@ -115,9 +115,12 @@ void Realm::set_global_object(Object* global_object, Object* this_value) void Realm::visit_edges(Visitor& visitor) { + Base::visit_edges(visitor); visitor.visit(m_intrinsics); visitor.visit(m_global_object); visitor.visit(m_global_environment); + if (m_host_defined) + m_host_defined->visit_edges(visitor); } } diff --git a/Userland/Libraries/LibJS/Runtime/Realm.h b/Userland/Libraries/LibJS/Runtime/Realm.h index 5d699af5ff..e4a5aee610 100644 --- a/Userland/Libraries/LibJS/Runtime/Realm.h +++ b/Userland/Libraries/LibJS/Runtime/Realm.h @@ -25,6 +25,8 @@ class Realm final public: struct HostDefined { virtual ~HostDefined() = default; + + virtual void visit_edges(Cell::Visitor&) { } }; static Realm* create(VM&); diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.cpp index 2d3befe376..6e21dd40ca 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.cpp +++ b/Userland/Libraries/LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.cpp @@ -16,6 +16,14 @@ WindowEnvironmentSettingsObject::WindowEnvironmentSettingsObject(Window& window, { } +WindowEnvironmentSettingsObject::~WindowEnvironmentSettingsObject() = default; + +void WindowEnvironmentSettingsObject::visit_edges(JS::Cell::Visitor& visitor) +{ + EnvironmentSettingsObject::visit_edges(visitor); + visitor.visit(m_window.ptr()); +} + // https://html.spec.whatwg.org/multipage/window-object.html#set-up-a-window-environment-settings-object void WindowEnvironmentSettingsObject::setup(AK::URL const& creation_url, NonnullOwnPtr execution_context, Optional reserved_environment, AK::URL top_level_creation_url, Origin top_level_origin) { diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.h b/Userland/Libraries/LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.h index d513ff3efd..48f3196d0e 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.h +++ b/Userland/Libraries/LibWeb/HTML/Scripting/WindowEnvironmentSettingsObject.h @@ -6,8 +6,8 @@ #pragma once +#include #include -#include namespace Web::HTML { @@ -15,7 +15,7 @@ class WindowEnvironmentSettingsObject final : public EnvironmentSettingsObject { public: static void setup(AK::URL const& creation_url, NonnullOwnPtr, Optional, AK::URL top_level_creation_url, Origin top_level_origin); - virtual ~WindowEnvironmentSettingsObject() override = default; + virtual ~WindowEnvironmentSettingsObject() override; virtual JS::GCPtr responsible_document() override; virtual String api_url_character_encoding() override; @@ -26,7 +26,9 @@ public: private: WindowEnvironmentSettingsObject(Window&, NonnullOwnPtr); - WeakPtr m_window; + virtual void visit_edges(JS::Cell::Visitor&) override; + + JS::GCPtr m_window; }; }