diff options
author | Thomas Groman <tgroman@nuegia.net> | 2020-04-20 20:49:37 -0700 |
---|---|---|
committer | Thomas Groman <tgroman@nuegia.net> | 2020-04-20 20:49:37 -0700 |
commit | f9cab004186edb425a9b88ad649726605080a17c (patch) | |
tree | e2dae51d3144e83d097a12e7a1499e3ea93f90be /base/content/browser-fullScreen.js | |
parent | f428692de8b59ab89a66502c079e1823dfda8aeb (diff) | |
download | webbrowser-f9cab004186edb425a9b88ad649726605080a17c.tar webbrowser-f9cab004186edb425a9b88ad649726605080a17c.tar.gz webbrowser-f9cab004186edb425a9b88ad649726605080a17c.tar.lz webbrowser-f9cab004186edb425a9b88ad649726605080a17c.tar.xz webbrowser-f9cab004186edb425a9b88ad649726605080a17c.zip |
move browser to webbrowser/
Diffstat (limited to 'base/content/browser-fullScreen.js')
-rw-r--r-- | base/content/browser-fullScreen.js | 462 |
1 files changed, 0 insertions, 462 deletions
diff --git a/base/content/browser-fullScreen.js b/base/content/browser-fullScreen.js deleted file mode 100644 index e816ce5..0000000 --- a/base/content/browser-fullScreen.js +++ /dev/null @@ -1,462 +0,0 @@ -# -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- -# 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/. - -var FullScreen = { - _XULNS: "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", - - toggle: function () { - var enterFS = window.fullScreen; - - // Toggle the View:FullScreen command, which controls elements like the - // fullscreen menuitem, menubars, and the appmenu. - let fullscreenCommand = document.getElementById("View:FullScreen"); - if (enterFS) { - fullscreenCommand.setAttribute("checked", enterFS); - } else { - fullscreenCommand.removeAttribute("checked"); - } - -#ifdef XP_MACOSX - // Make sure the menu items are adjusted. - document.getElementById("enterFullScreenItem").hidden = enterFS; - document.getElementById("exitFullScreenItem").hidden = !enterFS; -#endif - - if (!this._fullScrToggler) { - this._fullScrToggler = document.getElementById("fullscr-toggler"); - this._fullScrToggler.addEventListener("mouseover", this._expandCallback, false); - this._fullScrToggler.addEventListener("dragenter", this._expandCallback, false); - } - - // On OS X Lion we don't want to hide toolbars when entering fullscreen, unless - // we're entering DOM fullscreen, in which case we should hide the toolbars. - // If we're leaving fullscreen, then we'll go through the exit code below to - // make sure toolbars are made visible in the case of DOM fullscreen. - if (enterFS && this.useLionFullScreen) { - if (document.mozFullScreen) { - this.showXULChrome("toolbar", false); - } - else { - gNavToolbox.setAttribute("inFullscreen", true); - document.documentElement.setAttribute("inFullscreen", true); - } - return; - } - - // show/hide menubars, toolbars (except the full screen toolbar) - this.showXULChrome("toolbar", !enterFS); - - if (enterFS) { - document.addEventListener("keypress", this._keyToggleCallback, false); - document.addEventListener("popupshown", this._setPopupOpen, false); - document.addEventListener("popuphidden", this._setPopupOpen, false); - this._shouldAnimate = true; - if (gPrefService.getBoolPref("browser.fullscreen.autohide")) { - gBrowser.mPanelContainer.addEventListener("mousemove", - this._collapseCallback, false); - } - // We don't animate the toolbar collapse if in DOM full-screen mode, - // as the size of the content area would still be changing after the - // mozfullscreenchange event fired, which could confuse content script. - this.hideNavToolbox(document.mozFullScreen); - } - else { - this.showNavToolbox(false); - // This is needed if they use the context menu to quit fullscreen - this._isPopupOpen = false; - - document.documentElement.removeAttribute("inDOMFullscreen"); - - this.cleanup(); - } - }, - - exitDomFullScreen : function() { - document.mozCancelFullScreen(); - }, - - handleEvent: function (event) { - switch (event.type) { - case "activate": - if (document.mozFullScreen) { - this.showWarning(this.fullscreenDoc); - } - break; - case "transitionend": - if (event.propertyName == "opacity") - this.cancelWarning(); - break; - } - }, - - enterDomFullscreen : function(event) { - if (!document.mozFullScreen) - return; - - // However, if we receive a "MozDOMFullscreen:NewOrigin" event for a document - // which is not a subdocument of a currently active (ie. visible) browser - // or iframe, we know that we've switched to a different frame since the - // request to enter full-screen was made, so we should exit full-screen - // since the "full-screen document" isn't acutally visible. - if (!event.target.defaultView.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIWebNavigation) - .QueryInterface(Ci.nsIDocShell).isActive) { - document.mozCancelFullScreen(); - return; - } - - let focusManager = Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager); - if (focusManager.activeWindow != window) { - // The top-level window has lost focus since the request to enter - // full-screen was made. Cancel full-screen. - document.mozCancelFullScreen(); - return; - } - - document.documentElement.setAttribute("inDOMFullscreen", true); - - if (gFindBarInitialized) - gFindBar.close(); - - this.showWarning(event.target); - - // Exit DOM full-screen mode upon open, close, or change tab. - gBrowser.tabContainer.addEventListener("TabOpen", this.exitDomFullScreen); - gBrowser.tabContainer.addEventListener("TabClose", this.exitDomFullScreen); - gBrowser.tabContainer.addEventListener("TabSelect", this.exitDomFullScreen); - - // Add listener to detect when the fullscreen window is re-focused. - // If a fullscreen window loses focus, we show a warning when the - // fullscreen window is refocused. - if (!this.useLionFullScreen) { - window.addEventListener("activate", this); - } - - // Cancel any "hide the toolbar" animation which is in progress, and make - // the toolbar hide immediately. - this.hideNavToolbox(true); - }, - - cleanup: function () { - if (!window.fullScreen) { - gBrowser.mPanelContainer.removeEventListener("mousemove", - this._collapseCallback, false); - document.removeEventListener("keypress", this._keyToggleCallback, false); - document.removeEventListener("popupshown", this._setPopupOpen, false); - document.removeEventListener("popuphidden", this._setPopupOpen, false); - - this.cancelWarning(); - gBrowser.tabContainer.removeEventListener("TabOpen", this.exitDomFullScreen); - gBrowser.tabContainer.removeEventListener("TabClose", this.exitDomFullScreen); - gBrowser.tabContainer.removeEventListener("TabSelect", this.exitDomFullScreen); - if (!this.useLionFullScreen) - window.removeEventListener("activate", this); - this.fullscreenDoc = null; - } - }, - - // Event callbacks - _expandCallback: function() - { - FullScreen.showNavToolbox(); - }, - _collapseCallback: function() - { - FullScreen.hideNavToolbox(); - }, - _keyToggleCallback: function(aEvent) - { - // if we can use the keyboard (eg Ctrl+L or Ctrl+E) to open the toolbars, we - // should provide a way to collapse them too. - if (aEvent.keyCode == aEvent.DOM_VK_ESCAPE) { - FullScreen.hideNavToolbox(true); - } - // F6 is another shortcut to the address bar, but its not covered in OpenLocation() - else if (aEvent.keyCode == aEvent.DOM_VK_F6) - FullScreen.showNavToolbox(); - }, - - // Checks whether we are allowed to collapse the chrome - _isPopupOpen: false, - _isChromeCollapsed: false, - _safeToCollapse: function(forceHide) - { - if (!gPrefService.getBoolPref("browser.fullscreen.autohide")) - return false; - - // a popup menu is open in chrome: don't collapse chrome - if (!forceHide && this._isPopupOpen) - return false; - - // a textbox in chrome is focused (location bar anyone?): don't collapse chrome - if (document.commandDispatcher.focusedElement && - document.commandDispatcher.focusedElement.ownerDocument == document && - document.commandDispatcher.focusedElement.localName == "input") { - if (forceHide) - // hidden textboxes that still have focus are bad bad bad - document.commandDispatcher.focusedElement.blur(); - else - return false; - } - return true; - }, - - _setPopupOpen: function(aEvent) - { - // Popups should only veto chrome collapsing if they were opened when the chrome was not collapsed. - // Otherwise, they would not affect chrome and the user would expect the chrome to go away. - // e.g. we wouldn't want the autoscroll icon firing this event, so when the user - // toggles chrome when moving mouse to the top, it doesn't go away again. - if (aEvent.type == "popupshown" && !FullScreen._isChromeCollapsed && - aEvent.target.localName != "tooltip" && aEvent.target.localName != "window") - FullScreen._isPopupOpen = true; - else if (aEvent.type == "popuphidden" && aEvent.target.localName != "tooltip" && - aEvent.target.localName != "window") - FullScreen._isPopupOpen = false; - }, - - // Autohide helpers for the context menu item - getAutohide: function(aItem) - { - aItem.setAttribute("checked", gPrefService.getBoolPref("browser.fullscreen.autohide")); - }, - setAutohide: function() - { - gPrefService.setBoolPref("browser.fullscreen.autohide", !gPrefService.getBoolPref("browser.fullscreen.autohide")); - }, - - // Animate the toolbars disappearing - _shouldAnimate: true, - - cancelWarning: function(event) { - if (!this.warningBox) - return; - this.warningBox.removeEventListener("transitionend", this); - if (this.warningFadeOutTimeout) { - clearTimeout(this.warningFadeOutTimeout); - this.warningFadeOutTimeout = null; - } - - // Ensure focus switches away from the (now hidden) warning box. If the user - // clicked buttons in the fullscreen key authorization UI, it would have been - // focused, and any key events would be directed at the (now hidden) chrome - // document instead of the target document. - gBrowser.selectedBrowser.focus(); - - this.warningBox.setAttribute("hidden", true); - this.warningBox.removeAttribute("fade-warning-out"); - this.warningBox = null; - }, - - warningBox: null, - warningFadeOutTimeout: null, - fullscreenDoc: null, - - // Shows a warning that the site has entered fullscreen for a short duration. - showWarning: function(targetDoc) { - let timeout = gPrefService.getIntPref("full-screen-api.warning.timeout"); - if (!document.mozFullScreen || timeout <= 0) - return; - - // Set the strings on the fullscreen warning UI. - this.fullscreenDoc = targetDoc; - let uri = this.fullscreenDoc.nodePrincipal.URI; - let host = null; - try { - host = uri.host; - } catch (e) { } - let hostLabel = document.getElementById("full-screen-domain-text"); - if (host) { - // Document's principal's URI has a host. Display a warning including the hostname. - let utils = {}; - Cu.import("resource://gre/modules/DownloadUtils.jsm", utils); - let displayHost = utils.DownloadUtils.getURIHost(uri.spec)[0]; - let bundle = Services.strings.createBundle("chrome://browser/locale/browser.properties"); - - hostLabel.textContent = bundle.formatStringFromName("fullscreen.entered", [displayHost], 1); - hostLabel.removeAttribute("hidden"); - } else { - hostLabel.setAttribute("hidden", "true"); - } - - // Note: the warning box can be non-null if the warning box from the previous request - // wasn't hidden before another request was made. - if (!this.warningBox) { - this.warningBox = document.getElementById("full-screen-warning-container"); - // Add a listener to clean up state after the warning is hidden. - this.warningBox.addEventListener("transitionend", this); - this.warningBox.removeAttribute("hidden"); - } else { - if (this.warningFadeOutTimeout) { - clearTimeout(this.warningFadeOutTimeout); - this.warningFadeOutTimeout = null; - } - this.warningBox.removeAttribute("fade-warning-out"); - } - - // Set a timeout to fade the warning out after a few moments. - this.warningFadeOutTimeout = setTimeout(() => { - if (this.warningBox) { - this.warningBox.setAttribute("fade-warning-out", "true"); - } - }, timeout); - }, - - showNavToolbox: function(trackMouse = true) { - this._fullScrToggler.hidden = true; - gNavToolbox.removeAttribute("fullscreenShouldAnimate"); - gNavToolbox.style.marginTop = ""; - - if (!this._isChromeCollapsed) { - return; - } - - // Track whether mouse is near the toolbox - this._isChromeCollapsed = false; - if (trackMouse) { - gBrowser.mPanelContainer.addEventListener("mousemove", - this._collapseCallback, false); - } - }, - - hideNavToolbox: function(forceHide = false) { - this._fullScrToggler.hidden = document.mozFullScreen; - if (this._isChromeCollapsed) { - if (forceHide) { - gNavToolbox.removeAttribute("fullscreenShouldAnimate"); - } - return; - } - if (!this._safeToCollapse(forceHide)) { - this._fullScrToggler.hidden = true; - return; - } - - // browser.fullscreen.animateUp - // 0 - never animate up - // 1 - animate only for first collapse after entering fullscreen (default for perf's sake) - // 2 - animate every time it collapses - let animateUp = gPrefService.getIntPref("browser.fullscreen.animateUp"); - if (animateUp == 0) { - this._shouldAnimate = false; - } else if (animateUp == 2) { - this._shouldAnimate = true; - } - if (this._shouldAnimate && !forceHide) { - gNavToolbox.setAttribute("fullscreenShouldAnimate", true); - this._shouldAnimate = false; - // Hide the fullscreen toggler until the transition ends. - let listener = () => { - gNavToolbox.removeEventListener("transitionend", listener, true); - if (this._isChromeCollapsed) - this._fullScrToggler.hidden = false; - }; - gNavToolbox.addEventListener("transitionend", listener, true); - this._fullScrToggler.hidden = true; - } - - gNavToolbox.style.marginTop = - -gNavToolbox.getBoundingClientRect().height + "px"; - this._isChromeCollapsed = true; - gBrowser.mPanelContainer.removeEventListener("mousemove", - this._collapseCallback, false); - }, - - showXULChrome: function(aTag, aShow) - { - var els = document.getElementsByTagNameNS(this._XULNS, aTag); - - for (let el of els) { - // XXX don't interfere with previously collapsed toolbars - if (el.getAttribute("fullscreentoolbar") == "true") { - if (!aShow) { - - var toolbarMode = el.getAttribute("mode"); - if (toolbarMode != "text") { - el.setAttribute("saved-mode", toolbarMode); - el.setAttribute("saved-iconsize", el.getAttribute("iconsize")); - el.setAttribute("mode", "icons"); - el.setAttribute("iconsize", "small"); - } - - // Give the main nav bar and the tab bar the fullscreen context menu, - // otherwise remove context menu to prevent breakage - el.setAttribute("saved-context", el.getAttribute("context")); - if (el.id == "nav-bar" || el.id == "TabsToolbar") - el.setAttribute("context", "autohide-context"); - else - el.removeAttribute("context"); - - // Set the inFullscreen attribute to allow specific styling - // in fullscreen mode - el.setAttribute("inFullscreen", true); - } - else { - var restoreAttr = function restoreAttr(attrName) { - var savedAttr = "saved-" + attrName; - if (el.hasAttribute(savedAttr)) { - el.setAttribute(attrName, el.getAttribute(savedAttr)); - el.removeAttribute(savedAttr); - } - } - - restoreAttr("mode"); - restoreAttr("iconsize"); - restoreAttr("context"); - - el.removeAttribute("inFullscreen"); - } - } else { - // use moz-collapsed so it doesn't persist hidden/collapsed, - // so that new windows don't have missing toolbars - if (aShow) - el.removeAttribute("moz-collapsed"); - else - el.setAttribute("moz-collapsed", "true"); - } - } - - if (aShow) { - gNavToolbox.removeAttribute("inFullscreen"); - document.documentElement.removeAttribute("inFullscreen"); - } else { - gNavToolbox.setAttribute("inFullscreen", true); - document.documentElement.setAttribute("inFullscreen", true); - } - - // In tabs-on-top mode, move window controls to the tab bar, - // and in tabs-on-bottom mode, move them back to the navigation toolbar. - // When there is a chance the tab bar may be collapsed, put window - // controls on nav bar. - var fullscreenctls = document.getElementById("window-controls"); - var navbar = document.getElementById("nav-bar"); - var ctlsOnTabbar = window.toolbar.visible && - (navbar.collapsed || (TabsOnTop.enabled && - !gPrefService.getBoolPref("browser.tabs.autoHide"))); - if (fullscreenctls.parentNode == navbar && ctlsOnTabbar) { - fullscreenctls.removeAttribute("flex"); - document.getElementById("TabsToolbar").appendChild(fullscreenctls); - } - else if (fullscreenctls.parentNode.id == "TabsToolbar" && !ctlsOnTabbar) { - fullscreenctls.setAttribute("flex", "1"); - navbar.appendChild(fullscreenctls); - } - fullscreenctls.hidden = aShow; - - ToolbarIconColor.inferFromText(); - } -}; -XPCOMUtils.defineLazyGetter(FullScreen, "useLionFullScreen", function() { - // We'll only use OS X Lion full screen if we're - // * on OS X - // * on Lion or higher (Darwin 11+) - // * have fullscreenbutton="true" -#ifdef XP_MACOSX - return parseFloat(Services.sysinfo.getProperty("version")) >= 11 && - document.documentElement.getAttribute("fullscreenbutton") == "true"; -#else - return false; -#endif -}); |