summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js')
-rw-r--r--browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js266
1 files changed, 0 insertions, 266 deletions
diff --git a/browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js b/browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js
deleted file mode 100644
index 01a544aae..000000000
--- a/browser/base/content/test/webrtc/browser_devices_get_user_media_in_frame.js
+++ /dev/null
@@ -1,266 +0,0 @@
-/* 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/. */
-
-registerCleanupFunction(function() {
- gBrowser.removeCurrentTab();
-});
-
-function promiseReloadFrame(aFrameId) {
- return ContentTask.spawn(gBrowser.selectedBrowser, aFrameId, function*(aFrameId) {
- content.wrappedJSObject.document.getElementById(aFrameId).contentWindow.location.reload();
- });
-}
-
-var gTests = [
-
-{
- desc: "getUserMedia audio+video",
- run: function* checkAudioVideo() {
- let promise = promisePopupNotificationShown("webRTC-shareDevices");
- yield promiseRequestDevice(true, true, "frame1");
- yield promise;
- yield expectObserverCalled("getUserMedia:request");
-
- is(PopupNotifications.getNotification("webRTC-shareDevices").anchorID,
- "webRTC-shareDevices-notification-icon", "anchored to device icon");
- checkDeviceSelectors(true, true);
- is(PopupNotifications.panel.firstChild.getAttribute("popupid"),
- "webRTC-shareDevices", "panel using devices icon");
-
- let indicator = promiseIndicatorWindow();
- yield promiseMessage("ok", () => {
- PopupNotifications.panel.firstChild.button.click();
- });
- yield expectObserverCalled("getUserMedia:response:allow");
- yield expectObserverCalled("recording-device-events");
- is((yield getMediaCaptureState()), "CameraAndMicrophone",
- "expected camera and microphone to be shared");
-
- yield indicator;
- yield checkSharingUI({audio: true, video: true});
- yield closeStream(false, "frame1");
- }
-},
-
-{
- desc: "getUserMedia audio+video: stop sharing",
- run: function* checkStopSharing() {
- let promise = promisePopupNotificationShown("webRTC-shareDevices");
- yield promiseRequestDevice(true, true, "frame1");
- yield promise;
- yield expectObserverCalled("getUserMedia:request");
- checkDeviceSelectors(true, true);
-
- let indicator = promiseIndicatorWindow();
- yield promiseMessage("ok", () => {
- activateSecondaryAction(kActionAlways);
- });
- yield expectObserverCalled("getUserMedia:response:allow");
- yield expectObserverCalled("recording-device-events");
- is((yield getMediaCaptureState()), "CameraAndMicrophone",
- "expected camera and microphone to be shared");
-
- yield indicator;
- yield checkSharingUI({video: true, audio: true});
-
- let Perms = Services.perms;
- let uri = Services.io.newURI("https://example.com/", null, null);
- is(Perms.testExactPermission(uri, "microphone"), Perms.ALLOW_ACTION,
- "microphone persistently allowed");
- is(Perms.testExactPermission(uri, "camera"), Perms.ALLOW_ACTION,
- "camera persistently allowed");
-
- yield stopSharing();
-
- // The persistent permissions for the frame should have been removed.
- is(Perms.testExactPermission(uri, "microphone"), Perms.UNKNOWN_ACTION,
- "microphone not persistently allowed");
- is(Perms.testExactPermission(uri, "camera"), Perms.UNKNOWN_ACTION,
- "camera not persistently allowed");
-
- // the stream is already closed, but this will do some cleanup anyway
- yield closeStream(true, "frame1");
- }
-},
-
-{
- desc: "getUserMedia audio+video: reloading the frame removes all sharing UI",
- run: function* checkReloading() {
- let promise = promisePopupNotificationShown("webRTC-shareDevices");
- yield promiseRequestDevice(true, true, "frame1");
- yield promise;
- yield expectObserverCalled("getUserMedia:request");
- checkDeviceSelectors(true, true);
-
- let indicator = promiseIndicatorWindow();
- yield promiseMessage("ok", () => {
- PopupNotifications.panel.firstChild.button.click();
- });
- yield expectObserverCalled("getUserMedia:response:allow");
- yield expectObserverCalled("recording-device-events");
- is((yield getMediaCaptureState()), "CameraAndMicrophone",
- "expected camera and microphone to be shared");
-
- yield indicator;
- yield checkSharingUI({video: true, audio: true});
-
- info("reloading the frame");
- promise = promiseObserverCalled("recording-device-events");
- yield promiseReloadFrame("frame1");
- yield promise;
-
- yield expectObserverCalled("recording-window-ended");
- yield expectNoObserverCalled();
- yield checkNotSharing();
- }
-},
-
-{
- desc: "getUserMedia audio+video: reloading the frame removes prompts",
- run: function* checkReloadingRemovesPrompts() {
- let promise = promisePopupNotificationShown("webRTC-shareDevices");
- yield promiseRequestDevice(true, true, "frame1");
- yield promise;
- yield expectObserverCalled("getUserMedia:request");
- checkDeviceSelectors(true, true);
-
- info("reloading the frame");
- promise = promiseObserverCalled("recording-window-ended");
- yield promiseReloadFrame("frame1");
- yield promise;
- yield promiseNoPopupNotification("webRTC-shareDevices");
-
- yield expectNoObserverCalled();
- yield checkNotSharing();
- }
-},
-
-{
- desc: "getUserMedia audio+video: reloading a frame updates the sharing UI",
- run: function* checkUpdateWhenReloading() {
- // We'll share only the mic in the first frame, then share both in the
- // second frame, then reload the second frame. After each step, we'll check
- // the UI is in the correct state.
-
- let promise = promisePopupNotificationShown("webRTC-shareDevices");
- yield promiseRequestDevice(true, false, "frame1");
- yield promise;
- yield expectObserverCalled("getUserMedia:request");
- checkDeviceSelectors(true, false);
-
- let indicator = promiseIndicatorWindow();
- yield promiseMessage("ok", () => {
- PopupNotifications.panel.firstChild.button.click();
- });
- yield expectObserverCalled("getUserMedia:response:allow");
- yield expectObserverCalled("recording-device-events");
- is((yield getMediaCaptureState()), "Microphone", "microphone to be shared");
-
- yield indicator;
- yield checkSharingUI({video: false, audio: true});
- yield expectNoObserverCalled();
-
- promise = promisePopupNotificationShown("webRTC-shareDevices");
- yield promiseRequestDevice(true, true, "frame2");
- yield promise;
- yield expectObserverCalled("getUserMedia:request");
- checkDeviceSelectors(true, true);
-
- yield promiseMessage("ok", () => {
- PopupNotifications.panel.firstChild.button.click();
- });
- yield expectObserverCalled("getUserMedia:response:allow");
- yield expectObserverCalled("recording-device-events");
- is((yield getMediaCaptureState()), "CameraAndMicrophone",
- "expected camera and microphone to be shared");
-
- yield checkSharingUI({video: true, audio: true});
- yield expectNoObserverCalled();
-
- info("reloading the second frame");
- promise = promiseObserverCalled("recording-device-events");
- yield promiseReloadFrame("frame2");
- yield promise;
-
- yield expectObserverCalled("recording-window-ended");
- yield checkSharingUI({video: false, audio: true});
- yield expectNoObserverCalled();
-
- yield closeStream(false, "frame1");
- yield expectNoObserverCalled();
- yield checkNotSharing();
- }
-},
-
-{
- desc: "getUserMedia audio+video: reloading the top level page removes all sharing UI",
- run: function* checkReloading() {
- let promise = promisePopupNotificationShown("webRTC-shareDevices");
- yield promiseRequestDevice(true, true, "frame1");
- yield promise;
- yield expectObserverCalled("getUserMedia:request");
- checkDeviceSelectors(true, true);
-
- let indicator = promiseIndicatorWindow();
- yield promiseMessage("ok", () => {
- PopupNotifications.panel.firstChild.button.click();
- });
- yield expectObserverCalled("getUserMedia:response:allow");
- yield expectObserverCalled("recording-device-events");
- is((yield getMediaCaptureState()), "CameraAndMicrophone",
- "expected camera and microphone to be shared");
-
- yield indicator;
- yield checkSharingUI({video: true, audio: true});
-
- info("reloading the web page");
- promise = promiseObserverCalled("recording-device-events");
- content.location.reload();
- yield promise;
-
- yield expectObserverCalled("recording-window-ended");
- yield expectNoObserverCalled();
- yield checkNotSharing();
- }
-}
-
-];
-
-function test() {
- waitForExplicitFinish();
-
- let tab = gBrowser.addTab();
- gBrowser.selectedTab = tab;
- let browser = tab.linkedBrowser;
-
- browser.messageManager.loadFrameScript(CONTENT_SCRIPT_HELPER, true);
-
- browser.addEventListener("load", function onload() {
- browser.removeEventListener("load", onload, true);
-
- is(PopupNotifications._currentNotifications.length, 0,
- "should start the test without any prior popup notification");
-
- Task.spawn(function* () {
- yield SpecialPowers.pushPrefEnv({"set": [[PREF_PERMISSION_FAKE, true]]});
-
- for (let test of gTests) {
- info(test.desc);
- yield test.run();
-
- // Cleanup before the next test
- yield expectNoObserverCalled();
- }
- }).then(finish, ex => {
- Cu.reportError(ex);
- ok(false, "Unexpected Exception: " + ex);
- finish();
- });
- }, true);
- let rootDir = getRootDirectory(gTestPath);
- rootDir = rootDir.replace("chrome://mochitests/content/",
- "https://example.com/");
- let url = rootDir + "get_user_media.html";
- content.location = 'data:text/html,<iframe id="frame1" src="' + url + '"></iframe><iframe id="frame2" src="' + url + '"></iframe>'
-}