1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 17:47:36 +00:00

LibWeb: Use a JS::Handle to keep the EventListener function alive

This commit is contained in:
Andreas Kling 2020-03-18 20:05:15 +01:00
parent a119b61782
commit 41f3817b36
5 changed files with 18 additions and 14 deletions

View file

@ -14,11 +14,5 @@ EventListenerWrapper::~EventListenerWrapper()
{
}
void EventListenerWrapper::visit_children(JS::Cell::Visitor& visitor)
{
Wrapper::visit_children(visitor);
visitor.visit(impl().function());
}
}
}

View file

@ -41,7 +41,6 @@ public:
private:
virtual const char* class_name() const override { return "EventListenerWrapper"; }
virtual void visit_children(JS::Cell::Visitor&) override;
NonnullRefPtr<EventListener> m_impl;
};

View file

@ -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<JS::Function*>(const_cast<Object*>(arguments[1].as_object()))));
wrap(this_object->heap(), *listener);
auto* function = static_cast<JS::Function*>(const_cast<Object*>(arguments[1].as_object()));
auto listener = adopt(*new EventListener(JS::make_handle(function)));
static_cast<EventTargetWrapper*>(this_object)->impl().add_event_listener(event_name, move(listener));
return JS::js_undefined();
});