зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
3c8d15c8f5
Коммит
900cedcb03
|
@ -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});
|
||||
}
|
||||
|
||||
}
|
Загрузка…
Ссылка в новой задаче