diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /browser/base/content/test/webrtc/browser_devices_get_user_media_by_device_id.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | browser/base/content/test/webrtc/browser_devices_get_user_media_by_device_id.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/browser/base/content/test/webrtc/browser_devices_get_user_media_by_device_id.js b/browser/base/content/test/webrtc/browser_devices_get_user_media_by_device_id.js new file mode 100644 index 0000000000..3e5ca0668a --- /dev/null +++ b/browser/base/content/test/webrtc/browser_devices_get_user_media_by_device_id.js @@ -0,0 +1,82 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const TEST_ROOT = getRootDirectory(gTestPath).replace( + "chrome://mochitests/content/", + "https://example.com/" +); +const TEST_PAGE = TEST_ROOT + "get_user_media.html"; + +/** + * Utility function that should be called after a request for a device + * has been made. This function will allow sharing that device, and then + * immediately close the stream. + */ +async function allowStreamsThenClose() { + let observerPromise1 = expectObserverCalled("getUserMedia:response:allow"); + let observerPromise2 = expectObserverCalled("recording-device-events"); + await promiseMessage("ok", () => { + PopupNotifications.panel.firstElementChild.button.click(); + }); + await observerPromise1; + await observerPromise2; + + await closeStream(); +} + +/** + * Tests that if a site requests a particular device by ID, that + * the Permission Panel menulist for that device shows only that + * device and is disabled. + */ +add_task(async function test_get_user_media_by_device_id() { + let prefs = [ + [PREF_PERMISSION_FAKE, true], + [PREF_AUDIO_LOOPBACK, ""], + [PREF_VIDEO_LOOPBACK, ""], + [PREF_FAKE_STREAMS, true], + [PREF_FOCUS_SOURCE, false], + ]; + await SpecialPowers.pushPrefEnv({ set: prefs }); + + let devices = await navigator.mediaDevices.enumerateDevices(); + let audioId = devices + .filter(d => d.kind == "audioinput") + .map(d => d.deviceId)[0]; + let videoId = devices + .filter(d => d.kind == "videoinput") + .map(d => d.deviceId)[0]; + + await BrowserTestUtils.withNewTab(TEST_PAGE, async browser => { + let promise = promisePopupNotificationShown("webRTC-shareDevices"); + let observerPromise = expectObserverCalled("getUserMedia:request"); + await promiseRequestDevice({ deviceId: { exact: audioId } }); + await promise; + await observerPromise; + checkDeviceSelectors(["microphone"]); + + await allowStreamsThenClose(); + + promise = promisePopupNotificationShown("webRTC-shareDevices"); + observerPromise = expectObserverCalled("getUserMedia:request"); + await promiseRequestDevice(false, { deviceId: { exact: videoId } }); + await promise; + await observerPromise; + checkDeviceSelectors(["camera"]); + + await allowStreamsThenClose(); + + promise = promisePopupNotificationShown("webRTC-shareDevices"); + observerPromise = expectObserverCalled("getUserMedia:request"); + await promiseRequestDevice( + { deviceId: { exact: audioId } }, + { deviceId: { exact: videoId } } + ); + await promise; + await observerPromise; + checkDeviceSelectors(["microphone", "camera"]); + await allowStreamsThenClose(); + }); +}); |