Browse Source

LibWeb: Implement ServiceWorkerContainer.onmessage

Jamie Mansfield 10 months ago
parent
commit
4b1273cbde

+ 14 - 0
Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.cpp

@@ -1,5 +1,6 @@
 /*
 /*
  * Copyright (c) 2024, Tim Ledbetter <tim.ledbetter@ladybird.org>
  * Copyright (c) 2024, Tim Ledbetter <tim.ledbetter@ladybird.org>
+ * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
  *
  *
  * SPDX-License-Identifier: BSD-2-Clause
  * SPDX-License-Identifier: BSD-2-Clause
  */
  */
@@ -7,6 +8,7 @@
 #include <LibJS/Runtime/Realm.h>
 #include <LibJS/Runtime/Realm.h>
 #include <LibWeb/Bindings/Intrinsics.h>
 #include <LibWeb/Bindings/Intrinsics.h>
 #include <LibWeb/Bindings/ServiceWorkerContainerPrototype.h>
 #include <LibWeb/Bindings/ServiceWorkerContainerPrototype.h>
+#include <LibWeb/HTML/EventNames.h>
 #include <LibWeb/HTML/ServiceWorkerContainer.h>
 #include <LibWeb/HTML/ServiceWorkerContainer.h>
 
 
 namespace Web::HTML {
 namespace Web::HTML {
@@ -29,4 +31,16 @@ JS::NonnullGCPtr<ServiceWorkerContainer> ServiceWorkerContainer::create(JS::Real
     return realm.heap().allocate<ServiceWorkerContainer>(realm, realm);
     return realm.heap().allocate<ServiceWorkerContainer>(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);
+}
+
 }
 }

+ 6 - 1
Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.h

@@ -1,5 +1,6 @@
 /*
 /*
  * Copyright (c) 2024, Tim Ledbetter <tim.ledbetter@ladybird.org>
  * Copyright (c) 2024, Tim Ledbetter <tim.ledbetter@ladybird.org>
+ * Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
  *
  *
  * SPDX-License-Identifier: BSD-2-Clause
  * SPDX-License-Identifier: BSD-2-Clause
  */
  */
@@ -16,9 +17,13 @@ class ServiceWorkerContainer : public DOM::EventTarget {
 
 
 public:
 public:
     [[nodiscard]] static JS::NonnullGCPtr<ServiceWorkerContainer> create(JS::Realm& realm);
     [[nodiscard]] static JS::NonnullGCPtr<ServiceWorkerContainer> create(JS::Realm& realm);
+    virtual ~ServiceWorkerContainer() override = default;
+
+    WebIDL::CallbackType* onmessage();
+    void set_onmessage(WebIDL::CallbackType*);
 
 
+private:
     explicit ServiceWorkerContainer(JS::Realm&);
     explicit ServiceWorkerContainer(JS::Realm&);
-    virtual ~ServiceWorkerContainer() override = default;
 
 
     virtual void initialize(JS::Realm&) override;
     virtual void initialize(JS::Realm&) override;
 };
 };

+ 1 - 1
Userland/Libraries/LibWeb/HTML/ServiceWorkerContainer.idl

@@ -18,7 +18,7 @@ interface ServiceWorkerContainer : EventTarget {
 
 
     // events
     // events
     [FIXME] attribute EventHandler oncontrollerchange;
     [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;
     [FIXME] attribute EventHandler onmessageerror;
 };
 };