summaryrefslogtreecommitdiffstats
path: root/application/palemoon/components
diff options
context:
space:
mode:
Diffstat (limited to 'application/palemoon/components')
-rw-r--r--application/palemoon/components/about/AboutRedirector.cpp13
-rw-r--r--application/palemoon/components/downloads/DownloadsCommon.jsm37
-rw-r--r--application/palemoon/components/downloads/moz.build7
-rw-r--r--application/palemoon/components/moz.build1
-rw-r--r--application/palemoon/components/nsBrowserGlue.js32
-rw-r--r--application/palemoon/components/permissions/aboutPermissions.css (renamed from application/palemoon/components/preferences/aboutPermissions.css)4
-rw-r--r--application/palemoon/components/permissions/aboutPermissions.js (renamed from application/palemoon/components/preferences/aboutPermissions.js)89
-rw-r--r--application/palemoon/components/permissions/aboutPermissions.xml (renamed from application/palemoon/components/preferences/aboutPermissions.xml)2
-rw-r--r--application/palemoon/components/permissions/aboutPermissions.xul (renamed from application/palemoon/components/preferences/aboutPermissions.xul)37
-rw-r--r--application/palemoon/components/permissions/jar.mn9
-rw-r--r--application/palemoon/components/permissions/moz.build8
-rw-r--r--application/palemoon/components/places/PlacesUIUtils.jsm27
-rw-r--r--application/palemoon/components/places/content/browserPlacesViews.js9
-rw-r--r--application/palemoon/components/preferences/cookies.js8
-rw-r--r--application/palemoon/components/preferences/jar.mn4
-rw-r--r--application/palemoon/components/preferences/privacy.js36
-rw-r--r--application/palemoon/components/preferences/privacy.xul19
-rw-r--r--application/palemoon/components/preferences/security.xul6
-rw-r--r--application/palemoon/components/sessionstore/SessionStore.jsm70
-rw-r--r--application/palemoon/components/sessionstore/content/aboutSessionRestore.js3
20 files changed, 221 insertions, 200 deletions
diff --git a/application/palemoon/components/about/AboutRedirector.cpp b/application/palemoon/components/about/AboutRedirector.cpp
index 27f6540b2..fbcad6094 100644
--- a/application/palemoon/components/about/AboutRedirector.cpp
+++ b/application/palemoon/components/about/AboutRedirector.cpp
@@ -53,16 +53,16 @@ static RedirEntry kRedirMap[] = {
nsIAboutModule::ALLOW_SCRIPT
},
{
- "newtab", "chrome://browser/content/newtab/newTab.xul",
+ "newtab", "chrome://browser/content/newtab/newTab.xhtml",
nsIAboutModule::ALLOW_SCRIPT
},
{
- "palemoon", "chrome://global/content/memoriam.xhtml",
+ "palemoon", "chrome://browser/content/palemoon.xhtml",
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::HIDE_FROM_ABOUTABOUT
},
{
- "permissions", "chrome://browser/content/preferences/aboutPermissions.xul",
+ "permissions", "chrome://browser/content/permissions/aboutPermissions.xul",
nsIAboutModule::ALLOW_SCRIPT
},
{
@@ -70,12 +70,7 @@ static RedirEntry kRedirMap[] = {
nsIAboutModule::ALLOW_SCRIPT
},
{
- "rights",
-#ifdef MOZ_OFFICIAL_BRANDING
- "chrome://global/content/aboutRights.xhtml",
-#else
- "chrome://global/content/aboutRights-unbranded.xhtml",
-#endif
+ "rights", "chrome://global/content/aboutRights.xhtml",
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
nsIAboutModule::MAKE_LINKABLE |
nsIAboutModule::ALLOW_SCRIPT
diff --git a/application/palemoon/components/downloads/DownloadsCommon.jsm b/application/palemoon/components/downloads/DownloadsCommon.jsm
index c6614e780..bd5d55a73 100644
--- a/application/palemoon/components/downloads/DownloadsCommon.jsm
+++ b/application/palemoon/components/downloads/DownloadsCommon.jsm
@@ -77,8 +77,7 @@ const nsIDM = Ci.nsIDownloadManager;
const kDownloadsStringBundleUrl =
"chrome://browser/locale/downloads/downloads.properties";
-const kPrefBdmScanWhenDone = "browser.download.manager.scanWhenDone";
-const kPrefBdmAlertOnExeOpen = "browser.download.manager.alertOnEXEOpen";
+const kPrefConfirmOpenExe = "browser.download.confirmOpenExecutable";
const kDownloadsStringsRequiringFormatting = {
sizeWithUnits: true,
@@ -518,21 +517,22 @@ this.DownloadsCommon = {
if (!(aOwnerWindow instanceof Ci.nsIDOMWindow))
throw new Error("aOwnerWindow must be a dom-window object");
+#ifdef XP_WIN
+ // On Windows, the system will provide a native confirmation prompt
+ // for .exe files. Exclude this from our prompt, but prompt on other
+ // executable types.
+ let isWindowsExe = aFile.leafName.toLowerCase().endsWith(".exe");
+#else
+ let isWindowsExe = false;
+#endif
+
// Confirm opening executable files if required.
- if (aFile.isExecutable()) {
+ if (aFile.isExecutable() && !isWindowsExe) {
let showAlert = true;
try {
- showAlert = Services.prefs.getBoolPref(kPrefBdmAlertOnExeOpen);
- } catch (ex) { }
-
- // On Vista and above, we rely on native security prompting for
- // downloaded content unless it's disabled.
- if (DownloadsCommon.isWinVistaOrHigher) {
- try {
- if (Services.prefs.getBoolPref(kPrefBdmScanWhenDone)) {
- showAlert = false;
- }
- } catch (ex) { }
+ showAlert = Services.prefs.getBoolPref(kPrefConfirmOpenExe);
+ } catch (ex) {
+ // If the preference does not exist, continue with the prompt.
}
if (showAlert) {
@@ -541,18 +541,11 @@ this.DownloadsCommon = {
DownloadsCommon.strings.fileExecutableSecurityWarning(name, name);
let title =
DownloadsCommon.strings.fileExecutableSecurityWarningTitle;
- let dontAsk =
- DownloadsCommon.strings.fileExecutableSecurityWarningDontAsk;
- let checkbox = { value: false };
- let open = Services.prompt.confirmCheck(aOwnerWindow, title, message,
- dontAsk, checkbox);
+ let open = Services.prompt.confirm(aOwnerWindow, title, message);
if (!open) {
return;
}
-
- Services.prefs.setBoolPref(kPrefBdmAlertOnExeOpen,
- !checkbox.value);
}
}
diff --git a/application/palemoon/components/downloads/moz.build b/application/palemoon/components/downloads/moz.build
index 3bebfd6d1..61d8c0f62 100644
--- a/application/palemoon/components/downloads/moz.build
+++ b/application/palemoon/components/downloads/moz.build
@@ -13,7 +13,10 @@ EXTRA_COMPONENTS += [
]
EXTRA_JS_MODULES += [
- 'DownloadsCommon.jsm',
'DownloadsLogger.jsm',
'DownloadsTaskbar.jsm',
-] \ No newline at end of file
+]
+
+EXTRA_PP_JS_MODULES += [
+ 'DownloadsCommon.jsm',
+]
diff --git a/application/palemoon/components/moz.build b/application/palemoon/components/moz.build
index 6e83936a9..397bf5142 100644
--- a/application/palemoon/components/moz.build
+++ b/application/palemoon/components/moz.build
@@ -12,6 +12,7 @@ DIRS += [
'feeds',
'fuel',
'places',
+ 'permissions',
'preferences',
'privatebrowsing',
'search',
diff --git a/application/palemoon/components/nsBrowserGlue.js b/application/palemoon/components/nsBrowserGlue.js
index aa24d88ef..720d1165c 100644
--- a/application/palemoon/components/nsBrowserGlue.js
+++ b/application/palemoon/components/nsBrowserGlue.js
@@ -1207,7 +1207,7 @@ BrowserGlue.prototype = {
},
_migrateUI: function BG__migrateUI() {
- const UI_VERSION = 17;
+ const UI_VERSION = 19;
const BROWSER_DOCURL = "chrome://browser/content/browser.xul#";
let currentUIVersion = 0;
try {
@@ -1412,6 +1412,36 @@ BrowserGlue.prototype = {
delete this._rdf;
delete this._dataSource;
+ if (currentUIVersion < 18) {
+ // Make sure the doNotTrack value conforms to the conversion from
+ // three-state to two-state. (This reverts a setting of "please track me"
+ // to the default "don't say anything").
+ try {
+ if (Services.prefs.getBoolPref("privacy.donottrackheader.enabled") &&
+ Services.prefs.getIntPref("privacy.donottrackheader.value") != 1) {
+ Services.prefs.clearUserPref("privacy.donottrackheader.enabled");
+ Services.prefs.clearUserPref("privacy.donottrackheader.value");
+ }
+ }
+ catch (ex) {}
+ }
+
+#ifndef MOZ_JXR
+ // Until JPEG-XR decoder is implemented (UXP #144)
+ if (currentUIVersion < 19) {
+ try {
+ let ihaPref = "image.http.accept";
+ let ihaValue = Services.prefs.getCharPref(ihaPref);
+ if (ihaValue.includes("image/jxr,")) {
+ Services.prefs.setCharPref(ihaPref, ihaValue.replace("image/jxr,", ""));
+ } else if (ihaValue.includes("image/jxr")) {
+ Services.prefs.clearUserPref(ihaPref);
+ }
+ }
+ catch (ex) {}
+ }
+#endif
+
// Update the migration version.
Services.prefs.setIntPref("browser.migration.version", UI_VERSION);
},
diff --git a/application/palemoon/components/preferences/aboutPermissions.css b/application/palemoon/components/permissions/aboutPermissions.css
index cec82a030..d73b6a879 100644
--- a/application/palemoon/components/preferences/aboutPermissions.css
+++ b/application/palemoon/components/permissions/aboutPermissions.css
@@ -3,9 +3,9 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
.site {
- -moz-binding: url("chrome://browser/content/preferences/aboutPermissions.xml#site");
+ -moz-binding: url("chrome://browser/content/permissions/aboutPermissions.xml#site");
}
.pluginPermission {
- -moz-binding: url("chrome://browser/content/preferences/aboutPermissions.xml#pluginPermission");
+ -moz-binding: url("chrome://browser/content/permissions/aboutPermissions.xml#pluginPermission");
}
diff --git a/application/palemoon/components/preferences/aboutPermissions.js b/application/palemoon/components/permissions/aboutPermissions.js
index 9fb12d081..6a02daa29 100644
--- a/application/palemoon/components/preferences/aboutPermissions.js
+++ b/application/palemoon/components/permissions/aboutPermissions.js
@@ -77,7 +77,7 @@ Site.prototype = {
* @param aCallback
* A callback function that takes a favicon image URL as a parameter.
*/
- getFavicon: function Site_getFavicon(aCallback) {
+ getFavicon: function(aCallback) {
function invokeCallback(aFaviconURI) {
try {
// Use getFaviconLinkForIcon to get image data from the database instead
@@ -102,7 +102,7 @@ Site.prototype = {
* @param aCallback
* A function that takes the visit count (a number) as a parameter.
*/
- getVisitCount: function Site_getVisitCount(aCallback) {
+ getVisitCount: function(aCallback) {
// XXX This won't be a very reliable system, as it will count both http: and https: visits
// Unfortunately, I don't think that there is a much better way to do it right now.
let rev_host = this.principal.URI.host.split("").reverse().join("") + ".";
@@ -130,13 +130,13 @@ Site.prototype = {
*
* @param aType
* The permission type string stored in permission manager.
- * e.g. "cookie", "geo", "indexedDB", "popup", "image"
+ * e.g. "cookie", "geo", "popup", "image"
* @param aResultObj
* An object that stores the permission value set for aType.
*
* @return A boolean indicating whether or not a permission is set.
*/
- getPermission: function Site_getPermission(aType, aResultObj) {
+ getPermission: function(aType, aResultObj) {
// Password saving isn't a nsIPermissionManager permission type, so handle
// it seperately.
if (aType == "password") {
@@ -169,12 +169,12 @@ Site.prototype = {
*
* @param aType
* The permission type string stored in permission manager.
- * e.g. "cookie", "geo", "indexedDB", "popup", "image"
+ * e.g. "cookie", "geo", "popup", "image"
* @param aPerm
* The permission value to set for the permission type. This should
* be one of the constants defined in nsIPermissionManager.
*/
- setPermission: function Site_setPermission(aType, aPerm) {
+ setPermission: function(aType, aPerm) {
// Password saving isn't a nsIPermissionManager permission type, so handle
// it seperately.
if (aType == "password") {
@@ -196,9 +196,9 @@ Site.prototype = {
*
* @param aType
* The permission type string stored in permission manager.
- * e.g. "cookie", "geo", "indexedDB", "popup", "image"
+ * e.g. "cookie", "geo", "popup", "image"
*/
- clearPermission: function Site_clearPermission(aType) {
+ clearPermission: function(aType) {
Services.perms.removeFromPrincipal(this.principal, aType);
},
@@ -254,7 +254,7 @@ Site.prototype = {
while (enumerator.hasMoreElements()) {
let cookie = enumerator.getNext().QueryInterface(Ci.nsICookie2);
if (cookie.host.hasRootDomain(
- AboutPermissions.domainFromHost(this.host))) {
+ AboutPermissions.domainFromHost(this.principal.URI.host))) {
cookies.push(cookie);
}
}
@@ -264,16 +264,17 @@ Site.prototype = {
/**
* Removes a set of specific cookies from the browser.
*/
- clearCookies: function Site_clearCookies() {
+ clearCookies: function() {
this.cookies.forEach(function(aCookie) {
- Services.cookies.remove(aCookie.host, aCookie.name, aCookie.path, false);
+ Services.cookies.remove(aCookie.host, aCookie.name, aCookie.path, false,
+ aCookie.originAttributes);
});
},
/**
* Removes all data from the browser corresponding to the site.
*/
- forgetSite: function Site_forgetSite() {
+ forgetSite: function() {
// XXX This removes data for an entire domain, rather than just
// an origin. This may produce confusing results, as data will
// be cleared for the http:// as well as the https:// domain
@@ -404,20 +405,6 @@ var PermissionDefaults = {
let value = (aValue != this.DENY);
Services.prefs.setBoolPref("geo.enabled", value);
},
-
- get indexedDB() {
- if (!Services.prefs.getBoolPref("dom.indexedDB.enabled")) {
- return this.DENY;
- }
- // We always ask for permission to enable indexedDB storage for a specific
- // site, so there is no global ALLOW.
- return this.UNKNOWN;
- },
- set indexedDB(aValue) {
- let value = (aValue != this.DENY);
- Services.prefs.setBoolPref("dom.indexedDB.enabled", value);
- },
-
}
/**
@@ -464,12 +451,12 @@ var AboutPermissions = {
* Potential future additions: "sts/use", "sts/subd"
*/
_supportedPermissions: ["password", "image", "popup", "cookie",
- "desktop-notification", "install", "geo", "indexedDB"],
+ "desktop-notification", "install", "geo"],
/**
* Permissions that don't have a global "Allow" option.
*/
- _noGlobalAllow: ["desktop-notification", "geo", "indexedDB"],
+ _noGlobalAllow: ["desktop-notification", "geo"],
/**
* Permissions that don't have a global "Deny" option.
@@ -480,7 +467,7 @@ var AboutPermissions = {
.createBundle("chrome://browser/locale/browser.properties"),
_stringBundleAboutPermissions: Services.strings.createBundle(
- "chrome://browser/locale/preferences/aboutPermissions.properties"),
+ "chrome://browser/locale/permissions/aboutPermissions.properties"),
_initPart1: function() {
this.initPluginList();
@@ -514,7 +501,6 @@ var AboutPermissions = {
Services.prefs.addObserver("dom.webnotifications.enabled", this, false);
Services.prefs.addObserver("xpinstall.whitelist.required", this, false);
Services.prefs.addObserver("geo.enabled", this, false);
- Services.prefs.addObserver("dom.indexedDB.enabled", this, false);
Services.prefs.addObserver("plugins.click_to_play", this, false);
Services.prefs.addObserver("permissions.places-sites-limit", this, false);
@@ -586,13 +572,7 @@ var AboutPermissions = {
permissionEntry.setAttribute("id", permString + "-entry");
// If the plugin is disabled, it makes no sense to change its
// click-to-play status, so don't add it.
- // If the click-to-play pref is not set and the plugin is not
- // click-to-play blocklisted, again click-to-play doesn't apply,
- // so don't add it.
- if (plugin.disabled ||
- (!Services.prefs.getBoolPref("plugins.click_to_play") &&
- (pluginHost.getStateForType(mimeType)
- != Ci.nsIPluginTag.STATE_CLICKTOPLAY))) {
+ if (plugin.disabled) {
permissionEntry.hidden = true;
} else {
permissionEntry.hidden = false;
@@ -602,10 +582,13 @@ var AboutPermissions = {
this._noGlobalDeny.push(permString);
Object.defineProperty(PermissionDefaults, permString, {
get: function() {
- return this.isClickToPlay()
- ? PermissionDefaults.UNKNOWN
- : PermissionDefaults.ALLOW;
- }.bind(permissionEntry),
+ if ((Services.prefs.getBoolPref("plugins.click_to_play") &&
+ plugin.clicktoplay) ||
+ permString.startsWith("plugin-vulnerable:")) {
+ return PermissionDefaults.UNKNOWN;
+ }
+ return PermissionDefaults.ALLOW;
+ },
set: function(aValue) {
this.clicktoplay = (aValue == PermissionDefaults.UNKNOWN);
}.bind(plugin),
@@ -664,7 +647,6 @@ var AboutPermissions = {
Services.prefs.removeObserver("dom.webnotifications.enabled", this, false);
Services.prefs.removeObserver("xpinstall.whitelist.required", this, false);
Services.prefs.removeObserver("geo.enabled", this, false);
- Services.prefs.removeObserver("dom.indexedDB.enabled", this, false);
Services.prefs.removeObserver("plugins.click_to_play", this, false);
Services.prefs.removeObserver("permissions.places-sites-limit", this, false);
@@ -1029,7 +1011,7 @@ var AboutPermissions = {
*
* @param aType
* The permission type string stored in permission manager.
- * e.g. "cookie", "geo", "indexedDB", "popup", "image"
+ * e.g. "cookie", "geo", "popup", "image"
*/
updatePermission: function(aType) {
let allowItem = document.getElementById(
@@ -1066,21 +1048,24 @@ var AboutPermissions = {
// which is reserved for site-specific preferences only.
document.getElementById(aType + "-9").hidden = true;
} else if (aType.startsWith("plugin")) {
- if (!Services.prefs.getBoolPref("plugins.click_to_play")) {
- // It is reserved for site-specific preferences only.
- document.getElementById(aType + "-0").disabled = true;
- }
pluginPermissionEntry = document.getElementById(aType + "-entry");
pluginPermissionEntry.setAttribute("vulnerable", "");
+ let vulnerable = false;
if (pluginPermissionEntry.isBlocklisted()) {
permissionMenulist.disabled = true;
permissionMenulist.setAttribute("tooltiptext",
AboutPermissions._stringBundleAboutPermissions
.GetStringFromName("pluginBlocklisted"));
+ vulnerable = true;
} else {
permissionMenulist.disabled = false;
permissionMenulist.setAttribute("tooltiptext", "");
}
+ if (Services.prefs.getBoolPref("plugins.click_to_play") || vulnerable) {
+ document.getElementById(aType + "-0").disabled = false;
+ } else {
+ document.getElementById(aType + "-0").disabled = true;
+ }
}
} else {
let _visibility = "visible";
@@ -1094,14 +1079,20 @@ var AboutPermissions = {
} else if (aType == "cookie") {
document.getElementById(aType + "-9").hidden = false;
} else if (aType.startsWith("plugin")) {
- document.getElementById(aType + "-0").disabled = false;
pluginPermissionEntry = document.getElementById(aType + "-entry");
let permString = pluginPermissionEntry.getAttribute("permString");
+ let vulnerable = false;
if (permString.startsWith("plugin-vulnerable:")) {
let nameVulnerable = " \u2014 "
+ AboutPermissions._stringBundleBrowser
.GetStringFromName("pluginActivateVulnerable.label");
pluginPermissionEntry.setAttribute("vulnerable", nameVulnerable);
+ vulnerable = true;
+ }
+ if (Services.prefs.getBoolPref("plugins.click_to_play") || vulnerable) {
+ document.getElementById(aType + "-0").disabled = false;
+ } else {
+ document.getElementById(aType + "-0").disabled = true;
}
permissionMenulist.disabled = false;
permissionMenulist.setAttribute("tooltiptext", "");
@@ -1320,7 +1311,7 @@ var AboutPermissions = {
}
// See toolkit/forgetaboutsite/ForgetAboutSite.jsm
-String.prototype.hasRootDomain = function hasRootDomain(aDomain) {
+String.prototype.hasRootDomain = function(aDomain) {
let index = this.indexOf(aDomain);
if (index == -1) {
return false;
diff --git a/application/palemoon/components/preferences/aboutPermissions.xml b/application/palemoon/components/permissions/aboutPermissions.xml
index 4df0d964d..2932ea08c 100644
--- a/application/palemoon/components/preferences/aboutPermissions.xml
+++ b/application/palemoon/components/permissions/aboutPermissions.xml
@@ -4,7 +4,7 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!DOCTYPE bindings [
-<!ENTITY % aboutPermissionsDTD SYSTEM "chrome://browser/locale/preferences/aboutPermissions.dtd" >
+<!ENTITY % aboutPermissionsDTD SYSTEM "chrome://browser/locale/permissions/aboutPermissions.dtd" >
%aboutPermissionsDTD;
]>
diff --git a/application/palemoon/components/preferences/aboutPermissions.xul b/application/palemoon/components/permissions/aboutPermissions.xul
index 56d6cfbbf..afd98247b 100644
--- a/application/palemoon/components/preferences/aboutPermissions.xul
+++ b/application/palemoon/components/permissions/aboutPermissions.xul
@@ -4,13 +4,13 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://browser/content/preferences/aboutPermissions.css"?>
-<?xml-stylesheet href="chrome://browser/skin/preferences/aboutPermissions.css"?>
+<?xml-stylesheet href="chrome://browser/content/permissions/aboutPermissions.css"?>
+<?xml-stylesheet href="chrome://browser/skin/permissions/aboutPermissions.css"?>
<!DOCTYPE page [
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
%brandDTD;
-<!ENTITY % aboutPermissionsDTD SYSTEM "chrome://browser/locale/preferences/aboutPermissions.dtd" >
+<!ENTITY % aboutPermissionsDTD SYSTEM "chrome://browser/locale/permissions/aboutPermissions.dtd" >
%aboutPermissionsDTD;
]>
@@ -23,7 +23,7 @@
role="application">
<script type="application/javascript"
- src="chrome://browser/content/preferences/aboutPermissions.js"/>
+ src="chrome://browser/content/permissions/aboutPermissions.js"/>
<keyset>
<key key="&focusSearch.key;" modifiers="accel" oncommand="AboutPermissions.focusFilterBox();"/>
@@ -298,35 +298,6 @@
</vbox>
</hbox>
- <!-- IndexedDB Storage -->
- <hbox id="indexedDB-pref-item"
- class="pref-item" align="top">
- <image class="pref-icon" type="indexedDB"/>
- <vbox>
- <hbox>
- <label class="pref-title" value="&indexedDB.label;"/>
- <label id="indexedDB-default" class="pref-default" value="*"/>
- </hbox>
- <hbox>
- <menulist id="indexedDB-menulist"
- class="pref-menulist"
- type="indexedDB"
- oncommand="AboutPermissions.onPermissionCommand(event, false);">
- <menupopup>
- <menuitem id="indexedDB-0" value="0" label="&permission.alwaysAsk;"/>
- <menuitem id="indexedDB-1" value="1" label="&permission.allow;"/>
- <menuitem id="indexedDB-2" value="2" label="&permission.block;"/>
- </menupopup>
- </menulist>
- <button id="indexedDB-set-default"
- class="pref-set-default"
- label="&permission.default;"
- type="indexedDB"
- oncommand="AboutPermissions.onPermissionCommand(event, true);"/>
- </hbox>
- </vbox>
- </hbox>
-
<!-- Opt-in activation of Plug-ins -->
<hbox id="plugins-pref-item"
class="pref-item" align="top">
diff --git a/application/palemoon/components/permissions/jar.mn b/application/palemoon/components/permissions/jar.mn
new file mode 100644
index 000000000..53fb2b41e
--- /dev/null
+++ b/application/palemoon/components/permissions/jar.mn
@@ -0,0 +1,9 @@
+# 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/.
+
+browser.jar:
+ content/browser/permissions/aboutPermissions.xul
+ content/browser/permissions/aboutPermissions.js
+ content/browser/permissions/aboutPermissions.css
+ content/browser/permissions/aboutPermissions.xml
diff --git a/application/palemoon/components/permissions/moz.build b/application/palemoon/components/permissions/moz.build
new file mode 100644
index 000000000..a4c26de89
--- /dev/null
+++ b/application/palemoon/components/permissions/moz.build
@@ -0,0 +1,8 @@
+# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+
+JAR_MANIFESTS += ['jar.mn']
diff --git a/application/palemoon/components/places/PlacesUIUtils.jsm b/application/palemoon/components/places/PlacesUIUtils.jsm
index dd0695f78..f62535613 100644
--- a/application/palemoon/components/places/PlacesUIUtils.jsm
+++ b/application/palemoon/components/places/PlacesUIUtils.jsm
@@ -1136,6 +1136,33 @@ this.PlacesUIUtils = {
}
}
return queryName;
+ },
+
+ /**
+ * Returns the passed URL with a #moz-resolution fragment
+ * for the specified dimensions and devicePixelRatio.
+ *
+ * @param aWindow
+ * A window from where we want to get the device
+ * pixel Ratio
+ *
+ * @param aURL
+ * The URL where we should add the fragment
+ *
+ * @param aWidth
+ * The target image width
+ *
+ * @param aHeight
+ * The target image height
+ *
+ * @return The URL with the fragment at the end
+ */
+ getImageURLForResolution:
+ function PUIU_getImageURLForResolution(aWindow, aURL, aWidth = 16, aHeight = 16) {
+ let width = Math.round(aWidth * aWindow.devicePixelRatio);
+ let height = Math.round(aHeight * aWindow.devicePixelRatio);
+ return aURL + (aURL.includes("#") ? "&" : "#") +
+ "-moz-resolution=" + width + "," + height;
}
};
diff --git a/application/palemoon/components/places/content/browserPlacesViews.js b/application/palemoon/components/places/content/browserPlacesViews.js
index 4ab80cac6..eec7274a4 100644
--- a/application/palemoon/components/places/content/browserPlacesViews.js
+++ b/application/palemoon/components/places/content/browserPlacesViews.js
@@ -338,7 +338,8 @@ PlacesViewBase.prototype = {
let icon = aPlacesNode.icon;
if (icon)
- element.setAttribute("image", icon);
+ element.setAttribute("image",
+ PlacesUIUtils.getImageURLForResolution(window, icon));
}
element._placesNode = aPlacesNode;
@@ -464,7 +465,8 @@ PlacesViewBase.prototype = {
if (!icon)
elt.removeAttribute("image");
else if (icon != elt.getAttribute("image"))
- elt.setAttribute("image", icon);
+ elt.setAttribute("image",
+ PlacesUIUtils.getImageURLForResolution(window, icon));
},
nodeAnnotationChanged:
@@ -966,7 +968,8 @@ PlacesToolbar.prototype = {
button.setAttribute("label", aChild.title || "");
let icon = aChild.icon;
if (icon)
- button.setAttribute("image", icon);
+ button.setAttribute("image",
+ PlacesUIUtils.getImageURLForResolution(window, icon));
if (PlacesUtils.containerTypes.indexOf(type) != -1) {
button.setAttribute("type", "menu");
diff --git a/application/palemoon/components/preferences/cookies.js b/application/palemoon/components/preferences/cookies.js
index 4ef30d48e..4fa47ee4e 100644
--- a/application/palemoon/components/preferences/cookies.js
+++ b/application/palemoon/components/preferences/cookies.js
@@ -540,6 +540,8 @@ var gCookiesWindow = {
onCookieSelected: function () {
var properties, item;
var seln = this._tree.view.selection;
+ var hasRows = this._tree.view.rowCount > 0;
+ var hasSelection = seln.count > 0;
if (!this._view._filtered)
item = this._view._getItemAtIndex(seln.currentIndex);
else
@@ -570,7 +572,7 @@ var gCookiesWindow = {
removeSelectedCookies.label = PluralForm.get(selectedCookieCount, buttonLabel)
.replace("#1", selectedCookieCount);
- removeSelectedCookies.disabled = !(seln.count > 0);
+ removeSelectedCookies.disabled = !hasRows || !hasSelection;
},
performDeletion: function gCookiesWindow_performDeletion(deleteItems) {
@@ -786,7 +788,9 @@ var gCookiesWindow = {
this._view._invalidateCache(0);
this._view.selection.clearSelection();
- this._view.selection.select(0);
+ if (this._view.rowCount > 0) {
+ this._view.selection.select(0);
+ }
this._tree.treeBoxObject.invalidate();
this._tree.treeBoxObject.ensureRowIsVisible(0);
diff --git a/application/palemoon/components/preferences/jar.mn b/application/palemoon/components/preferences/jar.mn
index 798a2dae4..2e2949306 100644
--- a/application/palemoon/components/preferences/jar.mn
+++ b/application/palemoon/components/preferences/jar.mn
@@ -3,10 +3,6 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
browser.jar:
- content/browser/preferences/aboutPermissions.xul
- content/browser/preferences/aboutPermissions.js
- content/browser/preferences/aboutPermissions.css
- content/browser/preferences/aboutPermissions.xml
* content/browser/preferences/advanced.xul
* content/browser/preferences/advanced.js
content/browser/preferences/applications.xul
diff --git a/application/palemoon/components/preferences/privacy.js b/application/palemoon/components/preferences/privacy.js
index 18e38395d..05c2f9b8a 100644
--- a/application/palemoon/components/preferences/privacy.js
+++ b/application/palemoon/components/preferences/privacy.js
@@ -151,42 +151,6 @@ var gPrivacyPane = {
},
/**
- * Update the Tracking preferences based on controls.
- */
- setTrackingPrefs: function PPP_setTrackingPrefs()
- {
- let dntRadioGroup = document.getElementById("doNotTrackSelection"),
- dntValuePref = document.getElementById("privacy.donottrackheader.value"),
- dntEnabledPref = document.getElementById("privacy.donottrackheader.enabled");
-
- // if the selected radio button says "no preference", set on/off pref to
- // false and don't change the value pref.
- if (dntRadioGroup.selectedItem.value == -1) {
- dntEnabledPref.value = false;
- return dntValuePref.value;
- }
-
- dntEnabledPref.value = true;
- return dntRadioGroup.selectedItem.value;
- },
-
- /**
- * Obtain the tracking preference value and reflect it in the UI.
- */
- getTrackingPrefs: function PPP_getTrackingPrefs()
- {
- let dntValuePref = document.getElementById("privacy.donottrackheader.value"),
- dntEnabledPref = document.getElementById("privacy.donottrackheader.enabled");
-
- // if DNT is enbaled, select the value from the selected radio
- // button, otherwise choose the "no preference" radio button
- if (dntEnabledPref.value)
- return dntValuePref.value;
-
- return document.getElementById("dntnopref").value;
- },
-
- /**
* Update the private browsing auto-start pref and the history mode
* micro-management prefs based on the history mode menulist
*/
diff --git a/application/palemoon/components/preferences/privacy.xul b/application/palemoon/components/preferences/privacy.xul
index 057d549a9..bdb227c63 100644
--- a/application/palemoon/components/preferences/privacy.xul
+++ b/application/palemoon/components/preferences/privacy.xul
@@ -30,9 +30,6 @@
<preference id="privacy.donottrackheader.enabled"
name="privacy.donottrackheader.enabled"
type="bool"/>
- <preference id="privacy.donottrackheader.value"
- name="privacy.donottrackheader.value"
- type="int"/>
<!-- XXX button prefs -->
<preference id="pref.privacy.disable_button.cookie_exceptions"
@@ -239,17 +236,11 @@
<!-- Tracking -->
<tabpanel id="trackingPanel" orient="vertical">
- <radiogroup id="doNotTrackSelection" orient="vertical"
- preference="privacy.donottrackheader.value"
- onsynctopreference="return gPrivacyPane.setTrackingPrefs()"
- onsyncfrompreference="return gPrivacyPane.getTrackingPrefs()">
- <radio id="dntnotrack" value="1" label="&dntTrackingNotOkay.label2;"
- accesskey="&dntTrackingNotOkay.accesskey;" />
- <radio id="dntdotrack" value="0" label="&dntTrackingOkay.label2;"
- accesskey="&dntTrackingOkay.accesskey;" />
- <radio id="dntnopref" value="-1" label="&dntTrackingNopref.label2;"
- accesskey="&dntTrackingNopref.accesskey;" />
- </radiogroup>
+ <checkbox id="privacyDoNotTrackCheckbox"
+ label="&dntTrackingNotOkay.label2;"
+ accesskey="&dntTrackingNotOkay.accesskey;"
+ preference="privacy.donottrackheader.enabled"/>
+ <separator class="thin"/>
<label class="text-link" id="doNotTrackInfo"
href="https://www.mozilla.org/dnt"
value="&doNotTrackInfo.label;"/>
diff --git a/application/palemoon/components/preferences/security.xul b/application/palemoon/components/preferences/security.xul
index 43352b926..d3d321b16 100644
--- a/application/palemoon/components/preferences/security.xul
+++ b/application/palemoon/components/preferences/security.xul
@@ -43,8 +43,8 @@
<!-- Security Protocols -->
- <preference id="network.stricttransportsecurity.enabled"
- name="network.stricttransportsecurity.enabled"
+ <preference id="network.stricttransportsecurity.preloadlist"
+ name="network.stricttransportsecurity.preloadlist"
type="bool"/>
<preference id="security.cert_pinning.enforcement_level"
name="security.cert_pinning.enforcement_level"
@@ -137,7 +137,7 @@
<checkbox id="enableHSTS"
label="&enableHSTS.label;"
accesskey="&enableHSTS.accesskey;"
- preference="network.stricttransportsecurity.enabled" />
+ preference="network.stricttransportsecurity.preloadlist" />
<checkbox id="enableHPKP"
label="&enableHPKP.label;"
accesskey="&enableHPKP.accesskey;"
diff --git a/application/palemoon/components/sessionstore/SessionStore.jsm b/application/palemoon/components/sessionstore/SessionStore.jsm
index 4f95f10a7..c5e55321c 100644
--- a/application/palemoon/components/sessionstore/SessionStore.jsm
+++ b/application/palemoon/components/sessionstore/SessionStore.jsm
@@ -3598,38 +3598,70 @@ var SessionStoreInternal = {
var _this = this;
function win_(aName) { return _this._getWindowDimension(win, aName); }
- // find available space on the screen where this window is being placed
+ // Find available space on the screen where this window is being placed
let screen = gScreenManager.screenForRect(aLeft, aTop, aWidth, aHeight);
if (screen && !this._prefBranch.getBoolPref("sessionstore.exactPos")) {
let screenLeft = {}, screenTop = {}, screenWidth = {}, screenHeight = {};
screen.GetAvailRectDisplayPix(screenLeft, screenTop, screenWidth, screenHeight);
- // constrain the dimensions to the actual space available
- if (aWidth > screenWidth.value) {
- aWidth = screenWidth.value;
+
+ // Screen X/Y are based on the origin of the screen's desktop-pixel coordinate space
+ let screenLeftCss = screenLeft.value;
+ let screenTopCss = screenTop.value;
+
+ // Convert the screen's device pixel dimensions to CSS px dimensions
+ screen.GetAvailRect(screenLeft, screenTop, screenWidth, screenHeight);
+ let cssToDevScale = screen.defaultCSSScaleFactor;
+ let screenRightCss = screenLeftCss + screenWidth.value / cssToDevScale;
+ let screenBottomCss = screenTopCss + screenHeight.value / cssToDevScale;
+
+ // Pull the window within the screen's bounds.
+ // First, ensure the left edge is on-screen
+ if (aLeft < screenLeftCss) {
+ aLeft = screenLeftCss;
}
- if (aHeight > screenHeight.value) {
- aHeight = screenHeight.value;
+ // Then check the resulting right edge, and reduce it if necessary.
+ let right = aLeft + aWidth;
+ if (right > screenRightCss) {
+ right = screenRightCss;
+ // See if we can move the left edge leftwards to maintain width.
+ if (aLeft > screenLeftCss) {
+ aLeft = Math.max(right - aWidth, screenLeftCss);
+ }
}
- // and then pull the window within the screen's bounds
- if (aLeft < screenLeft.value) {
- aLeft = screenLeft.value;
- } else if (aLeft + aWidth > screenLeft.value + screenWidth.value) {
- aLeft = screenLeft.value + screenWidth.value - aWidth;
+ // Finally, update aWidth to account for the adjusted left and right edges.
+ aWidth = right - aLeft;
+
+ // Do the same in the vertical dimension.
+ // First, ensure the top edge is on-screen
+ if (aTop < screenTopCss) {
+ aTop = screenTopCss;
}
- if (aTop < screenTop.value) {
- aTop = screenTop.value;
- } else if (aTop + aHeight > screenTop.value + screenHeight.value) {
- aTop = screenTop.value + screenHeight.value - aHeight;
+ // Then check the resulting right edge, and reduce it if necessary.
+ let bottom = aTop + aHeight;
+ if (bottom > screenBottomCss) {
+ bottom = screenBottomCss;
+ // See if we can move the top edge upwards to maintain height.
+ if (aTop > screenTopCss) {
+ aTop = Math.max(bottom - aHeight, screenTopCss);
+ }
}
+ // Finally, update aHeight to account for the adjusted top and bottom edges.
+ aHeight = bottom - aTop;
}
- // only modify those aspects which aren't correct yet
- if (aWidth && aHeight && (aWidth != win_("width") || aHeight != win_("height"))) {
- aWindow.resizeTo(aWidth, aHeight);
- }
+ // Only modify those aspects which aren't correct yet
if (!isNaN(aLeft) && !isNaN(aTop) && (aLeft != win_("screenX") || aTop != win_("screenY"))) {
aWindow.moveTo(aLeft, aTop);
}
+ if (aWidth && aHeight && (aWidth != win_("width") || aHeight != win_("height"))) {
+ // Don't resize the window if it's currently maximized and we would
+ // maximize it again shortly after.
+ if (aSizeMode != "maximized" || win_("sizemode") != "maximized") {
+ aWindow.resizeTo(aWidth, aHeight);
+ }
+ }
+
+ // Restore window state
if (aSizeMode && win_("sizemode") != aSizeMode)
{
switch (aSizeMode)
diff --git a/application/palemoon/components/sessionstore/content/aboutSessionRestore.js b/application/palemoon/components/sessionstore/content/aboutSessionRestore.js
index 2459b67f5..2b6f9eaeb 100644
--- a/application/palemoon/components/sessionstore/content/aboutSessionRestore.js
+++ b/application/palemoon/components/sessionstore/content/aboutSessionRestore.js
@@ -134,6 +134,9 @@ function onListClick(aEvent) {
if (aEvent.button == 2)
return;
+ if (!treeView.treeBox) {
+ return;
+ }
var cell = treeView.treeBox.getCellAt(aEvent.clientX, aEvent.clientY);
if (cell.col) {
// Restore this specific tab in the same window for middle/double/accel clicking