Selaa lähdekoodia

LibWeb: Make ResizeObserver GC-allocated

Andreas Kling 2 vuotta sitten
vanhempi
commit
0dc2c27fa3

+ 0 - 1
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;

+ 11 - 2
Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.cpp

@@ -5,18 +5,27 @@
  */
 
 #include <LibWeb/DOM/Element.h>
+#include <LibWeb/HTML/Window.h>
 #include <LibWeb/ResizeObserver/ResizeObserver.h>
 
 namespace Web::ResizeObserver {
 
 // https://drafts.csswg.org/resize-observer/#dom-resizeobserver-resizeobserver
-NonnullRefPtr<ResizeObserver> ResizeObserver::create_with_global_object(HTML::Window&, Bindings::CallbackType* callback)
+JS::NonnullGCPtr<ResizeObserver> ResizeObserver::create_with_global_object(HTML::Window& window, Bindings::CallbackType* callback)
 {
     // FIXME: Implement
     (void)callback;
-    return adopt_ref(*new ResizeObserver);
+    return *window.heap().allocate<ResizeObserver>(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)
 {

+ 11 - 9
Userland/Libraries/LibWeb/ResizeObserver/ResizeObserver.h

@@ -6,10 +6,7 @@
 
 #pragma once
 
-#include <AK/NonnullRefPtr.h>
-#include <AK/RefCounted.h>
-#include <LibWeb/Bindings/Wrappable.h>
-#include <LibWeb/Forward.h>
+#include <LibWeb/Bindings/PlatformObject.h>
 
 namespace Web::ResizeObserver {
 
@@ -18,17 +15,22 @@ struct ResizeObserverOptions {
 };
 
 // https://drafts.csswg.org/resize-observer/#resize-observer-interface
-class ResizeObserver
-    : public RefCounted<ResizeObserver>
-    , public Bindings::Wrappable {
+class ResizeObserver : public Bindings::PlatformObject {
+    WEB_PLATFORM_OBJECT(ResizeObserver, Bindings::PlatformObject);
+
 public:
-    using WrapperType = Bindings::ResizeObserverWrapper;
+    static JS::NonnullGCPtr<ResizeObserver> create_with_global_object(HTML::Window&, Bindings::CallbackType* callback);
 
-    static NonnullRefPtr<ResizeObserver> 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)

+ 1 - 1
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)