diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp index 7f90ef1ff..a5e5b90e9 100644 --- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -8915,18 +8915,17 @@ nsGlobalWindow::PostMessageMoz(JSContext* aCx, JS::Handle aMessage, void nsGlobalWindow::PostMessageMoz(JSContext* aCx, JS::Handle aMessage, const nsAString& aTargetOrigin, - const Optional>& aTransfer, + const Sequence& aTransfer, nsIPrincipal& aSubjectPrincipal, ErrorResult& aError) { JS::Rooted transferArray(aCx, JS::UndefinedValue()); - if (aTransfer.WasPassed()) { - const Sequence& values = aTransfer.Value(); - + if (!aTransfer.IsEmpty()) { // The input sequence only comes from the generated bindings code, which // ensures it is rooted. JS::HandleValueArray elements = - JS::HandleValueArray::fromMarkedLocation(values.Length(), values.Elements()); + JS::HandleValueArray::fromMarkedLocation(aTransfer.Length(), + aTransfer.Elements()); transferArray = JS::ObjectOrNullValue(JS_NewArrayObject(aCx, elements)); if (transferArray.isNull()) { diff --git a/dom/base/nsGlobalWindow.h b/dom/base/nsGlobalWindow.h index 382d6243b..19dcb0a50 100644 --- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -968,7 +968,7 @@ public: mozilla::ErrorResult& aError); void PostMessageMoz(JSContext* aCx, JS::Handle aMessage, const nsAString& aTargetOrigin, - const mozilla::dom::Optional >& aTransfer, + const mozilla::dom::Sequence& aTransfer, nsIPrincipal& aSubjectPrincipal, mozilla::ErrorResult& aError); int32_t SetTimeout(JSContext* aCx, mozilla::dom::Function& aFunction, diff --git a/dom/messagechannel/MessagePort.cpp b/dom/messagechannel/MessagePort.cpp index 19fa0b45c..ecc000bf3 100644 --- a/dom/messagechannel/MessagePort.cpp +++ b/dom/messagechannel/MessagePort.cpp @@ -395,20 +395,19 @@ MessagePort::WrapObject(JSContext* aCx, JS::Handle aGivenProto) } void -MessagePort::PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, +MessagePort::PostMessage(JSContext* aCx, + JS::Handle aMessage, + const Sequence& aTransferable, ErrorResult& aRv) { // We *must* clone the data here, or the JS::Value could be modified // by script JS::Rooted transferable(aCx, JS::UndefinedValue()); - if (aTransferable.WasPassed()) { - const Sequence& realTransferable = aTransferable.Value(); - + if (!aTransferable.IsEmpty()) { // Here we want to check if the transerable object list contains // this port. No other checks are done. - for (const JS::Value& value : realTransferable) { + for (const JS::Value& value : aTransferable) { if (!value.isObject()) { continue; } @@ -430,8 +429,8 @@ MessagePort::PostMessage(JSContext* aCx, JS::Handle aMessage, // The input sequence only comes from the generated bindings code, which // ensures it is rooted. JS::HandleValueArray elements = - JS::HandleValueArray::fromMarkedLocation(realTransferable.Length(), - realTransferable.Elements()); + JS::HandleValueArray::fromMarkedLocation(aTransferable.Length(), + aTransferable.Elements()); JSObject* array = JS_NewArrayObject(aCx, elements); diff --git a/dom/messagechannel/MessagePort.h b/dom/messagechannel/MessagePort.h index c32707b59..ba7059d3f 100644 --- a/dom/messagechannel/MessagePort.h +++ b/dom/messagechannel/MessagePort.h @@ -63,7 +63,7 @@ public: void PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); void Start(); diff --git a/dom/webidl/Client.webidl b/dom/webidl/Client.webidl index 3e79c6a63..df73a79d7 100644 --- a/dom/webidl/Client.webidl +++ b/dom/webidl/Client.webidl @@ -15,7 +15,7 @@ interface Client { readonly attribute DOMString id; [Throws] - void postMessage(any message, optional sequence transfer); + void postMessage(any message, optional sequence transfer = []); }; [Exposed=ServiceWorker] diff --git a/dom/webidl/DedicatedWorkerGlobalScope.webidl b/dom/webidl/DedicatedWorkerGlobalScope.webidl index 26dca58da..75a403267 100644 --- a/dom/webidl/DedicatedWorkerGlobalScope.webidl +++ b/dom/webidl/DedicatedWorkerGlobalScope.webidl @@ -16,7 +16,7 @@ Exposed=DedicatedWorker] interface DedicatedWorkerGlobalScope : WorkerGlobalScope { [Throws] - void postMessage(any message, optional sequence transfer); + void postMessage(any message, optional sequence transfer = []); attribute EventHandler onmessage; }; diff --git a/dom/webidl/MessagePort.webidl b/dom/webidl/MessagePort.webidl index 59c61a714..aef7e4bd1 100644 --- a/dom/webidl/MessagePort.webidl +++ b/dom/webidl/MessagePort.webidl @@ -10,7 +10,7 @@ [Exposed=(Window,Worker,System)] interface MessagePort : EventTarget { [Throws] - void postMessage(any message, optional sequence transferable); + void postMessage(any message, optional sequence transferable = []); void start(); void close(); diff --git a/dom/webidl/ServiceWorker.webidl b/dom/webidl/ServiceWorker.webidl index 8c3749e94..17fc903dc 100644 --- a/dom/webidl/ServiceWorker.webidl +++ b/dom/webidl/ServiceWorker.webidl @@ -21,7 +21,7 @@ interface ServiceWorker : EventTarget { // FIXME(catalinb): Should inherit this from Worker. [Throws] - void postMessage(any message, optional sequence transferable); + void postMessage(any message, optional sequence transferable = []); }; ServiceWorker implements AbstractWorker; diff --git a/dom/webidl/Window.webidl b/dom/webidl/Window.webidl index 247c64a09..42af48c19 100644 --- a/dom/webidl/Window.webidl +++ b/dom/webidl/Window.webidl @@ -85,7 +85,7 @@ typedef any Transferable; any showModalDialog(DOMString url, optional any argument, optional DOMString options = ""); [Throws, CrossOriginCallable, NeedsSubjectPrincipal] - void postMessage(any message, DOMString targetOrigin, optional sequence transfer); + void postMessage(any message, DOMString targetOrigin, optional sequence transfer = []); // also has obsolete members }; diff --git a/dom/webidl/Worker.webidl b/dom/webidl/Worker.webidl index 158a502d6..4bc79e9e1 100644 --- a/dom/webidl/Worker.webidl +++ b/dom/webidl/Worker.webidl @@ -19,7 +19,7 @@ interface Worker : EventTarget { void terminate(); [Throws] - void postMessage(any message, optional sequence transfer); + void postMessage(any message, optional sequence transfer = []); attribute EventHandler onmessage; }; diff --git a/dom/workers/ServiceWorker.cpp b/dom/workers/ServiceWorker.cpp index 6a6995d59..5d341f468 100644 --- a/dom/workers/ServiceWorker.cpp +++ b/dom/workers/ServiceWorker.cpp @@ -78,7 +78,7 @@ ServiceWorker::GetScriptURL(nsString& aURL) const void ServiceWorker::PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv) { if (State() == ServiceWorkerState::Redundant) { diff --git a/dom/workers/ServiceWorker.h b/dom/workers/ServiceWorker.h index e49f334e6..9bf2e5c47 100644 --- a/dom/workers/ServiceWorker.h +++ b/dom/workers/ServiceWorker.h @@ -64,7 +64,7 @@ public: void PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); private: diff --git a/dom/workers/ServiceWorkerClient.cpp b/dom/workers/ServiceWorkerClient.cpp index 6ed3a6ea4..29f7f8b84 100644 --- a/dom/workers/ServiceWorkerClient.cpp +++ b/dom/workers/ServiceWorkerClient.cpp @@ -191,7 +191,7 @@ private: void ServiceWorkerClient::PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv) { WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate(); @@ -199,12 +199,10 @@ ServiceWorkerClient::PostMessage(JSContext* aCx, JS::Handle aMessage, workerPrivate->AssertIsOnWorkerThread(); JS::Rooted transferable(aCx, JS::UndefinedValue()); - if (aTransferable.WasPassed()) { - const Sequence& realTransferable = aTransferable.Value(); - + if (!aTransferable.IsEmpty()) { JS::HandleValueArray elements = - JS::HandleValueArray::fromMarkedLocation(realTransferable.Length(), - realTransferable.Elements()); + JS::HandleValueArray::fromMarkedLocation(aTransferable.Length(), + aTransferable.Elements()); JSObject* array = JS_NewArrayObject(aCx, elements); if (!array) { diff --git a/dom/workers/ServiceWorkerClient.h b/dom/workers/ServiceWorkerClient.h index 36a9cc168..fbeb28b47 100644 --- a/dom/workers/ServiceWorkerClient.h +++ b/dom/workers/ServiceWorkerClient.h @@ -92,7 +92,7 @@ public: void PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; diff --git a/dom/workers/ServiceWorkerPrivate.cpp b/dom/workers/ServiceWorkerPrivate.cpp index 5af89ed38..b02053bef 100644 --- a/dom/workers/ServiceWorkerPrivate.cpp +++ b/dom/workers/ServiceWorkerPrivate.cpp @@ -539,7 +539,7 @@ public: nsresult ServiceWorkerPrivate::SendMessageEvent(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, UniquePtr&& aClientInfo) { AssertIsOnMainThread(); @@ -550,10 +550,10 @@ ServiceWorkerPrivate::SendMessageEvent(JSContext* aCx, } JS::Rooted transferable(aCx, JS::UndefinedHandleValue); - if (aTransferable.WasPassed()) { - const Sequence& value = aTransferable.Value(); + if (!aTransferable.IsEmpty()) { JS::HandleValueArray elements = - JS::HandleValueArray::fromMarkedLocation(value.Length(), value.Elements()); + JS::HandleValueArray::fromMarkedLocation(aTransferable.Length(), + aTransferable.Elements()); JSObject* array = JS_NewArrayObject(aCx, elements); if (!array) { diff --git a/dom/workers/ServiceWorkerPrivate.h b/dom/workers/ServiceWorkerPrivate.h index 56f63155d..d2493d784 100644 --- a/dom/workers/ServiceWorkerPrivate.h +++ b/dom/workers/ServiceWorkerPrivate.h @@ -75,7 +75,7 @@ public: nsresult SendMessageEvent(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, UniquePtr&& aClientInfo); // This is used to validate the worker script and continue the installation diff --git a/dom/workers/SharedWorker.cpp b/dom/workers/SharedWorker.cpp index dddcc686e..1808affce 100644 --- a/dom/workers/SharedWorker.cpp +++ b/dom/workers/SharedWorker.cpp @@ -145,7 +145,7 @@ SharedWorker::Close() void SharedWorker::PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv) { AssertIsOnMainThread(); diff --git a/dom/workers/SharedWorker.h b/dom/workers/SharedWorker.h index 869805883..ea2fa641f 100644 --- a/dom/workers/SharedWorker.h +++ b/dom/workers/SharedWorker.h @@ -95,7 +95,7 @@ private: // Only called by MessagePort. void PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); }; diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp index b3eb03b5a..defaeeb01 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -2967,7 +2967,7 @@ void WorkerPrivateParent::PostMessageInternal( JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv) { AssertIsOnParentThread(); @@ -2980,14 +2980,12 @@ WorkerPrivateParent::PostMessageInternal( } JS::Rooted transferable(aCx, JS::UndefinedValue()); - if (aTransferable.WasPassed()) { - const Sequence& realTransferable = aTransferable.Value(); - + if (!aTransferable.IsEmpty()) { // The input sequence only comes from the generated bindings code, which // ensures it is rooted. JS::HandleValueArray elements = - JS::HandleValueArray::fromMarkedLocation(realTransferable.Length(), - realTransferable.Elements()); + JS::HandleValueArray::fromMarkedLocation(aTransferable.Length(), + aTransferable.Elements()); JSObject* array = JS_NewArrayObject(aCx, elements); @@ -3037,8 +3035,9 @@ WorkerPrivateParent::PostMessageInternal( template void WorkerPrivateParent::PostMessage( - JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + JSContext* aCx, + JS::Handle aMessage, + const Sequence& aTransferable, ErrorResult& aRv) { PostMessageInternal(aCx, aMessage, aTransferable, aRv); @@ -5618,20 +5617,18 @@ void WorkerPrivate::PostMessageToParentInternal( JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv) { AssertIsOnWorkerThread(); JS::Rooted transferable(aCx, JS::UndefinedValue()); - if (aTransferable.WasPassed()) { - const Sequence& realTransferable = aTransferable.Value(); - + if (!aTransferable.IsEmpty()) { // The input sequence only comes from the generated bindings code, which // ensures it is rooted. JS::HandleValueArray elements = - JS::HandleValueArray::fromMarkedLocation(realTransferable.Length(), - realTransferable.Elements()); + JS::HandleValueArray::fromMarkedLocation(aTransferable.Length(), + aTransferable.Elements()); JSObject* array = JS_NewArrayObject(aCx, elements); if (!array) { diff --git a/dom/workers/WorkerPrivate.h b/dom/workers/WorkerPrivate.h index 61dd2e038..3eaf9478b 100644 --- a/dom/workers/WorkerPrivate.h +++ b/dom/workers/WorkerPrivate.h @@ -288,7 +288,7 @@ private: void PostMessageInternal(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); nsresult @@ -399,7 +399,7 @@ public: void PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); void @@ -1160,7 +1160,7 @@ public: void PostMessageToParent(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv) { PostMessageToParentInternal(aCx, aMessage, aTransferable, aRv); @@ -1170,7 +1170,7 @@ public: PostMessageToParentMessagePort( JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); void @@ -1486,7 +1486,7 @@ private: void PostMessageToParentInternal(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); void diff --git a/dom/workers/WorkerScope.cpp b/dom/workers/WorkerScope.cpp index 51fc34a18..572f7f6ad 100644 --- a/dom/workers/WorkerScope.cpp +++ b/dom/workers/WorkerScope.cpp @@ -543,7 +543,7 @@ DedicatedWorkerGlobalScope::WrapGlobalObject(JSContext* aCx, void DedicatedWorkerGlobalScope::PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv) { mWorkerPrivate->AssertIsOnWorkerThread(); diff --git a/dom/workers/WorkerScope.h b/dom/workers/WorkerScope.h index 84ae4afdb..384e104df 100644 --- a/dom/workers/WorkerScope.h +++ b/dom/workers/WorkerScope.h @@ -216,7 +216,7 @@ public: void PostMessage(JSContext* aCx, JS::Handle aMessage, - const Optional>& aTransferable, + const Sequence& aTransferable, ErrorResult& aRv); IMPL_EVENT_HANDLER(message)