diff --git a/testing/web-platform/meta/MANIFEST.json b/testing/web-platform/meta/MANIFEST.json index 010b2a61a33e3..fb7e818801389 100644 --- a/testing/web-platform/meta/MANIFEST.json +++ b/testing/web-platform/meta/MANIFEST.json @@ -1810185,6 +1810185,34 @@ resources / postmessage - +dictionary +- +transferables +- +worker +. +js +" +: +[ +[ +{ +} +] +] +" +service +- +workers +/ +service +- +worker +/ +resources +/ +postmessage +- msgport - to @@ -2545694,6 +2545722,40 @@ message - channels / +dictionary +- +transferrable +. +html +" +: +[ +[ +" +/ +webmessaging +/ +message +- +channels +/ +dictionary +- +transferrable +. +html +" +{ +} +] +] +" +webmessaging +/ +message +- +channels +/ worker . html @@ -2569402,6 +2569464,48 @@ second - argument - +dictionary +. +html +" +: +[ +[ +" +/ +workers +/ +interfaces +/ +DedicatedWorkerGlobalScope +/ +postMessage +/ +second +- +argument +- +dictionary +. +html +" +{ +} +] +] +" +workers +/ +interfaces +/ +DedicatedWorkerGlobalScope +/ +postMessage +/ +second +- +argument +- null - in @@ -4226478,7 +4226582,7 @@ html : [ " -6b2f6d78e12210647a47e2eb317c6387e8487ca2 +3d73afe9796114f42e614292ef4b180dd78cdee5 " " testharness @@ -4233175,6 +4233279,36 @@ resources / postmessage - +dictionary +- +transferables +- +worker +. +js +" +: +[ +" +87a4500d754ab02465e109899e7f1ffdc0bdca53 +" +" +support +" +] +" +service +- +workers +/ +service +- +worker +/ +resources +/ +postmessage +- msgport - to @@ -4331954,6 +4332088,28 @@ message - channels / +dictionary +- +transferrable +. +html +" +: +[ +" +f7ab1086f7e7978f00a4901d7aa47d8675ee1373 +" +" +testharness +" +] +" +webmessaging +/ +message +- +channels +/ worker . html @@ -4367643,6 +4367799,32 @@ second - argument - +dictionary +. +html +" +: +[ +" +e086dc13db658ef7e87a3046a89c5d85bd25cca7 +" +" +testharness +" +] +" +workers +/ +interfaces +/ +DedicatedWorkerGlobalScope +/ +postMessage +/ +second +- +argument +- null - in @@ -4367680,7 +4367862,7 @@ html : [ " -e81a56bad3d3d11193194777f7342c8fc190e512 +4a03c830a29fb2937bc07cc50ed167201bd8486f " " testharness diff --git a/testing/web-platform/tests/service-workers/service-worker/postmessage.https.html b/testing/web-platform/tests/service-workers/service-worker/postmessage.https.html index 4d01140c2bd85..ea03cefb71d22 100644 --- a/testing/web-platform/tests/service-workers/service-worker/postmessage.https.html +++ b/testing/web-platform/tests/service-workers/service-worker/postmessage.https.html @@ -1322,6 +1322,362 @@ ' ) ; +promise_test +( +t += +> +{ +var +script += +' +resources +/ +postmessage +- +dictionary +- +transferables +- +worker +. +js +' +; +var +scope += +' +resources +/ +blank +. +html +' +; +var +sw += +navigator +. +serviceWorker +; +var +message += +' +Hello +world +! +' +; +var +text_encoder += +new +TextEncoder +; +var +text_decoder += +new +TextDecoder +; +return +service_worker_unregister_and_register +( +t +script +scope +) +. +then +( +r += +> +{ +t +. +add_cleanup +( +( +) += +> +r +. +unregister +( +) +) +; +var +ab += +text_encoder +. +encode +( +message +) +; +assert_equals +( +ab +. +byteLength +message +. +length +) +; +r +. +installing +. +postMessage +( +ab +{ +transfer +: +[ +ab +. +buffer +] +} +) +; +assert_equals +( +text_decoder +. +decode +( +ab +) +' +' +) +; +assert_equals +( +ab +. +byteLength +0 +) +; +return +new +Promise +( +resolve += +> +{ +sw +. +onmessage += +resolve +; +} +) +; +} +) +. +then +( +e += +> +{ +/ +/ +Verify +the +integrity +of +the +transferred +array +buffer +. +assert_equals +( +e +. +data +. +content +message +) +; +assert_equals +( +e +. +data +. +byteLength +message +. +length +) +; +return +new +Promise +( +resolve += +> +{ +sw +. +onmessage += +resolve +; +} +) +; +} +) +. +then +( +e += +> +{ +/ +/ +Verify +the +integrity +of +the +array +buffer +sent +back +from +/ +/ +ServiceWorker +via +Client +. +postMessage +. +assert_equals +( +text_decoder +. +decode +( +e +. +data +) +message +) +; +assert_equals +( +e +. +data +. +byteLength +message +. +length +) +; +return +new +Promise +( +resolve += +> +{ +sw +. +onmessage += +resolve +; +} +) +; +} +) +. +then +( +e += +> +{ +/ +/ +Verify +that +the +array +buffer +on +ServiceWorker +is +neutered +. +assert_equals +( +e +. +data +. +content +' +' +) +; +assert_equals +( +e +. +data +. +byteLength +0 +) +; +} +) +; +} +' +postMessage +with +dictionary +a +transferable +ArrayBuffer +between +ServiceWorker +and +Client +' +) +; < / script diff --git a/testing/web-platform/tests/service-workers/service-worker/resources/postmessage-dictionary-transferables-worker.js b/testing/web-platform/tests/service-workers/service-worker/resources/postmessage-dictionary-transferables-worker.js new file mode 100644 index 0000000000000..b810f3ddde6e7 --- /dev/null +++ b/testing/web-platform/tests/service-workers/service-worker/resources/postmessage-dictionary-transferables-worker.js @@ -0,0 +1,165 @@ +var +messageHandler += +function +( +port +e +) +{ +var +text_decoder += +new +TextDecoder +; +port +. +postMessage +( +{ +content +: +text_decoder +. +decode +( +e +. +data +) +byteLength +: +e +. +data +. +byteLength +} +) +; +/ +/ +Send +back +the +array +buffer +via +Client +. +postMessage +. +port +. +postMessage +( +e +. +data +{ +transfer +: +[ +e +. +data +. +buffer +] +} +) +; +port +. +postMessage +( +{ +content +: +text_decoder +. +decode +( +e +. +data +) +byteLength +: +e +. +data +. +byteLength +} +) +; +} +; +self +. +addEventListener +( +' +message +' +e += +> +{ +if +( +e +. +ports +[ +0 +] +) +{ +/ +/ +Wait +for +messages +sent +via +MessagePort +. +e +. +ports +[ +0 +] +. +onmessage += +messageHandler +. +bind +( +null +e +. +ports +[ +0 +] +) +; +return +; +} +messageHandler +( +e +. +source +e +) +; +} +) +; diff --git a/testing/web-platform/tests/webmessaging/message-channels/dictionary-transferrable.html b/testing/web-platform/tests/webmessaging/message-channels/dictionary-transferrable.html new file mode 100644 index 0000000000000..cf4140938ab48 --- /dev/null +++ b/testing/web-platform/tests/webmessaging/message-channels/dictionary-transferrable.html @@ -0,0 +1,154 @@ +< +! +doctype +html +> +< +title +> +basic +messagechannel +with +transfer +< +/ +title +> +< +script +src += +" +/ +resources +/ +testharness +. +js +" +> +< +/ +script +> +< +script +src += +" +/ +resources +/ +testharnessreport +. +js +" +> +< +/ +script +> +< +div +id += +" +log +" +> +< +/ +div +> +< +script +> +async_test +( +function +( +t +) +{ +var +channel += +new +MessageChannel +( +) +; +var +ab += +new +ArrayBuffer +( +1 +) +; +channel +. +port1 +. +postMessage +( +ab +{ +transfer +: +[ +ab +] +} +) +; +channel +. +port2 +. +onmessage += +t +. +step_func +( +function +( +e +) +{ +assert_equals +( +e +. +data +. +byteLength +1 +) +; +t +. +done +( +) +; +} +) +; +channel +. +port2 +. +start +( +) +; +} +) +; +< +/ +script +> diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-dictionary.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-dictionary.html new file mode 100644 index 0000000000000..dea4faec27b1b --- /dev/null +++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-dictionary.html @@ -0,0 +1,216 @@ +< +! +- +- +onmessage += +( +event +) += +> +{ +try +{ +postMessage +( +event +. +data +{ +transfer +: +[ +event +. +data +] +} +) +; +} +catch +( +e +) +{ +postMessage +( +' +' ++ +e +) +; +} +} +/ +* +- +- +> +< +! +doctype +html +> +< +title +> +Using +dictionary +as +postMessage +' +s +second +argument +< +/ +title +> +< +script +src += +" +/ +resources +/ +testharness +. +js +" +> +< +/ +script +> +< +script +src += +" +/ +resources +/ +testharnessreport +. +js +" +> +< +/ +script +> +< +div +id += +" +log +" +> +< +/ +div +> +< +script +> +( +async_test +( +) +) +. +step +( +function +( +) +{ +var +worker += +new +Worker +( +' +# +' +) +; +var +ab += +new +ArrayBuffer +( +1 +) +; +worker +. +postMessage +( +ab +{ +transfer +: +[ +ab +] +} +) +; +worker +. +onmessage += +this +. +step_func +( +function +( +e +) +{ +assert_equals +( +e +. +data +. +byteLength +1 +) +; +this +. +done +( +) +; +} +) +; +} +) +; +< +/ +script +> +< +! +- +- +* +/ +/ +/ +- +- +> diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html index b8e39a588d63f..6c82afb8afe7d 100644 --- a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html +++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html @@ -134,8 +134,9 @@ e ) { -assert_true +assert_equals ( +1 e . data