tor-browser

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

commit d6f91bc97406921010f8604350ed19c6375276e6
parent 90f8b48286403e81d62e8b3f5c68f8fe3342c6a3
Author: Andreas Pehrson <apehrson@mozilla.com>
Date:   Tue, 11 Nov 2025 08:20:24 +0000

Bug 1771789 - Test audio capture cloning independence. r=jib

Differential Revision: https://phabricator.services.mozilla.com/D266399

Diffstat:
Mtesting/web-platform/mozilla/meta/mediacapture-streams/MediaStreamTrack-independent-clones.https.html.ini | 32+++++++++++++++++++++++++++++++-
Mtesting/web-platform/mozilla/tests/mediacapture-streams/MediaStreamTrack-independent-clones.https.html | 47+++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 78 insertions(+), 1 deletion(-)

diff --git a/testing/web-platform/mozilla/meta/mediacapture-streams/MediaStreamTrack-independent-clones.https.html.ini b/testing/web-platform/mozilla/meta/mediacapture-streams/MediaStreamTrack-independent-clones.https.html.ini @@ -1,2 +1,32 @@ [MediaStreamTrack-independent-clones.https.html] - prefs: [media.getusermedia.camera.fake.force:true, media.navigator.streams.fake:false] + [gDM gets expected modes by {"resizeMode":"none","width":100} + (cloned) {"resizeMode":"none","height":500}] + expected: + if os == "android": FAIL + [gDM gets expected modes by {"resizeMode":"none","frameRate":50} + (cloned) {"resizeMode":"none","frameRate":1}] + expected: + if os == "android": FAIL + [gDM gets expected modes by {"resizeMode":"none"} + (cloned) {"resizeMode":"crop-and-scale"}] + expected: + if os == "android": FAIL + [gDM gets expected modes by {"resizeMode":"crop-and-scale"} + (cloned) {"resizeMode":"crop-and-scale","height":100}] + expected: + if os == "android": FAIL + [gDM gets expected modes by {"resizeMode":"crop-and-scale","height":100} + (cloned) {"resizeMode":"crop-and-scale"}] + expected: + if os == "android": FAIL + [gDM gets expected modes by {"resizeMode":"crop-and-scale","frameRate":5} + (cloned) {"resizeMode":"crop-and-scale","frameRate":50}] + expected: + if os == "android": FAIL + [gDM gets expected modes by {"resizeMode":"crop-and-scale","frameRate":50} + (cloned) {"resizeMode":"crop-and-scale","frameRate":5}] + expected: + if os == "android": FAIL + [gDM gets expected modes by {"resizeMode":"none"} + (cloned) {"resizeMode":"crop-and-scale","frameRate":5000}] + expected: + if os == "android": FAIL + [applyConstraints on gDM clone doesn't crop with only ideal dimensions] + expected: + if os == "android": FAIL + [applyConstraints on gDM clone doesn't crop with ideal and max dimensions] + expected: + if os == "android": FAIL + prefs: [media.getusermedia.camera.fake.force:true, media.navigator.streams.fake:false, media.cubeb.force_mock_context:true] diff --git a/testing/web-platform/mozilla/tests/mediacapture-streams/MediaStreamTrack-independent-clones.https.html b/testing/web-platform/mozilla/tests/mediacapture-streams/MediaStreamTrack-independent-clones.https.html @@ -91,6 +91,53 @@ `${JSON.stringify(cloneExpected)} by ${JSON.stringify(video)} ` + `and ${JSON.stringify(cloneVideo)}`)); + [ + [ + [{echoCancellation: true}, {echoCancellation: false, noiseSuppression: true, autoGainControl: true}], + [ + {echoCancellation: true, noiseSuppression: true, autoGainControl: true}, + {echoCancellation: false, noiseSuppression: true, autoGainControl: true}, + ], + ], + [ + [{echoCancellation: false, noiseSuppression: false, autoGainControl: false}, {}], + [ + {echoCancellation: false, noiseSuppression: false, autoGainControl: false}, + {echoCancellation: true, noiseSuppression: true, autoGainControl: true}, + ], + ], + ].forEach( + ([ + [audio, cloneAudio], + [expected, cloneExpected], + ]) => promise_test(async t => { + const stream = await navigator.mediaDevices.getUserMedia({audio}); + const [track] = stream.getTracks(); + const clone = track.clone(); + t.add_cleanup(() => { + track.stop(); + clone.stop(); + }); + let settings = track.getSettings(); + let cloneSettings = clone.getSettings(); + for (const key of Object.keys(expected)) { + assert_equals(settings[key], expected[key], `original: ${key}`); + assert_equals(cloneSettings[key], expected[key], `clone: ${key}`); + } + await clone.applyConstraints(cloneAudio); + settings = track.getSettings(); + cloneSettings = clone.getSettings(); + for (const key of Object.keys(expected)) { + assert_equals(settings[key], expected[key], `original-post: ${key}`); + } + for (const key of Object.keys(cloneExpected)) { + assert_equals(cloneSettings[key], cloneExpected[key], `clone-post: ${key}`); + } + }, `gUM gets ${JSON.stringify(expected)} + clone ` + + `${JSON.stringify(cloneExpected)} by ${JSON.stringify(audio)} ` + + `and ${JSON.stringify(cloneAudio)}`)); + + promise_test(async t => { const stream = await navigator.mediaDevices.getUserMedia({video: true});