diff --git a/Userland/Libraries/LibWeb/DOM/AbortController.cpp b/Userland/Libraries/LibWeb/DOM/AbortController.cpp index 76640bcf27..602f05bcf7 100644 --- a/Userland/Libraries/LibWeb/DOM/AbortController.cpp +++ b/Userland/Libraries/LibWeb/DOM/AbortController.cpp @@ -4,15 +4,32 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include namespace Web::DOM { -// https://dom.spec.whatwg.org/#dom-abortcontroller-abortcontroller -AbortController::AbortController(HTML::Window& window) - : m_signal(JS::make_handle(*AbortSignal::create_with_global_object(window))) +JS::NonnullGCPtr AbortController::create_with_global_object(HTML::Window& window) { + auto signal = AbortSignal::create_with_global_object(window); + return *window.heap().allocate(window.realm(), window, move(signal)); +} + +// https://dom.spec.whatwg.org/#dom-abortcontroller-abortcontroller +AbortController::AbortController(HTML::Window& window, JS::NonnullGCPtr signal) + : PlatformObject(window.realm()) + , m_signal(move(signal)) +{ + set_prototype(&window.ensure_web_prototype("AbortController")); +} + +AbortController::~AbortController() = default; + +void AbortController::visit_edges(Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_signal.ptr()); } // https://dom.spec.whatwg.org/#dom-abortcontroller-abort diff --git a/Userland/Libraries/LibWeb/DOM/AbortController.h b/Userland/Libraries/LibWeb/DOM/AbortController.h index bb597309e5..bdc5c56bb1 100644 --- a/Userland/Libraries/LibWeb/DOM/AbortController.h +++ b/Userland/Libraries/LibWeb/DOM/AbortController.h @@ -6,29 +6,19 @@ #pragma once -#include -#include -#include +#include #include -#include -#include namespace Web::DOM { // https://dom.spec.whatwg.org/#abortcontroller -class AbortController final - : public RefCounted - , public Weakable - , public Bindings::Wrappable { +class AbortController final : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(AbortController, Bindings::PlatformObject); + public: - using WrapperType = Bindings::AbortControllerWrapper; + static JS::NonnullGCPtr create_with_global_object(HTML::Window&); - static NonnullRefPtr create_with_global_object(HTML::Window& window) - { - return adopt_ref(*new AbortController(window)); - } - - virtual ~AbortController() override = default; + virtual ~AbortController() override; // https://dom.spec.whatwg.org/#dom-abortcontroller-signal JS::NonnullGCPtr signal() const { return *m_signal; } @@ -36,10 +26,14 @@ public: void abort(JS::Value reason); private: - explicit AbortController(HTML::Window&); + AbortController(HTML::Window&, JS::NonnullGCPtr); + + virtual void visit_edges(Cell::Visitor&) override; // https://dom.spec.whatwg.org/#abortcontroller-signal - JS::Handle m_signal; + JS::NonnullGCPtr m_signal; }; } + +WRAPPER_HACK(AbortController, Web::DOM) diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 9a61726477..967e057595 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -448,7 +448,6 @@ class URLSearchParamsIterator; } namespace Web::Bindings { -class AbortControllerWrapper; class BlobWrapper; class CanvasGradientWrapper; class CanvasRenderingContext2DWrapper; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index b740482ded..cc407d018b 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -22,7 +22,7 @@ libweb_js_wrapper(CSS/StyleSheet NO_INSTANCE) libweb_js_wrapper(CSS/StyleSheetList NO_INSTANCE) libweb_js_wrapper(DOM/AbstractRange NO_INSTANCE) libweb_js_wrapper(DOM/Attribute NO_INSTANCE) -libweb_js_wrapper(DOM/AbortController) +libweb_js_wrapper(DOM/AbortController NO_INSTANCE) libweb_js_wrapper(DOM/AbortSignal NO_INSTANCE) libweb_js_wrapper(DOM/CDATASection NO_INSTANCE) libweb_js_wrapper(DOM/CharacterData NO_INSTANCE)