From 755b63132b72cb25bd358415bf2fdf2be3c14c47 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Mon, 28 Oct 2024 20:14:18 +1300 Subject: [PATCH] LibWeb: Implement DedicatedWorkerGlobalScope postMessage(msg, transfer) Unfortunately the added test (which passes locally) is skipped as it is based off other Worker tests which are also skipped due to being flakey in CI. --- Tests/LibWeb/TestConfig.ini | 1 + .../Worker/Worker-postMessage-transfer.txt | 1 + .../Worker/Worker-postMessage-transfer.html | 29 +++++++++++++++++++ .../HTML/DedicatedWorkerGlobalScope.cpp | 10 +++++++ .../LibWeb/HTML/DedicatedWorkerGlobalScope.h | 1 + .../HTML/DedicatedWorkerGlobalScope.idl | 3 +- 6 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 Tests/LibWeb/Text/expected/Worker/Worker-postMessage-transfer.txt create mode 100644 Tests/LibWeb/Text/input/Worker/Worker-postMessage-transfer.html diff --git a/Tests/LibWeb/TestConfig.ini b/Tests/LibWeb/TestConfig.ini index 8309f1ec7a9..641e2fb71dd 100644 --- a/Tests/LibWeb/TestConfig.ini +++ b/Tests/LibWeb/TestConfig.ini @@ -15,3 +15,4 @@ Text/input/Worker/Worker-importScripts.html Text/input/Worker/Worker-location.html Text/input/Worker/Worker-module.html Text/input/Worker/Worker-performance.html +Text/input/Worker/Worker-postMessage-transfer.html diff --git a/Tests/LibWeb/Text/expected/Worker/Worker-postMessage-transfer.txt b/Tests/LibWeb/Text/expected/Worker/Worker-postMessage-transfer.txt new file mode 100644 index 00000000000..7db7e90e53f --- /dev/null +++ b/Tests/LibWeb/Text/expected/Worker/Worker-postMessage-transfer.txt @@ -0,0 +1 @@ +Message received from worker: Hello, world diff --git a/Tests/LibWeb/Text/input/Worker/Worker-postMessage-transfer.html b/Tests/LibWeb/Text/input/Worker/Worker-postMessage-transfer.html new file mode 100644 index 00000000000..7d8b1e9227e --- /dev/null +++ b/Tests/LibWeb/Text/input/Worker/Worker-postMessage-transfer.html @@ -0,0 +1,29 @@ + + diff --git a/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.cpp b/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.cpp index 213c4fee4b8..d8189d32c48 100644 --- a/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.cpp +++ b/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.cpp @@ -48,6 +48,7 @@ void DedicatedWorkerGlobalScope::finalize() WindowOrWorkerGlobalScopeMixin::finalize(); } +// https://html.spec.whatwg.org/multipage/workers.html#dom-dedicatedworkerglobalscope-postmessage-options WebIDL::ExceptionOr DedicatedWorkerGlobalScope::post_message(JS::Value message, StructuredSerializeOptions const& options) { // The postMessage(message, transfer) and postMessage(message, options) methods on DedicatedWorkerGlobalScope objects act as if, @@ -56,6 +57,15 @@ WebIDL::ExceptionOr DedicatedWorkerGlobalScope::post_message(JS::Value mes return m_internal_port->post_message(message, options); } +// https://html.spec.whatwg.org/multipage/workers.html#dom-dedicatedworkerglobalscope-postmessage +WebIDL::ExceptionOr DedicatedWorkerGlobalScope::post_message(JS::Value message, Vector> const& transfer) +{ + // The postMessage(message, transfer) and postMessage(message, options) methods on DedicatedWorkerGlobalScope objects act as if, + // when invoked, it 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_internal_port->post_message(message, transfer); +} + #undef __ENUMERATE #define __ENUMERATE(attribute_name, event_name) \ void DedicatedWorkerGlobalScope::set_##attribute_name(WebIDL::CallbackType* value) \ diff --git a/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.h b/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.h index 15f19116d0a..438a11b2f68 100644 --- a/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.h +++ b/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.h @@ -26,6 +26,7 @@ public: virtual ~DedicatedWorkerGlobalScope() override; WebIDL::ExceptionOr post_message(JS::Value message, StructuredSerializeOptions const&); + WebIDL::ExceptionOr post_message(JS::Value message, Vector> const& transfer); void set_name(String name) { m_name = move(name); } String name() const { return m_name; } diff --git a/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.idl b/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.idl index d3084eb0728..0f0aa79ed50 100644 --- a/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.idl +++ b/Userland/Libraries/LibWeb/HTML/DedicatedWorkerGlobalScope.idl @@ -5,8 +5,7 @@ interface DedicatedWorkerGlobalScope : WorkerGlobalScope { [Replaceable] readonly attribute DOMString name; - // 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 = {}); undefined close();