summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/webrtc/browser_macos_indicator_hiding.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /browser/base/content/test/webrtc/browser_macos_indicator_hiding.js
parentInitial commit. (diff)
downloadfirefox-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 'browser/base/content/test/webrtc/browser_macos_indicator_hiding.js')
-rw-r--r--browser/base/content/test/webrtc/browser_macos_indicator_hiding.js145
1 files changed, 145 insertions, 0 deletions
diff --git a/browser/base/content/test/webrtc/browser_macos_indicator_hiding.js b/browser/base/content/test/webrtc/browser_macos_indicator_hiding.js
new file mode 100644
index 0000000000..65110ae655
--- /dev/null
+++ b/browser/base/content/test/webrtc/browser_macos_indicator_hiding.js
@@ -0,0 +1,145 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ *
+ * This test only runs for MacOS 14.0 and above to test the case for
+ * Bug 1857254 - MacOS 14 displays two camera in use icons in menu bar
+ */
+
+"use strict";
+
+const TEST_ROOT = getRootDirectory(gTestPath).replace(
+ "chrome://mochitests/content/",
+ "https://example.com/"
+);
+const TEST_PAGE = TEST_ROOT + "get_user_media.html";
+
+const { MockRegistrar } = ChromeUtils.importESModule(
+ "resource://testing-common/MockRegistrar.sys.mjs"
+);
+
+var systemStatusBarService = {
+ counter: 0,
+ _reset() {
+ this.counter = 0;
+ },
+ QueryInterface: ChromeUtils.generateQI(["nsISystemStatusBar"]),
+
+ addItem(element) {
+ info(
+ `Add item call was fired for element ${element}, updating counter from ${
+ this.counter
+ } to ${this.counter + 1}`
+ );
+ this.counter += 1;
+ },
+
+ removeItem(element) {
+ info(`remove item call was fired for element ${element}`);
+ },
+};
+
+/**
+ * Helper to test if the indicators are shown based on the params
+ *
+ * @param {Object}
+ * expectedCount (number) - expected number of indicators turned on
+ * cameraState (boolean) - if the camera indicator should be shown
+ * microphoneState (boolean) - if the microphone indicator should be shown
+ * screenShareState (string) - if the screen share indicator should be shown
+ * (SCREEN_SHARE or "")
+ */
+async function indicatorHelper({
+ expectedCount,
+ cameraState,
+ microphoneState,
+ shareScreenState,
+}) {
+ await BrowserTestUtils.withNewTab(TEST_PAGE, async browser => {
+ let indicatorPromise = promiseIndicatorWindow();
+
+ await shareDevices(browser, cameraState, microphoneState, shareScreenState);
+ await indicatorPromise;
+ });
+
+ is(
+ systemStatusBarService.counter,
+ expectedCount,
+ `${expectedCount} indicator(s) should be shown`
+ );
+
+ systemStatusBarService._reset();
+}
+
+add_task(async function testIconChanges() {
+ SpecialPowers.pushPrefEnv({
+ set: [["privacy.webrtc.showIndicatorsOnMacos14AndAbove", false]],
+ });
+
+ let fakeStatusBarService = MockRegistrar.register(
+ "@mozilla.org/widget/systemstatusbar;1",
+ systemStatusBarService
+ );
+
+ systemStatusBarService._reset();
+
+ registerCleanupFunction(function () {
+ MockRegistrar.unregister(fakeStatusBarService);
+ });
+
+ info("Created mock system status bar service");
+
+ 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 });
+
+ await indicatorHelper({
+ expectedCount: 0,
+ cameraState: true,
+ microphoneState: true,
+ shareScreenState: SHARE_SCREEN,
+ });
+ await indicatorHelper({
+ expectedCount: 0,
+ cameraState: true,
+ microphoneState: false,
+ shareScreenState: SHARE_SCREEN,
+ });
+
+ // In case we want to be able to see the indicator
+ SpecialPowers.pushPrefEnv({
+ set: [["privacy.webrtc.showIndicatorsOnMacos14AndAbove", true]],
+ });
+
+ await indicatorHelper({
+ expectedCount: 3,
+ cameraState: true,
+ microphoneState: true,
+ shareScreenState: SHARE_SCREEN,
+ });
+ await indicatorHelper({
+ expectedCount: 1,
+ cameraState: false,
+ microphoneState: false,
+ shareScreenState: SHARE_SCREEN,
+ });
+ await indicatorHelper({
+ expectedCount: 1,
+ cameraState: true,
+ microphoneState: false,
+ shareScreenState: "",
+ });
+ await indicatorHelper({
+ expectedCount: 1,
+ cameraState: false,
+ microphoneState: true,
+ shareScreenState: "",
+ });
+
+ await SpecialPowers.popPrefEnv();
+});