Bug 1825066 [wpt PR 39249] - Remove thread check in RTPSender UnregisterEncoded{A/V}Callback(), a=testonly

Automatic update from web-platform-tests
Remove thread check in RTPSender UnregisterEncoded{A/V}Callback()

Also make the encoded_audio_transformer_ and encoded_video_transformer_
fields actually const to ensure that these methods are, and remain,
threadsafe.

Also add a wpt of an encodedInsertableStream worker transform triggering
an error, which actually exercises this method on the worker thread -
see attached bug.

Bug: 1428006
Change-Id: Ia7b9715c3663e7ba1d753dc504ac3b0597e68289
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4372842
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Commit-Queue: Tony Herre <toprice@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1123506}

--

wpt-commits: 8835eb21a8c3d67e952ece4c386c17dccbdab441
wpt-pr: 39249
This commit is contained in:
Tony Herre 2023-03-30 11:14:26 +00:00 коммит произвёл moz-wptsync-bot
Родитель 3c8d15c8f5
Коммит 900cedcb03
2 изменённых файлов: 96 добавлений и 0 удалений

Просмотреть файл

@ -117,6 +117,80 @@ promise_test(async t => {
return onmessagePromise;
}, 'RTCRtpSender readable stream transferred to a Worker and the Worker sends an RTCEncodedVideoFrame back');
promise_test(async t => {
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
t.add_cleanup(() => caller.close());
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
const stream = await navigator.mediaDevices.getUserMedia({video:true});
const videoTrack = stream.getVideoTracks()[0];
t.add_cleanup(() => videoTrack.stop());
const videoSender = caller.addTrack(videoTrack)
const senderStreams = videoSender.createEncodedStreams();
const senderWorker = new Worker('RTCPeerConnection-worker-transform.js')
t.add_cleanup(() => senderWorker.terminate());
senderWorker.postMessage(
{
readableStream: senderStreams.readable,
writableStream: senderStreams.writable,
insertError: true
},
[senderStreams.readable, senderStreams.writable]);
const onmessagePromise = new Promise(resolve => {
senderWorker.onmessage = t.step_func(message => {
assert_false(message.data.success);
assert_true(message.data.error instanceof TypeError);
resolve();
});
});
exchangeIceCandidates(caller, callee);
await exchangeOfferAnswer(caller, callee);
return onmessagePromise;
}, 'Video RTCRtpSender insertable streams transferred to a worker, which tries to write an invalid frame');
promise_test(async t => {
const caller = new RTCPeerConnection({encodedInsertableStreams:true});
t.add_cleanup(() => caller.close());
const callee = new RTCPeerConnection();
t.add_cleanup(() => callee.close());
const stream = await navigator.mediaDevices.getUserMedia({audio:true});
const audioTrack = stream.getAudioTracks()[0];
t.add_cleanup(() => audioTrack.stop());
const audioSender = caller.addTrack(audioTrack)
const senderStreams = audioSender.createEncodedStreams();
const senderWorker = new Worker('RTCPeerConnection-worker-transform.js')
t.add_cleanup(() => senderWorker.terminate());
senderWorker.postMessage(
{
readableStream: senderStreams.readable,
writableStream: senderStreams.writable,
insertError: true
},
[senderStreams.readable, senderStreams.writable]);
const onmessagePromise = new Promise(resolve => {
senderWorker.onmessage = t.step_func(message => {
assert_false(message.data.success);
assert_true(message.data.error instanceof TypeError);
resolve();
});
});
exchangeIceCandidates(caller, callee);
await exchangeOfferAnswer(caller, callee);
return onmessagePromise;
}, 'Audio RTCRtpSender insertable streams transferred to a worker, which tries to write an invalid frame');
</script>
</body>
</html>

Просмотреть файл

@ -0,0 +1,22 @@
onmessage = async (event) => {
const readableStream = event.data.readableStream;
const writableStream = event.data.writableStream;
const insertError = event.data.insertError;
try {
await readableStream.pipeThrough(new TransformStream({
transform: (chunk, controller) => {
if (insertError) {
controller.enqueue("This is not a valid frame");
} else {
controller.enqueue(chunk);
}
}
})).pipeTo(writableStream);
postMessage({success:true});
} catch(e) {
postMessage({success:false, error: e});
}
}