diff --git a/Libraries/LibWeb/Bindings/EventListenerWrapper.cpp b/Libraries/LibWeb/Bindings/EventListenerWrapper.cpp index d01d5fa15b9..0948d29d45a 100644 --- a/Libraries/LibWeb/Bindings/EventListenerWrapper.cpp +++ b/Libraries/LibWeb/Bindings/EventListenerWrapper.cpp @@ -14,11 +14,5 @@ EventListenerWrapper::~EventListenerWrapper() { } -void EventListenerWrapper::visit_children(JS::Cell::Visitor& visitor) -{ - Wrapper::visit_children(visitor); - visitor.visit(impl().function()); -} - } } diff --git a/Libraries/LibWeb/Bindings/EventListenerWrapper.h b/Libraries/LibWeb/Bindings/EventListenerWrapper.h index c3a3bcc86d8..c0492758161 100644 --- a/Libraries/LibWeb/Bindings/EventListenerWrapper.h +++ b/Libraries/LibWeb/Bindings/EventListenerWrapper.h @@ -41,7 +41,6 @@ public: private: virtual const char* class_name() const override { return "EventListenerWrapper"; } - virtual void visit_children(JS::Cell::Visitor&) override; NonnullRefPtr m_impl; }; diff --git a/Libraries/LibWeb/Bindings/EventTargetWrapper.cpp b/Libraries/LibWeb/Bindings/EventTargetWrapper.cpp index 0d92f395e4c..0d30ec086f1 100644 --- a/Libraries/LibWeb/Bindings/EventTargetWrapper.cpp +++ b/Libraries/LibWeb/Bindings/EventTargetWrapper.cpp @@ -18,8 +18,8 @@ EventTargetWrapper::EventTargetWrapper(EventTarget& impl) auto event_name = arguments[0].to_string(); ASSERT(arguments[1].is_object()); ASSERT(arguments[1].as_object()->is_function()); - auto listener = adopt(*new EventListener(static_cast(const_cast(arguments[1].as_object())))); - wrap(this_object->heap(), *listener); + auto* function = static_cast(const_cast(arguments[1].as_object())); + auto listener = adopt(*new EventListener(JS::make_handle(function))); static_cast(this_object)->impl().add_event_listener(event_name, move(listener)); return JS::js_undefined(); }); diff --git a/Libraries/LibWeb/DOM/EventListener.cpp b/Libraries/LibWeb/DOM/EventListener.cpp index e69de29bb2d..4cad68964ab 100644 --- a/Libraries/LibWeb/DOM/EventListener.cpp +++ b/Libraries/LibWeb/DOM/EventListener.cpp @@ -0,0 +1,11 @@ +#include +#include + +namespace Web { + +JS::Function* EventListener::function() +{ + return m_function.cell(); +} + +} diff --git a/Libraries/LibWeb/DOM/EventListener.h b/Libraries/LibWeb/DOM/EventListener.h index e6e3a8ede9d..1c32d919b71 100644 --- a/Libraries/LibWeb/DOM/EventListener.h +++ b/Libraries/LibWeb/DOM/EventListener.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include namespace Web { @@ -12,15 +12,15 @@ class EventListener public: using WrapperType = Bindings::EventListenerWrapper; - explicit EventListener(JS::Function* function) - : m_function(function) + explicit EventListener(JS::Handle function) + : m_function(move(function)) { } - JS::Function* function() { return m_function; } + JS::Function* function(); private: - JS::Function* m_function { nullptr }; + JS::Handle m_function; }; }