diff --git a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp
index e675d4f4f92..7f6fd502b19 100644
--- a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp
+++ b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2024, Tim Ledbetter
+ * Copyright (c) 2024, Jamie Mansfield
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -7,6 +8,7 @@
#include
#include
#include
+#include
#include
namespace Web::HTML {
@@ -29,4 +31,16 @@ 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);
+}
+
}
diff --git a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h
index 27a3a602441..66a658cf53b 100644
--- a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h
+++ b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2024, Tim Ledbetter
+ * Copyright (c) 2024, Jamie Mansfield
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@@ -16,10 +17,14 @@ class ServiceWorkerContainer : public DOM::EventTarget {
public:
[[nodiscard]] static JS::NonnullGCPtr create(JS::Realm& realm);
-
- explicit ServiceWorkerContainer(JS::Realm&);
virtual ~ServiceWorkerContainer() override = default;
+ WebIDL::CallbackType* onmessage();
+ void set_onmessage(WebIDL::CallbackType*);
+
+private:
+ explicit ServiceWorkerContainer(JS::Realm&);
+
virtual void initialize(JS::Realm&) override;
};
diff --git a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl
index f3271cd2462..dad3b0f975a 100644
--- a/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl
+++ b/Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl
@@ -18,7 +18,7 @@ interface ServiceWorkerContainer : EventTarget {
// events
[FIXME] attribute EventHandler oncontrollerchange;
- [FIXME] attribute EventHandler onmessage; // event.source of message events is ServiceWorker object
+ attribute EventHandler onmessage; // event.source of message events is ServiceWorker object
[FIXME] attribute EventHandler onmessageerror;
};