forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			140 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* 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, "bottomcenter 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);
 | |
|     }
 | |
|   },
 | |
| };
 | 
