From bf81e2fd644b969976e9c5d96c22bb7e64c87ab7 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Tue, 29 Oct 2024 01:10:30 +1300 Subject: [PATCH] LibWeb: Implement Worker.postMessage(message, transfer) --- Userland/Libraries/LibWeb/HTML/Worker.cpp | 10 ++++++++++ Userland/Libraries/LibWeb/HTML/Worker.h | 1 + Userland/Libraries/LibWeb/HTML/Worker.idl | 3 +-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/HTML/Worker.cpp b/Userland/Libraries/LibWeb/HTML/Worker.cpp index 0ab93578a32..f79ee851d11 100644 --- a/Userland/Libraries/LibWeb/HTML/Worker.cpp +++ b/Userland/Libraries/LibWeb/HTML/Worker.cpp @@ -132,6 +132,16 @@ WebIDL::ExceptionOr Worker::post_message(JS::Value message, StructuredSeri return m_outside_port->post_message(message, options); } +// https://html.spec.whatwg.org/multipage/workers.html#dom-worker-postmessage +WebIDL::ExceptionOr Worker::post_message(JS::Value message, Vector> const& transfer) +{ + // The postMessage(message, transfer) and postMessage(message, options) methods on Worker objects act as if, + // when invoked, they immediately invoked the respective postMessage(message, transfer) and + // postMessage(message, options) on the port, with the same arguments, and returned the same return value. + + return m_outside_port->post_message(message, transfer); +} + #undef __ENUMERATE #define __ENUMERATE(attribute_name, event_name) \ void Worker::set_##attribute_name(WebIDL::CallbackType* value) \ diff --git a/Userland/Libraries/LibWeb/HTML/Worker.h b/Userland/Libraries/LibWeb/HTML/Worker.h index c66f6ac528d..a60c4a411b3 100644 --- a/Userland/Libraries/LibWeb/HTML/Worker.h +++ b/Userland/Libraries/LibWeb/HTML/Worker.h @@ -36,6 +36,7 @@ public: WebIDL::ExceptionOr terminate(); WebIDL::ExceptionOr post_message(JS::Value message, StructuredSerializeOptions const&); + WebIDL::ExceptionOr post_message(JS::Value message, Vector> const& transfer); virtual ~Worker() = default; diff --git a/Userland/Libraries/LibWeb/HTML/Worker.idl b/Userland/Libraries/LibWeb/HTML/Worker.idl index 1980c0ce0d2..c7ef2855e10 100644 --- a/Userland/Libraries/LibWeb/HTML/Worker.idl +++ b/Userland/Libraries/LibWeb/HTML/Worker.idl @@ -10,8 +10,7 @@ interface Worker : EventTarget { constructor(DOMString scriptURL, optional WorkerOptions options = {}); undefined terminate(); - // FIXME: IDL overload issue here - // FIXME: undefined postMessage(any message, sequence transfer); + undefined postMessage(any message, sequence transfer); undefined postMessage(any message, optional StructuredSerializeOptions options = {}); attribute EventHandler onmessage;