1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 23:48:11 +00:00

LibWeb: Make ResizeObserver GC-allocated

This commit is contained in:
Andreas Kling 2022-09-04 13:33:07 +02:00
parent 915a240944
commit 0dc2c27fa3
4 changed files with 24 additions and 14 deletions

View file

@ -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)
{

View file

@ -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 {
public:
using WrapperType = Bindings::ResizeObserverWrapper;
class ResizeObserver : public Bindings::PlatformObject {
WEB_PLATFORM_OBJECT(ResizeObserver, Bindings::PlatformObject);
static NonnullRefPtr<ResizeObserver> create_with_global_object(HTML::Window&, Bindings::CallbackType* callback);
public:
static JS::NonnullGCPtr<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)