diff --git a/Userland/Libraries/LibWeb/HTML/Window.cpp b/Userland/Libraries/LibWeb/HTML/Window.cpp
index 7d58758f07..2935b56b3a 100644
--- a/Userland/Libraries/LibWeb/HTML/Window.cpp
+++ b/Userland/Libraries/LibWeb/HTML/Window.cpp
@@ -130,6 +130,12 @@ void Window::visit_edges(JS::Cell::Visitor& visitor)
visitor.visit(m_byte_length_queuing_strategy_size_function);
}
+void Window::finalize()
+{
+ Base::finalize();
+ WindowOrWorkerGlobalScopeMixin::finalize();
+}
+
Window::~Window() = default;
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#normalizing-the-feature-name
diff --git a/Userland/Libraries/LibWeb/HTML/Window.h b/Userland/Libraries/LibWeb/HTML/Window.h
index a8c0768ab4..451bc05f86 100644
--- a/Userland/Libraries/LibWeb/HTML/Window.h
+++ b/Userland/Libraries/LibWeb/HTML/Window.h
@@ -210,6 +210,7 @@ private:
explicit Window(JS::Realm&);
virtual void visit_edges(Cell::Visitor&) override;
+ virtual void finalize() override;
// ^HTML::GlobalEventHandlers
virtual DOM::EventTarget& global_event_handlers_to_event_target(FlyString const&) override { return *this; }
diff --git a/Userland/Libraries/LibWeb/HTML/WindowOrWorkerGlobalScope.cpp b/Userland/Libraries/LibWeb/HTML/WindowOrWorkerGlobalScope.cpp
index bca8068f4d..a500e39005 100644
--- a/Userland/Libraries/LibWeb/HTML/WindowOrWorkerGlobalScope.cpp
+++ b/Userland/Libraries/LibWeb/HTML/WindowOrWorkerGlobalScope.cpp
@@ -64,6 +64,11 @@ void WindowOrWorkerGlobalScopeMixin::visit_edges(JS::Cell::Visitor& visitor)
entry.value.visit_edges(visitor);
}
+void WindowOrWorkerGlobalScopeMixin::finalize()
+{
+ clear_map_of_active_timers();
+}
+
// https://html.spec.whatwg.org/multipage/webappapis.html#dom-origin
WebIDL::ExceptionOr WindowOrWorkerGlobalScopeMixin::origin() const
{
diff --git a/Userland/Libraries/LibWeb/HTML/WindowOrWorkerGlobalScope.h b/Userland/Libraries/LibWeb/HTML/WindowOrWorkerGlobalScope.h
index 27ce4ad850..e3ce895c62 100644
--- a/Userland/Libraries/LibWeb/HTML/WindowOrWorkerGlobalScope.h
+++ b/Userland/Libraries/LibWeb/HTML/WindowOrWorkerGlobalScope.h
@@ -64,6 +64,7 @@ public:
protected:
void initialize(JS::Realm&);
void visit_edges(JS::Cell::Visitor&);
+ void finalize();
private:
enum class Repeat {
diff --git a/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.cpp b/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.cpp
index 2d328b831a..ad3c772385 100644
--- a/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.cpp
+++ b/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.cpp
@@ -55,6 +55,12 @@ void WorkerGlobalScope::visit_edges(Cell::Visitor& visitor)
visitor.visit(m_page);
}
+void WorkerGlobalScope::finalize()
+{
+ Base::finalize();
+ WindowOrWorkerGlobalScopeMixin::finalize();
+}
+
void WorkerGlobalScope::set_internal_port(JS::NonnullGCPtr port)
{
m_internal_port = port;
diff --git a/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.h b/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.h
index cc75d33e41..d4764dcda8 100644
--- a/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.h
+++ b/Userland/Libraries/LibWeb/HTML/WorkerGlobalScope.h
@@ -95,6 +95,7 @@ protected:
private:
virtual void visit_edges(Cell::Visitor&) override;
+ virtual void finalize() override;
JS::GCPtr m_location;
JS::GCPtr m_navigator;