diff --git a/Libraries/LibWeb/HTML/MessagePort.cpp b/Libraries/LibWeb/HTML/MessagePort.cpp
index cd528fe7440..e46b7a64182 100644
--- a/Libraries/LibWeb/HTML/MessagePort.cpp
+++ b/Libraries/LibWeb/HTML/MessagePort.cpp
@@ -47,11 +47,7 @@ MessagePort::MessagePort(JS::Realm& realm)
all_message_ports().set(this);
}
-MessagePort::~MessagePort()
-{
- all_message_ports().remove(this);
- disentangle();
-}
+MessagePort::~MessagePort() = default;
void MessagePort::for_each_message_port(Function callback)
{
@@ -65,6 +61,13 @@ void MessagePort::initialize(JS::Realm& realm)
WEB_SET_PROTOTYPE_FOR_INTERFACE(MessagePort);
}
+void MessagePort::finalize()
+{
+ Base::finalize();
+ all_message_ports().remove(this);
+ disentangle();
+}
+
void MessagePort::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
diff --git a/Libraries/LibWeb/HTML/MessagePort.h b/Libraries/LibWeb/HTML/MessagePort.h
index 6a718468b6c..8a0968d50ee 100644
--- a/Libraries/LibWeb/HTML/MessagePort.h
+++ b/Libraries/LibWeb/HTML/MessagePort.h
@@ -68,6 +68,7 @@ private:
explicit MessagePort(JS::Realm&);
virtual void initialize(JS::Realm&) override;
+ virtual void finalize() override;
virtual void visit_edges(Cell::Visitor&) override;
bool is_entangled() const;