Bug 1374640 - always prompt for screen sharing. r?florian,jib
MozReview-Commit-ID: FJvuf2XVZXJ
--- a/browser/base/content/test/webrtc/browser_devices_get_user_media_screen.js
+++ b/browser/base/content/test/webrtc/browser_devices_get_user_media_screen.js
@@ -86,16 +86,33 @@ var gTests = [
});
await expectObserverCalled("getUserMedia:response:allow");
await expectObserverCalled("recording-device-events");
Assert.deepEqual((await getMediaCaptureState()), {screen: "Screen"},
"expected screen to be shared");
await indicator;
await checkSharingUI({screen: "Screen"});
+
+ // we always show prompt for screen sharing.
+ promise = promisePopupNotificationShown("webRTC-shareDevices");
+ await promiseRequestDevice(false, true, null, "screen");
+ await promise;
+ await expectObserverCalled("getUserMedia:request");
+
+ is(PopupNotifications.getNotification("webRTC-shareDevices").anchorID,
+ "webRTC-shareScreen-notification-icon", "anchored to device icon");
+ checkDeviceSelectors(false, false, true);
+
+ await promiseMessage(permissionError, () => {
+ PopupNotifications.panel.firstChild.button.click();
+ });
+
+ await expectObserverCalled("getUserMedia:response:deny");
+ SitePermissions.remove(null, "screen", gBrowser.selectedBrowser);
await closeStream();
}
},
{
desc: "getUserMedia window only",
run: async function checkWindowOnly() {
let promise = promisePopupNotificationShown("webRTC-shareDevices");
--- a/browser/modules/webrtcUI.jsm
+++ b/browser/modules/webrtcUI.jsm
@@ -474,29 +474,32 @@ function prompt(aBrowser, aRequest) {
// Screen sharing shouldn't follow the camera permissions.
if (videoDevices.length && sharingScreen)
camAllowed = false;
let activeCamera;
let activeMic;
- for (let device of videoDevices) {
- let set = webrtcUI.activePerms.get(aBrowser.outerWindowID);
- if (set && set.has(aRequest.windowID + device.mediaSource + device.id)) {
- activeCamera = device;
- break;
+ // Always prompt for screen sharing
+ if (!sharingScreen) {
+ for (let device of videoDevices) {
+ let set = webrtcUI.activePerms.get(aBrowser.outerWindowID);
+ if (set && set.has(aRequest.windowID + device.mediaSource + device.id)) {
+ activeCamera = device;
+ break;
+ }
}
- }
- for (let device of audioDevices) {
- let set = webrtcUI.activePerms.get(aBrowser.outerWindowID);
- if (set && set.has(aRequest.windowID + device.mediaSource + device.id)) {
- activeMic = device;
- break;
+ for (let device of audioDevices) {
+ let set = webrtcUI.activePerms.get(aBrowser.outerWindowID);
+ if (set && set.has(aRequest.windowID + device.mediaSource + device.id)) {
+ activeMic = device;
+ break;
+ }
}
}
if ((!audioDevices.length || micAllowed || activeMic) &&
(!videoDevices.length || camAllowed || activeCamera)) {
let allowedDevices = [];
if (videoDevices.length) {
allowedDevices.push((activeCamera || videoDevices[0]).deviceIndex);