diff --git a/Userland/Libraries/LibWeb/HTML/EventNames.h b/Userland/Libraries/LibWeb/HTML/EventNames.h index dda9ee49aa5..a061c0f31cb 100644 --- a/Userland/Libraries/LibWeb/HTML/EventNames.h +++ b/Userland/Libraries/LibWeb/HTML/EventNames.h @@ -34,6 +34,7 @@ namespace Web::HTML::EventNames { __ENUMERATE_HTML_EVENT(close) \ __ENUMERATE_HTML_EVENT(complete) \ __ENUMERATE_HTML_EVENT(connect) \ + __ENUMERATE_HTML_EVENT(controllerchange) \ __ENUMERATE_HTML_EVENT(contextmenu) \ __ENUMERATE_HTML_EVENT(copy) \ __ENUMERATE_HTML_EVENT(cuechange) \ diff --git a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp index 7f0f0c622c2..1f8d6b56a1c 100644 --- a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp +++ b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp @@ -31,28 +31,17 @@ JS::NonnullGCPtr ServiceWorkerContainer::create(JS::Real return realm.heap().allocate(realm, realm); } -// https://w3c.github.io/ServiceWorker/#dom-serviceworkercontainer-onmessage -WebIDL::CallbackType* ServiceWorkerContainer::onmessage() -{ - return event_handler_attribute(HTML::EventNames::message); -} - -// https://w3c.github.io/ServiceWorker/#dom-serviceworkercontainer-onmessage -void ServiceWorkerContainer::set_onmessage(WebIDL::CallbackType* event_handler) -{ - set_event_handler_attribute(HTML::EventNames::message, event_handler); -} - -// https://w3c.github.io/ServiceWorker/#dom-serviceworkercontainer-onmessageerror -WebIDL::CallbackType* ServiceWorkerContainer::onmessageerror() -{ - return event_handler_attribute(HTML::EventNames::messageerror); -} - -// https://w3c.github.io/ServiceWorker/#dom-serviceworkercontainer-onmessageerror -void ServiceWorkerContainer::set_onmessageerror(WebIDL::CallbackType* event_handler) -{ - set_event_handler_attribute(HTML::EventNames::messageerror, event_handler); -} +#undef __ENUMERATE +#define __ENUMERATE(attribute_name, event_name) \ + void ServiceWorkerContainer::set_##attribute_name(WebIDL::CallbackType* value) \ + { \ + set_event_handler_attribute(event_name, move(value)); \ + } \ + WebIDL::CallbackType* ServiceWorkerContainer::attribute_name() \ + { \ + return event_handler_attribute(event_name); \ + } +ENUMERATE_SERVICE_WORKER_CONTAINER_EVENT_HANDLERS(__ENUMERATE) +#undef __ENUMERATE } diff --git a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h index 164de1fc53a..eeb289b4bc8 100644 --- a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h +++ b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h @@ -9,6 +9,11 @@ #include +#define ENUMERATE_SERVICE_WORKER_CONTAINER_EVENT_HANDLERS(E) \ + E(oncontrollerchange, HTML::EventNames::controllerchange) \ + E(onmessage, HTML::EventNames::message) \ + E(onmessageerror, HTML::EventNames::messageerror) + namespace Web::HTML { class ServiceWorkerContainer : public DOM::EventTarget { @@ -19,10 +24,12 @@ public: [[nodiscard]] static JS::NonnullGCPtr create(JS::Realm& realm); virtual ~ServiceWorkerContainer() override = default; - WebIDL::CallbackType* onmessage(); - void set_onmessage(WebIDL::CallbackType*); - WebIDL::CallbackType* onmessageerror(); - void set_onmessageerror(WebIDL::CallbackType*); +#undef __ENUMERATE +#define __ENUMERATE(attribute_name, event_name) \ + void set_##attribute_name(WebIDL::CallbackType*); \ + WebIDL::CallbackType* attribute_name(); + ENUMERATE_SERVICE_WORKER_CONTAINER_EVENT_HANDLERS(__ENUMERATE) +#undef __ENUMERATE private: explicit ServiceWorkerContainer(JS::Realm&); diff --git a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl index ecf5163dd7b..3884eb7d987 100644 --- a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl +++ b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl @@ -17,7 +17,7 @@ interface ServiceWorkerContainer : EventTarget { [FIXME] undefined startMessages(); // events - [FIXME] attribute EventHandler oncontrollerchange; + attribute EventHandler oncontrollerchange; attribute EventHandler onmessage; // event.source of message events is ServiceWorker object attribute EventHandler onmessageerror; };