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