Bug 1379338 - scriptify preferences XBL; r=jaws

MozReview-Commit-ID: Egyzs2KxhzH
This commit is contained in:
Myk Melez 2018-01-04 21:37:47 -08:00
Родитель b88f05e893
Коммит c3da3e7642
75 изменённых файлов: 1638 добавлений и 2784 удалений

Просмотреть файл

@ -6,54 +6,48 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://global/skin/"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
<?xml-stylesheet href="chrome://browser/skin/sanitizeDialog.css"?>
<?xml-stylesheet href="chrome://browser/content/sanitizeDialog.css"?>
<!DOCTYPE prefwindow [
<!DOCTYPE dialog [
<!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
<!ENTITY % globalKeysDTD SYSTEM "chrome://global/locale/globalKeys.dtd">
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
<!ENTITY % sanitizeDTD SYSTEM "chrome://browser/locale/sanitize.dtd">
%preferencesDTD;
%globalKeysDTD;
%brandDTD;
%sanitizeDTD;
]>
<prefwindow id="SanitizeDialog" type="child"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
dlgbuttons="accept,cancel"
title="&sanitizeDialog2.title;"
noneverythingtitle="&sanitizeDialog2.title;"
style="width: &sanitizeDialog2.width;;"
ondialogaccept="return gSanitizePromptDialog.sanitize();">
<dialog id="SanitizeDialog" class="prefwindow" type="child"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
buttons="accept,cancel"
persist="lastSelected screenX screenY"
closebuttonlabel="&preferencesCloseButton.label;"
closebuttonaccesskey="&preferencesCloseButton.accesskey;"
role="dialog"
title="&sanitizeDialog2.title;"
noneverythingtitle="&sanitizeDialog2.title;"
style="width: &sanitizeDialog2.width;;"
onload="gSanitizePromptDialog.init();"
ondialogaccept="return gSanitizePromptDialog.sanitize();">
<prefpane id="SanitizeDialogPane" onpaneload="gSanitizePromptDialog.init();">
<vbox id="SanitizeDialogPane" class="prefpane">
<stringbundle id="bundleBrowser"
src="chrome://browser/locale/browser.properties"/>
<script type="application/javascript"
src="chrome://browser/content/sanitize.js"/>
<script type="application/javascript"
src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript"
src="chrome://browser/content/sanitizeDialog.js"/>
<preferences id="sanitizePreferences">
<preference id="privacy.cpd.history" name="privacy.cpd.history" type="bool"/>
<preference id="privacy.cpd.formdata" name="privacy.cpd.formdata" type="bool"/>
<preference id="privacy.cpd.downloads" name="privacy.cpd.downloads" type="bool" disabled="true"/>
<preference id="privacy.cpd.cookies" name="privacy.cpd.cookies" type="bool"/>
<preference id="privacy.cpd.cache" name="privacy.cpd.cache" type="bool"/>
<preference id="privacy.cpd.sessions" name="privacy.cpd.sessions" type="bool"/>
<preference id="privacy.cpd.offlineApps" name="privacy.cpd.offlineApps" type="bool"/>
<preference id="privacy.cpd.siteSettings" name="privacy.cpd.siteSettings" type="bool"/>
</preferences>
<preferences id="nonItemPreferences">
<preference id="privacy.sanitize.timeSpan"
name="privacy.sanitize.timeSpan"
type="int"/>
</preferences>
<hbox id="SanitizeDurationBox" align="center">
<label value="&clearTimeDuration.label;"
accesskey="&clearTimeDuration.accesskey;"
@ -144,5 +138,5 @@
onsyncfrompreference="return gSanitizePromptDialog.onReadGeneric();"/>
</listbox>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -3,12 +3,26 @@
* 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/. */
/* import-globals-from ../../../toolkit/content/preferencesBindings.js */
var Cc = Components.classes;
var Ci = Components.interfaces;
var Cu = Components.utils;
var {Sanitizer} = Cu.import("resource:///modules/Sanitizer.jsm", {});
Preferences.addAll([
{ id: "privacy.cpd.history", type: "bool" },
{ id: "privacy.cpd.formdata", type: "bool" },
{ id: "privacy.cpd.downloads", type: "bool", disabled: true },
{ id: "privacy.cpd.cookies", type: "bool" },
{ id: "privacy.cpd.cache", type: "bool" },
{ id: "privacy.cpd.sessions", type: "bool" },
{ id: "privacy.cpd.offlineApps", type: "bool" },
{ id: "privacy.cpd.siteSettings", type: "bool" },
{ id: "privacy.sanitize.timeSpan", type: "int" },
]);
var gSanitizePromptDialog = {
get bundleBrowser() {
@ -22,14 +36,6 @@ var gSanitizePromptDialog = {
return parseInt(durList.value);
},
get sanitizePreferences() {
if (!this._sanitizePreferences) {
this._sanitizePreferences =
document.getElementById("sanitizePreferences");
}
return this._sanitizePreferences;
},
get warningBox() {
return document.getElementById("sanitizeEverythingWarningBox");
},
@ -140,22 +146,22 @@ var gSanitizePromptDialog = {
this.bundleBrowser.getString(warningStringID);
},
/**
* Return the boolean prefs that enable/disable clearing of various kinds
* of history. The only pref this excludes is privacy.sanitize.timeSpan.
*/
_getItemPrefs() {
return Preferences.getAll().filter(p => p.id !== "privacy.sanitize.timeSpan");
},
/**
* Called when the value of a preference element is synced from the actual
* pref. Enables or disables the OK button appropriately.
*/
onReadGeneric() {
var found = false;
// Find any other pref that's checked and enabled.
var i = 0;
while (!found && i < this.sanitizePreferences.childNodes.length) {
var preference = this.sanitizePreferences.childNodes[i];
found = !!preference.value &&
!preference.disabled;
i++;
}
// Find any other pref that's checked and enabled (except for
// privacy.sanitize.timeSpan, which doesn't affect the button's status).
var found = this._getItemPrefs().some(pref => !!pref.value && !pref.disabled);
try {
document.documentElement.getButton("accept").disabled = !found;
@ -171,23 +177,22 @@ var gSanitizePromptDialog = {
* Sanitizer.prototype.sanitize() requires the prefs to be up-to-date.
* Because the type of this prefwindow is "child" -- and that's needed because
* without it the dialog has no OK and Cancel buttons -- the prefs are not
* updated on dialogaccept on platforms that don't support instant-apply
* (i.e., Windows). We must therefore manually set the prefs from their
* corresponding preference elements.
* updated on dialogaccept. We must therefore manually set the prefs
* from their corresponding preference elements.
*/
updatePrefs() {
Sanitizer.prefs.setIntPref("timeSpan", this.selectedTimespan);
// Keep the pref for the download history in sync with the history pref.
document.getElementById("privacy.cpd.downloads").value =
document.getElementById("privacy.cpd.history").value;
Preferences.get("privacy.cpd.downloads").value =
Preferences.get("privacy.cpd.history").value;
// Now manually set the prefs from their corresponding preference
// elements.
var prefs = this.sanitizePreferences.rootBranch;
for (let i = 0; i < this.sanitizePreferences.childNodes.length; ++i) {
var p = this.sanitizePreferences.childNodes[i];
prefs.setBoolPref(p.name, p.value);
var prefs = this._getItemPrefs();
for (let i = 0; i < prefs.length; ++i) {
var p = prefs[i];
Services.prefs.setBoolPref(p.name, p.value);
}
},
@ -197,7 +202,7 @@ var gSanitizePromptDialog = {
hasNonSelectedItems() {
let checkboxes = document.querySelectorAll("#itemList > [preference]");
for (let i = 0; i < checkboxes.length; ++i) {
let pref = document.getElementById(checkboxes[i].getAttribute("preference"));
let pref = Preferences.get(checkboxes[i].getAttribute("preference"));
if (!pref.value)
return true;
}

Просмотреть файл

@ -715,7 +715,7 @@ WindowHelper.prototype = {
var cb = this.win.document.querySelectorAll("#itemList > [preference]");
ok(cb.length > 1, "found checkboxes for preferences");
for (var i = 0; i < cb.length; ++i) {
var pref = this.win.document.getElementById(cb[i].getAttribute("preference"));
var pref = this.win.Preferences.get(cb[i].getAttribute("preference"));
if (!!pref.value ^ check)
cb[i].click();
}

Просмотреть файл

@ -935,7 +935,7 @@ function openPrefsHelp() {
// since its probably behind the window.
var instantApply = getBoolPref("browser.preferences.instantApply");
var helpTopic = document.getElementsByTagName("prefwindow")[0].currentPane.helpTopic;
var helpTopic = document.documentElement.getAttribute("helpTopic");
openHelpLink(helpTopic, !instantApply);
}

Просмотреть файл

@ -19,6 +19,8 @@
<script type="application/javascript"
src="chrome://browser/content/utilityOverlay.js"/>
<script type="application/javascript"
src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript"
src="chrome://browser/content/preferences/applicationManager.js"/>

Просмотреть файл

@ -0,0 +1,15 @@
/* 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/. */
/* import-globals-from ../../../toolkit/content/preferencesBindings.js */
Preferences.addAll([
{ id: "browser.display.document_color_use", type: "int" },
{ id: "browser.anchor_color", type: "string" },
{ id: "browser.visited_color", type: "string" },
{ id: "browser.underline_anchors", type: "bool" },
{ id: "browser.display.foreground_color", type: "string" },
{ id: "browser.display.background_color", type: "string" },
{ id: "browser.display.use_system_colors", type: "bool" },
]);

Просмотреть файл

@ -6,36 +6,41 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
#ifdef XP_MACOSX
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
#endif
<!DOCTYPE prefwindow SYSTEM "chrome://browser/locale/preferences/colors.dtd" >
<!DOCTYPE dialog [
<!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
%preferencesDTD;
<!ENTITY % colorsDTD SYSTEM "chrome://browser/locale/preferences/colors.dtd">
%colorsDTD;
]>
<prefwindow id="ColorsDialog" type="child"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&colorsDialog.title;"
dlgbuttons="accept,cancel,help"
ondialoghelp="openPrefsHelp()"
<dialog id="ColorsDialog" type="child" class="prefwindow"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&colorsDialog.title;"
buttons="accept,cancel,help"
persist="lastSelected screenX screenY"
closebuttonlabel="&preferencesCloseButton.label;"
closebuttonaccesskey="&preferencesCloseButton.accesskey;"
role="dialog"
helpTopic="prefs-fonts-and-colors"
ondialoghelp="openPrefsHelp()"
#ifdef XP_MACOSX
style="width: &window.macWidth; !important;">
style="width: &window.macWidth; !important;">
#else
style="width: &window.width; !important;">
style="width: &window.width; !important;">
#endif
<script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
<prefpane id="ColorsDialogPane"
helpTopic="prefs-fonts-and-colors">
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<preferences>
<preference id="browser.display.document_color_use" name="browser.display.document_color_use" type="int"/>
<preference id="browser.anchor_color" name="browser.anchor_color" type="string"/>
<preference id="browser.visited_color" name="browser.visited_color" type="string"/>
<preference id="browser.underline_anchors" name="browser.underline_anchors" type="bool"/>
<preference id="browser.display.foreground_color" name="browser.display.foreground_color" type="string"/>
<preference id="browser.display.background_color" name="browser.display.background_color" type="string"/>
<preference id="browser.display.use_system_colors" name="browser.display.use_system_colors" type="bool"/>
</preferences>
<keyset>
<key key="&windowClose.key;" modifiers="accel" oncommand="Preferences.close(event)"/>
</keyset>
<vbox id="ColorsDialogPane" class="prefpane">
<script type="application/javascript" src="chrome://browser/content/preferences/colors.js"/>
<hbox>
<groupbox flex="1">
@ -100,5 +105,5 @@
</menulist>
</hbox>
</vbox>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -4,10 +4,43 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* import-globals-from ../../base/content/utilityOverlay.js */
/* import-globals-from ../../../toolkit/content/preferencesBindings.js */
Preferences.addAll([
{ id: "network.proxy.type", type: "int" },
{ id: "network.proxy.http", type: "string" },
{ id: "network.proxy.http_port", type: "int" },
{ id: "network.proxy.ftp", type: "string" },
{ id: "network.proxy.ftp_port", type: "int" },
{ id: "network.proxy.ssl", type: "string" },
{ id: "network.proxy.ssl_port", type: "int" },
{ id: "network.proxy.socks", type: "string" },
{ id: "network.proxy.socks_port", type: "int" },
{ id: "network.proxy.socks_version", type: "int" },
{ id: "network.proxy.socks_remote_dns", type: "bool" },
{ id: "network.proxy.no_proxies_on", type: "string" },
{ id: "network.proxy.autoconfig_url", type: "string" },
{ id: "network.proxy.share_proxy_settings", type: "bool" },
{ id: "signon.autologin.proxy", type: "bool" },
{ id: "pref.advanced.proxies.disable_button.reload", type: "bool" },
{ id: "network.proxy.backup.ftp", type: "string" },
{ id: "network.proxy.backup.ftp_port", type: "int" },
{ id: "network.proxy.backup.ssl", type: "string" },
{ id: "network.proxy.backup.ssl_port", type: "int" },
{ id: "network.proxy.backup.socks", type: "string" },
{ id: "network.proxy.backup.socks_port", type: "int" },
]);
window.addEventListener("DOMContentLoaded", () => {
Preferences.get("network.proxy.type").on("change",
gConnectionsDialog.proxyTypeChanged.bind(gConnectionsDialog));
Preferences.get("network.proxy.socks_version").on("change",
gConnectionsDialog.updateDNSPref.bind(gConnectionsDialog));
}, { once: true, capture: true });
var gConnectionsDialog = {
beforeAccept() {
var proxyTypePref = document.getElementById("network.proxy.type");
var proxyTypePref = Preferences.get("network.proxy.type");
if (proxyTypePref.value == 2) {
this.doAutoconfigURLFixup();
return true;
@ -16,14 +49,14 @@ var gConnectionsDialog = {
if (proxyTypePref.value != 1)
return true;
var httpProxyURLPref = document.getElementById("network.proxy.http");
var httpProxyPortPref = document.getElementById("network.proxy.http_port");
var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
var httpProxyURLPref = Preferences.get("network.proxy.http");
var httpProxyPortPref = Preferences.get("network.proxy.http_port");
var shareProxiesPref = Preferences.get("network.proxy.share_proxy_settings");
// If the port is 0 and the proxy server is specified, focus on the port and cancel submission.
for (let prefName of ["http", "ssl", "ftp", "socks"]) {
let proxyPortPref = document.getElementById("network.proxy." + prefName + "_port");
let proxyPref = document.getElementById("network.proxy." + prefName);
let proxyPortPref = Preferences.get("network.proxy." + prefName + "_port");
let proxyPref = Preferences.get("network.proxy." + prefName);
// Only worry about ports which are currently active. If the share option is on, then ignore
// all ports except the HTTP port
if (proxyPref.value != "" && proxyPortPref.value == 0 &&
@ -37,10 +70,10 @@ var gConnectionsDialog = {
if (shareProxiesPref.value) {
var proxyPrefs = ["ssl", "ftp", "socks"];
for (var i = 0; i < proxyPrefs.length; ++i) {
var proxyServerURLPref = document.getElementById("network.proxy." + proxyPrefs[i]);
var proxyPortPref = document.getElementById("network.proxy." + proxyPrefs[i] + "_port");
var backupServerURLPref = document.getElementById("network.proxy.backup." + proxyPrefs[i]);
var backupPortPref = document.getElementById("network.proxy.backup." + proxyPrefs[i] + "_port");
var proxyServerURLPref = Preferences.get("network.proxy." + proxyPrefs[i]);
var proxyPortPref = Preferences.get("network.proxy." + proxyPrefs[i] + "_port");
var backupServerURLPref = Preferences.get("network.proxy.backup." + proxyPrefs[i]);
var backupPortPref = Preferences.get("network.proxy.backup." + proxyPrefs[i] + "_port");
backupServerURLPref.value = backupServerURLPref.value || proxyServerURLPref.value;
backupPortPref.value = backupPortPref.value || proxyPortPref.value;
proxyServerURLPref.value = httpProxyURLPref.value;
@ -59,34 +92,34 @@ var gConnectionsDialog = {
},
proxyTypeChanged() {
var proxyTypePref = document.getElementById("network.proxy.type");
var proxyTypePref = Preferences.get("network.proxy.type");
// Update http
var httpProxyURLPref = document.getElementById("network.proxy.http");
var httpProxyURLPref = Preferences.get("network.proxy.http");
httpProxyURLPref.disabled = proxyTypePref.value != 1;
var httpProxyPortPref = document.getElementById("network.proxy.http_port");
var httpProxyPortPref = Preferences.get("network.proxy.http_port");
httpProxyPortPref.disabled = proxyTypePref.value != 1;
// Now update the other protocols
this.updateProtocolPrefs();
var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
var shareProxiesPref = Preferences.get("network.proxy.share_proxy_settings");
shareProxiesPref.disabled = proxyTypePref.value != 1;
var autologinProxyPref = document.getElementById("signon.autologin.proxy");
var autologinProxyPref = Preferences.get("signon.autologin.proxy");
autologinProxyPref.disabled = proxyTypePref.value == 0;
var noProxiesPref = document.getElementById("network.proxy.no_proxies_on");
var noProxiesPref = Preferences.get("network.proxy.no_proxies_on");
noProxiesPref.disabled = proxyTypePref.value != 1;
var autoconfigURLPref = document.getElementById("network.proxy.autoconfig_url");
var autoconfigURLPref = Preferences.get("network.proxy.autoconfig_url");
autoconfigURLPref.disabled = proxyTypePref.value != 2;
this.updateReloadButton();
},
updateDNSPref() {
var socksVersionPref = document.getElementById("network.proxy.socks_version");
var socksDNSPref = document.getElementById("network.proxy.socks_remote_dns");
var proxyTypePref = document.getElementById("network.proxy.type");
var socksVersionPref = Preferences.get("network.proxy.socks_version");
var socksDNSPref = Preferences.get("network.proxy.socks_remote_dns");
var proxyTypePref = Preferences.get("network.proxy.type");
var isDefinitelySocks4 = !socksVersionPref.disabled && socksVersionPref.value == 4;
socksDNSPref.disabled = (isDefinitelySocks4 || proxyTypePref.value == 0);
return undefined;
@ -99,13 +132,13 @@ var gConnectionsDialog = {
// in prefs.
var typedURL = document.getElementById("networkProxyAutoconfigURL").value;
var proxyTypeCur = document.getElementById("network.proxy.type").value;
var proxyTypeCur = Preferences.get("network.proxy.type").value;
var pacURL = Services.prefs.getCharPref("network.proxy.autoconfig_url");
var proxyType = Services.prefs.getIntPref("network.proxy.type");
var disableReloadPref =
document.getElementById("pref.advanced.proxies.disable_button.reload");
Preferences.get("pref.advanced.proxies.disable_button.reload");
disableReloadPref.disabled =
(proxyTypeCur != 2 || proxyType != 2 || typedURL != pacURL);
},
@ -116,17 +149,17 @@ var gConnectionsDialog = {
},
updateProtocolPrefs() {
var proxyTypePref = document.getElementById("network.proxy.type");
var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
var proxyTypePref = Preferences.get("network.proxy.type");
var shareProxiesPref = Preferences.get("network.proxy.share_proxy_settings");
var proxyPrefs = ["ssl", "ftp", "socks"];
for (var i = 0; i < proxyPrefs.length; ++i) {
var proxyServerURLPref = document.getElementById("network.proxy." + proxyPrefs[i]);
var proxyPortPref = document.getElementById("network.proxy." + proxyPrefs[i] + "_port");
var proxyServerURLPref = Preferences.get("network.proxy." + proxyPrefs[i]);
var proxyPortPref = Preferences.get("network.proxy." + proxyPrefs[i] + "_port");
// Restore previous per-proxy custom settings, if present.
if (!shareProxiesPref.value) {
var backupServerURLPref = document.getElementById("network.proxy.backup." + proxyPrefs[i]);
var backupPortPref = document.getElementById("network.proxy.backup." + proxyPrefs[i] + "_port");
var backupServerURLPref = Preferences.get("network.proxy.backup." + proxyPrefs[i]);
var backupPortPref = Preferences.get("network.proxy.backup." + proxyPrefs[i] + "_port");
if (backupServerURLPref.hasUserValue) {
proxyServerURLPref.value = backupServerURLPref.value;
backupServerURLPref.reset();
@ -142,20 +175,20 @@ var gConnectionsDialog = {
proxyServerURLPref.disabled = proxyTypePref.value != 1 || shareProxiesPref.value;
proxyPortPref.disabled = proxyServerURLPref.disabled;
}
var socksVersionPref = document.getElementById("network.proxy.socks_version");
var socksVersionPref = Preferences.get("network.proxy.socks_version");
socksVersionPref.disabled = proxyTypePref.value != 1 || shareProxiesPref.value;
this.updateDNSPref();
return undefined;
},
readProxyProtocolPref(aProtocol, aIsPort) {
var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
var shareProxiesPref = Preferences.get("network.proxy.share_proxy_settings");
if (shareProxiesPref.value) {
var pref = document.getElementById("network.proxy.http" + (aIsPort ? "_port" : ""));
var pref = Preferences.get("network.proxy.http" + (aIsPort ? "_port" : ""));
return pref.value;
}
var backupPref = document.getElementById("network.proxy.backup." + aProtocol + (aIsPort ? "_port" : ""));
var backupPref = Preferences.get("network.proxy.backup." + aProtocol + (aIsPort ? "_port" : ""));
return backupPref.hasUserValue ? backupPref.value : undefined;
},
@ -166,7 +199,7 @@ var gConnectionsDialog = {
doAutoconfigURLFixup() {
var autoURL = document.getElementById("networkProxyAutoconfigURL");
var autoURLPref = document.getElementById("network.proxy.autoconfig_url");
var autoURLPref = Preferences.get("network.proxy.autoconfig_url");
try {
autoURLPref.value = autoURL.value =
Services.uriFixup.createFixupURI(autoURL.value, 0).spec;
@ -174,7 +207,7 @@ var gConnectionsDialog = {
},
sanitizeNoProxiesPref() {
var noProxiesPref = document.getElementById("network.proxy.no_proxies_on");
var noProxiesPref = Preferences.get("network.proxy.no_proxies_on");
// replace substrings of ; and \n with commas if they're neither immediately
// preceded nor followed by a valid separator character
noProxiesPref.value = noProxiesPref.value.replace(/([^, \n;])[;\n]+(?![,\n;])/g, "$1,");
@ -183,14 +216,14 @@ var gConnectionsDialog = {
},
readHTTPProxyServer() {
var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
var shareProxiesPref = Preferences.get("network.proxy.share_proxy_settings");
if (shareProxiesPref.value)
this.updateProtocolPrefs();
return undefined;
},
readHTTPProxyPort() {
var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
var shareProxiesPref = Preferences.get("network.proxy.share_proxy_settings");
if (shareProxiesPref.value)
this.updateProtocolPrefs();
return undefined;

Просмотреть файл

@ -4,65 +4,46 @@
- 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/. -->
<!DOCTYPE prefwindow SYSTEM "chrome://browser/locale/preferences/connection.dtd">
<!DOCTYPE dialog [
<!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
%preferencesDTD;
<!ENTITY % connectionDTD SYSTEM "chrome://browser/locale/preferences/connection.dtd">
%connectionDTD;
]>
<?xml-stylesheet href="chrome://global/skin/"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
<dialog id="ConnectionsDialog" type="child" class="prefwindow"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&connectionsDialog.title;"
buttons="accept,cancel,help"
persist="lastSelected screenX screenY"
closebuttonlabel="&preferencesCloseButton.label;"
closebuttonaccesskey="&preferencesCloseButton.accesskey;"
role="dialog"
onbeforeaccept="return gConnectionsDialog.beforeAccept();"
onload="gConnectionsDialog.checkForSystemProxy();"
helpTopic="prefs-connection-settings"
ondialoghelp="openPrefsHelp()"
<prefwindow id="ConnectionsDialog" type="child"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&connectionsDialog.title;"
dlgbuttons="accept,cancel,help"
onbeforeaccept="return gConnectionsDialog.beforeAccept();"
onload="gConnectionsDialog.checkForSystemProxy();"
ondialoghelp="openPrefsHelp()"
#ifdef XP_MACOSX
style="width: &window.macWidth2; !important;">
style="width: &window.macWidth2; !important;">
#else
style="width: &window.width2; !important;">
style="width: &window.width2; !important;">
#endif
<script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<prefpane id="ConnectionsDialogPane"
class="largeDialogContainer"
helpTopic="prefs-connection-settings">
<keyset>
<key key="&windowClose.key;" modifiers="accel" oncommand="Preferences.close(event)"/>
</keyset>
<preferences>
<preference id="network.proxy.type" name="network.proxy.type" type="int" onchange="gConnectionsDialog.proxyTypeChanged();"/>
<preference id="network.proxy.http" name="network.proxy.http" type="string"/>
<preference id="network.proxy.http_port" name="network.proxy.http_port" type="int"/>
<preference id="network.proxy.ftp" name="network.proxy.ftp" type="string"/>
<preference id="network.proxy.ftp_port" name="network.proxy.ftp_port" type="int"/>
<preference id="network.proxy.ssl" name="network.proxy.ssl" type="string"/>
<preference id="network.proxy.ssl_port" name="network.proxy.ssl_port" type="int"/>
<preference id="network.proxy.socks" name="network.proxy.socks" type="string"/>
<preference id="network.proxy.socks_port" name="network.proxy.socks_port" type="int"/>
<preference id="network.proxy.socks_version" name="network.proxy.socks_version" type="int" onchange="gConnectionsDialog.updateDNSPref();"/>
<preference id="network.proxy.socks_remote_dns" name="network.proxy.socks_remote_dns" type="bool"/>
<preference id="network.proxy.no_proxies_on" name="network.proxy.no_proxies_on" type="string"/>
<preference id="network.proxy.autoconfig_url" name="network.proxy.autoconfig_url" type="string"/>
<preference id="network.proxy.share_proxy_settings"
name="network.proxy.share_proxy_settings"
type="bool"/>
<preference id="signon.autologin.proxy"
name="signon.autologin.proxy"
type="bool"/>
<preference id="pref.advanced.proxies.disable_button.reload"
name="pref.advanced.proxies.disable_button.reload"
type="bool"/>
<preference id="network.proxy.backup.ftp" name="network.proxy.backup.ftp" type="string"/>
<preference id="network.proxy.backup.ftp_port" name="network.proxy.backup.ftp_port" type="int"/>
<preference id="network.proxy.backup.ssl" name="network.proxy.backup.ssl" type="string"/>
<preference id="network.proxy.backup.ssl_port" name="network.proxy.backup.ssl_port" type="int"/>
<preference id="network.proxy.backup.socks" name="network.proxy.backup.socks" type="string"/>
<preference id="network.proxy.backup.socks_port" name="network.proxy.backup.socks_port" type="int"/>
</preferences>
<script type="application/javascript" src="chrome://browser/content/preferences/connection.js"/>
<vbox id="ConnectionsDialogPane" class="prefpane largeDialogContainer">
<stringbundle id="preferencesBundle" src="chrome://browser/locale/preferences/preferences.properties"/>
<script type="application/javascript" src="chrome://browser/content/preferences/connection.js"/>
<groupbox>
<caption><label>&proxyTitle.label;</label></caption>
@ -169,5 +150,5 @@
tooltiptext="&autologinproxy.tooltip;"/>
<checkbox id="networkProxySOCKSRemoteDNS" preference="network.proxy.socks_remote_dns" label="&socksRemoteDNS.label2;" accesskey="&socksRemoteDNS.accesskey;" />
<separator/>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -18,6 +18,12 @@ const kFontSizeFmtVariable = "font.size.variable.%LANG%";
const kFontSizeFmtFixed = "font.size.fixed.%LANG%";
const kFontMinSizeFmt = "font.minimum-size.%LANG%";
Preferences.addAll([
{ id: "font.language.group", type: "wstring" },
{ id: "browser.display.use_document_fonts", type: "int" },
{ id: "intl.charset.fallback.override", type: "string" },
]);
var gFontsDialog = {
_selectLanguageGroupPromise: Promise.resolve(),
@ -44,16 +50,11 @@ var gFontsDialog = {
{ format: kFontSizeFmtFixed, type: "int", element: "sizeMono", fonttype: null },
{ format: kFontMinSizeFmt, type: "int", element: "minSize", fonttype: null }
];
var preferences = document.getElementById("fontPreferences");
for (var i = 0; i < prefs.length; ++i) {
var preference = document.getElementById(prefs[i].format.replace(/%LANG%/, aLanguageGroup));
var name = prefs[i].format.replace(/%LANG%/, aLanguageGroup);
var preference = Preferences.get(name);
if (!preference) {
preference = document.createElement("preference");
var name = prefs[i].format.replace(/%LANG%/, aLanguageGroup);
preference.id = name;
preference.setAttribute("name", name);
preference.setAttribute("type", prefs[i].type);
preferences.appendChild(preference);
preference = Preferences.add({ id: name, type: prefs[i].type });
}
if (!prefs[i].element)
@ -74,13 +75,13 @@ var gFontsDialog = {
},
readFontLanguageGroup() {
var languagePref = document.getElementById("font.language.group");
var languagePref = Preferences.get("font.language.group");
this._selectLanguageGroup(languagePref.value);
return undefined;
},
readUseDocumentFonts() {
var preference = document.getElementById("browser.display.use_document_fonts");
var preference = Preferences.get("browser.display.use_document_fonts");
return preference.value == 1;
},
@ -90,13 +91,12 @@ var gFontsDialog = {
},
onBeforeAccept() {
let preferences = document.querySelectorAll("preference[id*='font.minimum-size']");
// It would be good if we could avoid touching languages the pref pages won't use, but
// unfortunately the language group APIs (deducing language groups from language codes)
// are C++ - only. So we just check all the things the user touched:
// Don't care about anything up to 24px, or if this value is the same as set previously:
preferences = Array.filter(preferences, prefEl => {
return prefEl.value > 24 && prefEl.value != prefEl.valueFromPreferences;
let preferences = Preferences.getAll().filter(pref => {
return pref.id.includes("font.minimum-size") && pref.value > 24 && pref.value != pref.valueFromPreferences;
});
if (!preferences.length) {
return true;

Просмотреть файл

@ -1,38 +1,40 @@
<?xml version="1.0"?>
# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
# 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/.
<!-- -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
<!-- 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/. -->
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
#ifdef XP_MACOSX
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
#endif
<!DOCTYPE prefwindow SYSTEM "chrome://browser/locale/preferences/fonts.dtd" >
<!DOCTYPE dialog [
<!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
%preferencesDTD;
<!ENTITY % fontsDTD SYSTEM "chrome://browser/locale/preferences/fonts.dtd">
%fontsDTD;
]>
<prefwindow id="FontsDialog" type="child"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&fontsDialog.title;"
dlgbuttons="accept,cancel,help"
ondialoghelp="openPrefsHelp()"
onbeforeaccept="return gFontsDialog.onBeforeAccept();"
style="">
<dialog id="FontsDialog" type="child" class="prefwindow"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&fontsDialog.title;"
buttons="accept,cancel,help"
persist="lastSelected screenX screenY"
closebuttonlabel="&preferencesCloseButton.label;"
closebuttonaccesskey="&preferencesCloseButton.accesskey;"
role="dialog"
helpTopic="prefs-fonts-and-colors"
ondialoghelp="openPrefsHelp()"
onbeforeaccept="return gFontsDialog.onBeforeAccept();">
<script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<prefpane id="FontsDialogPane"
class="largeDialogContainer"
helpTopic="prefs-fonts-and-colors">
<keyset>
<key key="&windowClose.key;" modifiers="accel" oncommand="Preferences.close(event)"/>
</keyset>
<preferences id="fontPreferences">
<preference id="font.language.group" name="font.language.group" type="wstring"/>
<preference id="browser.display.use_document_fonts"
name="browser.display.use_document_fonts"
type="int"/>
<preference id="intl.charset.fallback.override" name="intl.charset.fallback.override" type="string"/>
</preferences>
<vbox id="FontsDialogPane" class="prefpane largeDialogContainer">
<stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
<script type="application/javascript" src="chrome://mozapps/content/preferences/fontbuilder.js"/>
@ -297,5 +299,5 @@
</hbox>
</hbox>
</groupbox>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -7,14 +7,6 @@
<script type="application/javascript"
src="chrome://browser/content/preferences/in-content/containers.js"/>
<preferences id="containerPreferences" hidden="true" data-category="paneContainer">
<!-- Containers -->
<preference id="privacy.userContext.enabled"
name="privacy.userContext.enabled"
type="bool"/>
</preferences>
<hbox hidden="true"
class="container-header-links"
data-category="paneContainers">

Просмотреть файл

@ -103,6 +103,144 @@ if (AppConstants.MOZ_DEV_EDITION) {
"resource://gre/modules/FxAccounts.jsm");
}
Preferences.addAll([
// Startup
{ id: "browser.startup.page", type: "int" },
{ id: "browser.startup.homepage", type: "wstring" },
{ id: "pref.browser.homepage.disable_button.current_page", type: "bool" },
{ id: "pref.browser.homepage.disable_button.bookmark_page", type: "bool" },
{ id: "pref.browser.homepage.disable_button.restore_default", type: "bool" },
{ id: "browser.privatebrowsing.autostart", type: "bool" },
// Downloads
{ id: "browser.download.useDownloadDir", type: "bool" },
{ id: "browser.download.folderList", type: "int" },
{ id: "browser.download.dir", type: "file" },
/* Tab preferences
Preferences:
browser.link.open_newwindow
1 opens such links in the most recent window or tab,
2 opens such links in a new window,
3 opens such links in a new tab
browser.tabs.loadInBackground
- true if display should switch to a new tab which has been opened from a
link, false if display shouldn't switch
browser.tabs.warnOnClose
- true if when closing a window with multiple tabs the user is warned and
allowed to cancel the action, false to just close the window
browser.tabs.warnOnOpen
- true if the user should be warned if he attempts to open a lot of tabs at
once (e.g. a large folder of bookmarks), false otherwise
browser.taskbar.previews.enable
- true if tabs are to be shown in the Windows 7 taskbar
*/
{ id: "browser.link.open_newwindow", type: "int" },
{ id: "browser.tabs.loadInBackground", type: "bool", inverted: true },
{ id: "browser.tabs.warnOnClose", type: "bool" },
{ id: "browser.tabs.warnOnOpen", type: "bool" },
{ id: "browser.sessionstore.restore_on_demand", type: "bool" },
{ id: "browser.ctrlTab.previews", type: "bool" },
// Fonts
{ id: "font.language.group", type: "wstring" },
// Languages
{ id: "browser.translation.detectLanguage", type: "bool" },
// General tab
/* Accessibility
* accessibility.browsewithcaret
- true enables keyboard navigation and selection within web pages using a
visible caret, false uses normal keyboard navigation with no caret
* accessibility.typeaheadfind
- when set to true, typing outside text areas and input boxes will
automatically start searching for what's typed within the current
document; when set to false, no search action happens */
{ id: "accessibility.browsewithcaret", type: "bool" },
{ id: "accessibility.typeaheadfind", type: "bool" },
{ id: "accessibility.blockautorefresh", type: "bool" },
/* Browsing
* general.autoScroll
- when set to true, clicking the scroll wheel on the mouse activates a
mouse mode where moving the mouse down scrolls the document downward with
speed correlated with the distance of the cursor from the original
position at which the click occurred (and likewise with movement upward);
if false, this behavior is disabled
* general.smoothScroll
- set to true to enable finer page scrolling than line-by-line on page-up,
page-down, and other such page movements */
{ id: "general.autoScroll", type: "bool" },
{ id: "general.smoothScroll", type: "bool" },
{ id: "layout.spellcheckDefault", type: "int" },
{ id: "browser.preferences.defaultPerformanceSettings.enabled", type: "bool" },
{ id: "dom.ipc.processCount", type: "int" },
{ id: "dom.ipc.processCount.web", type: "int" },
{ id: "layers.acceleration.disabled", type: "bool", inverted: true },
// Files and Applications
{ id: "browser.feeds.handler", type: "string" },
{ id: "browser.feeds.handler.default", type: "string" },
{ id: "browser.feeds.handlers.application", type: "file" },
{ id: "browser.feeds.handlers.webservice", type: "string" },
{ id: "browser.videoFeeds.handler", type: "string" },
{ id: "browser.videoFeeds.handler.default", type: "string" },
{ id: "browser.videoFeeds.handlers.application", type: "file" },
{ id: "browser.videoFeeds.handlers.webservice", type: "string" },
{ id: "browser.audioFeeds.handler", type: "string" },
{ id: "browser.audioFeeds.handler.default", type: "string" },
{ id: "browser.audioFeeds.handlers.application", type: "file" },
{ id: "browser.audioFeeds.handlers.webservice", type: "string" },
{ id: "pref.downloads.disable_button.edit_actions", type: "bool" },
// DRM content
{ id: "media.eme.enabled", type: "bool" },
// Update
{ id: "browser.preferences.advanced.selectedTabIndex", type: "int" },
{ id: "browser.search.update", type: "bool" },
{ id: "privacy.userContext.enabled", type: "bool" },
]);
if (AppConstants.HAVE_SHELL_SERVICE) {
Preferences.addAll([
{ id: "browser.shell.checkDefaultBrowser", type: "bool" },
{ id: "pref.general.disable_button.default_browser", type: "bool" },
]);
}
if (AppConstants.platform === "win") {
Preferences.addAll([
{ id: "browser.taskbar.previews.enable", type: "bool" },
{ id: "ui.osk.enabled", type: "bool" },
]);
}
if (AppConstants.MOZ_UPDATER) {
Preferences.addAll([
{ id: "app.update.enabled", type: "bool" },
{ id: "app.update.auto", type: "bool" },
{ id: "app.update.disable_button.showUpdateHistory", type: "bool" },
]);
if (AppConstants.MOZ_MAINTENANCE_SERVICE) {
Preferences.addAll([
{ id: "app.update.service.enabled", type: "bool" },
]);
}
}
// A promise that resolves when the list of application handlers is loaded.
// We store this in a global so tests can await it.
var promiseLoadHandlersList;
@ -208,8 +346,8 @@ var gMainPane = {
this.updateDefaultPerformanceSettingsPref();
let defaultPerformancePref =
document.getElementById("browser.preferences.defaultPerformanceSettings.enabled");
defaultPerformancePref.addEventListener("change", () => {
Preferences.get("browser.preferences.defaultPerformanceSettings.enabled");
defaultPerformancePref.on("change", () => {
this.updatePerformanceSettingsBox({ duringChangeEvent: true });
});
this.updatePerformanceSettingsBox({ duringChangeEvent: false });
@ -249,8 +387,8 @@ var gMainPane = {
if (!TransientPrefs.prefShouldBeVisible("browser.tabs.warnOnOpen"))
document.getElementById("warnOpenMany").hidden = true;
setEventListener("browser.privatebrowsing.autostart", "change",
gMainPane.updateBrowserStartupLastSession);
Preferences.get("browser.privatebrowsing.autostart").on("change",
gMainPane.updateBrowserStartupLastSession.bind(gMainPane));
if (AppConstants.HAVE_SHELL_SERVICE) {
setEventListener("setDefaultButton", "command",
gMainPane.setDefaultBrowser);
@ -273,14 +411,14 @@ var gMainPane = {
gMainPane.openTranslationProviderAttribution);
setEventListener("translateButton", "command",
gMainPane.showTranslationExceptions);
setEventListener("font.language.group", "change",
gMainPane._rebuildFonts);
Preferences.get("font.language.group").on("change",
gMainPane._rebuildFonts.bind(gMainPane));
setEventListener("advancedFonts", "command",
gMainPane.configureFonts);
setEventListener("colors", "command",
gMainPane.configureColors);
setEventListener("layers.acceleration.disabled", "change",
gMainPane.updateHardwareAcceleration);
Preferences.get("layers.acceleration.disabled").on("change",
gMainPane.updateHardwareAcceleration.bind(gMainPane));
setEventListener("connectionSettings", "command",
gMainPane.showConnections);
setEventListener("browserContainersCheckbox", "command",
@ -420,8 +558,8 @@ var gMainPane = {
setEventListener("typeColumn", "click", gMainPane.sort);
setEventListener("actionColumn", "click", gMainPane.sort);
setEventListener("chooseFolder", "command", gMainPane.chooseFolder);
setEventListener("browser.download.dir", "change", gMainPane.displayDownloadDirPref);
setEventListener("saveWhere", "command", gMainPane.handleSaveToCommand);
Preferences.get("browser.download.dir").on("change",
gMainPane.displayDownloadDirPref.bind(gMainPane));
// Listen for window unload so we can remove our preference observers.
window.addEventListener("unload", this);
@ -484,7 +622,7 @@ var gMainPane = {
* Enables/disables the Settings button used to configure containers
*/
readBrowserContainersCheckbox() {
const pref = document.getElementById("privacy.userContext.enabled");
const pref = Preferences.get("privacy.userContext.enabled");
const settings = document.getElementById("browserContainersSettings");
settings.disabled = !pref.value;
@ -607,7 +745,7 @@ var gMainPane = {
*/
syncFromHomePref() {
let homePref = document.getElementById("browser.startup.homepage");
let homePref = Preferences.get("browser.startup.homepage");
// Set the "Use Current Page(s)" button's text and enabled state.
this._updateUseCurrentButton();
@ -616,7 +754,7 @@ var gMainPane = {
// Disable or enable the inputs based on if this is controlled by an extension.
document.querySelectorAll("#browserHomePage, .homepage-button")
.forEach((element) => {
let isLocked = document.getElementById(element.getAttribute("preference")).locked;
let isLocked = Preferences.get(element.getAttribute("preference")).locked;
element.disabled = isLocked || isControlled;
});
}
@ -668,7 +806,7 @@ var gMainPane = {
* window UI to reflect this.
*/
setHomePageToCurrent() {
let homePage = document.getElementById("browser.startup.homepage");
let homePage = Preferences.get("browser.startup.homepage");
let tabs = this._getTabsForHomePage();
function getTabURI(t) {
return t.linkedBrowser.currentURI.spec;
@ -715,7 +853,7 @@ var gMainPane = {
if (aEvent.detail.button != "accept")
return;
if (rv.urls && rv.names) {
var homePage = document.getElementById("browser.startup.homepage");
var homePage = Preferences.get("browser.startup.homepage");
// XXX still using dangerous "|" joiner!
homePage.value = rv.urls.join("|");
@ -743,7 +881,7 @@ var gMainPane = {
// In this case, the button's disabled state is set by preferences.xml.
let prefName = "pref.browser.homepage.disable_button.current_page";
if (document.getElementById(prefName).locked)
if (Preferences.get(prefName).locked)
return;
useCurrent.disabled = !tabs.length;
@ -778,7 +916,7 @@ var gMainPane = {
* Restores the default home page as the user's home page.
*/
restoreDefaultHomePage() {
var homePage = document.getElementById("browser.startup.homepage");
var homePage = Preferences.get("browser.startup.homepage");
homePage.value = homePage.defaultValue;
},
@ -788,7 +926,7 @@ var gMainPane = {
*/
updateButtons(aButtonID, aPreferenceID) {
var button = document.getElementById(aButtonID);
var preference = document.getElementById(aPreferenceID);
var preference = Preferences.get(aPreferenceID);
button.disabled = preference.value != true;
return undefined;
},
@ -798,8 +936,8 @@ var gMainPane = {
* on the value of the browser.privatebrowsing.autostart pref.
*/
updateBrowserStartupLastSession() {
let pbAutoStartPref = document.getElementById("browser.privatebrowsing.autostart");
let startupPref = document.getElementById("browser.startup.page");
let pbAutoStartPref = Preferences.get("browser.privatebrowsing.autostart");
let startupPref = Preferences.get("browser.startup.page");
let group = document.getElementById("browserStartupPage");
let option = document.getElementById("browserStartupLastSession");
if (pbAutoStartPref.value) {
@ -844,7 +982,7 @@ var gMainPane = {
* @returns |true| if such links should be opened in new tabs
*/
readLinkTarget() {
var openNewWindow = document.getElementById("browser.link.open_newwindow");
var openNewWindow = Preferences.get("browser.link.open_newwindow");
return openNewWindow.value != 2;
},
@ -892,7 +1030,7 @@ var gMainPane = {
*/
setDefaultBrowser() {
if (AppConstants.HAVE_SHELL_SERVICE) {
let alwaysCheckPref = document.getElementById("browser.shell.checkDefaultBrowser");
let alwaysCheckPref = Preferences.get("browser.shell.checkDefaultBrowser");
alwaysCheckPref.value = true;
// Reset exponential backoff delay time in order to do visual update in pollForDefaultBrowser.
@ -1024,12 +1162,7 @@ var gMainPane = {
* Populates the default font list in UI.
*/
_rebuildFonts() {
var preferences = document.getElementById("mainPreferences");
// Ensure preferences are "visible" to ensure bindings work.
preferences.hidden = false;
// Force flush:
preferences.clientHeight;
var langGroupPref = document.getElementById("font.language.group");
var langGroupPref = Preferences.get("font.language.group");
var isSerif = this._readDefaultFontTypeForLanguage(langGroupPref.value) == "serif";
this._selectDefaultLanguageGroup(langGroupPref.value, isSerif);
},
@ -1041,14 +1174,10 @@ var gMainPane = {
_readDefaultFontTypeForLanguage(aLanguageGroup) {
const kDefaultFontType = "font.default.%LANG%";
var defaultFontTypePref = kDefaultFontType.replace(/%LANG%/, aLanguageGroup);
var preference = document.getElementById(defaultFontTypePref);
var preference = Preferences.get(defaultFontTypePref);
if (!preference) {
preference = document.createElement("preference");
preference.id = defaultFontTypePref;
preference.setAttribute("name", defaultFontTypePref);
preference.setAttribute("type", "string");
preference.setAttribute("onchange", "gMainPane._rebuildFonts();");
document.getElementById("mainPreferences").appendChild(preference);
preference = Preferences.add({ id: defaultFontTypePref, type: "string" });
preference.on("change", gMainPane._rebuildFonts.bind(gMainPane));
}
return preference.value;
},
@ -1072,7 +1201,6 @@ var gMainPane = {
const kFontNameListFmtSansSerif = "font.name-list.sans-serif.%LANG%";
const kFontSizeFmtVariable = "font.size.variable.%LANG%";
var preferences = document.getElementById("mainPreferences");
var prefs = [{
format: aIsSerif ? kFontNameFmtSerif : kFontNameFmtSansSerif,
type: "fontname",
@ -1092,14 +1220,10 @@ var gMainPane = {
fonttype: null
}];
for (var i = 0; i < prefs.length; ++i) {
var preference = document.getElementById(prefs[i].format.replace(/%LANG%/, aLanguageGroup));
var preference = Preferences.get(prefs[i].format.replace(/%LANG%/, aLanguageGroup));
if (!preference) {
preference = document.createElement("preference");
var name = prefs[i].format.replace(/%LANG%/, aLanguageGroup);
preference.id = name;
preference.setAttribute("name", name);
preference.setAttribute("type", prefs[i].type);
preferences.appendChild(preference);
preference = Preferences.add({ id: name, type: prefs[i].type });
}
if (!prefs[i].element)
@ -1137,7 +1261,7 @@ var gMainPane = {
* 2 enables spellchecking for all text fields
*/
readCheckSpelling() {
var pref = document.getElementById("layout.spellcheckDefault");
var pref = Preferences.get("layout.spellcheckDefault");
this._storedSpellCheck = pref.value;
return (pref.value != 0);
@ -1161,9 +1285,9 @@ var gMainPane = {
updateDefaultPerformanceSettingsPref() {
let defaultPerformancePref =
document.getElementById("browser.preferences.defaultPerformanceSettings.enabled");
let processCountPref = document.getElementById("dom.ipc.processCount");
let accelerationPref = document.getElementById("layers.acceleration.disabled");
Preferences.get("browser.preferences.defaultPerformanceSettings.enabled");
let processCountPref = Preferences.get("dom.ipc.processCount");
let accelerationPref = Preferences.get("layers.acceleration.disabled");
if (processCountPref.value != processCountPref.defaultValue ||
accelerationPref.value != accelerationPref.defaultValue) {
defaultPerformancePref.value = false;
@ -1172,11 +1296,11 @@ var gMainPane = {
updatePerformanceSettingsBox({ duringChangeEvent }) {
let defaultPerformancePref =
document.getElementById("browser.preferences.defaultPerformanceSettings.enabled");
Preferences.get("browser.preferences.defaultPerformanceSettings.enabled");
let performanceSettings = document.getElementById("performanceSettings");
let processCountPref = document.getElementById("dom.ipc.processCount");
let processCountPref = Preferences.get("dom.ipc.processCount");
if (defaultPerformancePref.value) {
let accelerationPref = document.getElementById("layers.acceleration.disabled");
let accelerationPref = Preferences.get("layers.acceleration.disabled");
// Unset the value so process count will be decided by the platform.
processCountPref.value = processCountPref.defaultValue;
accelerationPref.value = accelerationPref.defaultValue;
@ -1188,7 +1312,7 @@ var gMainPane = {
buildContentProcessCountMenuList() {
if (Services.appinfo.browserTabsRemoteAutostart) {
let processCountPref = document.getElementById("dom.ipc.processCount");
let processCountPref = Preferences.get("dom.ipc.processCount");
let defaultProcessCount = processCountPref.defaultValue;
let bundlePreferences = document.getElementById("bundlePreferences");
@ -1260,8 +1384,8 @@ var gMainPane = {
*/
updateReadPrefs() {
if (AppConstants.MOZ_UPDATER) {
var enabledPref = document.getElementById("app.update.enabled");
var autoPref = document.getElementById("app.update.auto");
var enabledPref = Preferences.get("app.update.enabled");
var autoPref = Preferences.get("app.update.auto");
var radiogroup = document.getElementById("updateRadioGroup");
if (!enabledPref.value) // Don't care for autoPref.value in this case.
@ -1305,8 +1429,8 @@ var gMainPane = {
*/
updateWritePrefs() {
if (AppConstants.MOZ_UPDATER) {
var enabledPref = document.getElementById("app.update.enabled");
var autoPref = document.getElementById("app.update.auto");
var enabledPref = Preferences.get("app.update.enabled");
var autoPref = Preferences.get("app.update.auto");
var radiogroup = document.getElementById("updateRadioGroup");
switch (radiogroup.value) {
case "auto": // 1. Automatically install updates for Desktop only
@ -2370,7 +2494,7 @@ var gMainPane = {
readUseDownloadDir() {
var downloadFolder = document.getElementById("downloadFolder");
var chooseFolder = document.getElementById("chooseFolder");
var preference = document.getElementById("browser.download.useDownloadDir");
var preference = Preferences.get("browser.download.useDownloadDir");
downloadFolder.disabled = !preference.value || preference.locked;
chooseFolder.disabled = !preference.value || preference.locked;
@ -2398,8 +2522,8 @@ var gMainPane = {
[providerDisplayName], 1);
saveToCloudRadio.hidden = false;
let useDownloadDirPref = document.getElementById("browser.download.useDownloadDir");
let folderListPref = document.getElementById("browser.download.folderList");
let useDownloadDirPref = Preferences.get("browser.download.useDownloadDir");
let folderListPref = Preferences.get("browser.download.folderList");
// Check if useDownloadDir is true and folderListPref is set to Cloud Storage value 3
// before selecting cloudStorageradio button. Disable folder field and Browse button if
@ -2433,7 +2557,7 @@ var gMainPane = {
// with useDownloadDirPref value true, if selectedIndex is other than
// SaveTo radio button disable downloadFolder filefield and chooseFolder button
let saveWhere = document.getElementById("saveWhere");
let useDownloadDirPref = document.getElementById("browser.download.useDownloadDir");
let useDownloadDirPref = Preferences.get("browser.download.useDownloadDir");
if (useDownloadDirPref.value) {
let downloadFolder = document.getElementById("downloadFolder");
let chooseFolder = document.getElementById("chooseFolder");
@ -2447,12 +2571,12 @@ var gMainPane = {
// default Downloads, check pref 'browser.download.dir' before setting respective
// folderListPref value. If currentDirPref is unspecified folderList should
// default to 1
let folderListPref = document.getElementById("browser.download.folderList");
let folderListPref = Preferences.get("browser.download.folderList");
let saveTo = document.getElementById("saveTo");
if (saveWhere.selectedItem == saveToCloudRadio) {
folderListPref.value = 3;
} else if (saveWhere.selectedItem == saveTo) {
let currentDirPref = document.getElementById("browser.download.dir");
let currentDirPref = Preferences.get("browser.download.dir");
folderListPref.value = currentDirPref.value ? await this._folderToIndex(currentDirPref.value) : 1;
}
}
@ -2469,7 +2593,7 @@ var gMainPane = {
async chooseFolderTask() {
let bundlePreferences = document.getElementById("bundlePreferences");
let title = bundlePreferences.getString("chooseDownloadFolderTitle");
let folderListPref = document.getElementById("browser.download.folderList");
let folderListPref = Preferences.get("browser.download.folderList");
let currentDirPref = await this._indexToFolder(folderListPref.value);
let defDownloads = await this._indexToFolder(1);
let fp = Components.classes["@mozilla.org/filepicker;1"].
@ -2493,7 +2617,7 @@ var gMainPane = {
return;
}
let downloadDirPref = document.getElementById("browser.download.dir");
let downloadDirPref = Preferences.get("browser.download.dir");
downloadDirPref.value = fp.file;
folderListPref.value = await this._folderToIndex(fp.file);
// Note, the real prefs will not be updated yet, so dnld manager's
@ -2514,10 +2638,10 @@ var gMainPane = {
},
async displayDownloadDirPrefTask() {
var folderListPref = document.getElementById("browser.download.folderList");
var folderListPref = Preferences.get("browser.download.folderList");
var bundlePreferences = document.getElementById("bundlePreferences");
var downloadFolder = document.getElementById("downloadFolder");
var currentDirPref = document.getElementById("browser.download.dir");
var currentDirPref = Preferences.get("browser.download.dir");
// Used in defining the correct path to the folder icon.
var fph = Services.io.getProtocolHandler("file")
@ -2613,7 +2737,7 @@ var gMainPane = {
case 1:
return this._getDownloadsFolder("Downloads");
}
var currentDirPref = document.getElementById("browser.download.dir");
var currentDirPref = Preferences.get("browser.download.dir");
return currentDirPref.value;
}
};
@ -3016,16 +3140,16 @@ FeedHandlerInfo.prototype = {
},
get preferredApplicationHandler() {
switch (this.element(this._prefSelectedReader).value) {
switch (Preferences.get(this._prefSelectedReader).value) {
case "client":
var file = this.element(this._prefSelectedApp).value;
var file = Preferences.get(this._prefSelectedApp).value;
if (file)
return getLocalHandlerApp(file);
return null;
case "web":
var uri = this.element(this._prefSelectedWeb).value;
var uri = Preferences.get(this._prefSelectedWeb).value;
if (!uri)
return null;
return this._converterSvc.getWebContentHandlerByURI(this.type, uri);
@ -3041,11 +3165,11 @@ FeedHandlerInfo.prototype = {
set preferredApplicationHandler(aNewValue) {
if (aNewValue instanceof Ci.nsILocalHandlerApp) {
this.element(this._prefSelectedApp).value = aNewValue.executable;
this.element(this._prefSelectedReader).value = "client";
Preferences.get(this._prefSelectedApp).value = aNewValue.executable;
Preferences.get(this._prefSelectedReader).value = "client";
} else if (aNewValue instanceof Ci.nsIWebContentHandlerInfo) {
this.element(this._prefSelectedWeb).value = aNewValue.uri;
this.element(this._prefSelectedReader).value = "web";
Preferences.get(this._prefSelectedWeb).value = aNewValue.uri;
Preferences.get(this._prefSelectedReader).value = "web";
// Make the web handler be the new "auto handler" for feeds.
// Note: we don't have to unregister the auto handler when the user picks
// a non-web handler (local app, Live Bookmarks, etc.) because the service
@ -3105,7 +3229,7 @@ FeedHandlerInfo.prototype = {
// only a single path. But we display all the local apps the user chooses
// while the prefpane is open, only dropping the list when the user closes
// the prefpane, for maximum usability and consistency with other types.
var preferredAppFile = this.element(this._prefSelectedApp).value;
var preferredAppFile = Preferences.get(this._prefSelectedApp).value;
if (preferredAppFile) {
let preferredApp = getLocalHandlerApp(preferredAppFile);
let defaultApp = this._defaultApplicationHandler;
@ -3173,7 +3297,7 @@ FeedHandlerInfo.prototype = {
// What to do with content of this type.
get preferredAction() {
switch (this.element(this._prefSelectedAction).value) {
switch (Preferences.get(this._prefSelectedAction).value) {
case "bookmarks":
return Ci.nsIHandlerInfo.handleInternally;
@ -3211,31 +3335,31 @@ FeedHandlerInfo.prototype = {
switch (aNewValue) {
case Ci.nsIHandlerInfo.handleInternally:
this.element(this._prefSelectedReader).value = "bookmarks";
Preferences.get(this._prefSelectedReader).value = "bookmarks";
break;
case Ci.nsIHandlerInfo.useHelperApp:
this.element(this._prefSelectedAction).value = "reader";
Preferences.get(this._prefSelectedAction).value = "reader";
// The controller has already set preferredApplicationHandler
// to the new helper app.
break;
case Ci.nsIHandlerInfo.useSystemDefault:
this.element(this._prefSelectedAction).value = "reader";
Preferences.get(this._prefSelectedAction).value = "reader";
this.preferredApplicationHandler = this._defaultApplicationHandler;
break;
}
},
get alwaysAskBeforeHandling() {
return this.element(this._prefSelectedAction).value == "ask";
return Preferences.get(this._prefSelectedAction).value == "ask";
},
set alwaysAskBeforeHandling(aNewValue) {
if (aNewValue == true)
this.element(this._prefSelectedAction).value = "ask";
Preferences.get(this._prefSelectedAction).value = "ask";
else
this.element(this._prefSelectedAction).value = "reader";
Preferences.get(this._prefSelectedAction).value = "reader";
},
// Whether or not we are currently storing the action selected by the user.
@ -3264,7 +3388,7 @@ FeedHandlerInfo.prototype = {
store() {
for (let app of this._possibleApplicationHandlers._removed) {
if (app instanceof Ci.nsILocalHandlerApp) {
let pref = this.element(PREF_FEED_SELECTED_APP);
let pref = Preferences.get(PREF_FEED_SELECTED_APP);
var preferredAppFile = pref.value;
if (preferredAppFile) {
let preferredApp = getLocalHandlerApp(preferredAppFile);

Просмотреть файл

@ -16,245 +16,6 @@
<stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences.properties"/>
<preferences id="mainPreferences" hidden="true" data-category="paneGeneral">
<!-- Startup -->
<preference id="browser.startup.page"
name="browser.startup.page"
type="int"/>
<preference id="browser.startup.homepage"
name="browser.startup.homepage"
type="wstring"/>
#ifdef HAVE_SHELL_SERVICE
<preference id="browser.shell.checkDefaultBrowser"
name="browser.shell.checkDefaultBrowser"
type="bool"/>
<preference id="pref.general.disable_button.default_browser"
name="pref.general.disable_button.default_browser"
type="bool"/>
#endif
<preference id="pref.browser.homepage.disable_button.current_page"
name="pref.browser.homepage.disable_button.current_page"
type="bool"/>
<preference id="pref.browser.homepage.disable_button.bookmark_page"
name="pref.browser.homepage.disable_button.bookmark_page"
type="bool"/>
<preference id="pref.browser.homepage.disable_button.restore_default"
name="pref.browser.homepage.disable_button.restore_default"
type="bool"/>
<preference id="browser.privatebrowsing.autostart"
name="browser.privatebrowsing.autostart"
type="bool"/>
<!-- Downloads -->
<preference id="browser.download.useDownloadDir"
name="browser.download.useDownloadDir"
type="bool"/>
<preference id="browser.download.folderList"
name="browser.download.folderList"
type="int"/>
<preference id="browser.download.dir"
name="browser.download.dir"
type="file"/>
<!-- Tab preferences
Preferences:
browser.link.open_newwindow
1 opens such links in the most recent window or tab,
2 opens such links in a new window,
3 opens such links in a new tab
browser.tabs.loadInBackground
- true if display should switch to a new tab which has been opened from a
link, false if display shouldn't switch
browser.tabs.warnOnClose
- true if when closing a window with multiple tabs the user is warned and
allowed to cancel the action, false to just close the window
browser.tabs.warnOnOpen
- true if the user should be warned if he attempts to open a lot of tabs at
once (e.g. a large folder of bookmarks), false otherwise
browser.taskbar.previews.enable
- true if tabs are to be shown in the Windows 7 taskbar
-->
<preference id="browser.link.open_newwindow"
name="browser.link.open_newwindow"
type="int"/>
<preference id="browser.tabs.loadInBackground"
name="browser.tabs.loadInBackground"
type="bool"
inverted="true"/>
<preference id="browser.tabs.warnOnClose"
name="browser.tabs.warnOnClose"
type="bool"/>
<preference id="browser.tabs.warnOnOpen"
name="browser.tabs.warnOnOpen"
type="bool"/>
<preference id="browser.sessionstore.restore_on_demand"
name="browser.sessionstore.restore_on_demand"
type="bool"/>
#ifdef XP_WIN
<preference id="browser.taskbar.previews.enable"
name="browser.taskbar.previews.enable"
type="bool"/>
#endif
<preference id="browser.ctrlTab.previews"
name="browser.ctrlTab.previews"
type="bool"/>
<!-- Fonts -->
<preference id="font.language.group"
name="font.language.group"
type="wstring"/>
<!-- Languages -->
<preference id="browser.translation.detectLanguage"
name="browser.translation.detectLanguage"
type="bool"/>
<!-- General tab -->
<!-- Accessibility
* accessibility.browsewithcaret
- true enables keyboard navigation and selection within web pages using a
visible caret, false uses normal keyboard navigation with no caret
* accessibility.typeaheadfind
- when set to true, typing outside text areas and input boxes will
automatically start searching for what's typed within the current
document; when set to false, no search action happens -->
<preference id="accessibility.browsewithcaret"
name="accessibility.browsewithcaret"
type="bool"/>
<preference id="accessibility.typeaheadfind"
name="accessibility.typeaheadfind"
type="bool"/>
<preference id="accessibility.blockautorefresh"
name="accessibility.blockautorefresh"
type="bool"/>
#ifdef XP_WIN
<preference id="ui.osk.enabled"
name="ui.osk.enabled"
type="bool"/>
#endif
<!-- Browsing
* general.autoScroll
- when set to true, clicking the scroll wheel on the mouse activates a
mouse mode where moving the mouse down scrolls the document downward with
speed correlated with the distance of the cursor from the original
position at which the click occurred (and likewise with movement upward);
if false, this behavior is disabled
* general.smoothScroll
- set to true to enable finer page scrolling than line-by-line on page-up,
page-down, and other such page movements -->
<preference id="general.autoScroll"
name="general.autoScroll"
type="bool"/>
<preference id="general.smoothScroll"
name="general.smoothScroll"
type="bool"/>
<preference id="layout.spellcheckDefault"
name="layout.spellcheckDefault"
type="int"/>
<preference id="browser.preferences.defaultPerformanceSettings.enabled"
name="browser.preferences.defaultPerformanceSettings.enabled"
type="bool"/>
<preference id="dom.ipc.processCount"
name="dom.ipc.processCount"
type="int"/>
<preference id="dom.ipc.processCount.web"
name="dom.ipc.processCount.web"
type="int"/>
<preference id="layers.acceleration.disabled"
name="layers.acceleration.disabled"
type="bool"
inverted="true"/>
<!-- Files and Applications -->
<preference id="browser.feeds.handler"
name="browser.feeds.handler"
type="string"/>
<preference id="browser.feeds.handler.default"
name="browser.feeds.handler.default"
type="string"/>
<preference id="browser.feeds.handlers.application"
name="browser.feeds.handlers.application"
type="file"/>
<preference id="browser.feeds.handlers.webservice"
name="browser.feeds.handlers.webservice"
type="string"/>
<preference id="browser.videoFeeds.handler"
name="browser.videoFeeds.handler"
type="string"/>
<preference id="browser.videoFeeds.handler.default"
name="browser.videoFeeds.handler.default"
type="string"/>
<preference id="browser.videoFeeds.handlers.application"
name="browser.videoFeeds.handlers.application"
type="file"/>
<preference id="browser.videoFeeds.handlers.webservice"
name="browser.videoFeeds.handlers.webservice"
type="string"/>
<preference id="browser.audioFeeds.handler"
name="browser.audioFeeds.handler"
type="string"/>
<preference id="browser.audioFeeds.handler.default"
name="browser.audioFeeds.handler.default"
type="string"/>
<preference id="browser.audioFeeds.handlers.application"
name="browser.audioFeeds.handlers.application"
type="file"/>
<preference id="browser.audioFeeds.handlers.webservice"
name="browser.audioFeeds.handlers.webservice"
type="string"/>
<preference id="pref.downloads.disable_button.edit_actions"
name="pref.downloads.disable_button.edit_actions"
type="bool"/>
<!-- DRM content -->
<preference id="media.eme.enabled"
name="media.eme.enabled"
type="bool"/>
<!-- Update -->
<preference id="browser.preferences.advanced.selectedTabIndex"
name="browser.preferences.advanced.selectedTabIndex"
type="int"/>
#ifdef MOZ_UPDATER
<preference id="app.update.enabled"
name="app.update.enabled"
type="bool"/>
<preference id="app.update.auto"
name="app.update.auto"
type="bool"/>
<preference id="app.update.disable_button.showUpdateHistory"
name="app.update.disable_button.showUpdateHistory"
type="bool"/>
#ifdef MOZ_MAINTENANCE_SERVICE
<preference id="app.update.service.enabled"
name="app.update.service.enabled"
type="bool"/>
#endif
#endif
<preference id="browser.search.update"
name="browser.search.update"
type="bool"/>
</preferences>
<hbox id="generalCategory"
class="subcategory"
hidden="true"

Просмотреть файл

@ -11,6 +11,7 @@
/* import-globals-from sync.js */
/* import-globals-from findInPage.js */
/* import-globals-from ../../../base/content/utilityOverlay.js */
/* import-globals-from ../../../../toolkit/content/preferencesBindings.js */
"use strict";
@ -57,7 +58,7 @@ function register_module(categoryName, categoryObject) {
document.addEventListener("DOMContentLoaded", init_all, {once: true});
function init_all() {
document.documentElement.instantApply = true;
Preferences.forceEnableInstantApply();
gSubDialog.init();
register_module("paneGeneral", gMainPane);
@ -318,14 +319,6 @@ function scrollContentTo(element) {
});
}
function helpButtonCommand() {
let pane = history.state;
let categories = document.getElementById("categories");
let helpTopic = categories.querySelector(".category[value=" + pane + "]")
.getAttribute("helpTopic");
openHelpLink(helpTopic);
}
function friendlyPrefCategoryNameToInternalName(aName) {
if (aName.startsWith("pane"))
return aName;

Просмотреть файл

@ -104,6 +104,8 @@
<script type="application/javascript"
src="chrome://browser/content/utilityOverlay.js"/>
<script type="application/javascript"
src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript"
src="chrome://browser/content/preferences/in-content/preferences.js"/>
<script src="chrome://browser/content/preferences/in-content/findInPage.js"/>
@ -196,14 +198,14 @@
<hbox class="search-container" pack="end">
<textbox type="search" id="searchInput" style="width: &searchField.width;" hidden="true" clickSelectsAll="true"/>
</hbox>
<prefpane id="mainPrefPane">
<vbox id="mainPrefPane" class="prefpane prefwindow">
#include searchResults.xul
#include main.xul
#include search.xul
#include privacy.xul
#include containers.xul
#include sync.xul
</prefpane>
</vbox>
</vbox>
</vbox>
</hbox>

Просмотреть файл

@ -34,6 +34,87 @@ XPCOMUtils.defineLazyGetter(this, "AlertsServiceDND", function() {
}
});
Preferences.addAll([
// Tracking
{ id: "privacy.trackingprotection.enabled", type: "bool" },
{ id: "privacy.trackingprotection.pbmode.enabled", type: "bool" },
// Button prefs
{ id: "pref.privacy.disable_button.cookie_exceptions", type: "bool" },
{ id: "pref.privacy.disable_button.view_cookies", type: "bool" },
{ id: "pref.privacy.disable_button.change_blocklist", type: "bool" },
{ id: "pref.privacy.disable_button.tracking_protection_exceptions", type: "bool" },
// Location Bar
{ id: "browser.urlbar.autocomplete.enabled", type: "bool" },
{ id: "browser.urlbar.suggest.bookmark", type: "bool" },
{ id: "browser.urlbar.suggest.history", type: "bool" },
{ id: "browser.urlbar.suggest.openpage", type: "bool" },
// History
{ id: "places.history.enabled", type: "bool" },
{ id: "browser.formfill.enable", type: "bool" },
{ id: "privacy.history.custom", type: "bool" },
// Cookies
{ id: "network.cookie.cookieBehavior", type: "int" },
{ id: "network.cookie.lifetimePolicy", type: "int" },
{ id: "network.cookie.blockFutureCookies", type: "bool" },
// Clear Private Data
{ id: "privacy.sanitize.sanitizeOnShutdown", type: "bool" },
{ id: "privacy.sanitize.timeSpan", type: "int" },
// Do not track
{ id: "privacy.donottrackheader.enabled", type: "bool" },
// Popups
{ id: "dom.disable_open_during_load", type: "bool" },
// Passwords
{ id: "signon.rememberSignons", type: "bool" },
// Buttons
{ id: "pref.privacy.disable_button.view_passwords", type: "bool" },
{ id: "pref.privacy.disable_button.view_passwords_exceptions", type: "bool" },
/* Certificates tab
* security.default_personal_cert
* - a string:
* "Select Automatically" select a certificate automatically when a site
* requests one
* "Ask Every Time" present a dialog to the user so he can select
* the certificate to use on a site which
* requests one
*/
{ id: "security.default_personal_cert", type: "string" },
{ id: "security.disable_button.openCertManager", type: "bool" },
{ id: "security.disable_button.openDeviceManager", type: "bool" },
{ id: "security.OCSP.enabled", type: "int" },
// Add-ons, malware, phishing
{ id: "xpinstall.whitelist.required", type: "bool" },
{ id: "browser.safebrowsing.malware.enabled", type: "bool" },
{ id: "browser.safebrowsing.phishing.enabled", type: "bool" },
{ id: "browser.safebrowsing.downloads.enabled", type: "bool" },
{ id: "urlclassifier.malwareTable", type: "string" },
{ id: "browser.safebrowsing.downloads.remote.block_potentially_unwanted", type: "bool" },
{ id: "browser.safebrowsing.downloads.remote.block_uncommon", type: "bool" },
// Network tab
{ id: "browser.cache.disk.capacity", type: "int" },
{ id: "browser.cache.disk.smart_size.enabled", type: "bool", inverted: "true" },
]);
// Data Choices tab
if (AppConstants.MOZ_CRASHREPORTER) {
Preferences.add({ id: "browser.crashReports.unsubmittedCheck.autoSubmit2", type: "bool" });
}
var gPrivacyPane = {
_pane: null,
@ -104,10 +185,10 @@ var gPrivacyPane = {
this._initTrackingProtectionPBM();
this._initAutocomplete();
setEventListener("privacy.sanitize.sanitizeOnShutdown", "change",
gPrivacyPane._updateSanitizeSettingsButton);
setEventListener("browser.privatebrowsing.autostart", "change",
gPrivacyPane.updatePrivacyMicroControls);
Preferences.get("privacy.sanitize.sanitizeOnShutdown").on("change",
gPrivacyPane._updateSanitizeSettingsButton.bind(gPrivacyPane));
Preferences.get("browser.privatebrowsing.autostart").on("change",
gPrivacyPane.updatePrivacyMicroControls.bind(gPrivacyPane));
setEventListener("historyMode", "command", function() {
gPrivacyPane.updateHistoryModePane();
gPrivacyPane.updateHistoryModePrefs();
@ -326,8 +407,8 @@ var gPrivacyPane = {
* Selects the right item of the Tracking Protection radiogroup.
*/
trackingProtectionReadPrefs() {
let enabledPref = document.getElementById("privacy.trackingprotection.enabled");
let pbmPref = document.getElementById("privacy.trackingprotection.pbmode.enabled");
let enabledPref = Preferences.get("privacy.trackingprotection.enabled");
let pbmPref = Preferences.get("privacy.trackingprotection.pbmode.enabled");
let radiogroup = document.getElementById("trackingProtectionRadioGroup");
// Global enable takes precedence over enabled in Private Browsing.
@ -344,8 +425,8 @@ var gPrivacyPane = {
* Sets the pref values based on the selected item of the radiogroup.
*/
trackingProtectionWritePrefs() {
let enabledPref = document.getElementById("privacy.trackingprotection.enabled");
let pbmPref = document.getElementById("privacy.trackingprotection.pbmode.enabled");
let enabledPref = Preferences.get("privacy.trackingprotection.enabled");
let pbmPref = Preferences.get("privacy.trackingprotection.pbmode.enabled");
let radiogroup = document.getElementById("trackingProtectionRadioGroup");
switch (radiogroup.value) {
@ -411,7 +492,7 @@ var gPrivacyPane = {
*/
_checkHistoryValues(aPrefs) {
for (let pref of Object.keys(aPrefs)) {
if (document.getElementById(pref).value != aPrefs[pref])
if (Preferences.get(pref).value != aPrefs[pref])
return false;
}
return true;
@ -422,7 +503,7 @@ var gPrivacyPane = {
*/
initializeHistoryMode() {
let mode;
let getVal = aPref => document.getElementById(aPref).value;
let getVal = aPref => Preferences.get(aPref).value;
if (getVal("privacy.history.custom"))
mode = "custom";
@ -454,7 +535,7 @@ var gPrivacyPane = {
break;
}
document.getElementById("historyPane").selectedIndex = selectedIndex;
document.getElementById("privacy.history.custom").value = selectedIndex == 2;
Preferences.get("privacy.history.custom").value = selectedIndex == 2;
},
/**
@ -462,25 +543,25 @@ var gPrivacyPane = {
* micro-management prefs based on the history mode menulist
*/
updateHistoryModePrefs() {
let pref = document.getElementById("browser.privatebrowsing.autostart");
let pref = Preferences.get("browser.privatebrowsing.autostart");
switch (document.getElementById("historyMode").value) {
case "remember":
if (pref.value)
pref.value = false;
// select the remember history option if needed
document.getElementById("places.history.enabled").value = true;
Preferences.get("places.history.enabled").value = true;
// select the remember forms history option
document.getElementById("browser.formfill.enable").value = true;
Preferences.get("browser.formfill.enable").value = true;
// select the allow cookies option
document.getElementById("network.cookie.cookieBehavior").value = 0;
Preferences.get("network.cookie.cookieBehavior").value = 0;
// select the cookie lifetime policy option
document.getElementById("network.cookie.lifetimePolicy").value = 0;
Preferences.get("network.cookie.lifetimePolicy").value = 0;
// select the clear on close option
document.getElementById("privacy.sanitize.sanitizeOnShutdown").value = false;
Preferences.get("privacy.sanitize.sanitizeOnShutdown").value = false;
break;
case "dontremember":
if (!pref.value)
@ -496,7 +577,7 @@ var gPrivacyPane = {
updatePrivacyMicroControls() {
if (document.getElementById("historyMode").value == "custom") {
let disabled = this._autoStartPrivateBrowsing =
document.getElementById("browser.privatebrowsing.autostart").value;
Preferences.get("browser.privatebrowsing.autostart").value;
this.dependentControls.forEach(function(aElement) {
let control = document.getElementById(aElement);
let preferenceId = control.getAttribute("preference");
@ -508,13 +589,13 @@ var gPrivacyPane = {
}
}
let preference = preferenceId ? document.getElementById(preferenceId) : {};
let preference = preferenceId ? Preferences.get(preferenceId) : {};
control.disabled = disabled || preference.locked;
});
// adjust the cookie controls status
this.readAcceptCookies();
let lifetimePolicy = document.getElementById("network.cookie.lifetimePolicy").value;
let lifetimePolicy = Preferences.get("network.cookie.lifetimePolicy").value;
if (lifetimePolicy != Ci.nsICookieService.ACCEPT_NORMALLY &&
lifetimePolicy != Ci.nsICookieService.ACCEPT_SESSION &&
lifetimePolicy != Ci.nsICookieService.ACCEPT_FOR_N_DAYS) {
@ -524,13 +605,13 @@ var gPrivacyPane = {
// adjust the checked state of the sanitizeOnShutdown checkbox
document.getElementById("alwaysClear").checked = disabled ? false :
document.getElementById("privacy.sanitize.sanitizeOnShutdown").value;
Preferences.get("privacy.sanitize.sanitizeOnShutdown").value;
// adjust the checked state of the remember history checkboxes
document.getElementById("rememberHistory").checked = disabled ? false :
document.getElementById("places.history.enabled").value;
Preferences.get("places.history.enabled").value;
document.getElementById("rememberForms").checked = disabled ? false :
document.getElementById("browser.formfill.enable").value;
Preferences.get("browser.formfill.enable").value;
if (!disabled) {
// adjust the Settings button for sanitizeOnShutdown
@ -556,7 +637,7 @@ var gPrivacyPane = {
updateAutostart() {
let mode = document.getElementById("historyMode");
let autoStart = document.getElementById("privateBrowsingAutoStart");
let pref = document.getElementById("browser.privatebrowsing.autostart");
let pref = Preferences.get("browser.privatebrowsing.autostart");
if ((mode.value == "custom" && this._lastCheckState == autoStart.checked) ||
(mode.value == "remember" && !this._lastCheckState) ||
(mode.value == "dontremember" && this._lastCheckState)) {
@ -660,7 +741,7 @@ var gPrivacyPane = {
* if cookies are enabled.
*/
readAcceptCookies() {
var pref = document.getElementById("network.cookie.cookieBehavior");
var pref = Preferences.get("network.cookie.cookieBehavior");
var acceptThirdPartyLabel = document.getElementById("acceptThirdPartyLabel");
var acceptThirdPartyMenu = document.getElementById("acceptThirdPartyMenu");
var keepUntil = document.getElementById("keepUntil");
@ -694,7 +775,7 @@ var gPrivacyPane = {
* Converts between network.cookie.cookieBehavior and the third-party cookie UI
*/
readAcceptThirdPartyCookies() {
var pref = document.getElementById("network.cookie.cookieBehavior");
var pref = Preferences.get("network.cookie.cookieBehavior");
switch (pref.value) {
case 0:
return "always";
@ -771,7 +852,7 @@ var gPrivacyPane = {
* cleared.
*/
clearPrivateDataNow(aClearEverything) {
var ts = document.getElementById("privacy.sanitize.timeSpan");
var ts = Preferences.get("privacy.sanitize.timeSpan");
var timeSpanOrig = ts.value;
if (aClearEverything) {
@ -794,7 +875,7 @@ var gPrivacyPane = {
*/
_updateSanitizeSettingsButton() {
var settingsButton = document.getElementById("clearDataSettings");
var sanitizeOnShutdownPref = document.getElementById("privacy.sanitize.sanitizeOnShutdown");
var sanitizeOnShutdownPref = Preferences.get("privacy.sanitize.sanitizeOnShutdown");
settingsButton.disabled = !sanitizeOnShutdownPref.value;
},
@ -900,7 +981,7 @@ var gPrivacyPane = {
*/
updateButtons(aButtonID, aPreferenceID) {
var button = document.getElementById(aButtonID);
var preference = document.getElementById(aPreferenceID);
var preference = Preferences.get(aPreferenceID);
button.disabled = preference.value != true;
return undefined;
},
@ -1018,7 +1099,7 @@ var gPrivacyPane = {
* Browsing mode, the "Remember passwords" UI is useless, so we disable it.
*/
readSavePasswords() {
var pref = document.getElementById("signon.rememberSignons");
var pref = Preferences.get("signon.rememberSignons");
var excepts = document.getElementById("passwordExceptions");
if (PrivateBrowsingUtils.permanentPrivateBrowsing) {
@ -1036,7 +1117,7 @@ var gPrivacyPane = {
* or not add-on installation warnings are displayed.
*/
readWarnAddonInstall() {
var warn = document.getElementById("xpinstall.whitelist.required");
var warn = Preferences.get("xpinstall.whitelist.required");
var exceptions = document.getElementById("addonExceptions");
exceptions.disabled = !warn.value;
@ -1050,14 +1131,14 @@ var gPrivacyPane = {
let blockDownloads = document.getElementById("blockDownloads");
let blockUncommonUnwanted = document.getElementById("blockUncommonUnwanted");
let safeBrowsingPhishingPref = document.getElementById("browser.safebrowsing.phishing.enabled");
let safeBrowsingMalwarePref = document.getElementById("browser.safebrowsing.malware.enabled");
let safeBrowsingPhishingPref = Preferences.get("browser.safebrowsing.phishing.enabled");
let safeBrowsingMalwarePref = Preferences.get("browser.safebrowsing.malware.enabled");
let blockDownloadsPref = document.getElementById("browser.safebrowsing.downloads.enabled");
let malwareTable = document.getElementById("urlclassifier.malwareTable");
let blockDownloadsPref = Preferences.get("browser.safebrowsing.downloads.enabled");
let malwareTable = Preferences.get("urlclassifier.malwareTable");
let blockUnwantedPref = document.getElementById("browser.safebrowsing.downloads.remote.block_potentially_unwanted");
let blockUncommonPref = document.getElementById("browser.safebrowsing.downloads.remote.block_uncommon");
let blockUnwantedPref = Preferences.get("browser.safebrowsing.downloads.remote.block_potentially_unwanted");
let blockUncommonPref = Preferences.get("browser.safebrowsing.downloads.remote.block_uncommon");
let learnMoreLink = document.getElementById("enableSafeBrowsingLearnMore");
let phishingUrl = Services.urlFormatter.formatURLPref("app.support.baseURL") + "phishing-malware";
@ -1191,7 +1272,7 @@ var gPrivacyPane = {
* checked. Otherwise, it should be unchecked.
*/
readEnableOCSP() {
var preference = document.getElementById("security.OCSP.enabled");
var preference = Preferences.get("security.OCSP.enabled");
// This is the case if the preference is the default value.
if (preference.value === undefined) {
return true;
@ -1304,7 +1385,7 @@ var gPrivacyPane = {
readSmartSizeEnabled() {
// The smart_size.enabled preference element is inverted="true", so its
// value is the opposite of the actual pref value
var disabled = document.getElementById("browser.cache.disk.smart_size.enabled").value;
var disabled = Preferences.get("browser.cache.disk.smart_size.enabled").value;
this.updateCacheSizeUI(!disabled);
},
@ -1320,7 +1401,7 @@ var gPrivacyPane = {
*/
updateCacheSizeInputField() {
let cacheSizeElem = document.getElementById("cacheSize");
let cachePref = document.getElementById("browser.cache.disk.capacity");
let cachePref = Preferences.get("browser.cache.disk.capacity");
cacheSizeElem.value = cachePref.value / 1024;
if (cachePref.locked)
cacheSizeElem.disabled = true;
@ -1334,7 +1415,7 @@ var gPrivacyPane = {
*/
updateCacheSizePref() {
let cacheSizeElem = document.getElementById("cacheSize");
let cachePref = document.getElementById("browser.cache.disk.capacity");
let cachePref = Preferences.get("browser.cache.disk.capacity");
// Converts the cache size as specified in UI (in MB) to KB.
let intValue = parseInt(cacheSizeElem.value, 10);
cachePref.value = isNaN(intValue) ? 0 : intValue * 1024;

Просмотреть файл

@ -6,165 +6,6 @@
<script type="application/javascript"
src="chrome://browser/content/preferences/in-content/privacy.js"/>
<preferences id="privacyPreferences" hidden="true" data-category="panePrivacy">
<!-- Tracking -->
<preference id="privacy.trackingprotection.enabled"
name="privacy.trackingprotection.enabled"
type="bool"/>
<preference id="privacy.trackingprotection.pbmode.enabled"
name="privacy.trackingprotection.pbmode.enabled"
type="bool"/>
<!-- XXX button prefs -->
<preference id="pref.privacy.disable_button.cookie_exceptions"
name="pref.privacy.disable_button.cookie_exceptions"
type="bool"/>
<preference id="pref.privacy.disable_button.view_cookies"
name="pref.privacy.disable_button.view_cookies"
type="bool"/>
<preference id="pref.privacy.disable_button.change_blocklist"
name="pref.privacy.disable_button.change_blocklist"
type="bool"/>
<preference id="pref.privacy.disable_button.tracking_protection_exceptions"
name="pref.privacy.disable_button.tracking_protection_exceptions"
type="bool"/>
<!-- Location Bar -->
<preference id="browser.urlbar.autocomplete.enabled"
name="browser.urlbar.autocomplete.enabled"
type="bool"/>
<preference id="browser.urlbar.suggest.bookmark"
name="browser.urlbar.suggest.bookmark"
type="bool"/>
<preference id="browser.urlbar.suggest.history"
name="browser.urlbar.suggest.history"
type="bool"/>
<preference id="browser.urlbar.suggest.openpage"
name="browser.urlbar.suggest.openpage"
type="bool"/>
<!-- History -->
<preference id="places.history.enabled"
name="places.history.enabled"
type="bool"/>
<preference id="browser.formfill.enable"
name="browser.formfill.enable"
type="bool"/>
<preference id="privacy.history.custom"
name="privacy.history.custom"
type="bool"/>
<!-- Cookies -->
<preference id="network.cookie.cookieBehavior"
name="network.cookie.cookieBehavior"
type="int"/>
<preference id="network.cookie.lifetimePolicy"
name="network.cookie.lifetimePolicy"
type="int"/>
<preference id="network.cookie.blockFutureCookies"
name="network.cookie.blockFutureCookies"
type="bool"/>
<!-- Clear Private Data -->
<preference id="privacy.sanitize.sanitizeOnShutdown"
name="privacy.sanitize.sanitizeOnShutdown"
type="bool"/>
<preference id="privacy.sanitize.timeSpan"
name="privacy.sanitize.timeSpan"
type="int"/>
<!-- Private Browsing -->
<preference id="browser.privatebrowsing.autostart"
name="browser.privatebrowsing.autostart"
type="bool"/>
<!-- Do not track -->
<preference id="privacy.donottrackheader.enabled"
name="privacy.donottrackheader.enabled"
type="bool"/>
<!-- Popups -->
<preference id="dom.disable_open_during_load"
name="dom.disable_open_during_load"
type="bool"/>
<!-- Passwords -->
<preference id="signon.rememberSignons" name="signon.rememberSignons" type="bool"/>
<!-- XXX buttons -->
<preference id="pref.privacy.disable_button.view_passwords"
name="pref.privacy.disable_button.view_passwords"
type="bool"/>
<preference id="pref.privacy.disable_button.view_passwords_exceptions"
name="pref.privacy.disable_button.view_passwords_exceptions"
type="bool"/>
<!-- Certificates tab
* security.default_personal_cert
- a string:
"Select Automatically" select a certificate automatically when a site
requests one
"Ask Every Time" present a dialog to the user so he can select
the certificate to use on a site which
requests one -->
<preference id="security.default_personal_cert"
name="security.default_personal_cert"
type="string"/>
<preference id="security.disable_button.openCertManager"
name="security.disable_button.openCertManager"
type="bool"/>
<preference id="security.disable_button.openDeviceManager"
name="security.disable_button.openDeviceManager"
type="bool"/>
<preference id="security.OCSP.enabled"
name="security.OCSP.enabled"
type="int"/>
<!-- Add-ons, malware, phishing -->
<preference id="xpinstall.whitelist.required"
name="xpinstall.whitelist.required"
type="bool"/>
<preference id="browser.safebrowsing.malware.enabled"
name="browser.safebrowsing.malware.enabled"
type="bool"/>
<preference id="browser.safebrowsing.phishing.enabled"
name="browser.safebrowsing.phishing.enabled"
type="bool"/>
<preference id="browser.safebrowsing.downloads.enabled"
name="browser.safebrowsing.downloads.enabled"
type="bool"/>
<preference id="urlclassifier.malwareTable"
name="urlclassifier.malwareTable"
type="string"/>
<preference id="browser.safebrowsing.downloads.remote.block_potentially_unwanted"
name="browser.safebrowsing.downloads.remote.block_potentially_unwanted"
type="bool"/>
<preference id="browser.safebrowsing.downloads.remote.block_uncommon"
name="browser.safebrowsing.downloads.remote.block_uncommon"
type="bool"/>
<!-- Network tab -->
<preference id="browser.cache.disk.capacity"
name="browser.cache.disk.capacity"
type="int"/>
<preference id="browser.cache.disk.smart_size.enabled"
name="browser.cache.disk.smart_size.enabled"
inverted="true"
type="bool"/>
<!-- Data Choices tab -->
#ifdef MOZ_CRASHREPORTER
<preference id="browser.crashReports.unsubmittedCheck.autoSubmit2"
name="browser.crashReports.unsubmittedCheck.autoSubmit2"
type="bool"/>
#endif
</preferences>
<stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
<stringbundle id="signonBundle" src="chrome://passwordmgr/locale/passwordmgr.properties"/>

Просмотреть файл

@ -10,6 +10,13 @@ XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
XPCOMUtils.defineLazyModuleGetter(this, "ExtensionSettingsStore",
"resource://gre/modules/ExtensionSettingsStore.jsm");
Preferences.addAll([
{ id: "browser.search.suggest.enabled", type: "bool" },
{ id: "browser.urlbar.suggest.searches", type: "bool" },
{ id: "browser.search.hiddenOneOffs", type: "unichar" },
{ id: "browser.search.widget.inNavBar", type: "bool" },
]);
const ENGINE_FLAVOR = "text/x-moz-search-engine";
const SEARCH_TYPE = "default_search";
const SEARCH_KEY = "defaultSearch";
@ -50,24 +57,19 @@ var gSearchPane = {
this._initAutocomplete();
let suggestsPref =
document.getElementById("browser.search.suggest.enabled");
suggestsPref.addEventListener("change", () => {
this.updateSuggestsCheckbox();
});
let suggestsPref = Preferences.get("browser.search.suggest.enabled");
suggestsPref.on("change", this.updateSuggestsCheckbox.bind(this));
this.updateSuggestsCheckbox();
},
updateSuggestsCheckbox() {
let suggestsPref =
document.getElementById("browser.search.suggest.enabled");
let suggestsPref = Preferences.get("browser.search.suggest.enabled");
let permanentPB =
Services.prefs.getBoolPref("browser.privatebrowsing.autostart");
let urlbarSuggests = document.getElementById("urlBarSuggestion");
urlbarSuggests.disabled = !suggestsPref.value || permanentPB;
let urlbarSuggestsPref =
document.getElementById("browser.urlbar.suggest.searches");
let urlbarSuggestsPref = Preferences.get("browser.urlbar.suggest.searches");
urlbarSuggests.checked = urlbarSuggestsPref.value;
if (urlbarSuggests.disabled) {
urlbarSuggests.checked = false;
@ -315,7 +317,7 @@ var gSearchPane = {
if (!engine.shown)
hiddenList.push(engine.name);
}
document.getElementById("browser.search.hiddenOneOffs").value =
Preferences.get("browser.search.hiddenOneOffs").value =
hiddenList.join(",");
},
@ -339,7 +341,7 @@ function onDragEngineStart(event) {
function EngineStore() {
let pref = document.getElementById("browser.search.hiddenOneOffs").value;
let pref = Preferences.get("browser.search.hiddenOneOffs").value;
this.hiddenList = pref ? pref.split(",") : [];
this._engines = Services.search.getVisibleEngines().map(this._cloneEngine, this);

Просмотреть файл

@ -1,23 +1,3 @@
<preferences id="searchPreferences" hidden="true" data-category="paneSearch">
<preference id="browser.search.suggest.enabled"
name="browser.search.suggest.enabled"
type="bool"/>
<preference id="browser.urlbar.suggest.searches"
name="browser.urlbar.suggest.searches"
type="bool"/>
<preference id="browser.search.hiddenOneOffs"
name="browser.search.hiddenOneOffs"
type="unichar"/>
<preference id="browser.search.widget.inNavBar"
name="browser.search.widget.inNavBar"
type="bool"/>
</preferences>
<script type="application/javascript"
src="chrome://browser/content/preferences/in-content/search.js"/>

Просмотреть файл

@ -28,6 +28,17 @@ const FXA_LOGIN_UNVERIFIED = 1;
// We are logged in locally, but the server rejected our credentials.
const FXA_LOGIN_FAILED = 2;
Preferences.addAll([
{ id: "engine.addons", name: "services.sync.engine.addons", type: "bool" },
{ id: "engine.bookmarks", name: "services.sync.engine.bookmarks", type: "bool" },
{ id: "engine.history", name: "services.sync.engine.history", type: "bool" },
{ id: "engine.tabs", name: "services.sync.engine.tabs", type: "bool" },
{ id: "engine.prefs", name: "services.sync.engine.prefs", type: "bool" },
{ id: "engine.passwords", name: "services.sync.engine.passwords", type: "bool" },
{ id: "engine.addresses", name: "services.sync.engine.addresses", type: "bool" },
{ id: "engine.creditcards", name: "services.sync.engine.creditcards", type: "bool" },
]);
var gSyncPane = {
get page() {
return document.getElementById("weavePrefsDeck").selectedIndex;

Просмотреть файл

@ -4,33 +4,6 @@
<!-- Sync panel -->
<preferences id="syncEnginePrefs" hidden="true" data-category="paneSync">
<preference id="engine.addons"
name="services.sync.engine.addons"
type="bool"/>
<preference id="engine.bookmarks"
name="services.sync.engine.bookmarks"
type="bool"/>
<preference id="engine.history"
name="services.sync.engine.history"
type="bool"/>
<preference id="engine.tabs"
name="services.sync.engine.tabs"
type="bool"/>
<preference id="engine.prefs"
name="services.sync.engine.prefs"
type="bool"/>
<preference id="engine.passwords"
name="services.sync.engine.passwords"
type="bool"/>
<preference id="engine.addresses"
name="services.sync.engine.addresses"
type="bool"/>
<preference id="engine.creditcards"
name="services.sync.engine.creditcards"
type="bool"/>
</preferences>
<script type="application/javascript"
src="chrome://browser/content/preferences/in-content/sync.js"/>

Просмотреть файл

@ -10,8 +10,10 @@ add_task(async function() {
await gBrowser.contentWindow.gMainPane._selectDefaultLanguageGroupPromise;
// eslint-disable-next-line mozilla/no-cpows-in-tests
let doc = gBrowser.contentDocument;
// eslint-disable-next-line mozilla/no-cpows-in-tests
let contentWindow = gBrowser.contentWindow;
var langGroup = Services.prefs.getComplexValue("font.language.group", Ci.nsIPrefLocalizedString).data;
is(doc.getElementById("font.language.group").value, langGroup,
is(contentWindow.Preferences.get("font.language.group").value, langGroup,
"Language group should be set correctly.");
let defaultFontType = Services.prefs.getCharPref("font.default." + langGroup);
@ -44,7 +46,7 @@ add_task(async function() {
win.FontBuilder._allFonts = null;
win.FontBuilder._langGroupSupported = false;
let langGroupElement = doc.getElementById("font.language.group");
let langGroupElement = win.Preferences.get("font.language.group");
let selectLangsField = doc.getElementById("selectLangs");
let serifField = doc.getElementById("serif");
let armenian = "x-armn";
@ -63,7 +65,7 @@ add_task(async function() {
selectLangsField.value = armenian;
is(serifField.value, "", "Font family should not be set.");
let armenianSerifElement = doc.getElementById("font.name.serif.x-armn");
let armenianSerifElement = win.Preferences.get("font.name.serif.x-armn");
langGroupElement.value = western;
await fontListsRebuilt();

Просмотреть файл

@ -16,10 +16,9 @@ var gElements;
function checkElements(expectedPane) {
for (let element of gElements) {
// keyset and preferences elements fail is_element_visible checks because they are never visible.
// keyset elements fail is_element_visible checks because they are never visible.
// special-case the drmGroup item because its visibility depends on pref + OS version
if (element.nodeName == "keyset" ||
element.nodeName == "preferences" ||
element.id === "drmGroup") {
continue;
}

Просмотреть файл

@ -34,9 +34,6 @@ function runTest(win) {
// Test if privacy pane is opened correctly
win.gotoPref("panePrivacy");
for (let element of elements) {
if (element.nodeName == "preferences") {
continue;
}
let attributeValue = element.getAttribute("data-category");
if (attributeValue == "panePrivacy") {
is_element_visible(element, `Privacy element of id=${element.id} should be visible`);

Просмотреть файл

@ -48,8 +48,8 @@ function test() {
function runConnectionTests(win) {
let doc = win.document;
let networkProxyNone = doc.getElementById("networkProxyNone");
let networkProxyNonePref = doc.getElementById("network.proxy.no_proxies_on");
let networkProxyTypePref = doc.getElementById("network.proxy.type");
let networkProxyNonePref = win.Preferences.get("network.proxy.no_proxies_on");
let networkProxyTypePref = win.Preferences.get("network.proxy.type");
// make sure the networkProxyNone textbox is formatted properly
is(networkProxyNone.getAttribute("multiline"), "true",

Просмотреть файл

@ -53,12 +53,12 @@ function test() {
dialogClosingPromise = waitForEvent(dialog.document.documentElement, "dialogclosing");
doc = dialog.document;
proxyTypePref = doc.getElementById("network.proxy.type");
sharePref = doc.getElementById("network.proxy.share_proxy_settings");
httpPref = doc.getElementById("network.proxy.http");
httpPortPref = doc.getElementById("network.proxy.http_port");
ftpPref = doc.getElementById("network.proxy.ftp");
ftpPortPref = doc.getElementById("network.proxy.ftp_port");
proxyTypePref = dialog.Preferences.get("network.proxy.type");
sharePref = dialog.Preferences.get("network.proxy.share_proxy_settings");
httpPref = dialog.Preferences.get("network.proxy.http");
httpPortPref = dialog.Preferences.get("network.proxy.http_port");
ftpPref = dialog.Preferences.get("network.proxy.ftp");
ftpPortPref = dialog.Preferences.get("network.proxy.ftp_port");
}
// This batch of tests should not close the dialog

Просмотреть файл

@ -25,9 +25,10 @@ add_task(async function() {
]);
let doc = gBrowser.contentDocument;
let win = gBrowser.contentWindow;
await doc.l10n.ready;
let processCountPref = doc.getElementById("dom.ipc.processCount");
let processCountPref = win.Preferences.get("dom.ipc.processCount");
let defaultProcessCount = processCountPref.defaultValue;
let [ msg ] = await doc.l10n.formatMessages([

Просмотреть файл

@ -14,7 +14,7 @@ function testPrefStateMatchesLockedState() {
switchToCustomHistoryMode(doc);
let checkbox = doc.getElementById("alwaysClear");
let preference = doc.getElementById("privacy.sanitize.sanitizeOnShutdown");
let preference = win.Preferences.get("privacy.sanitize.sanitizeOnShutdown");
is(checkbox.disabled, preference.locked, "Always Clear checkbox should be enabled when preference is not locked.");
Services.prefs.clearUserPref("privacy.history.custom");

Просмотреть файл

@ -220,7 +220,7 @@ function test_dependent_prefs(win) {
function expect_checked(checked) {
controls.forEach(function(control) {
is(control.checked, checked,
control.getAttribute("id") + " should " + (checked ? "not " : "") + "be checked");
control.getAttribute("id") + " should " + (checked ? "" : "not ") + "be checked");
});
is(thirdPartyCookieMenu.value == "always" || thirdPartyCookieMenu.value == "visited", checked, "third-party cookies should " + (checked ? "not " : "") + "be limited");
@ -311,13 +311,13 @@ function test_locbar_suggestion_retention(suggestion, autocomplete) {
const gPrefCache = new Map();
function cache_preferences(win) {
let prefs = win.document.querySelectorAll("#privacyPreferences > preference");
let prefs = win.Preferences.getAll();
for (let pref of prefs)
gPrefCache.set(pref.name, pref.value);
}
function reset_preferences(win) {
let prefs = win.document.querySelectorAll("#privacyPreferences > preference");
let prefs = win.Preferences.getAll();
for (let pref of prefs)
pref.value = gPrefCache.get(pref.name);
}

Просмотреть файл

@ -8,15 +8,16 @@ browser.jar:
content/browser/preferences/blocklists.xul
content/browser/preferences/blocklists.js
* content/browser/preferences/colors.xul
content/browser/preferences/colors.js
* content/browser/preferences/cookies.xul
content/browser/preferences/cookies.js
* content/browser/preferences/connection.xul
content/browser/preferences/connection.js
* content/browser/preferences/fonts.xul
content/browser/preferences/fonts.xul
content/browser/preferences/fonts.js
content/browser/preferences/handlers.xml
content/browser/preferences/handlers.css
* content/browser/preferences/languages.xul
content/browser/preferences/languages.xul
content/browser/preferences/languages.js
content/browser/preferences/permissions.xul
content/browser/preferences/sitePermissions.xul

Просмотреть файл

@ -3,8 +3,18 @@
* 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/. */
/* import-globals-from ../../../toolkit/content/preferencesBindings.js */
Components.utils.import("resource://gre/modules/Services.jsm");
Preferences.addAll([
{ id: "intl.accept_languages", type: "wstring" },
{ id: "pref.browser.language.disable_button.up", type: "bool" },
{ id: "pref.browser.language.disable_button.down", type: "bool" },
{ id: "pref.browser.language.disable_button.remove", type: "bool" },
{ id: "privacy.spoof_english", type: "int" },
]);
var gLanguagesDialog = {
_availableLanguagesList: [],
@ -126,7 +136,7 @@ var gLanguagesDialog = {
this._activeLanguages.firstChild.remove();
var selectedIndex = 0;
var preference = document.getElementById("intl.accept_languages");
var preference = Preferences.get("intl.accept_languages");
if (preference.value == "")
return undefined;
var languages = preference.value.toLowerCase().split(/\s*,\s*/);
@ -173,7 +183,7 @@ var gLanguagesDialog = {
addLanguage() {
var selectedID = this._availableLanguages.selectedItem.id;
var preference = document.getElementById("intl.accept_languages");
var preference = Preferences.get("intl.accept_languages");
var arrayOfPrefs = preference.value.toLowerCase().split(/\s*,\s*/);
for (var i = 0; i < arrayOfPrefs.length; ++i ) {
if (arrayOfPrefs[i] == selectedID)
@ -219,7 +229,7 @@ var gLanguagesDialog = {
this._selectedItemID = selectItem;
// Update the preference and force a UI rebuild
var preference = document.getElementById("intl.accept_languages");
var preference = Preferences.get("intl.accept_languages");
preference.value = string;
this._buildAvailableLanguageList();
@ -254,7 +264,7 @@ var gLanguagesDialog = {
this._selectedItemID = selectedItem.id;
// Update the preference and force a UI rebuild
var preference = document.getElementById("intl.accept_languages");
var preference = Preferences.get("intl.accept_languages");
preference.value = string;
},
@ -277,7 +287,7 @@ var gLanguagesDialog = {
this._selectedItemID = selectedItem.id;
// Update the preference and force a UI rebuild
var preference = document.getElementById("intl.accept_languages");
var preference = Preferences.get("intl.accept_languages");
preference.value = string;
},
@ -335,4 +345,3 @@ var gLanguagesDialog = {
return document.getElementById("spoofEnglish").checked ? 2 : 1;
}
};

Просмотреть файл

@ -1,51 +1,47 @@
<?xml version="1.0"?>
# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
# 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/.
<!-- -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- -->
<!-- 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/. -->
<!DOCTYPE prefwindow SYSTEM "chrome://browser/locale/preferences/languages.dtd">
<!DOCTYPE dialog [
<!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
%preferencesDTD;
<!ENTITY % languagesDTD SYSTEM "chrome://browser/locale/preferences/languages.dtd">
%languagesDTD;
]>
<?xml-stylesheet href="chrome://global/skin/"?>
#ifdef XP_MACOSX
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
#endif
<prefwindow id="LanguagesDialog" type="child"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&languages.customize.Header;"
dlgbuttons="accept,cancel,help"
ondialoghelp="openPrefsHelp()"
style="width: &window.width;"
# hack around XUL bug 1194844 by triggering extra reflow (see bug 1194346):
onfocus="gLanguagesDialog.forceReflow()"
onresize="gLanguagesDialog.forceReflow()">
<dialog id="LanguagesDialog" type="child" class="prefwindow"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&languages.customize.Header;"
buttons="accept,cancel,help"
persist="lastSelected screenX screenY"
closebuttonlabel="&preferencesCloseButton.label;"
closebuttonaccesskey="&preferencesCloseButton.accesskey;"
role="dialog"
onload="gLanguagesDialog.init();"
helpTopic="prefs-languages"
ondialoghelp="openPrefsHelp()"
style="width: &window.width;"
onfocus="gLanguagesDialog.forceReflow()"
onresize="gLanguagesDialog.forceReflow()">
<!-- The onfocus and onresize handlers above hack around XUL bug 1194844
- by triggering extra reflow (see bug 1194346). -->
<script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript" src="chrome://browser/content/preferences/languages.js"/>
<prefpane id="LanguagesDialogPane"
class="largeDialogContainer"
onpaneload="gLanguagesDialog.init();"
helpTopic="prefs-languages">
<keyset>
<key key="&windowClose.key;" modifiers="accel" oncommand="Preferences.close(event)"/>
</keyset>
<preferences>
<preference id="intl.accept_languages" name="intl.accept_languages" type="wstring"/>
<preference id="pref.browser.language.disable_button.up"
name="pref.browser.language.disable_button.up"
type="bool"/>
<preference id="pref.browser.language.disable_button.down"
name="pref.browser.language.disable_button.down"
type="bool"/>
<preference id="pref.browser.language.disable_button.remove"
name="pref.browser.language.disable_button.remove"
type="bool"/>
<preference id="privacy.spoof_english"
name="privacy.spoof_english"
type="int"/>
</preferences>
<script type="application/javascript" src="chrome://browser/content/preferences/languages.js"/>
<vbox id="LanguagesDialogPane" class="prefpane largeDialogContainer">
<stringbundleset id="languageSet">
<stringbundle id="bundleRegions" src="chrome://global/locale/regionNames.properties"/>
@ -107,6 +103,5 @@
</grid>
<separator/>
<separator/>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -3,14 +3,29 @@
* 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/. */
/* import-globals-from ../../../toolkit/content/preferencesBindings.js */
Preferences.addAll([
{ id: "privacy.clearOnShutdown.history", type: "bool" },
{ id: "privacy.clearOnShutdown.formdata", type: "bool" },
{ id: "privacy.clearOnShutdown.downloads", type: "bool" },
{ id: "privacy.clearOnShutdown.cookies", type: "bool" },
{ id: "privacy.clearOnShutdown.cache", type: "bool" },
{ id: "privacy.clearOnShutdown.offlineApps", type: "bool" },
{ id: "privacy.clearOnShutdown.sessions", type: "bool" },
{ id: "privacy.clearOnShutdown.siteSettings", type: "bool" },
]);
var gSanitizeDialog = Object.freeze({
init() {
this.onClearHistoryChanged();
Preferences.get("privacy.clearOnShutdown.history").on("change", this.onClearHistoryChanged.bind(this));
},
onClearHistoryChanged() {
let downloadsPref = document.getElementById("privacy.clearOnShutdown.downloads");
let historyPref = document.getElementById("privacy.clearOnShutdown.history");
let downloadsPref = Preferences.get("privacy.clearOnShutdown.downloads");
let historyPref = Preferences.get("privacy.clearOnShutdown.history");
downloadsPref.value = historyPref.value;
}
});

Просмотреть файл

@ -6,40 +6,40 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<?xml-stylesheet href="chrome://global/skin/"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css" type="text/css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
<!DOCTYPE dialog [
<!ENTITY % preferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
%preferencesDTD;
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd">
<!ENTITY % sanitizeDTD SYSTEM "chrome://browser/locale/sanitize.dtd">
%brandDTD;
<!ENTITY % sanitizeDTD SYSTEM "chrome://browser/locale/sanitize.dtd">
%sanitizeDTD;
]>
<prefwindow id="SanitizeDialog" type="child"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
dlgbuttons="accept,cancel,help"
ondialoghelp="openPrefsHelp()"
style="width: &sanitizePrefs2.modal.width;"
title="&sanitizePrefs2.title;"
onload="gSanitizeDialog.init();">
<dialog id="SanitizeDialog" type="child" class="prefwindow"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
buttons="accept,cancel,help"
persist="lastSelected screenX screenY"
closebuttonlabel="&preferencesCloseButton.label;"
closebuttonaccesskey="&preferencesCloseButton.accesskey;"
role="dialog"
ondialoghelp="openPrefsHelp()"
style="width: &sanitizePrefs2.modal.width;"
title="&sanitizePrefs2.title;"
helpTopic="prefs-clear-private-data"
onload="gSanitizeDialog.init();">
<script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
<script type="application/javascript" src="chrome://browser/content/preferences/sanitize.js"/>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<prefpane id="SanitizeDialogPane"
helpTopic="prefs-clear-private-data">
<keyset>
<key key="&windowClose.key;" modifiers="accel" oncommand="Preferences.close(event)"/>
</keyset>
<preferences>
<preference id="privacy.clearOnShutdown.history" name="privacy.clearOnShutdown.history" type="bool"
onchange="return gSanitizeDialog.onClearHistoryChanged();"/>
<preference id="privacy.clearOnShutdown.formdata" name="privacy.clearOnShutdown.formdata" type="bool"/>
<preference id="privacy.clearOnShutdown.downloads" name="privacy.clearOnShutdown.downloads" type="bool"/>
<preference id="privacy.clearOnShutdown.cookies" name="privacy.clearOnShutdown.cookies" type="bool"/>
<preference id="privacy.clearOnShutdown.cache" name="privacy.clearOnShutdown.cache" type="bool"/>
<preference id="privacy.clearOnShutdown.offlineApps" name="privacy.clearOnShutdown.offlineApps" type="bool"/>
<preference id="privacy.clearOnShutdown.sessions" name="privacy.clearOnShutdown.sessions" type="bool"/>
<preference id="privacy.clearOnShutdown.siteSettings" name="privacy.clearOnShutdown.siteSettings" type="bool"/>
</preferences>
<vbox id="SanitizeDialogPane" class="prefpane">
<script type="application/javascript" src="chrome://browser/content/preferences/sanitize.js"/>
<description>&clearDataSettings3.label;</description>
@ -94,5 +94,5 @@
</rows>
</grid>
</groupbox>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -120,18 +120,17 @@ this.ShieldPreferences = {
viewStudies.classList.add("learnMore", "text-link");
hContainer.appendChild(viewStudies);
// <prefrence> elements for prefs that we need to monitor while the page is open.
const optOutPref = doc.createElementNS(XUL_NS, "preference");
optOutPref.setAttribute("id", OPT_OUT_STUDIES_ENABLED_PREF);
optOutPref.setAttribute("name", OPT_OUT_STUDIES_ENABLED_PREF);
optOutPref.setAttribute("type", "bool");
// Preference instances for prefs that we need to monitor while the page is open.
doc.defaultView.Preferences.add({ id: OPT_OUT_STUDIES_ENABLED_PREF, type: "bool" });
// Weirdly, FHR doesn't have a <preference> element on the page, so we create it.
const fhrPref = doc.createElementNS(XUL_NS, "preference");
fhrPref.setAttribute("id", FHR_UPLOAD_ENABLED_PREF);
fhrPref.setAttribute("name", FHR_UPLOAD_ENABLED_PREF);
fhrPref.setAttribute("type", "bool");
fhrPref.addEventListener("change", function(event) {
const fhrPref = doc.defaultView.Preferences.add({ id: FHR_UPLOAD_ENABLED_PREF, type: "bool" });
fhrPref.on("change", function(event) {
// Avoid reference to the document directly, to avoid leaks.
const eventTargetCheckbox = event.target.ownerDocument.getElementById("optOutStudiesEnabled");
eventTargetCheckbox.disabled = !Services.prefs.getBoolPref(FHR_UPLOAD_ENABLED_PREF);
@ -140,9 +139,5 @@ this.ShieldPreferences = {
// Actually inject the elements we've created.
const parent = doc.getElementById("submitHealthReportBox").closest("vbox");
parent.appendChild(container);
const preferences = doc.getElementById("privacyPreferences");
preferences.appendChild(optOutPref);
preferences.appendChild(fhrPref);
},
};

Просмотреть файл

@ -5,6 +5,33 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* Pref Window & Pane */
.prefwindow {
padding: 0px;
}
.prefwindow[type="child"] {
padding: 8px;
}
.prefpane {
padding: 8px;
}
.prefwindow[type="child"] > .prefpane {
padding: 0px;
}
.dialog-button-box {
padding-bottom: 8px;
padding-inline-start: 8px;
padding-inline-end: 8px;
}
.prefwindow[type="child"] .dialog-button-box {
padding: 0px;
}
/* General Pane */
#useFirefoxSync,
#getStarted {
@ -23,7 +50,7 @@
/* Modeless Window Dialogs */
.windowDialog,
.windowDialog prefpane {
.windowDialog .prefpane {
padding: 0px;
}

Просмотреть файл

@ -99,7 +99,7 @@
/* Align the last dialog button with the end of the warning box */
.prefWindow-dlgbuttons {
.dialog-button-box {
margin-inline-end: 0;
}
.dialog-button[dlgtype="accept"] {

Просмотреть файл

@ -4,7 +4,7 @@
%include ../../../shared/incontentprefs/dialog.inc.css
prefwindow,
.prefwindow,
.windowDialog {
font: message-box !important;
}
@ -12,7 +12,3 @@ prefwindow,
:root > * {
font-size: 1.18em;
}
.prefWindow-dlgbuttons {
margin: 0;
}

Просмотреть файл

@ -12,12 +12,40 @@
font: -moz-dialog;
}
/* ----- APPLICATIONS PREFPANE ----- */
.prefwindow {
padding: 0;
font: -moz-dialog !important;
}
.prefwindow[type="child"] {
padding-top: 18px;
padding-bottom: 15px;
padding-inline-start: 18px;
padding-inline-end: 20px;
}
.dialog-button-box {
margin: 0 12px 12px;
padding-top: 0 !important;
}
description {
margin-bottom: 4px !important;
}
prefpane .groupbox-body {
.prefpane {
padding-top: 12px;
padding-bottom: 12px;
padding-inline-start: 0;
padding-inline-end: 12px;
}
.prefwindow[type="child"] > .prefpane {
padding: 0;
}
.prefpane .groupbox-body,
.prefpane .groupbox-body {
-moz-appearance: none;
padding: 8px 4px 4px 4px;
}

Просмотреть файл

@ -83,7 +83,7 @@
/* Align the last dialog button with the end of the warning box */
.prefWindow-dlgbuttons {
.dialog-button-box {
margin-inline-end: 0;
}
.dialog-button[dlgtype="accept"] {

Просмотреть файл

@ -6,8 +6,7 @@
dialog,
window,
prefpane,
prefwindow,
.prefpane,
.windowDialog {
-moz-appearance: none;
background-color: #fbfbfb;
@ -57,7 +56,7 @@ groupbox {
padding-bottom: 5px;
}
prefpane .groupbox-body {
.prefpane .groupbox-body {
padding: 0 0 5px;
}

Просмотреть файл

@ -28,7 +28,12 @@
padding: 0;
}
prefpane > groupbox + groupbox {
.prefwindow[type="child"] > .prefpane {
-moz-box-flex: 1;
overflow: -moz-hidden-unscrollable;
}
.prefpane > groupbox + groupbox {
margin-top: 16px;
}

Просмотреть файл

@ -5,6 +5,39 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
/* Pref Window & Pane */
.prefwindow {
padding: 0px;
}
.prefwindow[type="child"] {
padding-top: 8px;
padding-bottom: 10px;
padding-inline-start: 8px;
padding-inline-end: 10px;
}
.prefpane {
padding-top: 8px;
padding-bottom: 10px;
padding-inline-start: 8px;
padding-inline-end: 10px;
}
.prefwindow[type="child"] > .prefpane {
padding: 0px;
}
.dialog-button-box {
padding-bottom: 10px;
padding-inline-start: 8px;
padding-inline-end: 10px;
}
.prefwindow[type="child"] .dialog-button-box {
padding: 0px;
}
/* General Pane */
#useFirefoxSync,
@ -23,8 +56,7 @@
}
/* Modeless Window Dialogs */
.windowDialog,
.windowDialog prefpane {
.windowDialog {
padding: 0;
}

Просмотреть файл

@ -85,7 +85,7 @@
/* Align the last dialog button with the end of the warning box */
.prefWindow-dlgbuttons {
.dialog-button-box {
margin-inline-end: 0;
}
.dialog-button[dlgtype="cancel"] {

Просмотреть файл

@ -82,7 +82,7 @@ class TestAnonymousNodes(WindowManagerMixin, MarionetteTestCase):
def test_find_anonymous_children(self):
self.assertEquals(HTMLElement, type(self.marionette.find_element(By.ANON, None)))
self.assertEquals(2, len(self.marionette.find_elements(By.ANON, None)))
self.assertEquals(3, len(self.marionette.find_elements(By.ANON, None)))
frame = self.marionette.find_element(By.ID, "framebox")
with self.assertRaises(NoSuchElementException):

Просмотреть файл

@ -53,6 +53,7 @@ toolkit.jar:
content/global/filepicker.properties
content/global/globalOverlay.js
content/global/mozilla.xhtml
content/global/preferencesBindings.js
content/global/process-content.js
content/global/resetProfile.css
content/global/resetProfile.js
@ -87,7 +88,6 @@ toolkit.jar:
content/global/bindings/notification.xml (widgets/notification.xml)
content/global/bindings/numberbox.xml (widgets/numberbox.xml)
content/global/bindings/popup.xml (widgets/popup.xml)
* content/global/bindings/preferences.xml (widgets/preferences.xml)
content/global/bindings/progressmeter.xml (widgets/progressmeter.xml)
content/global/bindings/radio.xml (widgets/radio.xml)
content/global/bindings/remote-browser.xml (widgets/remote-browser.xml)

Просмотреть файл

@ -0,0 +1,615 @@
/* - 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/. */
"use strict";
// We attach Preferences to the window object so other contexts (tests, JSMs)
// have access to it.
const Preferences = window.Preferences = (function() {
const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
Cu.import("resource://gre/modules/EventEmitter.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "DeferredTask",
"resource://gre/modules/DeferredTask.jsm");
function getElementsByAttribute(name, value) {
// If we needed to defend against arbitrary values, we would escape
// double quotes (") and escape characters (\) in them, i.e.:
// ${value.replace(/["\\]/g, '\\$&')}
return value ? document.querySelectorAll(`[${name}="${value}"]`)
: document.querySelectorAll(`[${name}]`);
}
const domContentLoadedPromise = new Promise(resolve => {
window.addEventListener("DOMContentLoaded", resolve, { capture: true, once: true });
});
const Preferences = {
_all: {},
_add(prefInfo) {
if (this._all[prefInfo.id]) {
throw new Error(`preference with id '${prefInfo.id}' already added`);
}
const pref = new Preference(prefInfo);
this._all[pref.id] = pref;
domContentLoadedPromise.then(() => { pref.updateElements(); });
return pref;
},
add(prefInfo) {
const pref = this._add(prefInfo);
return pref;
},
addAll(prefInfos) {
prefInfos.map(prefInfo => this._add(prefInfo));
},
get(id) {
return this._all[id] || null;
},
getAll() {
return Object.values(this._all);
},
defaultBranch: Services.prefs.getDefaultBranch(""),
get type() {
return document.documentElement.getAttribute("type") || "";
},
get instantApply() {
// The about:preferences page forces instantApply.
if (this._instantApplyForceEnabled) {
return true;
}
// Dialogs of type="child" are never instantApply.
if (this.type === "child") {
return false;
}
// All other pref windows observe the value of the instantApply
// preference. Note that, as of this writing, the only such windows
// are in tests, so it should be possible to remove the pref
// (and forceEnableInstantApply) in favor of always applying in a parent
// and never applying in a child.
return Services.prefs.getBoolPref("browser.preferences.instantApply");
},
_instantApplyForceEnabled: false,
// Override the computed value of instantApply for this window.
forceEnableInstantApply() {
this._instantApplyForceEnabled = true;
},
observe(subject, topic, data) {
const pref = this._all[data];
if (pref) {
pref.value = pref.valueFromPreferences;
}
},
onDOMContentLoaded() {
// Iterate elements with a "preference" attribute and log an error
// if there isn't a corresponding Preference object in order to catch
// any cases of elements referencing preferences that haven't (yet?)
// been registered.
//
// TODO: remove this code once we determine that there are no such
// elements (or resolve any bugs that cause this behavior).
//
const elements = getElementsByAttribute("preference");
for (const element of elements) {
const id = element.getAttribute("preference");
const pref = this.get(id);
if (!pref) {
console.error(`Missing preference for ID ${id}`);
}
}
},
onUnload() {
Services.prefs.removeObserver("", this);
},
QueryInterface: XPCOMUtils.generateQI([
Ci.nsITimerCallback,
Ci.nsIObserver,
]),
_deferredValueUpdateElements: new Set(),
writePreferences(aFlushToDisk) {
// Write all values to preferences.
if (this._deferredValueUpdateElements.size) {
this._finalizeDeferredElements();
}
const preferences = Preferences.getAll();
for (const preference of preferences) {
preference.batching = true;
preference.valueFromPreferences = preference.value;
preference.batching = false;
}
if (aFlushToDisk) {
Services.prefs.savePrefFile(null);
}
},
getPreferenceElement(aStartElement) {
let temp = aStartElement;
while (temp && temp.nodeType == Node.ELEMENT_NODE &&
!temp.hasAttribute("preference"))
temp = temp.parentNode;
return temp && temp.nodeType == Node.ELEMENT_NODE ?
temp : aStartElement;
},
_deferredValueUpdate(aElement) {
delete aElement._deferredValueUpdateTask;
const prefID = aElement.getAttribute("preference");
const preference = Preferences.get(prefID);
const prefVal = preference.getElementValue(aElement);
preference.value = prefVal;
this._deferredValueUpdateElements.delete(aElement);
},
_finalizeDeferredElements() {
for (const el of this._deferredValueUpdateElements) {
if (el._deferredValueUpdateTask) {
el._deferredValueUpdateTask.finalize();
}
}
},
userChangedValue(aElement) {
const element = this.getPreferenceElement(aElement);
if (element.hasAttribute("preference")) {
if (element.getAttribute("delayprefsave") != "true") {
const preference = Preferences.get(element.getAttribute("preference"));
const prefVal = preference.getElementValue(element);
preference.value = prefVal;
} else {
if (!element._deferredValueUpdateTask) {
element._deferredValueUpdateTask =
new DeferredTask(this._deferredValueUpdate.bind(this, element), 1000);
this._deferredValueUpdateElements.add(element);
} else {
// Each time the preference is changed, restart the delay.
element._deferredValueUpdateTask.disarm();
}
element._deferredValueUpdateTask.arm();
}
}
},
onCommand(event) {
// This "command" event handler tracks changes made to preferences by
// the user in this window.
if (event.sourceEvent)
event = event.sourceEvent;
this.userChangedValue(event.target);
},
onSelect(event) {
// This "select" event handler tracks changes made to colorpicker
// preferences by the user in this window.
if (event.target.localName == "colorpicker")
this.userChangedValue(event.target);
},
onChange(event) {
// This "change" event handler tracks changes made to preferences by
// the user in this window.
this.userChangedValue(event.target);
},
onInput(event) {
// This "input" event handler tracks changes made to preferences by
// the user in this window.
this.userChangedValue(event.target);
},
_fireEvent(aEventName, aTarget) {
// Panel loaded, synthesize a load event.
try {
const event = document.createEvent("Events");
event.initEvent(aEventName, true, true);
let cancel = !aTarget.dispatchEvent(event);
if (aTarget.hasAttribute("on" + aEventName)) {
const fn = new Function("event", aTarget.getAttribute("on" + aEventName));
const rv = fn.call(aTarget, event);
if (rv == false)
cancel = true;
}
return !cancel;
} catch (e) {
Cu.reportError(e);
}
return false;
},
onDialogAccept(event) {
if (!this._fireEvent("beforeaccept", document.documentElement)) {
event.preventDefault();
return false;
}
this.writePreferences(true);
return true;
},
close(event) {
if (Preferences.instantApply)
window.close();
event.stopPropagation();
event.preventDefault();
},
handleEvent(event) {
switch (event.type) {
case "change": return this.onChange(event);
case "command": return this.onCommand(event);
case "dialogaccept": return this.onDialogAccept(event);
case "input": return this.onInput(event);
case "select": return this.onSelect(event);
case "unload": return this.onUnload(event);
default: return undefined;
}
},
};
Services.prefs.addObserver("", Preferences);
domContentLoadedPromise.then(result => Preferences.onDOMContentLoaded(result));
window.addEventListener("change", Preferences);
window.addEventListener("command", Preferences);
window.addEventListener("dialogaccept", Preferences);
window.addEventListener("input", Preferences);
window.addEventListener("select", Preferences);
window.addEventListener("unload", Preferences, { once: true });
class Preference extends EventEmitter {
constructor({ id, name, type, inverted, disabled }) {
super();
this.on("change", this.onChange.bind(this));
this._value = null;
this.readonly = false;
this._useDefault = false;
this.batching = false;
this.id = id;
this._name = name || this.id;
this.type = type;
this.inverted = !!inverted;
this._disabled = !!disabled;
// if the element has been inserted without the name attribute set,
// we have nothing to do here
if (!this.name) {
throw new Error(`preference with id '${id}' doesn't have name`);
}
// In non-instant apply mode, we must try and use the last saved state
// from any previous opens of a child dialog instead of the value from
// preferences, to pick up any edits a user may have made.
if (Preferences.type == "child" && window.opener &&
Services.scriptSecurityManager.isSystemPrincipal(window.opener.document.nodePrincipal)) {
// Try to find the preference in the parent window.
const preference = window.opener.Preferences.get(this.name);
// Don't use the value setter here, we don't want updateElements to be
// prematurely fired.
this._value = preference ? preference.value : this.valueFromPreferences;
} else
this._value = this.valueFromPreferences;
}
reset() {
// defer reset until preference update
this.value = undefined;
}
_reportUnknownType() {
const msg = `Preference with id=${this.id} and name=${this.name} has unknown type ${this.type}.`;
Services.console.logStringMessage(msg);
}
setElementValue(aElement) {
if (this.locked)
aElement.disabled = true;
if (!this.isElementEditable(aElement))
return;
let rv = undefined;
if (aElement.hasAttribute("onsyncfrompreference")) {
// Value changed, synthesize an event
try {
const event = document.createEvent("Events");
event.initEvent("syncfrompreference", true, true);
const f = new Function("event",
aElement.getAttribute("onsyncfrompreference"));
rv = f.call(aElement, event);
} catch (e) {
Cu.reportError(e);
}
}
let val = rv;
if (val === undefined)
val = Preferences.instantApply ? this.valueFromPreferences : this.value;
// if the preference is marked for reset, show default value in UI
if (val === undefined)
val = this.defaultValue;
/**
* Initialize a UI element property with a value. Handles the case
* where an element has not yet had a XBL binding attached for it and
* the property setter does not yet exist by setting the same attribute
* on the XUL element using DOM apis and assuming the element's
* constructor or property getters appropriately handle this state.
*/
function setValue(element, attribute, value) {
if (attribute in element)
element[attribute] = value;
else
element.setAttribute(attribute, value);
}
if (aElement.localName == "checkbox" ||
aElement.localName == "listitem")
setValue(aElement, "checked", val);
else if (aElement.localName == "colorpicker")
setValue(aElement, "color", val);
else if (aElement.localName == "textbox") {
// XXXmano Bug 303998: Avoid a caret placement issue if either the
// preference observer or its setter calls updateElements as a result
// of the input event handler.
if (aElement.value !== val)
setValue(aElement, "value", val);
} else
setValue(aElement, "value", val);
}
getElementValue(aElement) {
if (aElement.hasAttribute("onsynctopreference")) {
// Value changed, synthesize an event
try {
const event = document.createEvent("Events");
event.initEvent("synctopreference", true, true);
const f = new Function("event",
aElement.getAttribute("onsynctopreference"));
const rv = f.call(aElement, event);
if (rv !== undefined)
return rv;
} catch (e) {
Cu.reportError(e);
}
}
/**
* Read the value of an attribute from an element, assuming the
* attribute is a property on the element's node API. If the property
* is not present in the API, then assume its value is contained in
* an attribute, as is the case before a binding has been attached.
*/
function getValue(element, attribute) {
if (attribute in element)
return element[attribute];
return element.getAttribute(attribute);
}
let value;
if (aElement.localName == "checkbox" ||
aElement.localName == "listitem")
value = getValue(aElement, "checked");
else if (aElement.localName == "colorpicker")
value = getValue(aElement, "color");
else
value = getValue(aElement, "value");
switch (this.type) {
case "int":
return parseInt(value, 10) || 0;
case "bool":
return typeof(value) == "boolean" ? value : value == "true";
}
return value;
}
isElementEditable(aElement) {
switch (aElement.localName) {
case "checkbox":
case "colorpicker":
case "radiogroup":
case "textbox":
case "listitem":
case "listbox":
case "menulist":
return true;
}
return aElement.getAttribute("preference-editable") == "true";
}
updateElements() {
if (!this.id)
return;
// This "change" event handler tracks changes made to preferences by
// sources other than the user in this window.
const elements = getElementsByAttribute("preference", this.id);
for (const element of elements)
this.setElementValue(element);
}
onChange() {
this.updateElements();
}
get name() {
return this._name;
}
set name(val) {
if (val == this.name)
return val;
this._name = val;
return val;
}
get value() {
return this._value;
}
set value(val) {
if (this.value !== val) {
this._value = val;
if (Preferences.instantApply)
this.valueFromPreferences = val;
this.emit("change");
}
return val;
}
get locked() {
return Services.prefs.prefIsLocked(this.name);
}
get disabled() {
return this._disabled;
}
set disabled(val) {
this._disabled = !!val;
if (!this.id)
return val;
const elements = getElementsByAttribute("preference", this.id);
for (const element of elements) {
element.disabled = val;
const labels = getElementsByAttribute("control", element.id);
for (const label of labels)
label.disabled = val;
}
return val;
}
get hasUserValue() {
return Services.prefs.prefHasUserValue(this.name) &&
this.value !== undefined;
}
get defaultValue() {
this._useDefault = true;
const val = this.valueFromPreferences;
this._useDefault = false;
return val;
}
get _branch() {
return this._useDefault ? Preferences.defaultBranch : Services.prefs;
}
get valueFromPreferences() {
try {
// Force a resync of value with preferences.
switch (this.type) {
case "int":
return this._branch.getIntPref(this.name);
case "bool": {
const val = this._branch.getBoolPref(this.name);
return this.inverted ? !val : val;
}
case "wstring":
return this._branch
.getComplexValue(this.name, Ci.nsIPrefLocalizedString)
.data;
case "string":
case "unichar":
return this._branch.getStringPref(this.name);
case "fontname": {
const family = this._branch.getStringPref(this.name);
const fontEnumerator = Cc["@mozilla.org/gfx/fontenumerator;1"]
.createInstance(Ci.nsIFontEnumerator);
return fontEnumerator.getStandardFamilyName(family);
}
case "file": {
const f = this._branch
.getComplexValue(this.name, Ci.nsIFile);
return f;
}
default:
this._reportUnknownType();
}
} catch (e) { }
return null;
}
set valueFromPreferences(val) {
// Exit early if nothing to do.
if (this.readonly || this.valueFromPreferences == val)
return val;
// The special value undefined means 'reset preference to default'.
if (val === undefined) {
Services.prefs.clearUserPref(this.name);
return val;
}
// Force a resync of preferences with value.
switch (this.type) {
case "int":
Services.prefs.setIntPref(this.name, val);
break;
case "bool":
Services.prefs.setBoolPref(this.name, this.inverted ? !val : val);
break;
case "wstring": {
const pls = Cc["@mozilla.org/pref-localizedstring;1"]
.createInstance(Ci.nsIPrefLocalizedString);
pls.data = val;
Services.prefs
.setComplexValue(this.name, Ci.nsIPrefLocalizedString, pls);
break;
}
case "string":
case "unichar":
case "fontname":
Services.prefs.setStringPref(this.name, val);
break;
case "file": {
let lf;
if (typeof(val) == "string") {
lf = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
lf.persistentDescriptor = val;
if (!lf.exists())
lf.initWithPath(val);
} else
lf = val.QueryInterface(Ci.nsIFile);
Services.prefs
.setComplexValue(this.name, Ci.nsIFile, lf);
break;
}
default:
this._reportUnknownType();
}
if (!this.batching) {
Services.prefs.savePrefFile(null);
}
return val;
}
}
return Preferences;
}.bind({})());

Просмотреть файл

@ -4,7 +4,7 @@
- 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/. -->
<!DOCTYPE prefwindow [
<!DOCTYPE dialog [
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
%brandDTD;
<!ENTITY % resetProfileDTD SYSTEM "chrome://global/locale/resetProfile.dtd" >

Просмотреть файл

@ -128,28 +128,33 @@
return aPrefWindow.document.getElementById(aID);
}
function GetPreference(aPrefWindow, aID)
{
return aPrefWindow.Preferences.get(aID);
}
function WritePrefsToPreferences(aPrefWindow, aPrefValueSet)
{
// write preference data into <preference>s
GetXULElement(aPrefWindow, "tests.static_preference_int" ).value = aPrefValueSet.int;
GetXULElement(aPrefWindow, "tests.static_preference_bool" ).value = aPrefValueSet.bool;
GetXULElement(aPrefWindow, "tests.static_preference_string" ).value = aPrefValueSet.string;
GetXULElement(aPrefWindow, "tests.static_preference_unichar").value = aPrefValueSet.unichar;
GetXULElement(aPrefWindow, "tests.static_preference_wstring").value = aPrefValueSet.wstring_data;
GetXULElement(aPrefWindow, "tests.static_preference_file" ).value = aPrefValueSet.file_data;
// write preference data into Preference instances
GetPreference(aPrefWindow, "tests.static_preference_int" ).value = aPrefValueSet.int;
GetPreference(aPrefWindow, "tests.static_preference_bool" ).value = aPrefValueSet.bool;
GetPreference(aPrefWindow, "tests.static_preference_string" ).value = aPrefValueSet.string;
GetPreference(aPrefWindow, "tests.static_preference_unichar").value = aPrefValueSet.unichar;
GetPreference(aPrefWindow, "tests.static_preference_wstring").value = aPrefValueSet.wstring_data;
GetPreference(aPrefWindow, "tests.static_preference_file" ).value = aPrefValueSet.file_data;
}
function ReadPrefsFromPreferences(aPrefWindow)
{
// read preference data from <preference>s
// read preference data from Preference instances
var result =
{
int: GetXULElement(aPrefWindow, "tests.static_preference_int" ).value,
bool: GetXULElement(aPrefWindow, "tests.static_preference_bool" ).value,
string: GetXULElement(aPrefWindow, "tests.static_preference_string" ).value,
unichar: GetXULElement(aPrefWindow, "tests.static_preference_unichar").value,
wstring_data: GetXULElement(aPrefWindow, "tests.static_preference_wstring").value,
file_data: GetXULElement(aPrefWindow, "tests.static_preference_file" ).value,
int: GetPreference(aPrefWindow, "tests.static_preference_int" ).value,
bool: GetPreference(aPrefWindow, "tests.static_preference_bool" ).value,
string: GetPreference(aPrefWindow, "tests.static_preference_string" ).value,
unichar: GetPreference(aPrefWindow, "tests.static_preference_unichar").value,
wstring_data: GetPreference(aPrefWindow, "tests.static_preference_wstring").value,
file_data: GetPreference(aPrefWindow, "tests.static_preference_file" ).value,
wstring: Components.classes["@mozilla.org/pref-localizedstring;1"]
.createInstance(Components.interfaces.nsIPrefLocalizedString),
file: Components.classes["@mozilla.org/file/local;1"]
@ -173,7 +178,7 @@
function ReadPrefsFromUI(aPrefWindow)
{
// read preference data from <preference>s
// read preference data from Preference instances
var result =
{
int: GetXULElement(aPrefWindow, "static_element_int" ).value,
@ -197,7 +202,7 @@
{
// remark: there's currently no UI element binding for files
// were all <preferences> correctly initialized?
// were all Preference instances correctly initialized?
var expected = kPrefValueSet1;
var found = ReadPrefsFromPreferences(aPrefWindow);
ok(found.int === expected.int, "instant pref init int" );
@ -220,7 +225,7 @@
expected = kPrefValueSet2;
WritePrefsToUI(aPrefWindow, expected);
// UI changes should get passed to the <preference>s,
// UI changes should get passed to the Preference instances,
// but currently they aren't if the changes are made programmatically
// (the handlers preference.change/prefpane.input and prefpane.change
// are called for manual changes, though).
@ -243,12 +248,12 @@
todo(found.file_data === expected.file_data, "instant change element file" );
// try resetting the prefs to default values (which should be empty here)
GetXULElement(aPrefWindow, "tests.static_preference_int" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_bool" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_string" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_unichar").reset();
GetXULElement(aPrefWindow, "tests.static_preference_wstring").reset();
GetXULElement(aPrefWindow, "tests.static_preference_file" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_int" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_bool" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_string" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_unichar").reset();
GetPreference(aPrefWindow, "tests.static_preference_wstring").reset();
GetPreference(aPrefWindow, "tests.static_preference_file" ).reset();
// check system
expected = CreateEmptyPrefValueSet();
@ -283,12 +288,12 @@
// ok(found.file_data === expected.file_data, "instant reset element file" );
// check hasUserValue
ok(GetXULElement(aPrefWindow, "tests.static_preference_int" ).hasUserValue === false, "instant reset hasUserValue int" );
ok(GetXULElement(aPrefWindow, "tests.static_preference_bool" ).hasUserValue === false, "instant reset hasUserValue bool" );
ok(GetXULElement(aPrefWindow, "tests.static_preference_string" ).hasUserValue === false, "instant reset hasUserValue string" );
ok(GetXULElement(aPrefWindow, "tests.static_preference_unichar").hasUserValue === false, "instant reset hasUserValue unichar");
ok(GetXULElement(aPrefWindow, "tests.static_preference_wstring").hasUserValue === false, "instant reset hasUserValue wstring");
ok(GetXULElement(aPrefWindow, "tests.static_preference_file" ).hasUserValue === false, "instant reset hasUserValue file" );
ok(GetPreference(aPrefWindow, "tests.static_preference_int" ).hasUserValue === false, "instant reset hasUserValue int" );
ok(GetPreference(aPrefWindow, "tests.static_preference_bool" ).hasUserValue === false, "instant reset hasUserValue bool" );
ok(GetPreference(aPrefWindow, "tests.static_preference_string" ).hasUserValue === false, "instant reset hasUserValue string" );
ok(GetPreference(aPrefWindow, "tests.static_preference_unichar").hasUserValue === false, "instant reset hasUserValue unichar");
ok(GetPreference(aPrefWindow, "tests.static_preference_wstring").hasUserValue === false, "instant reset hasUserValue wstring");
ok(GetPreference(aPrefWindow, "tests.static_preference_file" ).hasUserValue === false, "instant reset hasUserValue file" );
// done with instant apply checks
}
@ -301,7 +306,7 @@
// remark: there's currently no UI element binding for files
// were all <preferences> correctly initialized?
// were all Preference instances correctly initialized?
var expected = kPrefValueSet1;
var found = ReadPrefsFromPreferences(aPrefWindow);
ok(found.int === expected.int, "non-instant pref init int" );
@ -324,7 +329,7 @@
expected = kPrefValueSet2;
WritePrefsToUI(aPrefWindow, expected);
// UI changes should get passed to the <preference>s,
// UI changes should get passed to the Preference instances,
// but currently they aren't if the changes are made programmatically
// (the handlers preference.change/prefpane.input and prefpane.change
// are called for manual changes, though).
@ -348,12 +353,12 @@
todo(found.file_data === expected.file_data, "non-instant change element file" );
// try resetting the prefs to default values (which should be empty here)
GetXULElement(aPrefWindow, "tests.static_preference_int" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_bool" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_string" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_unichar").reset();
GetXULElement(aPrefWindow, "tests.static_preference_wstring").reset();
GetXULElement(aPrefWindow, "tests.static_preference_file" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_int" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_bool" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_string" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_unichar").reset();
GetPreference(aPrefWindow, "tests.static_preference_wstring").reset();
GetPreference(aPrefWindow, "tests.static_preference_file" ).reset();
// check system: the current values *MUST NOT* change
expected = kPrefValueSet1;
@ -388,12 +393,12 @@
// ok(found.file_data === expected.file_data, "non-instant reset element file" );
// check hasUserValue
ok(GetXULElement(aPrefWindow, "tests.static_preference_int" ).hasUserValue === false, "non-instant reset hasUserValue int" );
ok(GetXULElement(aPrefWindow, "tests.static_preference_bool" ).hasUserValue === false, "non-instant reset hasUserValue bool" );
ok(GetXULElement(aPrefWindow, "tests.static_preference_string" ).hasUserValue === false, "non-instant reset hasUserValue string" );
ok(GetXULElement(aPrefWindow, "tests.static_preference_unichar").hasUserValue === false, "non-instant reset hasUserValue unichar");
ok(GetXULElement(aPrefWindow, "tests.static_preference_wstring").hasUserValue === false, "non-instant reset hasUserValue wstring");
ok(GetXULElement(aPrefWindow, "tests.static_preference_file" ).hasUserValue === false, "non-instant reset hasUserValue file" );
ok(GetPreference(aPrefWindow, "tests.static_preference_int" ).hasUserValue === false, "non-instant reset hasUserValue int" );
ok(GetPreference(aPrefWindow, "tests.static_preference_bool" ).hasUserValue === false, "non-instant reset hasUserValue bool" );
ok(GetPreference(aPrefWindow, "tests.static_preference_string" ).hasUserValue === false, "non-instant reset hasUserValue string" );
ok(GetPreference(aPrefWindow, "tests.static_preference_unichar").hasUserValue === false, "non-instant reset hasUserValue unichar");
ok(GetPreference(aPrefWindow, "tests.static_preference_wstring").hasUserValue === false, "non-instant reset hasUserValue wstring");
ok(GetPreference(aPrefWindow, "tests.static_preference_file" ).hasUserValue === false, "non-instant reset hasUserValue file" );
}
function RunNonInstantPrefTestClose(aPrefWindow)
@ -404,20 +409,20 @@
function RunCheckCommandRedirect(aPrefWindow)
{
GetXULElement(aPrefWindow, "checkbox").click();
ok(GetXULElement(aPrefWindow, "tests.static_preference_bool").value, "redirected command bool");
ok(GetPreference(aPrefWindow, "tests.static_preference_bool").value, "redirected command bool");
GetXULElement(aPrefWindow, "checkbox").click();
ok(!GetXULElement(aPrefWindow, "tests.static_preference_bool").value, "redirected command bool");
ok(!GetPreference(aPrefWindow, "tests.static_preference_bool").value, "redirected command bool");
}
function RunResetPrefTest(aPrefWindow)
{
// try resetting the prefs to default values
GetXULElement(aPrefWindow, "tests.static_preference_int" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_bool" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_string" ).reset();
GetXULElement(aPrefWindow, "tests.static_preference_unichar").reset();
GetXULElement(aPrefWindow, "tests.static_preference_wstring").reset();
GetXULElement(aPrefWindow, "tests.static_preference_file" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_int" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_bool" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_string" ).reset();
GetPreference(aPrefWindow, "tests.static_preference_unichar").reset();
GetPreference(aPrefWindow, "tests.static_preference_wstring").reset();
GetPreference(aPrefWindow, "tests.static_preference_file" ).reset();
}
function InitTestPrefs(aInstantApply)

Просмотреть файл

@ -17,8 +17,8 @@
var prefWindow = openDialog("window_preferences_beforeaccept.xul", "", "", windowOnload);
function windowOnload() {
var dialogShown = prefWindow.document.getElementById("tests.beforeaccept.dialogShown");
var called = prefWindow.document.getElementById("tests.beforeaccept.called");
var dialogShown = prefWindow.Preferences.get("tests.beforeaccept.dialogShown");
var called = prefWindow.Preferences.get("tests.beforeaccept.called");
is(dialogShown.value, true, "dialog opened, shown pref set");
is(dialogShown.valueFromPreferences, null, "shown pref not committed");
is(called.value, null, "beforeaccept not yet called");

Просмотреть файл

@ -37,7 +37,7 @@
for (let pref of PREFS) {
// The `value` field of each <preference> element should be initialized by now.
is(SpecialPowers.getIntPref(pref), prefWindow.document.getElementById(pref).value,
is(SpecialPowers.getIntPref(pref), prefWindow.Preferences.get(pref).value,
"Pref constructor was called correctly")
}

Просмотреть файл

@ -3,12 +3,14 @@
<!--
XUL Widget Test for preferences window
-->
<prefwindow xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="preferences window"
windowtype="test:preferences"
buttons="accept,cancel"
onload="RunTest(window.arguments)"
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
class="prefwindow"
title="preferences window"
windowtype="test:preferences"
buttons="accept,cancel"
onload="RunTest(window.arguments)"
>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript">
<![CDATA[
function RunTest(aArgs)
@ -18,31 +20,20 @@
// close dialog
document.documentElement[aArgs[1] ? "acceptDialog" : "cancelDialog"]();
}
Preferences.addAll([
// one of each type known to Preference.valueFromPreferences
{ id: "tests.static_preference_int", type: "int" },
{ id: "tests.static_preference_bool", type: "bool" },
{ id: "tests.static_preference_string", type: "string" },
{ id: "tests.static_preference_wstring", type: "wstring" },
{ id: "tests.static_preference_unichar", type: "unichar" },
{ id: "tests.static_preference_file", type: "file" },
]);
]]>
</script>
<prefpane id="sample_pane" label="Sample Prefpane">
<preferences id="sample_preferences">
<!-- one of each type known to <preferences>.valueFromPreferences -->
<preference id ="tests.static_preference_int"
name="tests.static_preference_int"
type="int"/>
<preference id ="tests.static_preference_bool"
name="tests.static_preference_bool"
type="bool"/>
<preference id ="tests.static_preference_string"
name="tests.static_preference_string"
type="string"/>
<preference id ="tests.static_preference_wstring"
name="tests.static_preference_wstring"
type="wstring"/>
<preference id ="tests.static_preference_unichar"
name="tests.static_preference_unichar"
type="unichar"/>
<preference id ="tests.static_preference_file"
name="tests.static_preference_file"
type="file"/>
</preferences>
<vbox id="sample_pane" class="prefpane" label="Sample Prefpane">
<!-- one element for each preference type above -->
<hbox>
@ -69,5 +60,5 @@
<label flex="1" value="file"/>
<textbox id="static_element_file" preference="tests.static_preference_file"/>
</hbox>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -3,23 +3,25 @@
<!--
XUL Widget Test for preferences window
-->
<prefwindow xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="preferences window"
windowtype="test:preferences2"
buttons="accept,cancel"
onload="RunTest(window.arguments)"
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
class="prefwindow"
title="preferences window"
windowtype="test:preferences2"
buttons="accept,cancel"
onload="RunTest(window.arguments)"
>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript">
<![CDATA[
function RunTest(aArgs)
{
// open child
document.documentElement.openSubDialog("window_preferences3.xul", "", {test: aArgs[0], accept: aArgs[1]});
openDialog("window_preferences3.xul", "", "modal,centerscreen,resizable=no", {test: aArgs[0], accept: aArgs[1]});
// close dialog
document.documentElement[aArgs[1] ? "acceptDialog" : "cancelDialog"]();
}
]]>
</script>
<prefpane id="sample_pane" label="Sample Prefpane"/>
</prefwindow>
<vbox id="sample_pane" class="prefpane" label="Sample Prefpane"/>
</dialog>

Просмотреть файл

@ -3,13 +3,15 @@
<!--
XUL Widget Test for preferences window
-->
<prefwindow xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="preferences window"
windowtype="test:preferences3"
buttons="accept,cancel"
onload="RunTest(window.arguments)"
type="child"
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
class="prefwindow"
title="preferences window"
windowtype="test:preferences3"
buttons="accept,cancel"
onload="RunTest(window.arguments)"
type="child"
>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript">
<![CDATA[
function RunTest(aArgs)
@ -19,32 +21,20 @@
// close dialog
document.documentElement[aArgs[0].accept ? "acceptDialog" : "cancelDialog"]();
}
Preferences.addAll([
// one of each type known to Preference.valueFromPreferences
{ id: "tests.static_preference_int", type: "int" },
{ id: "tests.static_preference_bool", type: "bool" },
{ id: "tests.static_preference_string", type: "string" },
{ id: "tests.static_preference_wstring", type: "wstring" },
{ id: "tests.static_preference_unichar", type: "unichar" },
{ id: "tests.static_preference_file", type: "file" },
]);
]]>
</script>
<prefpane id="sample_pane" label="Sample Prefpane">
<preferences id="sample_preferences">
<!-- one of each type known to <preferences>.valueFromPreferences -->
<preference id ="tests.static_preference_int"
name="tests.static_preference_int"
type="int"/>
<preference id ="tests.static_preference_bool"
name="tests.static_preference_bool"
type="bool"/>
<preference id ="tests.static_preference_string"
name="tests.static_preference_string"
type="string"/>
<preference id ="tests.static_preference_wstring"
name="tests.static_preference_wstring"
type="wstring"/>
<preference id ="tests.static_preference_unichar"
name="tests.static_preference_unichar"
type="unichar"/>
<preference id ="tests.static_preference_file"
name="tests.static_preference_file"
type="file"/>
</preferences>
<vbox id="sample_pane" class="prefpane" label="Sample Prefpane">
<!-- one element for each preference type above -->
<hbox>
<label flex="1" value="int"/>
@ -70,5 +60,5 @@
<label flex="1" value="file"/>
<textbox id="static_element_file" preference="tests.static_preference_file"/>
</hbox>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -3,18 +3,20 @@
<!--
XUL Widget Test for preferences window with beforeaccept
-->
<prefwindow xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="preferences window"
width="300" height="300"
windowtype="test:preferences"
buttons="accept,cancel"
onbeforeaccept="return beforeAccept();"
onload="onDialogLoad();"
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
class="prefwindow"
title="preferences window"
width="300" height="300"
windowtype="test:preferences"
buttons="accept,cancel"
onbeforeaccept="return beforeAccept();"
onload="onDialogLoad();"
>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript">
<![CDATA[
function onDialogLoad() {
var pref = document.getElementById("tests.beforeaccept.dialogShown");
var pref = Preferences.get("tests.beforeaccept.dialogShown");
pref.value = true;
// call the onload handler we were passed
@ -22,24 +24,21 @@
}
function beforeAccept() {
var beforeAcceptPref = document.getElementById("tests.beforeaccept.called");
var beforeAcceptPref = Preferences.get("tests.beforeaccept.called");
var oldValue = beforeAcceptPref.value;
beforeAcceptPref.value = true;
return !!oldValue;
}
Preferences.addAll([
{ id: "tests.beforeaccept.called", type: "bool" },
{ id: "tests.beforeaccept.dialogShown", type: "bool" },
]);
]]>
</script>
<prefpane id="sample_pane" label="Sample Prefpane">
<preferences id="sample_preferences">
<preference id="tests.beforeaccept.called"
name="tests.beforeaccept.called"
type="bool"/>
<preference id="tests.beforeaccept.dialogShown"
name="tests.beforeaccept.dialogShown"
type="bool"/>
</preferences>
</prefpane>
<vbox id="sample_pane" class="prefpane" label="Sample Prefpane">
</vbox>
<label>Test Prefpane</label>
</prefwindow>
</dialog>

Просмотреть файл

@ -5,11 +5,13 @@
a checkbox with a command attribute properly updates even though the command
event gets retargeted.
-->
<prefwindow xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="preferences window"
windowtype="test:preferences"
buttons="accept,cancel"
onload="RunTest(window.arguments)">
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
class="prefwindow"
title="preferences window"
windowtype="test:preferences"
buttons="accept,cancel"
onload="RunTest(window.arguments)">
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript">
<![CDATA[
function RunTest(aArgs)
@ -17,20 +19,18 @@
aArgs[0](this);
document.documentElement.cancelDialog();
}
Preferences.addAll([
{ id: "tests.static_preference_bool", type: "bool" },
]);
]]>
</script>
<prefpane id="sample_pane" label="Sample Prefpane">
<preferences id="sample_preferences">
<preference id="tests.static_preference_bool"
name="tests.static_preference_bool"
type="bool"/>
</preferences>
<vbox id="sample_pane" class="prefpane" label="Sample Prefpane">
<commandset>
<command id="cmd_test" preference="tests.static_preference_bool"/>
</commandset>
<checkbox id="checkbox" label="Enable Option" preference="tests.static_preference_bool" command="cmd_test"/>
</prefpane>
</prefwindow>
</vbox>
</dialog>

Просмотреть файл

@ -8,24 +8,24 @@
This test ensures that onsyncfrompreference handlers are called after all the
values of the corresponding preference element have been set correctly
-->
<prefwindow xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="preferences window"
width="300" height="300"
windowtype="test:preferences">
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
class="prefwindow"
title="preferences window"
width="300" height="300"
windowtype="test:preferences">
<prefpane id="sample_pane" label="Sample Prefpane">
<preferences id="sample_preferences">
<preference id="tests.onsyncfrompreference.pref1"
name="tests.onsyncfrompreference.pref1"
type="int"/>
<preference id="tests.onsyncfrompreference.pref2"
name="tests.onsyncfrompreference.pref2"
type="int"/>
<preference id="tests.onsyncfrompreference.pref3"
name="tests.onsyncfrompreference.pref3"
type="int"/>
</preferences>
</prefpane>
<script type="application/javascript" src="chrome://global/content/preferencesBindings.js"/>
<script type="application/javascript">
<![CDATA[
Preferences.addAll([
{ id: "tests.onsyncfrompreference.pref1", type: "int" },
{ id: "tests.onsyncfrompreference.pref2", type: "int" },
{ id: "tests.onsyncfrompreference.pref3", type: "int" },
]);
]]>
</script>
<vbox id="sample_pane" class="prefpane" label="Sample Prefpane">
</vbox>
<label>Test Prefpane</label>
<checkbox id="check1" label="Label1"
preference="tests.onsyncfrompreference.pref1"
@ -39,4 +39,4 @@
preference="tests.onsyncfrompreference.pref3"
onsyncfrompreference="return window.arguments[0]();"
onsynctopreference="return 1;"/>
</prefwindow>
</dialog>

Просмотреть файл

@ -3,6 +3,10 @@
- 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/. -->
<!DOCTYPE bindings [
<!ENTITY % globalKeysDTD SYSTEM "chrome://global/locale/globalKeys.dtd">
%globalKeysDTD;
]>
<bindings id="dialogBindings"
xmlns="http://www.mozilla.org/xbl"
@ -40,6 +44,16 @@
<xul:button dlgtype="disclosure" class="dialog-button" hidden="true"/>
#endif
</xul:hbox>
<xul:keyset>
<xul:key phase="capturing" oncommand="document.documentElement.openHelp(event)"
#ifdef XP_MACOSX
key="&openHelpMac.commandkey;" modifiers="accel"/>
#else
keycode="&openHelp.commandkey;"/>
#endif
</xul:keyset>
</content>
<implementation>
@ -209,6 +223,20 @@
</body>
</method>
<method name="openHelp">
<parameter name="event"/>
<body>
<![CDATA[
var helpButton = document.documentElement.getButton("help");
if (helpButton.disabled || helpButton.hidden)
return;
this._fireButtonEvent("help");
event.stopPropagation();
event.preventDefault();
]]>
</body>
</method>
<property name="mStrBundle">
<getter>
<![CDATA[

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -1015,56 +1015,6 @@ wizardpage {
-moz-binding: url("chrome://global/content/bindings/wizard.xml#wizard-buttons");
}
/********** preferences ********/
prefwindow,
prefwindow:root /* override :root from above */ {
-moz-binding: url("chrome://global/content/bindings/preferences.xml#prefwindow");
-moz-box-orient: vertical;
}
prefpane {
-moz-binding: url("chrome://global/content/bindings/preferences.xml#prefpane");
-moz-box-orient: vertical;
}
prefwindow > .paneDeckContainer {
overflow: hidden;
}
prefpane > .content-box {
overflow: hidden;
}
prefwindow[type="child"] > .paneDeckContainer {
overflow: -moz-hidden-unscrollable;
}
prefwindow[type="child"] > prefpane > .content-box {
-moz-box-flex: 1;
overflow: -moz-hidden-unscrollable;
}
preferences {
-moz-binding: url("chrome://global/content/bindings/preferences.xml#preferences");
visibility: collapse;
}
preference {
-moz-binding: url("chrome://global/content/bindings/preferences.xml#preference");
visibility: collapse;
}
radio[pane] {
-moz-binding: url("chrome://global/content/bindings/preferences.xml#panebutton") !important;
-moz-box-orient: vertical;
-moz-box-align: center;
}
prefwindow[chromehidden~="toolbar"] .chromeclass-toolbar {
display: none;
}
/********** expander ********/
expander {

Просмотреть файл

@ -4,6 +4,8 @@
* 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/. */
/* import-globals-from ../../content/preferencesBindings.js */
var FontBuilder = {
_enumerator: null,
get enumerator() {
@ -91,7 +93,7 @@ var FontBuilder = {
// - there is no setting
// - the font selected by the user is no longer present (e.g. deleted from
// fonts folder)
const preference = document.getElementById(aElement.getAttribute("preference"));
const preference = Preferences.get(aElement.getAttribute("preference"));
if (preference.value) {
const fontItems = aElement.getElementsByAttribute("value", preference.value);

Просмотреть файл

@ -41,8 +41,7 @@ progressmeter[mode="undetermined"] {
window,
page,
dialog,
wizard,
prefwindow {
wizard {
-moz-appearance: window;
background-color: -moz-Dialog;
color: -moz-DialogText;

Просмотреть файл

@ -23,7 +23,6 @@ toolkit.jar:
* skin/classic/global/notification.css
skin/classic/global/numberbox.css
skin/classic/global/popup.css
skin/classic/global/preferences.css
skin/classic/global/printPreview.css
skin/classic/global/radio.css
skin/classic/global/scrollbox.css

Просмотреть файл

@ -1,62 +0,0 @@
/* 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/. */
/* ===== preferences.css =====================================================
== Styles used by the XUL prefwindow element.
======================================================================= */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* ::::: dialog ::::: */
prefwindow {
padding: 0px;
}
prefpane {
padding: 8px;
}
prefwindow[type="child"] {
padding: 8px;
}
prefwindow[type="child"] > prefpane {
padding: 0px;
}
.prefWindow-dlgbuttons {
padding-bottom: 8px;
padding-inline-start: 8px;
padding-inline-end: 8px;
}
prefwindow[type="child"] .prefWindow-dlgbuttons {
padding: 0px;
}
radio[pane] {
-moz-appearance: none;
min-width: 4.5em;
margin: 0;
padding: 3px;
color: -moz-FieldText;
}
.paneSelector {
-moz-appearance: listbox;
margin: 8px 8px 0 8px;
padding: 0;
}
.paneButtonIcon {
width: 32px;
height: 32px;
}
radio[pane][selected="true"] {
background-color: Highlight;
color: HighlightText;
}

Просмотреть файл

@ -17,7 +17,6 @@ toolkit.jar:
skin/classic/global/menulist.css (global/empty.css)
skin/classic/global/numberbox.css (global/empty.css)
skin/classic/global/popup.css (global/empty.css)
skin/classic/global/preferences.css (global/empty.css)
skin/classic/global/progressmeter.css (global/empty.css)
skin/classic/global/radio.css (global/empty.css)
skin/classic/global/resizer.css (global/empty.css)

Просмотреть файл

@ -30,21 +30,13 @@ menulist > menupopup {
window,
page,
dialog,
wizard,
prefwindow {
wizard {
-moz-appearance: dialog;
background-color: #FFFFFF;
color: -moz-DialogText;
font: message-box;
}
prefwindow[type="child"] {
padding-top: 18px;
padding-bottom: 15px;
padding-inline-start: 18px;
padding-inline-end: 20px;
}
/* deprecated */
window.dialog {
padding-top: 8px;

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 400 B

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 257 B

Просмотреть файл

@ -25,7 +25,6 @@ toolkit.jar:
skin/classic/global/netError.css
skin/classic/global/numberbox.css
skin/classic/global/popup.css
skin/classic/global/preferences.css
skin/classic/global/progressmeter.css
skin/classic/global/radio.css
skin/classic/global/resizer.css
@ -71,8 +70,6 @@ toolkit.jar:
skin/classic/global/icons/glyph-dropdown.png (icons/glyph-dropdown.png)
skin/classic/global/icons/glyph-dropdown@2x.png (icons/glyph-dropdown@2x.png)
skin/classic/global/icons/notfound.png (icons/notfound.png)
skin/classic/global/icons/panebutton-active.png (icons/panebutton-active.png)
skin/classic/global/icons/panebutton-inactive.png (icons/panebutton-inactive.png)
skin/classic/global/icons/panel-dropmarker.png (icons/panel-dropmarker.png)
skin/classic/global/icons/resizer.png (icons/resizer.png)
skin/classic/global/icons/resizer@2x.png (icons/resizer@2x.png)

Просмотреть файл

@ -1,59 +0,0 @@
/* 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/. */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
prefwindow {
padding: 0;
font: -moz-dialog !important;
}
prefpane {
padding: 12px 12px 0 12px;
}
prefwindow[type="child"] > prefpane {
padding: 0;
}
.prefWindow-dlgbuttons {
margin: 0 12px 12px;
padding-top: 0 !important;
}
.paneSelector {
font: message-box;
padding: 1px 4px;
-moz-appearance: toolbar;
margin: 0;
}
radio[pane] {
border: solid transparent;
border-width: 0 2px;
padding: 5px 4px 3px;
margin: 0;
-moz-appearance: none;
text-shadow: rgba(255, 255, 255, 0.4) 0 1px;
}
radio[pane]:active:hover {
text-shadow: none;
}
radio[pane]:active:hover > .paneButtonIcon {
filter: brightness(0.55);
}
radio[pane][selected="true"] {
-moz-border-image: url("chrome://global/skin/icons/panebutton-active.png") 0 2 fill repeat stretch;
}
radio[pane][selected="true"]:-moz-window-inactive {
-moz-border-image: url("chrome://global/skin/icons/panebutton-inactive.png") 0 2 fill repeat stretch;
}
.paneButtonLabel {
margin: 0 !important;
}

Просмотреть файл

@ -94,10 +94,6 @@ xul|caption xul|label {
overflow: auto;
}
xul|prefpane > xul|*.content-box {
overflow: visible;
}
/* groupboxes */
xul|groupbox {

Просмотреть файл

@ -37,8 +37,7 @@ menulist > menupopup {
window,
page,
dialog,
wizard,
prefwindow {
wizard {
-moz-appearance: window;
background-color: -moz-Dialog;
color: -moz-DialogText;

Просмотреть файл

@ -24,7 +24,6 @@ toolkit.jar:
skin/classic/global/netError.css
skin/classic/global/numberbox.css
* skin/classic/global/notification.css
skin/classic/global/preferences.css
skin/classic/global/printPageSetup.css
skin/classic/global/printPreview.css
skin/classic/global/scrollbox.css

Просмотреть файл

@ -1,76 +0,0 @@
/* 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/. */
/* ===== preferences.css =====================================================
== Styles used by the XUL prefwindow element.
======================================================================= */
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* ::::: dialog ::::: */
prefwindow {
padding: 0px;
}
prefpane {
padding-top: 8px;
padding-bottom: 10px;
padding-inline-start: 8px;
padding-inline-end: 10px;
}
prefwindow[type="child"] {
padding-top: 8px;
padding-bottom: 10px;
padding-inline-start: 8px;
padding-inline-end: 10px;
}
prefwindow[type="child"] > prefpane {
padding: 0px;
}
.prefWindow-dlgbuttons {
padding-bottom: 10px;
padding-inline-start: 8px;
padding-inline-end: 10px;
}
prefwindow[type="child"] .prefWindow-dlgbuttons {
padding: 0px;
}
radio[pane] {
-moz-appearance: none;
margin: 0px 1px 0px 1px;
padding: 1px 3px 1px 3px;
min-width: 4.5em;
}
.paneSelector {
border-bottom: 2px groove ThreeDFace;
margin: 0px;
padding-inline-start: 10px;
background-color: -moz-Field;
color: -moz-FieldText;
}
.paneButtonIcon {
width: 32px;
height: 32px;
}
radio[pane]:hover {
background-color: #E0E8F6;
color: black;
-moz-appearance: none;
}
radio[pane][selected="true"] {
background-color: #C1D2EE;
color: black;
-moz-appearance: none;
}