diff --git a/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp b/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp index 9cfcd5b14f..ceb8fe88f0 100644 --- a/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp +++ b/Userland/Libraries/LibWeb/DOM/AbortSignal.cpp @@ -29,14 +29,14 @@ void AbortSignal::initialize(JS::Realm& realm) } // https://dom.spec.whatwg.org/#abortsignal-add -void AbortSignal::add_abort_algorithm(JS::SafeFunction abort_algorithm) +void AbortSignal::add_abort_algorithm(Function abort_algorithm) { // 1. If signal is aborted, then return. if (aborted()) return; // 2. Append algorithm to signal’s abort algorithms. - m_abort_algorithms.append(move(abort_algorithm)); + m_abort_algorithms.append(JS::create_heap_function(vm().heap(), move(abort_algorithm))); } // https://dom.spec.whatwg.org/#abortsignal-signal-abort @@ -54,7 +54,7 @@ void AbortSignal::signal_abort(JS::Value reason) // 3. For each algorithm in signal’s abort algorithms: run algorithm. for (auto& algorithm : m_abort_algorithms) - algorithm(); + algorithm->function()(); // 4. Empty signal’s abort algorithms. m_abort_algorithms.clear(); @@ -87,6 +87,8 @@ void AbortSignal::visit_edges(JS::Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_abort_reason); + for (auto& algorithm : m_abort_algorithms) + visitor.visit(algorithm); } // https://dom.spec.whatwg.org/#abortsignal-follow diff --git a/Userland/Libraries/LibWeb/DOM/AbortSignal.h b/Userland/Libraries/LibWeb/DOM/AbortSignal.h index 477971e1a5..79a40a2b2d 100644 --- a/Userland/Libraries/LibWeb/DOM/AbortSignal.h +++ b/Userland/Libraries/LibWeb/DOM/AbortSignal.h @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -22,7 +23,7 @@ public: virtual ~AbortSignal() override = default; - void add_abort_algorithm(JS::SafeFunction); + void add_abort_algorithm(Function); // https://dom.spec.whatwg.org/#dom-abortsignal-aborted // An AbortSignal object is aborted when its abort reason is not undefined. @@ -52,7 +53,7 @@ private: // https://dom.spec.whatwg.org/#abortsignal-abort-algorithms // FIXME: This should be a set. - Vector> m_abort_algorithms; + Vector>> m_abort_algorithms; }; }