From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- ...et_user_media_unprompted_access_tear_off_tab.js | 108 +++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 browser/base/content/test/webrtc/browser_devices_get_user_media_unprompted_access_tear_off_tab.js (limited to 'browser/base/content/test/webrtc/browser_devices_get_user_media_unprompted_access_tear_off_tab.js') diff --git a/browser/base/content/test/webrtc/browser_devices_get_user_media_unprompted_access_tear_off_tab.js b/browser/base/content/test/webrtc/browser_devices_get_user_media_unprompted_access_tear_off_tab.js new file mode 100644 index 0000000000..4a48a93853 --- /dev/null +++ b/browser/base/content/test/webrtc/browser_devices_get_user_media_unprompted_access_tear_off_tab.js @@ -0,0 +1,108 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var gTests = [ + { + desc: "getUserMedia: tearing-off a tab", + skipObserverVerification: true, + run: async function checkAudioVideoWhileLiveTracksExist_TearingOff() { + await enableObserverVerification(); + + let promise = promisePopupNotificationShown("webRTC-shareDevices"); + let observerPromise = expectObserverCalled("getUserMedia:request"); + await promiseRequestDevice(true, true); + await promise; + await observerPromise; + checkDeviceSelectors(["microphone", "camera"]); + + let indicator = promiseIndicatorWindow(); + let observerPromise1 = expectObserverCalled( + "getUserMedia:response:allow" + ); + let observerPromise2 = expectObserverCalled("recording-device-events"); + await promiseMessage("ok", () => { + PopupNotifications.panel.firstElementChild.button.click(); + }); + await observerPromise1; + await observerPromise2; + Assert.deepEqual( + await getMediaCaptureState(), + { audio: true, video: true }, + "expected camera and microphone to be shared" + ); + + await indicator; + await checkSharingUI({ video: true, audio: true }); + + // Don't listen to observer notifications in the tab any more, as + // they will need to be switched to the new window. + await disableObserverVerification(); + + info("tearing off the tab"); + let win = gBrowser.replaceTabWithWindow(gBrowser.selectedTab); + await whenDelayedStartupFinished(win); + await SimpleTest.promiseFocus(win); + await checkSharingUI({ audio: true, video: true }, win); + + await enableObserverVerification(win.gBrowser.selectedBrowser); + + info("request audio+video and check if there is no prompt"); + let observerPromises = [ + expectObserverCalled( + "getUserMedia:request", + 1, + win.gBrowser.selectedBrowser + ), + expectObserverCalled( + "getUserMedia:response:allow", + 1, + win.gBrowser.selectedBrowser + ), + expectObserverCalled( + "recording-device-events", + 1, + win.gBrowser.selectedBrowser + ), + ]; + await promiseRequestDevice( + true, + true, + null, + null, + win.gBrowser.selectedBrowser + ); + await Promise.all(observerPromises); + + await disableObserverVerification(); + + observerPromises = [ + expectObserverCalledOnClose( + "recording-device-events", + 1, + win.gBrowser.selectedBrowser + ), + expectObserverCalledOnClose( + "recording-window-ended", + 1, + win.gBrowser.selectedBrowser + ), + ]; + + await BrowserTestUtils.closeWindow(win); + await Promise.all(observerPromises); + + await checkNotSharing(); + }, + }, +]; + +add_task(async function test() { + await SpecialPowers.pushPrefEnv({ set: [["dom.ipc.processCount", 1]] }); + + // An empty tab where we can load the content script without leaving it + // behind at the end of the test. + BrowserTestUtils.addTab(gBrowser); + + await runTests(gTests); +}); -- cgit v1.2.3