From 0dc2c27fa32dcf0c9dae5680cbb68cef627f64c6 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 4 Sep 2022 13:33:07 +0200 Subject: [PATCH] LibWeb: Make ResizeObserver GC-allocated --- Userland/Libraries/LibWeb/Forward.h | 1 - .../LibWeb/ResizeObserver/ResizeObserver.cpp | 13 +++++++++-- .../LibWeb/ResizeObserver/ResizeObserver.h | 22 ++++++++++--------- Userland/Libraries/LibWeb/idl_files.cmake | 2 +- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 7fe753490b..1c8686b87d 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -453,7 +453,6 @@ class IntersectionObserverWrapper; class LocationObject; class OptionConstructor; class RangePrototype; -class ResizeObserverWrapper; class URLSearchParamsIteratorWrapper; class URLSearchParamsWrapper; class URLWrapper; diff --git a/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp b/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp index 2b2484b6cd..13c35d8521 100644 --- a/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp +++ b/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp @@ -5,18 +5,27 @@ */ #include +#include #include namespace Web::ResizeObserver { // https://drafts.csswg.org/resize-observer/#dom-resizeobserver-resizeobserver -NonnullRefPtr ResizeObserver::create_with_global_object(HTML::Window&, Bindings::CallbackType* callback) +JS::NonnullGCPtr ResizeObserver::create_with_global_object(HTML::Window& window, Bindings::CallbackType* callback) { // FIXME: Implement (void)callback; - return adopt_ref(*new ResizeObserver); + return *window.heap().allocate(window.realm(), window); } +ResizeObserver::ResizeObserver(HTML::Window& window) + : PlatformObject(window.realm()) +{ + set_prototype(&window.cached_web_prototype("ResizeObserver")); +} + +ResizeObserver::~ResizeObserver() = default; + // https://drafts.csswg.org/resize-observer/#dom-resizeobserver-observe void ResizeObserver::observe(DOM::Element& target, ResizeObserverOptions options) { diff --git a/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.h b/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.h index 4dfb60d0da..b0e0b249d3 100644 --- a/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.h +++ b/Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.h @@ -6,10 +6,7 @@ #pragma once -#include -#include -#include -#include +#include namespace Web::ResizeObserver { @@ -18,17 +15,22 @@ struct ResizeObserverOptions { }; // https://drafts.csswg.org/resize-observer/#resize-observer-interface -class ResizeObserver - : public RefCounted - , public Bindings::Wrappable { -public: - using WrapperType = Bindings::ResizeObserverWrapper; +class ResizeObserver : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(ResizeObserver, Bindings::PlatformObject); - static NonnullRefPtr create_with_global_object(HTML::Window&, Bindings::CallbackType* callback); +public: + static JS::NonnullGCPtr create_with_global_object(HTML::Window&, Bindings::CallbackType* callback); + + virtual ~ResizeObserver() override; void observe(DOM::Element& target, ResizeObserverOptions); void unobserve(DOM::Element& target); void disconnect(); + +private: + explicit ResizeObserver(HTML::Window&); }; } + +WRAPPER_HACK(ResizeObserver, Web::ResizeObserver) diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 891aae9490..19dfb19387 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -158,7 +158,7 @@ libweb_js_wrapper(HighResolutionTime/Performance NO_INSTANCE) libweb_js_wrapper(IntersectionObserver/IntersectionObserver) libweb_js_wrapper(NavigationTiming/PerformanceTiming NO_INSTANCE) libweb_js_wrapper(RequestIdleCallback/IdleDeadline NO_INSTANCE) -libweb_js_wrapper(ResizeObserver/ResizeObserver) +libweb_js_wrapper(ResizeObserver/ResizeObserver NO_INSTANCE) libweb_js_wrapper(SVG/SVGAnimatedLength NO_INSTANCE) libweb_js_wrapper(SVG/SVGClipPathElement NO_INSTANCE) libweb_js_wrapper(SVG/SVGDefsElement NO_INSTANCE)