Diff
Modified: trunk/LayoutTests/ChangeLog (276241 => 276242)
--- trunk/LayoutTests/ChangeLog 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/ChangeLog 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,3 +1,16 @@
+2021-04-19 Youenn Fablet <[email protected]>
+
+ Migrate some WebRTC encoded transform tests to WPT
+ https://bugs.webkit.org/show_bug.cgi?id=224604
+
+ Reviewed by Eric Carlson.
+
+ * http/wpt/webrtc/sframe-transform-readable-crash.html: Removed.
+ * platform/glib/TestExpectations:
+ * platform/ios-wk1/TestExpectations:
+ * platform/mac-wk1/TestExpectations:
+ * webrtc/script-transform.js: Removed.
+
2021-04-19 Felipe Erias <[email protected]>
[css-flexbox] Table layout disregards overriding height
Deleted: trunk/LayoutTests/http/wpt/webrtc/audio-script-transform.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/audio-script-transform.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/audio-script-transform.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,70 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <script src=""
- <script src=""
- </head>
- <body>
- <video id="video" autoplay playsInline></video>
- <script src=""
- <script>
-function waitForMessage(port, data)
-{
- let gotMessage;
- const promise = new Promise((resolve, reject) => {
- gotMessage = resolve;
- setTimeout(() => { reject("did not get " + data) }, 5000);
- });
- port._onmessage_ = event => {
- if (event.data ="" data)
- gotMessage();
- };
- return promise;
-}
-
-let senderTransform, receiverTransform;
-let stream;
-promise_test(async (test) => {
- worker = new Worker("context-transform.js");
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
-
- const localStream = await navigator.mediaDevices.getUserMedia({audio: true});
-
- const senderChannel = new MessageChannel;
- const receiverChannel = new MessageChannel;
- let sender, receiver;
- senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', mediaType:'audio', side:'sender', port:senderChannel.port2}, [senderChannel.port2]);
- receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', mediaType:'audio', side:'receiver', port:receiverChannel.port2}, [receiverChannel.port2]);
- senderTransform.port = senderChannel.port1;
- receiverTransform.port = receiverChannel.port1;
-
- promise1 = waitForMessage(senderTransform.port, "started audio sender");
- promise2 = waitForMessage(receiverTransform.port, "started audio receiver");
-
- stream = await new Promise((resolve, reject) => {
- createConnections((firstConnection) => {
- sender = firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
- sender.transform = senderTransform;
- }, (secondConnection) => {
- secondConnection._ontrack_ = (trackEvent) => {
- receiver = trackEvent.receiver;
- receiver.transform = receiverTransform;
- resolve(trackEvent.streams[0]);
- };
- });
- setTimeout(() => reject("Test timed out"), 5000);
- });
-
- await promise1;
- await promise2;
-}, "setup and check context");
-
-promise_test((test) => {
- video.srcObject = stream;
- return video.play();
-}, "audio is playing");
- </script>
- </body>
-</html>
Deleted: trunk/LayoutTests/http/wpt/webrtc/change-encoded-transform.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/change-encoded-transform.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/change-encoded-transform.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,57 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <script src=""
- <script src=""
- </head>
- <body>
- <video id="video1" autoplay controls playsinline></video>
- <script src =""
- <script>
-async function waitForMessage(worker, data)
-{
- while (true) {
- const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- if (data ="" received)
- return;
- }
-}
-
-promise_test(async (test) => {
- worker = new Worker('change-encoded-transform.js');
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
-
- const localStream = await navigator.mediaDevices.getUserMedia({video: true});
-
- let sender, receiver;
- const senderTransform1 = new RTCRtpScriptTransform(worker, {name:'sender1'});
- const senderTransform2 = new RTCRtpScriptTransform(worker, {name:'sender2'});
- const receiverTransform = new RTCRtpScriptTransform(worker, {name:'receiver'});
-
- const stream = await new Promise((resolve, reject) => {
- createConnections((firstConnection) => {
- sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
- firstConnection.getTransceivers()[0].setCodecPreferences([{mimeType: "video/VP8", clockRate: 90000}]);
- sender.transform = senderTransform1;
- }, (secondConnection) => {
- secondConnection._ontrack_ = (trackEvent) => {
- receiver = trackEvent.receiver;
- receiver.transform = receiverTransform;
- resolve(trackEvent.streams[0]);
- };
- });
- setTimeout(() => reject("Test timed out"), 5000);
- });
-
- video1.srcObject = stream;
- await video1.play();
-
- const updatePromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- sender.transform = senderTransform2;
- assert_equals(await updatePromise, "got value 2");
-}, "change sender transform");
- </script>
- </body>
-</html>
Deleted: trunk/LayoutTests/http/wpt/webrtc/change-encoded-transform.js (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/change-encoded-transform.js 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/change-encoded-transform.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,39 +0,0 @@
-function appendToBuffer(buffer, value) {
- const result = new ArrayBuffer(buffer.byteLength + 1);
- const byteResult = new Uint8Array(result);
- byteResult.set(new Uint8Array(buffer), 0);
- byteResult[buffer.byteLength] = value;
- return result;
-}
-
-_onrtctransform_ = (event) => {
- const transformer = event.transformer;
-
- transformer.reader = transformer.readable.getReader();
- transformer.writer = transformer.writable.getWriter();
-
- function process(transformer)
- {
- transformer.reader.read().then(chunk => {
- if (chunk.done)
- return;
- if (transformer.options.name === 'sender1')
- chunk.value.data = "" 1);
- else if (transformer.options.name === 'sender2')
- chunk.value.data = "" 2);
- else {
- const value = new Uint8Array(chunk.value.data)[chunk.value.data.byteLength - 1];
- if (value !== 1 && value !== 2)
- self.postMessage("unexpected value: " + value);
- else if (value === 2)
- self.postMessage("got value 2");
- chunk.value.data = "" chunk.value.data.byteLength - 1);
- }
- transformer.writer.write(chunk.value);
- process(transformer);
- });
- }
-
- process(transformer);
-};
-self.postMessage("registered");
Deleted: trunk/LayoutTests/http/wpt/webrtc/metadata-transform-worker.js (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/metadata-transform-worker.js 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/metadata-transform-worker.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,24 +0,0 @@
-_onrtctransform_ = (event) => {
- const transformer = event.transformer;
-
- transformer.reader = transformer.readable.getReader();
- transformer.writer = transformer.writable.getWriter();
-
- let isFirstFrame = true;
- function process(transformer)
- {
- transformer.reader.read().then(chunk => {
- if (chunk.done)
- return;
-
- if (isFirstFrame) {
- isFirstFrame = false;
- self.postMessage({ name: transformer.options.name, timestamp: chunk.value.timestamp, metadata: chunk.value.getMetadata() });
- }
- transformer.writer.write(chunk.value);
- process(transformer);
- });
- }
- process(transformer);
-};
-self.postMessage("registered");
Deleted: trunk/LayoutTests/http/wpt/webrtc/metadata-transform.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/metadata-transform.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/metadata-transform.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,84 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <script src=""
- <script src=""
- </head>
- <body>
- <video id="video1" autoplay></video>
- <script src =""
- <script>
-async function waitForMessage(worker, data)
-{
- while (true) {
- const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- if (data ="" received)
- return;
- }
-}
-
-async function gatherMetadata(audio)
-{
- worker = new Worker('metadata-transform-worker.js');
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
-
- const localStream = await navigator.mediaDevices.getUserMedia({audio: audio, video: !audio});
-
- let sender, receiver;
- const senderTransform = new RTCRtpScriptTransform(worker, {name:'sender'});
- const receiverTransform = new RTCRtpScriptTransform(worker, {name:'receiver'});
-
- await new Promise((resolve, reject) => {
- createConnections((firstConnection) => {
- pc1 = firstConnection;
- sender = firstConnection.addTrack(localStream.getTracks()[0], localStream);
- sender.transform = senderTransform;
- }, (secondConnection) => {
- pc2 = secondConnection;
- secondConnection._ontrack_ = (trackEvent) => {
- receiver = trackEvent.receiver;
- receiver.transform = receiverTransform;
- resolve(trackEvent.streams[0]);
- };
- });
- setTimeout(() => reject("Test timed out"), 5000);
- });
-
- return new Promise((resolve, reject) => {
- let senderMetadata, senderTimestamp;
- worker._onmessage_ = (event) => {
- if (event.data.name === 'sender') {
- senderMetadata = event.data.metadata;
- senderTimestamp = event.data.timestamp;
- } else if (event.data.name === 'receiver')
- resolve([senderMetadata, senderTimestamp, event.data.metadata, event.data.timestamp]);
- };
- setTimeout(() => reject("Metadata test timed out"), 5000);
- });
-}
-
-promise_test(async (test) => {
- const [senderMetadata, senderTimestamp, receiverMetadata, receiverTimestamp] = await gatherMetadata(true);
-
- assert_equals(senderTimestamp, receiverTimestamp, "timestamp");
- assert_true(!!senderMetadata.synchronizationSource, "ssrc");
- assert_equals(senderMetadata.synchronizationSource, receiverMetadata.synchronizationSource, "ssrc");
- assert_array_equals(senderMetadata.contributingSources, receiverMetadata.contributingSources, "csrc");
-}, "audio exchange with transform");
-
-promise_test(async (test) => {
- const [senderMetadata, senderTimestamp, receiverMetadata, receiverTimestamp] = await gatherMetadata(true);
-
- assert_equals(senderTimestamp, receiverTimestamp, "timestamp");
- assert_true(!!senderMetadata.synchronizationSource, "ssrc");
- assert_equals(senderMetadata.synchronizationSource, receiverMetadata.synchronizationSource, "ssrc");
- assert_equals(senderMetadata.height, receiverMetadata.height, "height");
- assert_equals(senderMetadata.width, receiverMetadata.width, "width");
- assert_equals(senderMetadata.spatialIndex, receiverMetadata.spatialIndex, "spatialIndex");
- assert_equals(senderMetadata.temporalIndex, receiverMetadata.temporalIndex, "temporalIndex");
-}, "video exchange with transform");
- </script>
- </body>
-</html>
Deleted: trunk/LayoutTests/http/wpt/webrtc/script-transform.js (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/script-transform.js 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/script-transform.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,25 +0,0 @@
-_onrtctransform_ = (event) => {
- const transformer = event.transformer;
- transformer.options.port._onmessage_ = (event) => transformer.options.port.postMessage(event.data);
-
- self.postMessage("started");
- transformer.reader = transformer.readable.getReader();
- transformer.writer = transformer.writable.getWriter();
-
- function process(transformer)
- {
- transformer.reader.read().then(chunk => {
- if (chunk.done)
- return;
- if (chunk.value instanceof RTCEncodedVideoFrame)
- self.postMessage("video chunk");
- else if (chunk.value instanceof RTCEncodedAudioFrame)
- self.postMessage("audio chunk");
- transformer.writer.write(chunk.value);
- process(transformer);
- });
- }
-
- process(transformer);
-};
-self.postMessage("registered");
Deleted: trunk/LayoutTests/http/wpt/webrtc/sframe-transform-in-worker.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/sframe-transform-in-worker.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/sframe-transform-in-worker.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,57 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <script src=""
- <script src=""
- </head>
- <body>
- <video id="video1" controls autoplay></video>
- <script src =""
- <script>
-async function waitForMessage(worker, data)
-{
- while (true) {
- const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- if (data ="" received)
- return;
- }
-}
-
-promise_test(async (test) => {
- worker = new Worker('sframe-transform.js');
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
- const localStream = await navigator.mediaDevices.getUserMedia({ video: true });
-
- let sender, receiver;
- const senderTransform = new SFrameTransform({ compatibilityMode: "H264" });
- const receiverTransform = new RTCRtpScriptTransform(worker, "SFrameRTCRtpTransform");
-
- const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
- senderTransform.setEncryptionKey(key);
-
- const startedPromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
-
- const stream = await new Promise((resolve, reject) => {
- createConnections((firstConnection) => {
- pc1 = firstConnection;
- sender = firstConnection.addTrack(localStream.getTracks()[0], localStream);
- sender.transform = senderTransform;
- }, (secondConnection) => {
- pc2 = secondConnection;
- secondConnection._ontrack_ = (trackEvent) => {
- receiver = trackEvent.receiver;
- receiver.transform = receiverTransform;
- resolve(trackEvent.streams[0]);
- };
- });
- setTimeout(() => reject("Test timed out"), 5000);
- });
-
- video1.srcObject = stream;
- await video1.play();
-}, "video exchange with SFrame transform in worker");
- </script>
- </body>
-</html>
Deleted: trunk/LayoutTests/http/wpt/webrtc/sframe-transform-readable-crash.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/sframe-transform-readable-crash.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/sframe-transform-readable-crash.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,11 +0,0 @@
-<iframe src="" id="frame"></iframe>
-<script>
-_onload_ = async () => {
-if (window.testRunner)
- testRunner.dumpAsText();
-const transform = new frame.contentWindow.SFrameTransform;
-frame.remove();
-transform.readable;
-}
-</script>
-<p>This test should not crash.</p>
Deleted: trunk/LayoutTests/http/wpt/webrtc/sframe-transform.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/sframe-transform.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/sframe-transform.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,141 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <script src=""
- <script src=""
- </head>
- <body>
- <script>
-
-promise_test(async (test) => {
- const pc = new RTCPeerConnection();
- const senderTransform = new SFrameTransform();
- const receiverTransform = new SFrameTransform();
- const sender1 = pc.addTransceiver('audio').sender;
- const sender2 = pc.addTransceiver('video').sender;
- const receiver1 = pc.getReceivers()[0];
- const receiver2 = pc.getReceivers()[1];
-
- sender1.transform = senderTransform;
- receiver1.transform = receiverTransform;
- assert_throws_dom("InvalidStateError", () => sender2.transform = senderTransform);
- assert_throws_dom("InvalidStateError", () => receiver2.transform = receiverTransform);
-
- sender1.transform = senderTransform;
- receiver1.transform = receiverTransform;
-
- sender1.transform = null;
- receiver1.transform = null;
-}, "Cannot reuse attached transforms");
-
-test(() => {
- const senderTransform = new SFrameTransform();
-
- assert_true(senderTransform.readable instanceof ReadableStream);
- assert_true(senderTransform.writable instanceof WritableStream);
-}, "SFrameTransform exposes readable and writable");
-
-promise_test(async (test) => {
- const pc = new RTCPeerConnection();
- const senderTransform = new SFrameTransform();
- const receiverTransform = new SFrameTransform();
- const sender1 = pc.addTransceiver('audio').sender;
- const sender2 = pc.addTransceiver('video').sender;
- const receiver1 = pc.getReceivers()[0];
- const receiver2 = pc.getReceivers()[1];
-
- assert_false(senderTransform.readable.locked, "sender readable before");
- assert_false(senderTransform.writable.locked, "sender writable before");
- assert_false(receiverTransform.readable.locked, "receiver readable before");
- assert_false(receiverTransform.writable.locked, "receiver writable before");
-
- sender1.transform = senderTransform;
- receiver1.transform = receiverTransform;
-
- assert_true(senderTransform.readable.locked, "sender readable during");
- assert_true(senderTransform.writable.locked, "sender writable during");
- assert_true(receiverTransform.readable.locked, "receiver readable during");
- assert_true(receiverTransform.writable.locked, "receiver writable during");
-
- sender1.transform = null;
- receiver1.transform = null;
-
- assert_true(senderTransform.readable.locked, "sender readable after");
- assert_true(senderTransform.writable.locked, "sender writable after");
- assert_true(receiverTransform.readable.locked, "receiver readable after");
- assert_true(receiverTransform.writable.locked, "receiver writable after");
-}, "readable/writable are locked when attached and after being attached");
-
-promise_test(async (test) => {
- const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
-
- const senderTransform = new SFrameTransform({ role : 'encrypt', authenticationSize: 10 });
- senderTransform.setEncryptionKey(key);
-
- const receiverTransform = new SFrameTransform({ role : 'decrypt', authenticationSize: 10 });
- receiverTransform.setEncryptionKey(key);
-
- const writer = senderTransform.writable.getWriter();
- const reader = receiverTransform.readable.getReader();
-
- senderTransform.readable.pipeTo(receiverTransform.writable);
-
- const sent = new ArrayBuffer(8);
- const view = new Int8Array(sent);
- for (let cptr = 0; cptr < sent.byteLength; ++cptr)
- view[cptr] = cptr;
-
- writer.write(sent);
- const received = await reader.read();
-
- assert_equals(received.value.byteLength, 8);
- const view2 = new Int8Array(received.value);
- for (let cptr = 0; cptr < sent.byteLength; ++cptr)
- assert_equals(view2[cptr], view[cptr]);
-}, "SFrame with array buffer - authentication size 10");
-
-promise_test(async (test) => {
- const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
-
- const senderTransform = new SFrameTransform({ role : 'encrypt', authenticationSize: 10 });
- const senderWriter = senderTransform.writable.getWriter();
- const senderReader = senderTransform.readable.getReader();
-
- const receiverTransform = new SFrameTransform({ role : 'decrypt', authenticationSize: 10 });
- const receiverWriter = receiverTransform.writable.getWriter();
- const receiverReader = receiverTransform.readable.getReader();
-
- senderTransform.setEncryptionKey(key);
- receiverTransform.setEncryptionKey(key);
-
- const chunk = new ArrayBuffer(8);
-
- // decryption should fail, leading to an empty array buffer.
- await receiverWriter.write(chunk);
- let received = await receiverReader.read();
- assert_equals(received.value.byteLength, 0);
-
- // We write again but this time with a chunk we can decrypt.
- await senderWriter.write(chunk);
- const encrypted = await senderReader.read();
- await receiverWriter.write(encrypted.value);
- received = await receiverReader.read();
- assert_equals(received.value.byteLength, 8);
-}, "SFrame decryption with array buffer that is too small");
-
-promise_test(async (test) => {
- const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
-
- const receiverTransform = new SFrameTransform({ role : 'decrypt', authenticationSize: 10 });
- const receiverWriter = receiverTransform.writable.getWriter();
- receiverTransform.setEncryptionKey(key);
-
- // decryption should fail, leading to erroring the transform.
- await promise_rejects_js(test, TypeError, receiverWriter.write({ }));
- await promise_rejects_js(test, TypeError, receiverWriter.closed);
-}, "SFrame transform gets errored if trying to process unexpected value types");
-
- </script>
- </body>
-</html>
Deleted: trunk/LayoutTests/http/wpt/webrtc/sframe-transform.js (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/sframe-transform.js 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/sframe-transform.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,7 +0,0 @@
-_onrtctransform_ = (event) => {
- const sframeTransform = new SFrameTransform({ role : "decrypt", authenticationSize: "10", compatibilityMode: "H264" });
- crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]).then(key => sframeTransform.setEncryptionKey(key));
- const transformer = event.transformer;
- transformer.readable.pipeThrough(sframeTransform).pipeTo(transformer.writable);
-}
-self.postMessage("registered");
Deleted: trunk/LayoutTests/http/wpt/webrtc/webrtc-late-transform.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/webrtc-late-transform.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/webrtc-late-transform.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,90 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <script src=""
- <script src=""
- </head>
- <body>
- <video controls id="video" autoplay></video>
- <canvas id="canvas" width="640" height="480"></canvas>
- <script src =""
- <script>
-function grabFrameData(x, y, w, h)
-{
- canvas.width = video.videoWidth;
- canvas.height = video.videoHeight;
-
- canvas.getContext('2d').drawImage(video, x, y, w, h, x, y, w, h);
- return canvas.getContext('2d').getImageData(x, y, w, h).data;
-}
-
-function getCircleImageData()
-{
- return grabFrameData(450, 100, 150, 100);
-}
-
-async function checkVideoIsUpdated(shouldBeUpdated, count, referenceData)
-{
- if (count === undefined)
- count = 0;
- else if (count >= 20)
- return Promise.reject("checkVideoIsUpdated timed out :" + shouldBeUpdated + " " + count);
-
- if (referenceData === undefined)
- referenceData = getCircleImageData();
-
- await waitFor(200);
- const newData = getCircleImageData();
-
- if (shouldBeUpdated === (JSON.stringify(referenceData) !== JSON.stringify(newData)))
- return;
-
- await checkVideoIsUpdated(shouldBeUpdated, ++count, newData);
-}
-
-promise_test(async (test) => {
- const localStream = await navigator.mediaDevices.getUserMedia({video: true});
- const senderTransform = new SFrameTransform({ compatibilityMode: "H264" });
- const receiverTransform = new SFrameTransform({ compatibilityMode: "H264" });
- await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]).then(key => {
- senderTransform.setEncryptionKey(key);
- receiverTransform.setEncryptionKey(key);
- });
-
- let sender, receiver;
- const stream = await new Promise((resolve, reject) => {
- createConnections((firstConnection) => {
- pc1 = firstConnection;
- sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
- sender.transform = senderTransform;
- }, (secondConnection) => {
- pc2 = secondConnection;
- secondConnection._ontrack_ = (trackEvent) => {
- receiver = trackEvent.receiver;
- // we do not set the receiver transform here;
- resolve(trackEvent.streams[0]);
- };
- }, {
- observeOffer : (offer) => {
- const lines = offer.sdp.split('\r\n');
- const h264Lines = lines.filter(line => line.indexOf("a=fmtp") === 0 && line.indexOf("42e01f") !== -1);
- const baselineNumber = h264Lines[0].substring(6).split(' ')[0];
- offer.sdp = lines.filter(line => {
- return (line.indexOf('a=fmtp') === -1 && line.indexOf('a=rtcp-fb') === -1 && line.indexOf('a=rtpmap') === -1) || line.indexOf(baselineNumber) !== -1;
- }).join('\r\n');
- }
- });
- setTimeout(() => reject("Test timed out"), 5000);
- });
-
- video.srcObject = stream;
- video.play();
-
- // We set the receiver transform here so that the decoder probably tried to decode sframe content.
- setTimeout(() => receiver.transform = receiverTransform, 50);
- await checkVideoIsUpdated(true);
-}, "video exchange with late receiver transform");
- </script>
- </body>
-</html>
Deleted: trunk/LayoutTests/http/wpt/webrtc/webrtc-transform.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/webrtc-transform.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/webrtc-transform.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,148 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <script src=""
- <script src=""
- </head>
- <body>
- <video id="video1" autoplay></video>
- <video id="video2" autoplay></video>
- <script src =""
- <script>
-async function waitForMessage(worker, data)
-{
- while (true) {
- const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- if (data ="" received)
- return;
- }
-}
-
-promise_test(async (test) => {
- worker = new Worker('script-transform.js');
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
-
- const channel = new MessageChannel;
- const transform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: channel.port2}, [channel.port2]);
- transform.port = channel.port1;
- const promise = new Promise(resolve => transform.port._onmessage_ = (event) => resolve(event.data));
- transform.port.postMessage("test");
- assert_equals(await promise, "test");
-}, "transform messaging");
-
-promise_test(async (test) => {
- worker = new Worker('script-transform.js');
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
-
- const pc = new RTCPeerConnection();
-
- const senderChannel = new MessageChannel;
- const receiverChannel = new MessageChannel;
- const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: senderChannel.port2}, [senderChannel.port2]);
- const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: receiverChannel.port2}, [receiverChannel.port2]);
- senderTransform.port = senderChannel.port1;
- receiverTransform.port = receiverChannel.port1;
-
- const sender1 = pc.addTransceiver('audio').sender;
- const sender2 = pc.addTransceiver('video').sender;
- const receiver1 = pc.getReceivers()[0];
- const receiver2 = pc.getReceivers()[1];
-
- sender1.transform = senderTransform;
- receiver1.transform = receiverTransform;
- assert_throws_dom("InvalidStateError", () => sender2.transform = senderTransform);
- assert_throws_dom("InvalidStateError", () => receiver2.transform = receiverTransform);
-
- sender1.transform = senderTransform;
- receiver1.transform = receiverTransform;
-
- sender1.transform = null;
- receiver1.transform = null;
-}, "Cannot reuse attached transforms");
-
-promise_test(async (test) => {
- worker = new Worker('script-transform.js');
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
- const localStream = await navigator.mediaDevices.getUserMedia({audio: true});
-
- const senderChannel = new MessageChannel;
- const receiverChannel = new MessageChannel;
- let sender, receiver;
- const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: senderChannel.port2}, [senderChannel.port2]);
- const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: receiverChannel.port2}, [receiverChannel.port2]);
- senderTransform.port = senderChannel.port1;
- receiverTransform.port = receiverChannel.port1;
-
- const startedPromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
-
- const stream = await new Promise((resolve, reject) => {
- createConnections((firstConnection) => {
- pc1 = firstConnection;
- sender = firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
- sender.transform = senderTransform;
- }, (secondConnection) => {
- pc2 = secondConnection;
- secondConnection._ontrack_ = (trackEvent) => {
- receiver = trackEvent.receiver;
- receiver.transform = receiverTransform;
- resolve(trackEvent.streams[0]);
- };
- });
- setTimeout(() => reject("Test timed out"), 5000);
- });
-
- assert_equals(await startedPromise, "started");
-
- await waitForMessage(worker, "audio chunk");
-
- video1.srcObject = stream;
- await video1.play();
-}, "audio exchange with transform");
-
-promise_test(async (test) => {
- worker = new Worker('script-transform.js');
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
-
- const localStream = await navigator.mediaDevices.getUserMedia({video: true});
-
- const senderChannel = new MessageChannel;
- const receiverChannel = new MessageChannel;
- let sender, receiver;
- const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: senderChannel.port2}, [senderChannel.port2]);
- const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: receiverChannel.port2}, [receiverChannel.port2]);
- senderTransform.port = senderChannel.port1;
- receiverTransform.port = receiverChannel.port1;
-
- const startedPromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
-
- const stream = await new Promise((resolve, reject) => {
- createConnections((firstConnection) => {
- pc1 = firstConnection;
- sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
- sender.transform = senderTransform;
- }, (secondConnection) => {
- pc2 = secondConnection;
- secondConnection._ontrack_ = (trackEvent) => {
- receiver = trackEvent.receiver;
- receiver.transform = receiverTransform;
- resolve(trackEvent.streams[0]);
- };
- });
- setTimeout(() => reject("Test timed out"), 5000);
- });
-
- assert_equals(await startedPromise, "started");
-
- await waitForMessage(worker, "video chunk");
-
- video1.srcObject = stream;
- await video1.play();
-}, "video exchange with transform");
- </script>
- </body>
-</html>
Deleted: trunk/LayoutTests/http/wpt/webrtc/write-twice-transform.html (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/write-twice-transform.html 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/write-twice-transform.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,58 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <script src=""
- <script src=""
- </head>
- <body>
- <video id="video1" autoplay></video>
- <video id="video2" autoplay></video>
- <script src =""
- <script>
-async function waitForMessage(worker, data)
-{
- while (true) {
- const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- if (data ="" received)
- return;
- }
-}
-
-promise_test(async (test) => {
- worker = new Worker('write-twice-transform.js');
- const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
- assert_equals(data, "registered");
-
- const localStream = await navigator.mediaDevices.getUserMedia({video: true});
-
- let sender, receiver;
- const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', side:'sender', role:'encrypt'});
- const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', side:'receiver', role:'decrypt'});
-
- const startedPromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
-
- const stream = await new Promise((resolve, reject) => {
- createConnections((firstConnection) => {
- pc1 = firstConnection;
- sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
- sender.transform = senderTransform;
- }, (secondConnection) => {
- pc2 = secondConnection;
- secondConnection._ontrack_ = (trackEvent) => {
- receiver = trackEvent.receiver;
- receiver.transform = receiverTransform;
- resolve(trackEvent.streams[0]);
- };
- });
- setTimeout(() => reject("Test timed out"), 5000);
- });
-
- assert_equals(await startedPromise, "started");
-
- video1.srcObject = stream;
- await video1.play();
-}, "video exchange with write twice transform");
- </script>
- </body>
-</html>
Deleted: trunk/LayoutTests/http/wpt/webrtc/write-twice-transform.js (276241 => 276242)
--- trunk/LayoutTests/http/wpt/webrtc/write-twice-transform.js 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/http/wpt/webrtc/write-twice-transform.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,22 +0,0 @@
-_onrtctransform_ = (event) => {
- const transformer = event.transformer;
-
- self.postMessage("started");
-
- transformer.reader = transformer.readable.getReader();
- transformer.writer = transformer.writable.getWriter();
- function process(transformer)
- {
- transformer.reader.read().then(chunk => {
- if (chunk.done)
- return;
-
- transformer.writer.write(chunk.value);
- transformer.writer.write(chunk.value);
- process(transformer);
- });
- }
-
- process(transformer);
-};
-self.postMessage("registered");
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (276241 => 276242)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,3 +1,46 @@
+2021-04-19 Youenn Fablet <[email protected]>
+
+ Migrate some WebRTC encoded transform tests to WPT
+ https://bugs.webkit.org/show_bug.cgi?id=224604
+
+ Reviewed by Eric Carlson.
+
+ * web-platform-tests/webrtc-encoded-transform/routines.js: Added.
+ (async createConnections):
+ (waitFor):
+ * web-platform-tests/webrtc-encoded-transform/script-audio-transform-worker.js: Added.
+ (MockRTCRtpTransformer):
+ (MockRTCRtpTransformer.prototype.start):
+ (MockRTCRtpTransformer.prototype.process):
+ (onrtctransform):
+ * web-platform-tests/webrtc-encoded-transform/script-audio-transform.https-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/script-audio-transform.https.html: Renamed from LayoutTests/http/wpt/webrtc/audio-script-transform.html.
+ * web-platform-tests/webrtc-encoded-transform/script-change-transform-worker.js: Renamed from LayoutTests/http/wpt/webrtc/change-encoded-transform.js.
+ * web-platform-tests/webrtc-encoded-transform/script-change-transform.https-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/script-change-transform.https.html: Renamed from LayoutTests/http/wpt/webrtc/change-encoded-transform.html.
+ * web-platform-tests/webrtc-encoded-transform/script-late-transform.https-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/script-late-transform.https.html: Renamed from LayoutTests/http/wpt/webrtc/webrtc-late-transform.html.
+ * web-platform-tests/webrtc-encoded-transform/script-metadata-transform-worker.js: Renamed from LayoutTests/http/wpt/webrtc/metadata-transform-worker.js.
+ * web-platform-tests/webrtc-encoded-transform/script-metadata-transform.https-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/script-metadata-transform.https.html: Renamed from LayoutTests/http/wpt/webrtc/metadata-transform.html.
+ * web-platform-tests/webrtc-encoded-transform/script-transform-worker.js: Renamed from LayoutTests/http/wpt/webrtc/script-transform.js.
+ * web-platform-tests/webrtc-encoded-transform/script-transform.https-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/script-transform.https.html: Renamed from LayoutTests/http/wpt/webrtc/webrtc-transform.html.
+ * web-platform-tests/webrtc-encoded-transform/script-write-twice-transform-worker.js: Renamed from LayoutTests/http/wpt/webrtc/write-twice-transform.js.
+ * web-platform-tests/webrtc-encoded-transform/script-write-twice-transform.https-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/script-write-twice-transform.https.html: Renamed from LayoutTests/http/wpt/webrtc/write-twice-transform.html.
+ * web-platform-tests/webrtc-encoded-transform/sframe-keys.https-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/sframe-keys.https.html: Added.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform-buffer-source-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform-buffer-source.html: Added.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https.html: Renamed from LayoutTests/http/wpt/webrtc/sframe-transform-in-worker.html.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform-readable-expected.txt: Added.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform-readable.html: Added.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform-worker.js: Renamed from LayoutTests/http/wpt/webrtc/sframe-transform.js.
+ * web-platform-tests/webrtc-encoded-transform/sframe-transform.html: Renamed from LayoutTests/http/wpt/webrtc/sframe-transform.html.
+
2021-04-18 Manuel Rego Casasnovas <[email protected]>
[selectors] Update :focus-visible tests from WPT
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/routines.js (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/routines.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/routines.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,32 @@
+async function createConnections(test, setupLocalConnection, setupRemoteConnection, doNotCloseAutmoatically) {
+ const localConnection = new RTCPeerConnection();
+ const remoteConnection = new RTCPeerConnection();
+
+ remoteConnection._onicecandidate_ = (event) => { localConnection.addIceCandidate(event.candidate); };
+ localConnection._onicecandidate_ = (event) => { remoteConnection.addIceCandidate(event.candidate); };
+
+ await setupLocalConnection(localConnection);
+ await setupRemoteConnection(remoteConnection);
+
+ const offer = await localConnection.createOffer();
+ await localConnection.setLocalDescription(offer);
+ await remoteConnection.setRemoteDescription(offer);
+
+ const answer = await remoteConnection.createAnswer();
+ await remoteConnection.setLocalDescription(answer);
+ await localConnection.setRemoteDescription(answer);
+
+ if (!doNotCloseAutmoatically) {
+ test.add_cleanup(() => {
+ localConnection.close();
+ remoteConnection.close();
+ });
+ }
+
+ return [localConnection, remoteConnection];
+}
+
+function waitFor(test, duration)
+{
+ return new Promise((resolve) => test.step_timeout(resolve, duration));
+}
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform-worker.js (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform-worker.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform-worker.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,30 @@
+class MockRTCRtpTransformer {
+ constructor(transformer) {
+ this.context = transformer;
+ this.start();
+ }
+ start()
+ {
+ this.reader = this.context.readable.getReader();
+ this.writer = this.context.writable.getWriter();
+ this.process();
+ this.context.options.port.postMessage("started " + this.context.options.mediaType + " " + this.context.options.side);
+ }
+
+ process()
+ {
+ this.reader.read().then(chunk => {
+ if (chunk.done)
+ return;
+
+ this.writer.write(chunk.value);
+ this.process();
+ });
+ }
+};
+
+_onrtctransform_ = (event) => {
+ new MockRTCRtpTransformer(event.transformer);
+};
+
+self.postMessage("registered");
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform.https-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform.https-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,4 @@
+
+
+PASS script-audio-transform
+
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform.https.html (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/audio-script-transform.html) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-audio-transform.https.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,65 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <video id="video" autoplay playsInline></video>
+ <script src=""
+ <script>
+function waitForMessage(test, port, data)
+{
+ let gotMessage;
+ const promise = new Promise((resolve, reject) => {
+ gotMessage = resolve;
+ test.step_timeout(() => { reject("did not get " + data) }, 5000);
+ });
+ port._onmessage_ = event => {
+ if (event.data ="" data)
+ gotMessage();
+ };
+ return promise;
+}
+
+promise_test(async (test) => {
+ worker = new Worker("script-audio-transform-worker.js");
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ const localStream = await navigator.mediaDevices.getUserMedia({audio: true});
+
+ const senderChannel = new MessageChannel;
+ const receiverChannel = new MessageChannel;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', mediaType:'audio', side:'sender', port:senderChannel.port2}, [senderChannel.port2]);
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', mediaType:'audio', side:'receiver', port:receiverChannel.port2}, [receiverChannel.port2]);
+ senderTransform.port = senderChannel.port1;
+ receiverTransform.port = receiverChannel.port1;
+
+ promise1 = waitForMessage(test, senderTransform.port, "started audio sender");
+ promise2 = waitForMessage(test, receiverTransform.port, "started audio receiver");
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ sender = firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ secondConnection._ontrack_ = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ await promise1;
+ await promise2;
+
+ video.srcObject = stream;
+ return video.play();
+});
+ </script>
+ </body>
+</html>
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform-worker.js (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/change-encoded-transform.js) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform-worker.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform-worker.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,39 @@
+function appendToBuffer(buffer, value) {
+ const result = new ArrayBuffer(buffer.byteLength + 1);
+ const byteResult = new Uint8Array(result);
+ byteResult.set(new Uint8Array(buffer), 0);
+ byteResult[buffer.byteLength] = value;
+ return result;
+}
+
+_onrtctransform_ = (event) => {
+ const transformer = event.transformer;
+
+ transformer.reader = transformer.readable.getReader();
+ transformer.writer = transformer.writable.getWriter();
+
+ function process(transformer)
+ {
+ transformer.reader.read().then(chunk => {
+ if (chunk.done)
+ return;
+ if (transformer.options.name === 'sender1')
+ chunk.value.data = "" 1);
+ else if (transformer.options.name === 'sender2')
+ chunk.value.data = "" 2);
+ else {
+ const value = new Uint8Array(chunk.value.data)[chunk.value.data.byteLength - 1];
+ if (value !== 1 && value !== 2)
+ self.postMessage("unexpected value: " + value);
+ else if (value === 2)
+ self.postMessage("got value 2");
+ chunk.value.data = "" chunk.value.data.byteLength - 1);
+ }
+ transformer.writer.write(chunk.value);
+ process(transformer);
+ });
+ }
+
+ process(transformer);
+};
+self.postMessage("registered");
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform.https-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform.https-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,4 @@
+
+
+PASS change sender transform
+
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform.https.html (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/change-encoded-transform.html) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-change-transform.https.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,57 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <video id="video1" autoplay controls playsinline></video>
+ <script src =""
+ <script>
+async function waitForMessage(worker, data)
+{
+ while (true) {
+ const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ if (data ="" received)
+ return;
+ }
+}
+
+promise_test(async (test) => {
+ worker = new Worker('script-change-transform-worker.js');
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ const localStream = await navigator.mediaDevices.getUserMedia({video: true});
+
+ let sender, receiver;
+ const senderTransform1 = new RTCRtpScriptTransform(worker, {name:'sender1'});
+ const senderTransform2 = new RTCRtpScriptTransform(worker, {name:'sender2'});
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'receiver'});
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
+ firstConnection.getTransceivers()[0].setCodecPreferences([{mimeType: "video/VP8", clockRate: 90000}]);
+ sender.transform = senderTransform1;
+ }, (secondConnection) => {
+ secondConnection._ontrack_ = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ video1.srcObject = stream;
+ await video1.play();
+
+ const updatePromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ sender.transform = senderTransform2;
+ assert_equals(await updatePromise, "got value 2");
+}, "change sender transform");
+ </script>
+ </body>
+</html>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-late-transform.https-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-late-transform.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-late-transform.https-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,4 @@
+
+
+PASS video exchange with late receiver transform
+
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-late-transform.https.html (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/webrtc-late-transform.html) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-late-transform.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-late-transform.https.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,90 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <video controls id="video" autoplay></video>
+ <canvas id="canvas" width="640" height="480"></canvas>
+ <script src =""
+ <script>
+function grabFrameData(x, y, w, h)
+{
+ canvas.width = video.videoWidth;
+ canvas.height = video.videoHeight;
+
+ canvas.getContext('2d').drawImage(video, x, y, w, h, x, y, w, h);
+ return canvas.getContext('2d').getImageData(x, y, w, h).data;
+}
+
+function getCircleImageData()
+{
+ return grabFrameData(450, 100, 150, 100);
+}
+
+async function checkVideoIsUpdated(test, shouldBeUpdated, count, referenceData)
+{
+ if (count === undefined)
+ count = 0;
+ else if (count >= 20)
+ return Promise.reject("checkVideoIsUpdated timed out :" + shouldBeUpdated + " " + count);
+
+ if (referenceData === undefined)
+ referenceData = getCircleImageData();
+
+ await waitFor(test, 200);
+ const newData = getCircleImageData();
+
+ if (shouldBeUpdated === (JSON.stringify(referenceData) !== JSON.stringify(newData)))
+ return;
+
+ await checkVideoIsUpdated(test, shouldBeUpdated, ++count, newData);
+}
+
+promise_test(async (test) => {
+ const localStream = await navigator.mediaDevices.getUserMedia({video: true});
+ const senderTransform = new SFrameTransform({ compatibilityMode: "H264" });
+ const receiverTransform = new SFrameTransform({ compatibilityMode: "H264" });
+ await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]).then(key => {
+ senderTransform.setEncryptionKey(key);
+ receiverTransform.setEncryptionKey(key);
+ });
+
+ let sender, receiver;
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ pc1 = firstConnection;
+ sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ pc2 = secondConnection;
+ secondConnection._ontrack_ = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ // we do not set the receiver transform here;
+ resolve(trackEvent.streams[0]);
+ };
+ }, {
+ observeOffer : (offer) => {
+ const lines = offer.sdp.split('\r\n');
+ const h264Lines = lines.filter(line => line.indexOf("a=fmtp") === 0 && line.indexOf("42e01f") !== -1);
+ const baselineNumber = h264Lines[0].substring(6).split(' ')[0];
+ offer.sdp = lines.filter(line => {
+ return (line.indexOf('a=fmtp') === -1 && line.indexOf('a=rtcp-fb') === -1 && line.indexOf('a=rtpmap') === -1) || line.indexOf(baselineNumber) !== -1;
+ }).join('\r\n');
+ }
+ });
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ video.srcObject = stream;
+ video.play();
+
+ // We set the receiver transform here so that the decoder probably tried to decode sframe content.
+ test.step_timeout(() => receiver.transform = receiverTransform, 50);
+ await checkVideoIsUpdated(test, true);
+}, "video exchange with late receiver transform");
+ </script>
+ </body>
+</html>
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform-worker.js (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/metadata-transform-worker.js) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform-worker.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform-worker.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,24 @@
+_onrtctransform_ = (event) => {
+ const transformer = event.transformer;
+
+ transformer.reader = transformer.readable.getReader();
+ transformer.writer = transformer.writable.getWriter();
+
+ let isFirstFrame = true;
+ function process(transformer)
+ {
+ transformer.reader.read().then(chunk => {
+ if (chunk.done)
+ return;
+
+ if (isFirstFrame) {
+ isFirstFrame = false;
+ self.postMessage({ name: transformer.options.name, timestamp: chunk.value.timestamp, metadata: chunk.value.getMetadata() });
+ }
+ transformer.writer.write(chunk.value);
+ process(transformer);
+ });
+ }
+ process(transformer);
+};
+self.postMessage("registered");
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform.https-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform.https-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,5 @@
+
+
+PASS audio exchange with transform
+PASS video exchange with transform
+
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform.https.html (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/metadata-transform.html) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-metadata-transform.https.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,84 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <video id="video1" autoplay></video>
+ <script src =""
+ <script>
+async function waitForMessage(worker, data)
+{
+ while (true) {
+ const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ if (data ="" received)
+ return;
+ }
+}
+
+async function gatherMetadata(test, audio)
+{
+ worker = new Worker('script-metadata-transform-worker.js');
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ const localStream = await navigator.mediaDevices.getUserMedia({audio: audio, video: !audio});
+
+ let sender, receiver;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'sender'});
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'receiver'});
+
+ await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ pc1 = firstConnection;
+ sender = firstConnection.addTrack(localStream.getTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ pc2 = secondConnection;
+ secondConnection._ontrack_ = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ return new Promise((resolve, reject) => {
+ let senderMetadata, senderTimestamp;
+ worker._onmessage_ = (event) => {
+ if (event.data.name === 'sender') {
+ senderMetadata = event.data.metadata;
+ senderTimestamp = event.data.timestamp;
+ } else if (event.data.name === 'receiver')
+ resolve([senderMetadata, senderTimestamp, event.data.metadata, event.data.timestamp]);
+ };
+ test.step_timeout(() => reject("Metadata test timed out"), 5000);
+ });
+}
+
+promise_test(async (test) => {
+ const [senderMetadata, senderTimestamp, receiverMetadata, receiverTimestamp] = await gatherMetadata(test, true);
+
+ assert_equals(senderTimestamp, receiverTimestamp, "timestamp");
+ assert_true(!!senderMetadata.synchronizationSource, "ssrc");
+ assert_equals(senderMetadata.synchronizationSource, receiverMetadata.synchronizationSource, "ssrc");
+ assert_array_equals(senderMetadata.contributingSources, receiverMetadata.contributingSources, "csrc");
+}, "audio exchange with transform");
+
+promise_test(async (test) => {
+ const [senderMetadata, senderTimestamp, receiverMetadata, receiverTimestamp] = await gatherMetadata(test, true);
+
+ assert_equals(senderTimestamp, receiverTimestamp, "timestamp");
+ assert_true(!!senderMetadata.synchronizationSource, "ssrc");
+ assert_equals(senderMetadata.synchronizationSource, receiverMetadata.synchronizationSource, "ssrc");
+ assert_equals(senderMetadata.height, receiverMetadata.height, "height");
+ assert_equals(senderMetadata.width, receiverMetadata.width, "width");
+ assert_equals(senderMetadata.spatialIndex, receiverMetadata.spatialIndex, "spatialIndex");
+ assert_equals(senderMetadata.temporalIndex, receiverMetadata.temporalIndex, "temporalIndex");
+}, "video exchange with transform");
+ </script>
+ </body>
+</html>
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform-worker.js (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/script-transform.js) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform-worker.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform-worker.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,25 @@
+_onrtctransform_ = (event) => {
+ const transformer = event.transformer;
+ transformer.options.port._onmessage_ = (event) => transformer.options.port.postMessage(event.data);
+
+ self.postMessage("started");
+ transformer.reader = transformer.readable.getReader();
+ transformer.writer = transformer.writable.getWriter();
+
+ function process(transformer)
+ {
+ transformer.reader.read().then(chunk => {
+ if (chunk.done)
+ return;
+ if (chunk.value instanceof RTCEncodedVideoFrame)
+ self.postMessage("video chunk");
+ else if (chunk.value instanceof RTCEncodedAudioFrame)
+ self.postMessage("audio chunk");
+ transformer.writer.write(chunk.value);
+ process(transformer);
+ });
+ }
+
+ process(transformer);
+};
+self.postMessage("registered");
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform.https-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform.https-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,7 @@
+
+
+PASS transform messaging
+PASS Cannot reuse attached transforms
+PASS audio exchange with transform
+PASS video exchange with transform
+
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform.https.html (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/webrtc-transform.html) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-transform.https.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,148 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <video id="video1" autoplay></video>
+ <video id="video2" autoplay></video>
+ <script src =""
+ <script>
+async function waitForMessage(worker, data)
+{
+ while (true) {
+ const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ if (data ="" received)
+ return;
+ }
+}
+
+promise_test(async (test) => {
+ worker = new Worker('script-transform-worker.js');
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ const channel = new MessageChannel;
+ const transform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: channel.port2}, [channel.port2]);
+ transform.port = channel.port1;
+ const promise = new Promise(resolve => transform.port._onmessage_ = (event) => resolve(event.data));
+ transform.port.postMessage("test");
+ assert_equals(await promise, "test");
+}, "transform messaging");
+
+promise_test(async (test) => {
+ worker = new Worker('script-transform-worker.js');
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ const pc = new RTCPeerConnection();
+
+ const senderChannel = new MessageChannel;
+ const receiverChannel = new MessageChannel;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: senderChannel.port2}, [senderChannel.port2]);
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: receiverChannel.port2}, [receiverChannel.port2]);
+ senderTransform.port = senderChannel.port1;
+ receiverTransform.port = receiverChannel.port1;
+
+ const sender1 = pc.addTransceiver('audio').sender;
+ const sender2 = pc.addTransceiver('video').sender;
+ const receiver1 = pc.getReceivers()[0];
+ const receiver2 = pc.getReceivers()[1];
+
+ sender1.transform = senderTransform;
+ receiver1.transform = receiverTransform;
+ assert_throws_dom("InvalidStateError", () => sender2.transform = senderTransform);
+ assert_throws_dom("InvalidStateError", () => receiver2.transform = receiverTransform);
+
+ sender1.transform = senderTransform;
+ receiver1.transform = receiverTransform;
+
+ sender1.transform = null;
+ receiver1.transform = null;
+}, "Cannot reuse attached transforms");
+
+promise_test(async (test) => {
+ worker = new Worker('script-transform-worker.js');
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+ const localStream = await navigator.mediaDevices.getUserMedia({audio: true});
+
+ const senderChannel = new MessageChannel;
+ const receiverChannel = new MessageChannel;
+ let sender, receiver;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: senderChannel.port2}, [senderChannel.port2]);
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: receiverChannel.port2}, [receiverChannel.port2]);
+ senderTransform.port = senderChannel.port1;
+ receiverTransform.port = receiverChannel.port1;
+
+ const startedPromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ pc1 = firstConnection;
+ sender = firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ pc2 = secondConnection;
+ secondConnection._ontrack_ = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ assert_equals(await startedPromise, "started");
+
+ await waitForMessage(worker, "audio chunk");
+
+ video1.srcObject = stream;
+ await video1.play();
+}, "audio exchange with transform");
+
+promise_test(async (test) => {
+ worker = new Worker('script-transform-worker.js');
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ const localStream = await navigator.mediaDevices.getUserMedia({video: true});
+
+ const senderChannel = new MessageChannel;
+ const receiverChannel = new MessageChannel;
+ let sender, receiver;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: senderChannel.port2}, [senderChannel.port2]);
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', port: receiverChannel.port2}, [receiverChannel.port2]);
+ senderTransform.port = senderChannel.port1;
+ receiverTransform.port = receiverChannel.port1;
+
+ const startedPromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ pc1 = firstConnection;
+ sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ pc2 = secondConnection;
+ secondConnection._ontrack_ = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ assert_equals(await startedPromise, "started");
+
+ await waitForMessage(worker, "video chunk");
+
+ video1.srcObject = stream;
+ await video1.play();
+}, "video exchange with transform");
+ </script>
+ </body>
+</html>
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform-worker.js (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/write-twice-transform.js) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform-worker.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform-worker.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,22 @@
+_onrtctransform_ = (event) => {
+ const transformer = event.transformer;
+
+ self.postMessage("started");
+
+ transformer.reader = transformer.readable.getReader();
+ transformer.writer = transformer.writable.getWriter();
+ function process(transformer)
+ {
+ transformer.reader.read().then(chunk => {
+ if (chunk.done)
+ return;
+
+ transformer.writer.write(chunk.value);
+ transformer.writer.write(chunk.value);
+ process(transformer);
+ });
+ }
+
+ process(transformer);
+};
+self.postMessage("registered");
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform.https-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform.https-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,4 @@
+
+
+PASS video exchange with write twice transform
+
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform.https.html (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/write-twice-transform.html) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/script-write-twice-transform.https.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,58 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <video id="video1" autoplay></video>
+ <video id="video2" autoplay></video>
+ <script src =""
+ <script>
+async function waitForMessage(worker, data)
+{
+ while (true) {
+ const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ if (data ="" received)
+ return;
+ }
+}
+
+promise_test(async (test) => {
+ worker = new Worker('script-write-twice-transform-worker.js');
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+
+ const localStream = await navigator.mediaDevices.getUserMedia({video: true});
+
+ let sender, receiver;
+ const senderTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', side:'sender', role:'encrypt'});
+ const receiverTransform = new RTCRtpScriptTransform(worker, {name:'MockRTCRtpTransform', side:'receiver', role:'decrypt'});
+
+ const startedPromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ pc1 = firstConnection;
+ sender = firstConnection.addTrack(localStream.getVideoTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ pc2 = secondConnection;
+ secondConnection._ontrack_ = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ assert_equals(await startedPromise, "started");
+
+ video1.srcObject = stream;
+ await video1.play();
+}, "video exchange with write twice transform");
+ </script>
+ </body>
+</html>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-keys.https-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-keys.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-keys.https-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,5 @@
+
+
+PASS Passing various key IDs
+PASS Audio exchange with SFrame setup
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-keys.https.html (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-keys.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-keys.https.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,65 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <video id="audio" autoplay playsInline></video>
+ <script src =""
+ <script>
+let sender, receiver;
+let key1, key2, key3, key4;
+
+promise_test(async (test) => {
+ const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+ const transform = new SFrameTransform;
+
+ await transform.setEncryptionKey(key);
+ await transform.setEncryptionKey(key, 1);
+
+ await transform.setEncryptionKey(key, BigInt('18446744073709551613'));
+ await transform.setEncryptionKey(key, BigInt('18446744073709551614'));
+ await transform.setEncryptionKey(key, BigInt('18446744073709551615'));
+ await transform.setEncryptionKey(key, BigInt('18446744073709551616')).then(assert_unreached, (e) => {
+ assert_true(e instanceof RangeError);
+ assert_equals(e.message, "Not a 64 bits integer");
+ });
+}, "Passing various key IDs");
+
+promise_test(async (test) => {
+ key1 = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+ key2 = await crypto.subtle.importKey("raw", new Uint8Array([144, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+ key3 = await crypto.subtle.importKey("raw", new Uint8Array([145, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+ key4 = await crypto.subtle.importKey("raw", new Uint8Array([146, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+
+ const localStream = await navigator.mediaDevices.getUserMedia({audio: true});
+ const stream = await new Promise((resolve, reject) => {
+ const connections = createConnections(test, (firstConnection) => {
+ sender = firstConnection.addTrack(localStream.getAudioTracks()[0], localStream);
+ let transform = new SFrameTransform;
+ transform.setEncryptionKey(key1);
+ sender.transform = transform;
+ }, (secondConnection) => {
+ secondConnection._ontrack_ = (trackEvent) => {
+ let transform = new SFrameTransform;
+ transform.setEncryptionKey(key1);
+ transform.setEncryptionKey(key2);
+ transform.setEncryptionKey(key3, 1000);
+ transform.setEncryptionKey(key4, BigInt('18446744073709551615'));
+ receiver = trackEvent.receiver;
+ receiver.transform = transform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ audio.srcObject = stream;
+ await audio.play();
+}, "Audio exchange with SFrame setup");
+ </script>
+ </body>
+</html>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-buffer-source-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-buffer-source-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-buffer-source-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,3 @@
+
+PASS Uint8Array as input to SFrameTransform
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-buffer-source.html (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-buffer-source.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-buffer-source.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,50 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <script>
+
+async function getEncryptedData(transform)
+{
+ const chunk = await transform.readable.getReader().read();
+ const value = new Uint8Array(chunk.value);
+ return [...value];
+}
+
+promise_test(async (test) => {
+ const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+ const transform1 = new SFrameTransform;
+ const transform2 = new SFrameTransform;
+ const transform3 = new SFrameTransform;
+
+ await transform1.setEncryptionKey(key);
+ await transform2.setEncryptionKey(key);
+ await transform3.setEncryptionKey(key);
+
+ const buffer1 = new ArrayBuffer(10);
+ const buffer2 = new ArrayBuffer(11);
+ const view1 = new Uint8Array(buffer1);
+ const view2 = new Uint8Array(buffer2, 1);
+ for (let i = 0 ; i < buffer1.byteLength; ++i) {
+ view1[i] = i;
+ view2[i] = i;
+ }
+
+ transform1.writable.getWriter().write(buffer1);
+ transform2.writable.getWriter().write(view1);
+ transform3.writable.getWriter().write(view2);
+
+ const result1 = await getEncryptedData(transform1);
+ const result2 = await getEncryptedData(transform2);
+ const result3 = await getEncryptedData(transform3);
+
+ assert_array_equals(result1, result2, "result2");
+ assert_array_equals(result1, result3, "result3");
+}, "Uint8Array as input to SFrameTransform");
+ </script>
+ </body>
+</html>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,8 @@
+
+PASS Cannot reuse attached transforms
+PASS SFrameTransform exposes readable and writable
+PASS readable/writable are locked when attached and after being attached
+PASS SFrame with array buffer - authentication size 10
+PASS SFrame decryption with array buffer that is too small
+PASS SFrame transform gets errored if trying to process unexpected value types
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,4 @@
+
+
+PASS video exchange with SFrame transform in worker
+
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https.html (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/sframe-transform-in-worker.html) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,57 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <video id="video1" controls autoplay></video>
+ <script src =""
+ <script>
+async function waitForMessage(worker, data)
+{
+ while (true) {
+ const received = await new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ if (data ="" received)
+ return;
+ }
+}
+
+promise_test(async (test) => {
+ worker = new Worker('sframe-transform-worker.js');
+ const data = "" new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+ assert_equals(data, "registered");
+ const localStream = await navigator.mediaDevices.getUserMedia({ video: true });
+
+ let sender, receiver;
+ const senderTransform = new SFrameTransform({ compatibilityMode: "H264" });
+ const receiverTransform = new RTCRtpScriptTransform(worker, "SFrameRTCRtpTransform");
+
+ const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+ senderTransform.setEncryptionKey(key);
+
+ const startedPromise = new Promise(resolve => worker._onmessage_ = (event) => resolve(event.data));
+
+ const stream = await new Promise((resolve, reject) => {
+ createConnections(test, (firstConnection) => {
+ pc1 = firstConnection;
+ sender = firstConnection.addTrack(localStream.getTracks()[0], localStream);
+ sender.transform = senderTransform;
+ }, (secondConnection) => {
+ pc2 = secondConnection;
+ secondConnection._ontrack_ = (trackEvent) => {
+ receiver = trackEvent.receiver;
+ receiver.transform = receiverTransform;
+ resolve(trackEvent.streams[0]);
+ };
+ });
+ test.step_timeout(() => reject("Test timed out"), 5000);
+ });
+
+ video1.srcObject = stream;
+ await video1.play();
+}, "video exchange with SFrame transform in worker");
+ </script>
+ </body>
+</html>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-readable-expected.txt (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-readable-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-readable-expected.txt 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,3 @@
+
+PASS sframe-transform-readable
+
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-readable.html (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-readable.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-readable.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <iframe src="" id="frame"></iframe>
+ <script>
+promise_test(async (test) => {
+ const transform = new frame.contentWindow.SFrameTransform;
+ frame.remove();
+ assert_throws_dom("InvalidStateError", () => transform.readable);
+});
+ </script>
+ </body>
+</html>
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-worker.js (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/sframe-transform.js) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-worker.js (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-worker.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,7 @@
+_onrtctransform_ = (event) => {
+ const sframeTransform = new SFrameTransform({ role : "decrypt", authenticationSize: "10", compatibilityMode: "H264" });
+ crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]).then(key => sframeTransform.setEncryptionKey(key));
+ const transformer = event.transformer;
+ transformer.readable.pipeThrough(sframeTransform).pipeTo(transformer.writable);
+}
+self.postMessage("registered");
Copied: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform.html (from rev 276241, trunk/LayoutTests/http/wpt/webrtc/sframe-transform.html) (0 => 276242)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform.html 2021-04-19 09:49:20 UTC (rev 276242)
@@ -0,0 +1,141 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+ <script>
+
+promise_test(async (test) => {
+ const pc = new RTCPeerConnection();
+ const senderTransform = new SFrameTransform();
+ const receiverTransform = new SFrameTransform();
+ const sender1 = pc.addTransceiver('audio').sender;
+ const sender2 = pc.addTransceiver('video').sender;
+ const receiver1 = pc.getReceivers()[0];
+ const receiver2 = pc.getReceivers()[1];
+
+ sender1.transform = senderTransform;
+ receiver1.transform = receiverTransform;
+ assert_throws_dom("InvalidStateError", () => sender2.transform = senderTransform);
+ assert_throws_dom("InvalidStateError", () => receiver2.transform = receiverTransform);
+
+ sender1.transform = senderTransform;
+ receiver1.transform = receiverTransform;
+
+ sender1.transform = null;
+ receiver1.transform = null;
+}, "Cannot reuse attached transforms");
+
+test(() => {
+ const senderTransform = new SFrameTransform();
+
+ assert_true(senderTransform.readable instanceof ReadableStream);
+ assert_true(senderTransform.writable instanceof WritableStream);
+}, "SFrameTransform exposes readable and writable");
+
+promise_test(async (test) => {
+ const pc = new RTCPeerConnection();
+ const senderTransform = new SFrameTransform();
+ const receiverTransform = new SFrameTransform();
+ const sender1 = pc.addTransceiver('audio').sender;
+ const sender2 = pc.addTransceiver('video').sender;
+ const receiver1 = pc.getReceivers()[0];
+ const receiver2 = pc.getReceivers()[1];
+
+ assert_false(senderTransform.readable.locked, "sender readable before");
+ assert_false(senderTransform.writable.locked, "sender writable before");
+ assert_false(receiverTransform.readable.locked, "receiver readable before");
+ assert_false(receiverTransform.writable.locked, "receiver writable before");
+
+ sender1.transform = senderTransform;
+ receiver1.transform = receiverTransform;
+
+ assert_true(senderTransform.readable.locked, "sender readable during");
+ assert_true(senderTransform.writable.locked, "sender writable during");
+ assert_true(receiverTransform.readable.locked, "receiver readable during");
+ assert_true(receiverTransform.writable.locked, "receiver writable during");
+
+ sender1.transform = null;
+ receiver1.transform = null;
+
+ assert_true(senderTransform.readable.locked, "sender readable after");
+ assert_true(senderTransform.writable.locked, "sender writable after");
+ assert_true(receiverTransform.readable.locked, "receiver readable after");
+ assert_true(receiverTransform.writable.locked, "receiver writable after");
+}, "readable/writable are locked when attached and after being attached");
+
+promise_test(async (test) => {
+ const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+
+ const senderTransform = new SFrameTransform({ role : 'encrypt', authenticationSize: 10 });
+ senderTransform.setEncryptionKey(key);
+
+ const receiverTransform = new SFrameTransform({ role : 'decrypt', authenticationSize: 10 });
+ receiverTransform.setEncryptionKey(key);
+
+ const writer = senderTransform.writable.getWriter();
+ const reader = receiverTransform.readable.getReader();
+
+ senderTransform.readable.pipeTo(receiverTransform.writable);
+
+ const sent = new ArrayBuffer(8);
+ const view = new Int8Array(sent);
+ for (let cptr = 0; cptr < sent.byteLength; ++cptr)
+ view[cptr] = cptr;
+
+ writer.write(sent);
+ const received = await reader.read();
+
+ assert_equals(received.value.byteLength, 8);
+ const view2 = new Int8Array(received.value);
+ for (let cptr = 0; cptr < sent.byteLength; ++cptr)
+ assert_equals(view2[cptr], view[cptr]);
+}, "SFrame with array buffer - authentication size 10");
+
+promise_test(async (test) => {
+ const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+
+ const senderTransform = new SFrameTransform({ role : 'encrypt', authenticationSize: 10 });
+ const senderWriter = senderTransform.writable.getWriter();
+ const senderReader = senderTransform.readable.getReader();
+
+ const receiverTransform = new SFrameTransform({ role : 'decrypt', authenticationSize: 10 });
+ const receiverWriter = receiverTransform.writable.getWriter();
+ const receiverReader = receiverTransform.readable.getReader();
+
+ senderTransform.setEncryptionKey(key);
+ receiverTransform.setEncryptionKey(key);
+
+ const chunk = new ArrayBuffer(8);
+
+ // decryption should fail, leading to an empty array buffer.
+ await receiverWriter.write(chunk);
+ let received = await receiverReader.read();
+ assert_equals(received.value.byteLength, 0);
+
+ // We write again but this time with a chunk we can decrypt.
+ await senderWriter.write(chunk);
+ const encrypted = await senderReader.read();
+ await receiverWriter.write(encrypted.value);
+ received = await receiverReader.read();
+ assert_equals(received.value.byteLength, 8);
+}, "SFrame decryption with array buffer that is too small");
+
+promise_test(async (test) => {
+ const key = await crypto.subtle.importKey("raw", new Uint8Array([143, 77, 43, 10, 72, 19, 37, 67, 236, 219, 24, 93, 26, 165, 91, 178]), "HKDF", false, ["deriveBits", "deriveKey"]);
+
+ const receiverTransform = new SFrameTransform({ role : 'decrypt', authenticationSize: 10 });
+ const receiverWriter = receiverTransform.writable.getWriter();
+ receiverTransform.setEncryptionKey(key);
+
+ // decryption should fail, leading to erroring the transform.
+ await promise_rejects_js(test, TypeError, receiverWriter.write({ }));
+ await promise_rejects_js(test, TypeError, receiverWriter.closed);
+}, "SFrame transform gets errored if trying to process unexpected value types");
+
+ </script>
+ </body>
+</html>
Modified: trunk/LayoutTests/platform/glib/TestExpectations (276241 => 276242)
--- trunk/LayoutTests/platform/glib/TestExpectations 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/platform/glib/TestExpectations 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1579,8 +1579,8 @@
webkit.org/b/136224 fast/speechrecognition [ Skip ]
# No plans to support Sframes for a while
-http/wpt/webrtc/sframe-transform.html [ Skip ]
-http/wpt/webrtc/sframe-transform-in-worker.html [ Skip ]
+imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform.html [ Skip ]
+imported/w3c/web-platform-tests/webrtc-encoded-transform/sframe-transform-in-worker.https.html [ Skip ]
webrtc/audio-sframe.html [ Skip ]
webrtc/sframe-test-vectors.html [ Skip ]
webrtc/sframe-transform-buffer-source.html [ Skip ]
@@ -2045,7 +2045,7 @@
webkit.org/b/223965 http/tests/contentextensions/hide-on-csp-report.py [ Crash ]
webkit.org/b/223965 http/tests/contentextensions/main-resource-redirect-blocked.py [ Crash ]
-webkit.org/b/224068 http/wpt/webrtc/webrtc-late-transform.html [ Failure ]
+webkit.org/b/224068 imported/w3c/web-platform-tests/webrtc-encoded-transform/script-late-transform.https.html [ Failure ]
webkit.org/b/224071 webgl/pending/conformance/context/context-attributes-alpha-depth-stencil-antialias.html [ Timeout ]
Modified: trunk/LayoutTests/platform/ios-wk1/TestExpectations (276241 => 276242)
--- trunk/LayoutTests/platform/ios-wk1/TestExpectations 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/platform/ios-wk1/TestExpectations 2021-04-19 09:49:20 UTC (rev 276242)
@@ -16,6 +16,7 @@
# Skip WebRTC for now in WK1
imported/w3c/web-platform-tests/webrtc [ Skip ]
+imported/w3c/web-platform-tests/webrtc-encoded-transform [ Skip ]
webrtc [ Skip ]
# Not supported on WK1
Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (276241 => 276242)
--- trunk/LayoutTests/platform/mac-wk1/TestExpectations 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations 2021-04-19 09:49:20 UTC (rev 276242)
@@ -395,6 +395,7 @@
webrtc/datachannel/mdns-ice-candidates.html [ Skip ]
imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-offer.html [ Failure ]
webkit.org/b/209878 [ Debug ] webrtc/datachannel/multiple-connections.html [ Slow ]
+imported/w3c/web-platform-tests/webrtc-encoded-transform [ Skip ]
# These tests test the Shadow DOM based HTML form validation UI but Mac WK1 is using native dialogs instead.
fast/forms/validation-message-on-listbox.html
Deleted: trunk/LayoutTests/webrtc/script-transform.js (276241 => 276242)
--- trunk/LayoutTests/webrtc/script-transform.js 2021-04-19 09:03:52 UTC (rev 276241)
+++ trunk/LayoutTests/webrtc/script-transform.js 2021-04-19 09:49:20 UTC (rev 276242)
@@ -1,7 +0,0 @@
-class MockRTCRtpTransformer extends RTCRtpScriptTransformer {
- constructor() { }
- start(readableStream, writableStream) { readableStream.pipeTo(writableStream); }
-};
-
-registerRTCRtpScriptTransformer("MockRTCRtpTransform", MockRTCRtpTransformer);
-self.postMessage("started");