diff options
author | Moonchild <mcwerewolf@gmail.com> | 2018-05-06 20:44:37 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-06 20:44:37 +0200 |
commit | 61394bf4ff79650ee4b3f3951331c8a8775de6e3 (patch) | |
tree | 85111dd8e0b0d22377dc0f3eb18a672055c9dd11 /application/palemoon/base | |
parent | 1fbd4d95796ff084e84e4b9e32d1c23aa2672825 (diff) | |
parent | 79f8a278d95be21ce6f0999a304da5bdd9924dca (diff) | |
download | UXP-61394bf4ff79650ee4b3f3951331c8a8775de6e3.tar UXP-61394bf4ff79650ee4b3f3951331c8a8775de6e3.tar.gz UXP-61394bf4ff79650ee4b3f3951331c8a8775de6e3.tar.lz UXP-61394bf4ff79650ee4b3f3951331c8a8775de6e3.tar.xz UXP-61394bf4ff79650ee4b3f3951331c8a8775de6e3.zip |
Merge pull request #334 from JustOff/PR_fullscreen_warning
[PALEMOON] Replace the fullscreen permission dialog with a warning and update the permission management
Diffstat (limited to 'application/palemoon/base')
-rw-r--r-- | application/palemoon/base/content/browser-fullScreen.js | 102 | ||||
-rw-r--r-- | application/palemoon/base/content/browser.css | 12 | ||||
-rw-r--r-- | application/palemoon/base/content/browser.js | 2 | ||||
-rw-r--r-- | application/palemoon/base/content/browser.xul | 12 | ||||
-rw-r--r-- | application/palemoon/base/content/pageinfo/pageInfo.xul | 29 | ||||
-rw-r--r-- | application/palemoon/base/content/pageinfo/permissions.js | 14 |
6 files changed, 15 insertions, 156 deletions
diff --git a/application/palemoon/base/content/browser-fullScreen.js b/application/palemoon/base/content/browser-fullScreen.js index ffe1da450..6afd247be 100644 --- a/application/palemoon/base/content/browser-fullScreen.js +++ b/application/palemoon/base/content/browser-fullScreen.js @@ -91,7 +91,7 @@ var FullScreen = { if (!document.mozFullScreen) return; - // However, if we receive a "MozEnteredDomFullScreen" event for a document + // 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 @@ -247,66 +247,20 @@ var FullScreen = { this.warningBox.setAttribute("hidden", true); this.warningBox.removeAttribute("fade-warning-out"); - this.warningBox.removeAttribute("obscure-browser"); this.warningBox = null; }, - setFullscreenAllowed: function(isApproved) { - // The "remember decision" checkbox is hidden when showing for documents that - // the permission manager can't handle (documents with URIs without a host). - // We simply require those to be approved every time instead. - let rememberCheckbox = document.getElementById("full-screen-remember-decision"); - let uri = this.fullscreenDoc.nodePrincipal.URI; - if (!rememberCheckbox.hidden) { - if (rememberCheckbox.checked) - Services.perms.add(uri, - "fullscreen", - isApproved ? Services.perms.ALLOW_ACTION : Services.perms.DENY_ACTION, - Services.perms.EXPIRE_NEVER); - else if (isApproved) { - // The user has only temporarily approved fullscren for this fullscreen - // session only. Add the permission (so Goanna knows to approve any further - // fullscreen requests for this host in this fullscreen session) but add - // a listener to revoke the permission when the chrome document exits - // fullscreen. - Services.perms.add(uri, - "fullscreen", - Services.perms.ALLOW_ACTION, - Services.perms.EXPIRE_SESSION); - var onFullscreenchange = function onFullscreenchange(event) { - if (event.target == document && document.mozFullScreenElement == null) { - // The chrome document has left fullscreen. Remove the temporary permission grant. - Services.perms.remove(uri, "fullscreen"); - document.removeEventListener("mozfullscreenchange", onFullscreenchange); - } - } - document.addEventListener("mozfullscreenchange", onFullscreenchange); - } - } - if (this.warningBox) - this.warningBox.setAttribute("fade-warning-out", "true"); - // If the document has been granted fullscreen, notify Goanna so it can resume - // any pending pointer lock requests, otherwise exit fullscreen; the user denied - // the fullscreen request. - if (isApproved) - Services.obs.notifyObservers(this.fullscreenDoc, "fullscreen-approved", ""); - else - document.mozCancelFullScreen(); - }, - warningBox: null, warningFadeOutTimeout: null, fullscreenDoc: null, - // Shows the fullscreen approval UI, or if the domain has already been approved - // for fullscreen, shows a warning that the site has entered fullscreen for a short - // duration. + // Shows a warning that the site has entered fullscreen for a short duration. showWarning: function(targetDoc) { - if (!document.mozFullScreen || - !gPrefService.getBoolPref("full-screen-api.approval-required")) + let timeout = gPrefService.getIntPref("full-screen-api.warning.timeout"); + if (!document.mozFullScreen || timeout <= 0) return; - // Set the strings on the fullscreen approval UI. + // Set the strings on the fullscreen warning UI. this.fullscreenDoc = targetDoc; let uri = this.fullscreenDoc.nodePrincipal.URI; let host = null; @@ -314,11 +268,8 @@ var FullScreen = { host = uri.host; } catch (e) { } let hostLabel = document.getElementById("full-screen-domain-text"); - let rememberCheckbox = document.getElementById("full-screen-remember-decision"); - let isApproved = false; if (host) { - // Document's principal's URI has a host. Display a warning including the hostname and - // show UI to enable the user to permanently grant this host permission to enter fullscreen. + // 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]; @@ -326,17 +277,8 @@ var FullScreen = { hostLabel.textContent = bundle.formatStringFromName("fullscreen.entered", [displayHost], 1); hostLabel.removeAttribute("hidden"); - - rememberCheckbox.label = bundle.formatStringFromName("fullscreen.rememberDecision", [displayHost], 1); - rememberCheckbox.checked = false; - rememberCheckbox.removeAttribute("hidden"); - - // Note we only allow documents whose principal's URI has a host to - // store permission grants. - isApproved = Services.perms.testPermission(uri, "fullscreen") == Services.perms.ALLOW_ACTION; } else { hostLabel.setAttribute("hidden", "true"); - rememberCheckbox.setAttribute("hidden", "true"); } // Note: the warning box can be non-null if the warning box from the previous request @@ -354,32 +296,12 @@ var FullScreen = { this.warningBox.removeAttribute("fade-warning-out"); } - // If fullscreen mode has not yet been approved for the fullscreen - // document's domain, show the approval UI and don't auto fade out the - // fullscreen warning box. Otherwise, we're just notifying of entry into - // fullscreen mode. Note if the resource's host is null, we must be - // showing a local file or a local data URI, and we require explicit - // approval every time. - let authUI = document.getElementById("full-screen-approval-pane"); - if (isApproved) { - authUI.setAttribute("hidden", "true"); - this.warningBox.removeAttribute("obscure-browser"); - } else { - // Partially obscure the <browser> element underneath the approval UI. - this.warningBox.setAttribute("obscure-browser", "true"); - authUI.removeAttribute("hidden"); - } - - // If we're not showing the fullscreen approval UI, we're just notifying the user - // of the transition, so set a timeout to fade the warning out after a few moments. - if (isApproved) - this.warningFadeOutTimeout = - setTimeout( - function() { - if (this.warningBox) - this.warningBox.setAttribute("fade-warning-out", "true"); - }.bind(this), - 3000); + // 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) { diff --git a/application/palemoon/base/content/browser.css b/application/palemoon/base/content/browser.css index 6fd2c5ce1..a2970aefc 100644 --- a/application/palemoon/base/content/browser.css +++ b/application/palemoon/base/content/browser.css @@ -504,6 +504,7 @@ window[chromehidden~="toolbar"] toolbar:not(.toolbar-primary):not(#nav-bar):not( width: 100%; height: 100%; z-index: 2147483647 !important; + pointer-events: none; } #full-screen-warning-container[fade-warning-out] { @@ -512,22 +513,13 @@ window[chromehidden~="toolbar"] toolbar:not(.toolbar-primary):not(#nav-bar):not( opacity: 0.0; } -/* When the modal fullscreen approval UI is showing, don't allow interaction - with the page, but when we're just showing the warning upon entering - fullscreen on an already approved page, do allow interaction with the page. - */ -#full-screen-warning-container:not([obscure-browser]) { - pointer-events: none; -} - #full-screen-warning-message { /* We must specify a max-width, otherwise word-wrap:break-word doesn't work in descendant <description> and <label> elements. Bug 630864. */ max-width: 800px; } -#full-screen-domain-text, -#full-screen-remember-decision > .checkbox-label-box > .checkbox-label { +#full-screen-domain-text { word-wrap: break-word; /* We must specify a min-width, otherwise word-wrap:break-word doesn't work. Bug 630864. */ min-width: 1px; diff --git a/application/palemoon/base/content/browser.js b/application/palemoon/base/content/browser.js index 72d51ce4a..c1643caa4 100644 --- a/application/palemoon/base/content/browser.js +++ b/application/palemoon/base/content/browser.js @@ -1157,7 +1157,7 @@ var gBrowserInit = { // Called when we enter DOM full-screen mode. Note we can already be in browser // full-screen mode when we enter DOM full-screen mode. - window.addEventListener("MozEnteredDomFullscreen", onMozEnteredDomFullscreen, true); + window.addEventListener("MozDOMFullscreen:NewOrigin", onMozEnteredDomFullscreen, true); if (window.fullScreen) onFullScreen(); diff --git a/application/palemoon/base/content/browser.xul b/application/palemoon/base/content/browser.xul index 9b37f7b6f..f9030056e 100644 --- a/application/palemoon/base/content/browser.xul +++ b/application/palemoon/base/content/browser.xul @@ -974,18 +974,6 @@ <vbox id="full-screen-warning-message" align="center"> <description id="full-screen-domain-text"/> <description class="full-screen-description" value="&fullscreenExitHint.value;"/> - <vbox id="full-screen-approval-pane" align="center"> - <description class="full-screen-description" value="&fullscreenApproval.value;"/> - <hbox> - <button label="&fullscreenAllowButton.label;" - oncommand="FullScreen.setFullscreenAllowed(true);" - class="full-screen-approval-button"/> - <button label="&fullscreenExitButton.label;" - oncommand="FullScreen.setFullscreenAllowed(false);" - class="full-screen-approval-button"/> - </hbox> - <checkbox id="full-screen-remember-decision"/> - </vbox> </vbox> </hbox> </hbox> diff --git a/application/palemoon/base/content/pageinfo/pageInfo.xul b/application/palemoon/base/content/pageinfo/pageInfo.xul index 5bca1b495..943fa805c 100644 --- a/application/palemoon/base/content/pageinfo/pageInfo.xul +++ b/application/palemoon/base/content/pageinfo/pageInfo.xul @@ -52,7 +52,6 @@ <command id="cmd_cookieDef" oncommand="onCheckboxClick('cookie');"/> <command id="cmd_desktop-notificationDef" oncommand="onCheckboxClick('desktop-notification');"/> <command id="cmd_installDef" oncommand="onCheckboxClick('install');"/> - <command id="cmd_fullscreenDef" oncommand="onCheckboxClick('fullscreen');"/> <command id="cmd_geoDef" oncommand="onCheckboxClick('geo');"/> <command id="cmd_indexedDBDef" oncommand="onCheckboxClick('indexedDB');"/> <command id="cmd_pluginsDef" oncommand="onCheckboxClick('plugins');"/> @@ -61,12 +60,9 @@ <command id="cmd_cookieToggle" oncommand="onRadioClick('cookie');"/> <command id="cmd_desktop-notificationToggle" oncommand="onRadioClick('desktop-notification');"/> <command id="cmd_installToggle" oncommand="onRadioClick('install');"/> - <command id="cmd_fullscreenToggle" oncommand="onRadioClick('fullscreen');"/> <command id="cmd_geoToggle" oncommand="onRadioClick('geo');"/> <command id="cmd_indexedDBToggle" oncommand="onRadioClick('indexedDB');"/> <command id="cmd_pluginsToggle" oncommand="onPluginRadioClick(event);"/> - <command id="cmd_pointerLockDef" oncommand="onCheckboxClick('pointerLock');"/> - <command id="cmd_pointerLockToggle" oncommand="onRadioClick('pointerLock');"/> </commandset> <keyset id="pageInfoKeySet"> @@ -405,31 +401,6 @@ </radiogroup> </hbox> </vbox> - <vbox class="permission" id="permFullscreenRow"> - <label class="permissionLabel" id="permFullscreenLabel" - value="&permFullscreen;" control="fullscreenRadioGroup"/> - <hbox id="permFullscreenBox" role="group" aria-labelledby="permFullscreenLabel"> - <checkbox id="fullscreenDef" command="cmd_fullscreenDef" label="&permUseDefault;"/> - <spacer flex="1"/> - <radiogroup id="fullscreenRadioGroup" orient="horizontal"> - <radio id="fullscreen#0" command="cmd_fullscreenToggle" label="&permAskAlways;"/> - <radio id="fullscreen#1" command="cmd_fullscreenToggle" label="&permAllow;"/> - <radio id="fullscreen#2" command="cmd_fullscreenToggle" label="&permBlock;"/> - </radiogroup> - </hbox> - </vbox> - <vbox class="permission" id="permPointerLockRow" > - <label class="permissionLabel" id="permPointerLockLabel" - value="&permPointerLock2;" control="pointerLockRadioGroup"/> - <hbox id="permPointerLockBox" role="group" aria-labelledby="permPointerLockLabel"> - <checkbox id="pointerLockDef" command="cmd_pointerLockDef" label="&permAskAlways;"/> - <spacer flex="1"/> - <radiogroup id="pointerLockRadioGroup" orient="horizontal"> - <radio id="pointerLock#1" command="cmd_pointerLockToggle" label="&permAllow;"/> - <radio id="pointerLock#2" command="cmd_pointerLockToggle" label="&permBlock;"/> - </radiogroup> - </hbox> - </vbox> </vbox> </vbox> diff --git a/application/palemoon/base/content/pageinfo/permissions.js b/application/palemoon/base/content/pageinfo/permissions.js index 68261ce6e..e0fb01f76 100644 --- a/application/palemoon/base/content/pageinfo/permissions.js +++ b/application/palemoon/base/content/pageinfo/permissions.js @@ -76,20 +76,6 @@ var gPermObj = { { return UNKNOWN; }, - fullscreen: function getFullscreenDefaultPermissions() - { - if (!gPrefs.getBoolPref("full-screen-api.enabled")) { - return DENY; - } - return UNKNOWN; - }, - pointerLock: function getPointerLockPermissions() - { - if (!gPrefs.getBoolPref("full-screen-api.pointer-lock.enabled")) { - return DENY; - } - return ALLOW; - }, }; var permissionObserver = { |