diff --git a/dom/webidl/DedicatedWorkerGlobalScope.webidl b/dom/webidl/DedicatedWorkerGlobalScope.webidl index 57b48839f70d..b9e9808c5e4a 100644 --- a/dom/webidl/DedicatedWorkerGlobalScope.webidl +++ b/dom/webidl/DedicatedWorkerGlobalScope.webidl @@ -19,7 +19,9 @@ interface DedicatedWorkerGlobalScope : WorkerGlobalScope { readonly attribute DOMString name; [Throws] - void postMessage(any message, optional sequence transfer = []); + void postMessage(any message, sequence transfer); + [Throws] + void postMessage(any message, optional PostMessageOptions options); void close(); diff --git a/dom/webidl/Worker.webidl b/dom/webidl/Worker.webidl index d8ddccbca45f..c3786bb993b4 100644 --- a/dom/webidl/Worker.webidl +++ b/dom/webidl/Worker.webidl @@ -18,7 +18,9 @@ interface Worker : EventTarget { void terminate(); [Throws] - void postMessage(any message, optional sequence transfer = []); + void postMessage(any message, sequence transfer); + [Throws] + void postMessage(any message, optional PostMessageOptions aOptions); attribute EventHandler onmessage; attribute EventHandler onmessageerror; diff --git a/dom/workers/Worker.cpp b/dom/workers/Worker.cpp index 0da7814a5ca2..d2730c2af1be 100644 --- a/dom/workers/Worker.cpp +++ b/dom/workers/Worker.cpp @@ -124,6 +124,14 @@ Worker::PostMessage(JSContext* aCx, JS::Handle aMessage, } } +void +Worker::PostMessage(JSContext* aCx, JS::Handle aMessage, + const PostMessageOptions& aOptions, + ErrorResult& aRv) +{ + PostMessage(aCx, aMessage, aOptions.mTransfer, aRv); +} + void Worker::Terminate() { diff --git a/dom/workers/Worker.h b/dom/workers/Worker.h index c0badbe8b848..601d106f4dec 100644 --- a/dom/workers/Worker.h +++ b/dom/workers/Worker.h @@ -19,6 +19,7 @@ namespace mozilla { namespace dom { +struct PostMessageOptions; struct WorkerOptions; class WorkerPrivate; @@ -43,6 +44,11 @@ public: const Sequence& aTransferable, ErrorResult& aRv); + void + PostMessage(JSContext* aCx, JS::Handle aMessage, + const PostMessageOptions& aOptions, + ErrorResult& aRv); + void Terminate(); diff --git a/dom/workers/WorkerScope.cpp b/dom/workers/WorkerScope.cpp index 977336fb0c63..165044348d3d 100644 --- a/dom/workers/WorkerScope.cpp +++ b/dom/workers/WorkerScope.cpp @@ -614,6 +614,16 @@ DedicatedWorkerGlobalScope::PostMessage(JSContext* aCx, mWorkerPrivate->PostMessageToParent(aCx, aMessage, aTransferable, aRv); } +void +DedicatedWorkerGlobalScope::PostMessage(JSContext* aCx, + JS::Handle aMessage, + const PostMessageOptions& aOptions, + ErrorResult& aRv) +{ + mWorkerPrivate->AssertIsOnWorkerThread(); + mWorkerPrivate->PostMessageToParent(aCx, aMessage, aOptions.mTransfer, aRv); +} + void DedicatedWorkerGlobalScope::Close() { diff --git a/dom/workers/WorkerScope.h b/dom/workers/WorkerScope.h index 42f60c5ed660..e8eb14f4e094 100644 --- a/dom/workers/WorkerScope.h +++ b/dom/workers/WorkerScope.h @@ -33,6 +33,7 @@ class Function; class IDBFactory; enum class ImageBitmapFormat : uint8_t; class Performance; +struct PostMessageOptions; class Promise; class RequestOrUSVString; class WorkerLocation; @@ -261,6 +262,10 @@ public: PostMessage(JSContext* aCx, JS::Handle aMessage, const Sequence& aTransferable, ErrorResult& aRv); + void + PostMessage(JSContext* aCx, JS::Handle aMessage, + const PostMessageOptions& aOptions, + ErrorResult& aRv); void Close(); diff --git a/testing/web-platform/meta/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-dictionary.html.ini b/testing/web-platform/meta/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-dictionary.html.ini deleted file mode 100644 index 5b2ecd5ab47b..000000000000 --- a/testing/web-platform/meta/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-dictionary.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[second-argument-dictionary.html] - [Using dictionary as postMessage's second argument] - expected: FAIL -