diff options
Diffstat (limited to 'dom/media/webrtc/tests/mochitests/test_multi_mics.html')
-rw-r--r-- | dom/media/webrtc/tests/mochitests/test_multi_mics.html | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/dom/media/webrtc/tests/mochitests/test_multi_mics.html b/dom/media/webrtc/tests/mochitests/test_multi_mics.html new file mode 100644 index 0000000000..f7b03f0fd5 --- /dev/null +++ b/dom/media/webrtc/tests/mochitests/test_multi_mics.html @@ -0,0 +1,61 @@ +<!DOCTYPE HTML> +<html> +<head> + <script type="application/javascript" src="mediaStreamPlayback.js"></script> +</head> +<body> +<pre id="test"> +<script type="application/javascript"> +"use strict"; + +createHTML({ + title: "Test the ability of opening multiple microphones via gUM", + bug: "1238038", +}); + +runTest(async () => { + // Ensure we use the real microphones by disabling loopback devices and fake devices. + await pushPrefs(["media.audio_loopback_dev", ""], ["media.navigator.streams.fake", false]); + + try { + // Allow exposing microphone by calling gUM first + const defaultStream = await navigator.mediaDevices.getUserMedia({ audio: true }); + for (const track of defaultStream.getTracks()) { + track.stop(); + } + + const devices = await navigator.mediaDevices.enumerateDevices(); + // Create constraints + let constraints = []; + devices.forEach((device) => { + if (device.kind === "audioinput") { + constraints.push({ + audio: { deviceId: { exact: device.deviceId } }, + }); + } + }); + if (constraints.length >= 2) { + // Open microphones by the constraints + let mediaStreams = []; + for (const c of constraints) { + let stream = await navigator.mediaDevices.getUserMedia(c); + mediaStreams.push(stream); + } + // Close microphones + for (const stream of mediaStreams) { + for (const track of stream.getTracks()) { + track.stop(); + } + } + mediaStreams = []; + } else { + dump("Skip test since we need at least two microphones\n"); + } + } catch (e) { + ok(false, e.name + ": " + e.message); + } +}); +</script> +</pre> +</body> +</html> |