tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 23c25817adec45a2a1ff80a9749ac5bbb85dcdb1
parent 12379e41a7355ae839fb82db6b29a12a6d5883a6
Author: youennf <youennf@users.noreply.github.com>
Date:   Fri, 19 Dec 2025 09:31:36 +0000

Bug 1991140 [wpt PR 55100] - Limit the events fired by a stopped MediaRecorder in case of change of track states, a=testonly

Automatic update from web-platform-tests
Limit the events fired by a stopped MediaRecorder in case of change of track states (#55100)

* Limit the events fired by a stopped MediaRecorder in case of change of track states
Export of WebKit PR, see https://bugs.webkit.org/show_bug.cgi?id=299601

* Use stop as end signal
--

wpt-commits: dfd8cd1a74cff749fd5af750dce63f3fcbc8d8f1
wpt-pr: 55100

Diffstat:
Mtesting/web-platform/tests/mediacapture-record/MediaRecorder-stop.html | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 68 insertions(+), 0 deletions(-)

diff --git a/testing/web-platform/tests/mediacapture-record/MediaRecorder-stop.html b/testing/web-platform/tests/mediacapture-record/MediaRecorder-stop.html @@ -220,6 +220,74 @@ assertSequenceIn(events, ["start", "dataavailable", "stop"]); }, "MediaRecorder will fire only start and stop events in a basic recording flow."); + promise_test(async t => { + const {stream} = createFlowingAudioVideoStream(t); + const audioTrack = stream.getAudioTracks()[0]; + const videoTrack = stream.getVideoTracks()[0]; + t.add_cleanup(() => { + audioTrack.stop(); + videoTrack.stop(); + }); + const recorder = new MediaRecorder(stream); + + let resolve; + const promise = new Promise((resolve_, reject) => { + resolve = resolve_; + t.step_timeout(() => reject("stop event time out"), 2000); + }); + + let events = []; + recorder.onstart = () => events.push("start"); + recorder.onstop = () => { + events.push("stop"); + resolve(); + } + recorder.onerror = () => events.push("error"); + recorder.ondataavailable = ()=> events.push("data"); + + recorder.start(); + await new Promise(resolve => t.step_timeout(resolve, 0)); + + stream.removeTrack(stream.getAudioTracks()[0]); + recorder.stop(); + await promise; + assert_array_equals(events, ["start", "data", "stop"]); + }, "MediaRecorder will not fire an error event if a recorder is stopped synchronously after a track is removed"); + + promise_test(async t => { + const {stream} = createFlowingAudioVideoStream(t); + const audioTrack = stream.getAudioTracks()[0]; + const videoTrack = stream.getVideoTracks()[0]; + t.add_cleanup(() => { + audioTrack.stop(); + videoTrack.stop(); + }); + const recorder = new MediaRecorder(stream); + + let resolve; + const promise = new Promise((resolve_, reject) => { + resolve = resolve_; + t.step_timeout(() => reject("stop event time out"), 2000); + }); + + let events = []; + recorder.onstart = ()=> events.push("start"); + recorder.onstop = () => { + events.push("stop"); + resolve(); + } + recorder.onerror = ()=> events.push("error"); + recorder.ondataavailable = ()=> events.push("data"); + + recorder.start(); + await new Promise(resolve => t.step_timeout(resolve, 0)); + + audioTrack.stop(); + videoTrack.stop(); + recorder.stop(); + await promise; + assert_array_equals(events, ["start", "data", "stop"]); + }, "MediaRecorder will not fire an error event if a recorder is stopped synchronously after all tracks are ended"); </script> </body> </html>