From 564b3b6ddd11b4a7a625f86b80e6db0281f0410c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Qu=C3=A8ze?= Date: Thu, 8 Sep 2016 12:46:25 +0200 Subject: [PATCH] Bug 1294576 - Remove device sharing indicator on location changes, r=johannh. --- browser/base/content/browser.js | 6 ++++ ...browser_devices_get_user_media_in_frame.js | 35 +++++++++++++++++++ browser/modules/webrtcUI.jsm | 4 +++ 3 files changed, 45 insertions(+) diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index ac82c83cb58d..22c88d6c8676 100755 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -4837,6 +4837,12 @@ var TabsProgressListener = { if (!Object.getOwnPropertyDescriptor(window, "PopupNotifications").get) PopupNotifications.locationChange(aBrowser); + let tab = gBrowser.getTabForBrowser(aBrowser); + if (tab && tab._sharingState) { + gBrowser.setBrowserSharing(aBrowser, {}); + webrtcUI.forgetStreamsFromBrowser(aBrowser); + } + gBrowser.getNotificationBox(aBrowser).removeTransientNotifications(); FullZoom.onLocationChange(aLocationURI, false, aBrowser); 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 index c53f74653976..9be3d4be4f7a 100644 --- 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 @@ -197,6 +197,41 @@ var gTests = [ 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; + + if ((yield promiseTodoObserverNotCalled("recording-device-events")) == 1) { + todo(false, "Got the 'recording-device-events' notification twice, likely because of bug 962719"); + } + yield expectObserverCalled("recording-window-ended"); + yield expectNoObserverCalled(); + yield checkNotSharing(); + } } ]; diff --git a/browser/modules/webrtcUI.jsm b/browser/modules/webrtcUI.jsm index b6e84c25a079..707a8d7cb97f 100644 --- a/browser/modules/webrtcUI.jsm +++ b/browser/modules/webrtcUI.jsm @@ -128,6 +128,10 @@ this.webrtcUI = { } }, + forgetStreamsFromBrowser: function(aBrowser) { + this._streams = this._streams.filter(stream => stream.browser != aBrowser); + }, + showSharingDoorhanger: function(aActiveStream, aType) { let browserWindow = aActiveStream.browser.ownerGlobal; if (aActiveStream.tab) {