mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 16:58:38 +09:00
[PALEMOON] Replace fullscreen permission dialog with a warning
This commit is contained in:
parent
fe4cd1c6e2
commit
614562a3c6
9 changed files with 13 additions and 148 deletions
|
|
@ -1058,11 +1058,6 @@ pref("browser.newtabpage.rows", 4);
|
|||
// Enable the DOM fullscreen API.
|
||||
pref("full-screen-api.enabled", true);
|
||||
|
||||
// True if the fullscreen API requires approval upon a domain entering fullscreen.
|
||||
// Domains that have already had fullscreen permission granted won't re-request
|
||||
// approval.
|
||||
pref("full-screen-api.approval-required", true);
|
||||
|
||||
// about:permissions
|
||||
// Maximum number of sites to return from the places database.
|
||||
// 0-100 (currently)
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -107,9 +107,6 @@ These should match what Safari and other Apple applications use on OS X Lion. --
|
|||
<!ENTITY fullScreenAutohide.accesskey "H">
|
||||
<!ENTITY fullScreenExit.label "Exit Full Screen Mode">
|
||||
<!ENTITY fullScreenExit.accesskey "F">
|
||||
<!ENTITY fullscreenAllowButton.label "Allow">
|
||||
<!ENTITY fullscreenExitButton.label "Deny">
|
||||
<!ENTITY fullscreenApproval.value "Allow fullscreen?">
|
||||
|
||||
<!ENTITY fullscreenExitHint.value "Press ESC at any time to exit fullscreen.">
|
||||
<!ENTITY leaveDOMFullScreen.label "Exit Full Screen">
|
||||
|
|
|
|||
|
|
@ -377,8 +377,6 @@ dataReportingNotification.button.accessKey = C
|
|||
|
||||
# LOCALIZATION NOTE (fullscreen.entered): displayed when we enter HTML5 fullscreen mode, %S is the domain name of the focused website (e.g. mozilla.com).
|
||||
fullscreen.entered=%S is now fullscreen.
|
||||
# LOCALIZATION NOTE (fullscreen.rememberDecision): displayed when we enter HTML5 fullscreen mode, %S is the domain name of the focused website (e.g. mozilla.com).
|
||||
fullscreen.rememberDecision=Remember decision for %S
|
||||
|
||||
# LOCALIZATION NOTE (getUserMedia.shareCamera.message, getUserMedia.shareMicrophone.message, getUserMedia.shareCameraAndMicrophone.message): %S is the website origin (e.g. www.mozilla.org)
|
||||
# LOCALIZATION NOTE (getUserMedia.shareSelectedDevices.label):
|
||||
|
|
|
|||
|
|
@ -2067,10 +2067,6 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
|
|||
box-shadow: 0 0 2px white;
|
||||
}
|
||||
|
||||
#full-screen-warning-container[obscure-browser] {
|
||||
background-color: rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.full-screen-description {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
|
@ -2079,11 +2075,6 @@ toolbar[mode="text"] toolbarbutton.chevron > .toolbarbutton-icon {
|
|||
font-size: 300%;
|
||||
}
|
||||
|
||||
.full-screen-approval-button,
|
||||
#full-screen-remember-decision {
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
%ifdef MOZ_DEVTOOLS
|
||||
%include ../../../../devtools/client/themes/responsivedesign.inc.css
|
||||
%include ../../../../devtools/client/themes/commandline.inc.css
|
||||
|
|
|
|||
|
|
@ -2346,10 +2346,6 @@ toolbar[brighttext] #addonbar-closebutton {
|
|||
box-shadow: 0 0 2px white;
|
||||
}
|
||||
|
||||
#full-screen-warning-container[obscure-browser] {
|
||||
background-color: rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.full-screen-description {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
|
@ -2358,11 +2354,6 @@ toolbar[brighttext] #addonbar-closebutton {
|
|||
font-size: 300%;
|
||||
}
|
||||
|
||||
.full-screen-approval-button,
|
||||
#full-screen-remember-decision {
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
%ifdef MOZ_DEVTOOLS
|
||||
%include ../../../../devtools/client/themes/responsivedesign.inc.css
|
||||
%include ../../../../devtools/client/themes/commandline.inc.css
|
||||
|
|
|
|||
|
|
@ -2820,10 +2820,6 @@ toolbar[brighttext] #addonbar-closebutton {
|
|||
box-shadow: 0 0 2px white;
|
||||
}
|
||||
|
||||
#full-screen-warning-container[obscure-browser] {
|
||||
background-color: rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.full-screen-description {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
|
@ -2832,11 +2828,6 @@ toolbar[brighttext] #addonbar-closebutton {
|
|||
font-size: 300%;
|
||||
}
|
||||
|
||||
.full-screen-approval-button,
|
||||
#full-screen-remember-decision {
|
||||
font-size: 120%;
|
||||
}
|
||||
|
||||
%ifdef MOZ_DEVTOOLS
|
||||
%include ../../../../devtools/client/themes/responsivedesign.inc.css
|
||||
%include ../../../../devtools/client/themes/commandline.inc.css
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue