From e28e4f6700c60d200c871a025ab55d68c3b88d62 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 18 Nov 2024 19:03:18 +0100 Subject: [PATCH] LibWeb: Update handling of "once" event listeners now that spec is fixed https://github.com/whatwg/dom/issues/1323 was fixed, and the solution ended up slightly different from what we had, so let's follow the spec. --- Libraries/LibWeb/DOM/EventDispatcher.cpp | 4 ++-- Libraries/LibWeb/DOM/EventTarget.cpp | 11 ----------- Libraries/LibWeb/DOM/EventTarget.h | 1 - 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/Libraries/LibWeb/DOM/EventDispatcher.cpp b/Libraries/LibWeb/DOM/EventDispatcher.cpp index 28f426cc2f1..a03dd7c6f1d 100644 --- a/Libraries/LibWeb/DOM/EventDispatcher.cpp +++ b/Libraries/LibWeb/DOM/EventDispatcher.cpp @@ -56,9 +56,9 @@ bool EventDispatcher::inner_invoke(Event& event, Vectorcapture) continue; - // 5. If listener’s once is true, then remove listener from event’s currentTarget attribute value’s event listener list. + // 5. If listener’s once is true, then remove an event listener given event’s currentTarget attribute value and listener. if (listener->once) - event.current_target()->remove_from_event_listener_list(*listener); + event.current_target()->remove_an_event_listener(*listener); // 6. Let global be listener callback’s associated Realm’s global object. auto& callback = listener->callback->callback(); diff --git a/Libraries/LibWeb/DOM/EventTarget.cpp b/Libraries/LibWeb/DOM/EventTarget.cpp index 39f622b9af9..b4f13dcd30a 100644 --- a/Libraries/LibWeb/DOM/EventTarget.cpp +++ b/Libraries/LibWeb/DOM/EventTarget.cpp @@ -249,17 +249,6 @@ void EventTarget::remove_an_event_listener(DOMEventListener& listener) m_data->event_listener_list.remove_first_matching([&](auto& entry) { return entry.ptr() == &listener; }); } -void EventTarget::remove_from_event_listener_list(DOMEventListener& listener) -{ - if (!m_data) - return; - m_data->event_listener_list.remove_first_matching([&](auto& entry) { return entry.ptr() == &listener; }); - - // FIXME: Update this when the spec is updated. - // Spec bug: https://github.com/whatwg/dom/issues/1323 - listener.removed = true; -} - // https://dom.spec.whatwg.org/#dom-eventtarget-dispatchevent WebIDL::ExceptionOr EventTarget::dispatch_event_binding(Event& event) { diff --git a/Libraries/LibWeb/DOM/EventTarget.h b/Libraries/LibWeb/DOM/EventTarget.h index 5b850f43176..7db61acef51 100644 --- a/Libraries/LibWeb/DOM/EventTarget.h +++ b/Libraries/LibWeb/DOM/EventTarget.h @@ -42,7 +42,6 @@ public: void add_an_event_listener(DOMEventListener&); void remove_an_event_listener(DOMEventListener&); - void remove_from_event_listener_list(DOMEventListener&); Vector> event_listener_list();