Bug 802326 - update tests to work wo/"No Video" and "No Audio" in cam+mic permission prompt. draft
authorJan-Ivar Bruaroey <jib@mozilla.com>
Fri, 06 May 2016 10:02:56 -0400
changeset 366177 9e93d0cd42deb7886a5d6fb16475297cb8a23a44
parent 365498 8c0a5dbdbc32bfdbfe0fac9b3b3dfb266c0f7f3a
child 366178 378bb4c456a2c1a302756d86391bff04bee50e9a
push id17915
push userjbruaroey@mozilla.com
push dateThu, 12 May 2016 04:09:13 +0000
bugs802326
milestone49.0a1
Bug 802326 - update tests to work wo/"No Video" and "No Audio" in cam+mic permission prompt. MozReview-Commit-ID: FwjmJfOLNct
browser/base/content/test/general/browser_devices_get_user_media.js
--- a/browser/base/content/test/general/browser_devices_get_user_media.js
+++ b/browser/base/content/test/general/browser_devices_get_user_media.js
@@ -5,22 +5,16 @@
 requestLongerTimeout(2);
 
 const CONTENT_SCRIPT_HELPER = getRootDirectory(gTestPath) + "get_user_media_content_script.js";
 Cc["@mozilla.org/moz/jssubscript-loader;1"]
   .getService(Ci.mozIJSSubScriptLoader)
   .loadSubScript(getRootDirectory(gTestPath) + "get_user_media_helpers.js",
                  this);
 
-function enableDevice(aType, aEnabled) {
-  let menulist = document.getElementById("webRTC-select" + aType + "-menulist");
-  let menupopup = document.getElementById("webRTC-select" + aType + "-menupopup");
-  menulist.value = aEnabled ? menupopup.firstChild.getAttribute("value") : "-1";
-}
-
 registerCleanupFunction(function() {
   gBrowser.removeCurrentTab();
 });
 
 const permissionError = "error: SecurityError: The operation is insecure.";
 
 var gTests = [
 
@@ -62,18 +56,16 @@ var gTests = [
     yield expectObserverCalled("getUserMedia:request");
 
     is(PopupNotifications.getNotification("webRTC-shareDevices").anchorID,
        "webRTC-shareMicrophone-notification-icon", "anchored to mic icon");
     checkDeviceSelectors(true);
     is(PopupNotifications.panel.firstChild.getAttribute("popupid"),
        "webRTC-shareMicrophone", "panel using microphone icon");
 
-    enableDevice("Microphone", 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()), "Microphone",
        "expected microphone to be shared");
@@ -108,107 +100,16 @@ var gTests = [
 
     yield indicator;
     yield checkSharingUI({video: true});
     yield closeStream();
   }
 },
 
 {
-  desc: "getUserMedia audio+video, user disables video",
-  run: function checkDisableVideo() {
-    let promise = promisePopupNotificationShown("webRTC-shareDevices");
-    yield promiseRequestDevice(true, true);
-    yield promise;
-    yield expectObserverCalled("getUserMedia:request");
-    checkDeviceSelectors(true, true);
-
-    // disable the camera
-    enableDevice("Microphone", true);
-    enableDevice("Camera", false);
-
-    let indicator = promiseIndicatorWindow();
-    yield promiseMessage("ok", () => {
-      PopupNotifications.panel.firstChild.button.click();
-    });
-
-    // reset the menuitem to have no impact on the following tests.
-    enableDevice("Camera", true);
-
-    yield expectObserverCalled("getUserMedia:response:allow");
-    yield expectObserverCalled("recording-device-events");
-    is((yield getMediaCaptureState()), "Microphone",
-       "expected microphone to be shared");
-
-    yield indicator;
-    yield checkSharingUI({audio: true});
-    yield closeStream();
-  }
-},
-
-{
-  desc: "getUserMedia audio+video, user disables audio",
-  run: function checkDisableAudio() {
-    let promise = promisePopupNotificationShown("webRTC-shareDevices");
-    yield promiseRequestDevice(true, true);
-    yield promise;
-    yield expectObserverCalled("getUserMedia:request");
-    checkDeviceSelectors(true, true);
-
-    // disable the microphone
-    enableDevice("Microphone", false);
-    enableDevice("Camera", true);
-
-    let indicator = promiseIndicatorWindow();
-    yield promiseMessage("ok", () => {
-      PopupNotifications.panel.firstChild.button.click();
-    });
-
-    // reset the menuitem to have no impact on the following tests.
-    enableDevice("Microphone", true);
-
-    yield expectObserverCalled("getUserMedia:response:allow");
-    yield expectObserverCalled("recording-device-events");
-    is((yield getMediaCaptureState()), "Camera",
-       "expected microphone to be shared");
-
-    yield indicator;
-    yield checkSharingUI({video: true});
-    yield closeStream();
-  }
-},
-
-{
-  desc: "getUserMedia audio+video, user disables both audio and video",
-  run: function checkDisableAudioVideo() {
-    let promise = promisePopupNotificationShown("webRTC-shareDevices");
-    yield promiseRequestDevice(true, true);
-    yield promise;
-    yield expectObserverCalled("getUserMedia:request");
-    checkDeviceSelectors(true, true);
-
-    // disable the camera and microphone
-    enableDevice("Camera", false);
-    enableDevice("Microphone", false);
-
-    yield promiseMessage(permissionError, () => {
-      PopupNotifications.panel.firstChild.button.click();
-    });
-
-    // reset the menuitems to have no impact on the following tests.
-    enableDevice("Camera", true);
-    enableDevice("Microphone", true);
-
-    yield expectObserverCalled("getUserMedia:response:deny");
-    yield expectObserverCalled("recording-window-ended");
-    yield checkNotSharing();
-  }
-},
-
-{
   desc: "getUserMedia audio+video, user clicks \"Don't Share\"",
   run: function checkDontShare() {
     let promise = promisePopupNotificationShown("webRTC-shareDevices");
     yield promiseRequestDevice(true, true);
     yield promise;
     yield expectObserverCalled("getUserMedia:request");
     checkDeviceSelectors(true, true);
 
@@ -303,47 +204,40 @@ var gTests = [
   }
 },
 
 {
   desc: "getUserMedia prompt: Always/Never Share",
   run: function checkRememberCheckbox() {
     let elt = id => document.getElementById(id);
 
-    function checkPerm(aRequestAudio, aRequestVideo, aAllowAudio, aAllowVideo,
+    function checkPerm(aRequestAudio, aRequestVideo,
                        aExpectedAudioPerm, aExpectedVideoPerm, aNever) {
       let promise = promisePopupNotificationShown("webRTC-shareDevices");
       yield promiseRequestDevice(aRequestAudio, aRequestVideo);
       yield promise;
       yield expectObserverCalled("getUserMedia:request");
 
-      let noAudio = aAllowAudio === undefined;
-      is(elt("webRTC-selectMicrophone").hidden, noAudio,
-         "microphone selector expected to be " + (noAudio ? "hidden" : "visible"));
-      if (!noAudio)
-        enableDevice("Microphone", aAllowAudio || aNever);
+      is(elt("webRTC-selectMicrophone").hidden, !aRequestAudio,
+         "microphone selector expected to be " + (aRequestAudio ? "visible" : "hidden"));
 
-      let noVideo = aAllowVideo === undefined;
-      is(elt("webRTC-selectCamera").hidden, noVideo,
-         "camera selector expected to be " + (noVideo ? "hidden" : "visible"));
-      if (!noVideo)
-        enableDevice("Camera", aAllowVideo || aNever);
+      is(elt("webRTC-selectCamera").hidden, !aRequestVideo,
+         "camera selector expected to be " + (aRequestVideo ? "visible" : "hidden"));
 
-      let expectedMessage =
-        (aAllowVideo || aAllowAudio) ? "ok" : permissionError;
+      let expectedMessage = aNever ? permissionError : "ok";
       yield promiseMessage(expectedMessage, () => {
         activateSecondaryAction(aNever ? kActionNever : kActionAlways);
       });
       let expected = [];
       if (expectedMessage == "ok") {
         yield expectObserverCalled("getUserMedia:response:allow");
         yield expectObserverCalled("recording-device-events");
-        if (aAllowVideo)
+        if (aRequestVideo)
           expected.push("Camera");
-        if (aAllowAudio)
+        if (aRequestAudio)
           expected.push("Microphone");
         expected = expected.join("And");
       }
       else {
         yield expectObserverCalled("getUserMedia:response:deny");
         yield expectObserverCalled("recording-window-ended");
         expected = "none";
       }
@@ -366,49 +260,29 @@ var gTests = [
       checkDevicePermissions("camera", aExpectedVideoPerm);
 
       if (expectedMessage == "ok")
         yield closeStream();
     }
 
     // 3 cases where the user accepts the device prompt.
     info("audio+video, user grants, expect both perms set to allow");
-    yield checkPerm(true, true, true, true, true, true);
+    yield checkPerm(true, true, true, true);
     info("audio only, user grants, check audio perm set to allow, video perm not set");
-    yield checkPerm(true, false, true, undefined, true, undefined);
+    yield checkPerm(true, false, true, undefined);
     info("video only, user grants, check video perm set to allow, audio perm not set");
-    yield checkPerm(false, true, undefined, true, undefined, true);
+    yield checkPerm(false, true, undefined, true);
 
-    // 3 cases where the user rejects the device request.
-    // First test these cases by setting the device to 'No Audio'/'No Video'
-    info("audio+video, user denies, expect both perms set to deny");
-    yield checkPerm(true, true, false, false, false, false);
+    // 3 cases where the user rejects the device request by using 'Never Share'.
     info("audio only, user denies, expect audio perm set to deny, video not set");
-    yield checkPerm(true, false, false, undefined, false, undefined);
+    yield checkPerm(true, false, false, undefined, true);
     info("video only, user denies, expect video perm set to deny, audio perm not set");
-    yield checkPerm(false, true, undefined, false, undefined, false);
-    // Now test these 3 cases again by using the 'Never Share' action.
+    yield checkPerm(false, true, undefined, false, true);
     info("audio+video, user denies, expect both perms set to deny");
-    yield checkPerm(true, true, false, false, false, false, true);
-    info("audio only, user denies, expect audio perm set to deny, video not set");
-    yield checkPerm(true, false, false, undefined, false, undefined, true);
-    info("video only, user denies, expect video perm set to deny, audio perm not set");
-    yield checkPerm(false, true, undefined, false, undefined, false, true);
-
-    // 2 cases where the user allows half of what's requested.
-    info("audio+video, user denies video, grants audio, " +
-         "expect video perm set to deny, audio perm set to allow.");
-    yield checkPerm(true, true, true, false, true, false);
-    info("audio+video, user denies audio, grants video, " +
-         "expect video perm set to allow, audio perm set to deny.");
-    yield checkPerm(true, true, false, true, false, true);
-
-    // reset the menuitems to have no impact on the following tests.
-    enableDevice("Microphone", true);
-    enableDevice("Camera", true);
+    yield checkPerm(true, true, false, false, true);
   }
 },
 
 {
   desc: "getUserMedia without prompt: use persistent permissions",
   run: function checkUsePersistentPermissions() {
     function usePerm(aAllowAudio, aAllowVideo, aRequestAudio, aRequestVideo,
                      aExpectStream) {
@@ -473,58 +347,58 @@ var gTests = [
 
     // Set both permissions identically
     info("allow audio+video, request audio+video, expect ok (audio+video)");
     yield usePerm(true, true, true, true, true);
     info("deny audio+video, request audio+video, expect denied");
     yield usePerm(false, false, true, true, false);
 
     // Allow audio, deny video.
-    info("allow audio, deny video, request audio+video, expect ok (audio)");
-    yield usePerm(true, false, true, true, true);
+    info("allow audio, deny video, request audio+video, expect denied");
+    yield usePerm(true, false, true, true, false);
     info("allow audio, deny video, request audio, expect ok (audio)");
     yield usePerm(true, false, true, false, true);
     info("allow audio, deny video, request video, expect denied");
     yield usePerm(true, false, false, true, false);
 
     // Deny audio, allow video.
-    info("deny audio, allow video, request audio+video, expect ok (video)");
-    yield usePerm(false, true, true, true, true);
+    info("deny audio, allow video, request audio+video, expect denied");
+    yield usePerm(false, true, true, true, false);
     info("deny audio, allow video, request audio, expect denied");
     yield usePerm(false, true, true, false, false);
     info("deny audio, allow video, request video, expect ok (video)");
     yield usePerm(false, true, false, true, true);
 
     // Allow audio, video not set.
     info("allow audio, request audio+video, expect prompt");
     yield usePerm(true, undefined, true, true, undefined);
     info("allow audio, request audio, expect ok (audio)");
     yield usePerm(true, undefined, true, false, true);
     info("allow audio, request video, expect prompt");
     yield usePerm(true, undefined, false, true, undefined);
 
     // Deny audio, video not set.
-    info("deny audio, request audio+video, expect prompt");
-    yield usePerm(false, undefined, true, true, undefined);
+    info("deny audio, request audio+video, expect denied");
+    yield usePerm(false, undefined, true, true, false);
     info("deny audio, request audio, expect denied");
     yield usePerm(false, undefined, true, false, false);
     info("deny audio, request video, expect prompt");
     yield usePerm(false, undefined, false, true, undefined);
 
-    // Allow video, video not set.
+    // Allow video, audio not set.
     info("allow video, request audio+video, expect prompt");
     yield usePerm(undefined, true, true, true, undefined);
     info("allow video, request audio, expect prompt");
     yield usePerm(undefined, true, true, false, undefined);
     info("allow video, request video, expect ok (video)");
     yield usePerm(undefined, true, false, true, true);
 
-    // Deny video, video not set.
-    info("deny video, request audio+video, expect prompt");
-    yield usePerm(undefined, false, true, true, undefined);
+    // Deny video, audio not set.
+    info("deny video, request audio+video, expect denied");
+    yield usePerm(undefined, false, true, true, false);
     info("deny video, request audio, expect prompt");
     yield usePerm(undefined, false, true, false, undefined);
     info("deny video, request video, expect denied");
     yield usePerm(undefined, false, false, true, false);
   }
 },
 
 {