summaryrefslogtreecommitdiffstats
path: root/browser/base/content/browser-webrtc.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--browser/base/content/browser-webrtc.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/browser/base/content/browser-webrtc.js b/browser/base/content/browser-webrtc.js
new file mode 100644
index 0000000000..889769f292
--- /dev/null
+++ b/browser/base/content/browser-webrtc.js
@@ -0,0 +1,140 @@
+/* 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/. */
+
+/* eslint-env mozilla/browser-window */
+
+/**
+ * Utility object to handle WebRTC shared tab warnings.
+ */
+var gSharedTabWarning = {
+ /**
+ * Called externally by gBrowser to determine if we're
+ * in a state such that we'd want to cancel the tab switch
+ * and show the tab switch warning panel instead.
+ *
+ * @param tab (<tab>)
+ * The tab being switched to.
+ * @returns boolean
+ * True if the panel will be shown, and the tab switch should
+ * be cancelled.
+ */
+ willShowSharedTabWarning(tab) {
+ if (!this._sharedTabWarningEnabled) {
+ return false;
+ }
+
+ let shareState = webrtcUI.getWindowShareState(window);
+ if (shareState == webrtcUI.SHARING_NONE) {
+ return false;
+ }
+
+ if (!webrtcUI.shouldShowSharedTabWarning(tab)) {
+ return false;
+ }
+
+ this._createSharedTabWarningIfNeeded();
+ let panel = document.getElementById("sharing-tabs-warning-panel");
+ let hbox = panel.firstChild;
+
+ if (shareState == webrtcUI.SHARING_SCREEN) {
+ hbox.setAttribute("type", "screen");
+ panel.setAttribute(
+ "aria-labelledby",
+ "sharing-screen-warning-panel-header-span"
+ );
+ } else {
+ hbox.setAttribute("type", "window");
+ panel.setAttribute(
+ "aria-labelledby",
+ "sharing-window-warning-panel-header-span"
+ );
+ }
+
+ let allowForSessionCheckbox = document.getElementById(
+ "sharing-warning-disable-for-session"
+ );
+ allowForSessionCheckbox.checked = false;
+
+ panel.openPopup(tab, "bottomleft topleft", 0, 0);
+
+ return true;
+ },
+
+ /**
+ * Called by the tab switch warning panel after it has
+ * shown.
+ */
+ sharedTabWarningShown() {
+ let allowButton = document.getElementById("sharing-warning-proceed-to-tab");
+ allowButton.focus();
+ },
+
+ /**
+ * Called by the button in the tab switch warning panel
+ * to allow the switch to occur.
+ */
+ allowSharedTabSwitch() {
+ let panel = document.getElementById("sharing-tabs-warning-panel");
+ let allowForSession = document.getElementById(
+ "sharing-warning-disable-for-session"
+ ).checked;
+
+ let tab = panel.anchorNode;
+ webrtcUI.allowSharedTabSwitch(tab, allowForSession);
+ this._hideSharedTabWarning();
+ },
+
+ /**
+ * Called externally by gBrowser when a tab has been added.
+ * When this occurs, if we're sharing this window, we notify
+ * the webrtcUI module to exempt the new tab from the tab switch
+ * warning, since the user opened it while they were already
+ * sharing.
+ *
+ * @param tab (<tab>)
+ * The tab being opened.
+ */
+ tabAdded(tab) {
+ if (this._sharedTabWarningEnabled) {
+ let shareState = webrtcUI.getWindowShareState(window);
+ if (shareState != webrtcUI.SHARING_NONE) {
+ webrtcUI.tabAddedWhileSharing(tab);
+ }
+ }
+ },
+
+ get _sharedTabWarningEnabled() {
+ delete this._sharedTabWarningEnabled;
+ XPCOMUtils.defineLazyPreferenceGetter(
+ this,
+ "_sharedTabWarningEnabled",
+ "privacy.webrtc.sharedTabWarning"
+ );
+ return this._sharedTabWarningEnabled;
+ },
+
+ /**
+ * Internal method for hiding the tab switch warning panel.
+ */
+ _hideSharedTabWarning() {
+ let panel = document.getElementById("sharing-tabs-warning-panel");
+ if (panel) {
+ panel.hidePopup();
+ }
+ },
+
+ /**
+ * Inserts the tab switch warning panel into the DOM
+ * if it hasn't been done already yet.
+ */
+ _createSharedTabWarningIfNeeded() {
+ // Lazy load the panel the first time we need to display it.
+ if (!document.getElementById("sharing-tabs-warning-panel")) {
+ let template = document.getElementById(
+ "sharing-tabs-warning-panel-template"
+ );
+ template.replaceWith(template.content);
+ }
+ },
+};