summaryrefslogtreecommitdiffstats
path: root/dom/media/test/gUM_support.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/test/gUM_support.js')
-rw-r--r--dom/media/test/gUM_support.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/dom/media/test/gUM_support.js b/dom/media/test/gUM_support.js
new file mode 100644
index 0000000000..80d218cae7
--- /dev/null
+++ b/dom/media/test/gUM_support.js
@@ -0,0 +1,103 @@
+// Support script for test that use getUserMedia. This allows explicit
+// configuration of prefs which affect gUM. See also
+// `testing/mochitest/runtests.py` for how the harness configures values.
+
+// Setup preconditions for tests using getUserMedia. This functions helps
+// manage different prefs that affect gUM calls in tests and makes explicit
+// the expected state before test runs.
+async function pushGetUserMediaTestPrefs({
+ fakeAudio = false,
+ fakeVideo = false,
+ loopbackAudio = false,
+ loopbackVideo = false,
+}) {
+ // Make sure we have sensical arguments
+ if (!fakeAudio && !loopbackAudio) {
+ throw new Error(
+ "pushGetUserMediaTestPrefs: Should have fake or loopback audio!"
+ );
+ } else if (fakeAudio && loopbackAudio) {
+ throw new Error(
+ "pushGetUserMediaTestPrefs: Should not have both fake and loopback audio!"
+ );
+ }
+ if (!fakeVideo && !loopbackVideo) {
+ throw new Error(
+ "pushGetUserMediaTestPrefs: Should have fake or loopback video!"
+ );
+ } else if (fakeVideo && loopbackVideo) {
+ throw new Error(
+ "pushGetUserMediaTestPrefs: Should not have both fake and loopback video!"
+ );
+ }
+
+ let testPrefs = [];
+ if (fakeAudio) {
+ // Unset the loopback device so it doesn't take precedence
+ testPrefs.push(["media.audio_loopback_dev", ""]);
+ // Setup fake streams pref
+ testPrefs.push(["media.navigator.streams.fake", true]);
+ }
+ if (loopbackAudio) {
+ // If audio loopback is requested we expect the test harness to have set
+ // the loopback device pref, make sure it's set
+ let audioLoopDev = SpecialPowers.getCharPref(
+ "media.audio_loopback_dev",
+ ""
+ );
+ if (!audioLoopDev) {
+ throw new Error(
+ "pushGetUserMediaTestPrefs: Loopback audio requested but " +
+ "media.audio_loopback_dev does not appear to be set!"
+ );
+ }
+ }
+ if (fakeVideo) {
+ // Unset the loopback device so it doesn't take precedence
+ testPrefs.push(["media.video_loopback_dev", ""]);
+ // Setup fake streams pref
+ testPrefs.push(["media.navigator.streams.fake", true]);
+ }
+ if (loopbackVideo) {
+ // If video loopback is requested we expect the test harness to have set
+ // the loopback device pref, make sure it's set
+ let videoLoopDev = SpecialPowers.getCharPref(
+ "media.video_loopback_dev",
+ ""
+ );
+ if (!videoLoopDev) {
+ throw new Error(
+ "pushGetUserMediaTestPrefs: Loopback video requested but " +
+ "media.video_loopback_dev does not appear to be set!"
+ );
+ }
+ }
+ // Prevent presentation of the gUM permission prompt.
+ testPrefs.push(["media.navigator.permission.disabled", true]);
+ return SpecialPowers.pushPrefEnv({ set: testPrefs });
+}
+
+// Setup preconditions for tests using getUserMedia. This function will
+// configure prefs to select loopback device(s) if it can find loopback device
+// names already set in the prefs. If no loopback device name can be found then
+// prefs are setup such that a fake device is used.
+async function setupGetUserMediaTestPrefs() {
+ let prefRequests = {};
+ let audioLoopDev = SpecialPowers.getCharPref("media.audio_loopback_dev", "");
+ if (audioLoopDev) {
+ prefRequests.fakeAudio = false;
+ prefRequests.loopbackAudio = true;
+ } else {
+ prefRequests.fakeAudio = true;
+ prefRequests.loopbackAudio = false;
+ }
+ let videoLoopDev = SpecialPowers.getCharPref("media.video_loopback_dev", "");
+ if (videoLoopDev) {
+ prefRequests.fakeVideo = false;
+ prefRequests.loopbackVideo = true;
+ } else {
+ prefRequests.fakeVideo = true;
+ prefRequests.loopbackVideo = false;
+ }
+ return pushGetUserMediaTestPrefs(prefRequests);
+}