#pragma once #include #include #include #include namespace Web { class EventTarget { AK_MAKE_NONCOPYABLE(EventTarget); AK_MAKE_NONMOVABLE(EventTarget); public: virtual ~EventTarget(); void ref() { ref_event_target(); } void unref() { unref_event_target(); } void add_event_listener(String event_name, NonnullRefPtr); virtual void dispatch_event(String event_name) = 0; struct EventListenerRegistration { String event_name; NonnullRefPtr listener; }; const Vector& listeners() const { return m_listeners; } protected: EventTarget(); virtual void ref_event_target() = 0; virtual void unref_event_target() = 0; private: Vector m_listeners; }; }