diff --git a/Userland/Libraries/LibWeb/Bindings/MainThreadVM.h b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.h index e3605f8f90..fb5d4cd877 100644 --- a/Userland/Libraries/LibWeb/Bindings/MainThreadVM.h +++ b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.h @@ -49,7 +49,7 @@ struct WebEngineCustomData final : public JS::VM::CustomData { // https://dom.spec.whatwg.org/#mutation-observer-list // FIXME: This should be a set. - Vector> mutation_observers; + Vector> mutation_observers; JS::Handle internal_realm; diff --git a/Userland/Libraries/LibWeb/DOM/MutationObserver.cpp b/Userland/Libraries/LibWeb/DOM/MutationObserver.cpp index 8c42f3fb2d..77818ddd41 100644 --- a/Userland/Libraries/LibWeb/DOM/MutationObserver.cpp +++ b/Userland/Libraries/LibWeb/DOM/MutationObserver.cpp @@ -29,7 +29,13 @@ MutationObserver::MutationObserver(JS::Realm& realm, JS::GCPtrmutation_observers.append(*this); } -MutationObserver::~MutationObserver() = default; +MutationObserver::~MutationObserver() +{ + auto* agent_custom_data = verify_cast(vm().custom_data()); + agent_custom_data->mutation_observers.remove_all_matching([this](auto& observer) { + return observer.ptr() == this; + }); +} void MutationObserver::initialize(JS::Realm& realm) {