[tor-commits] [tor-messenger-build/master] Bug 16478: Update certificate pane in preferences window
sukhbir at torproject.org
sukhbir at torproject.org
Fri Nov 6 21:55:21 UTC 2015
commit cb67f64b596101638e43478f54df6aac16b0d5fb
Author: Sukhbir Singh <sukhbir at torproject.org>
Date: Fri Nov 6 16:55:13 2015 -0500
Bug 16478: Update certificate pane in preferences window
---
.../instantbird/certificate-settings-xul.patch | 1355 ++++++++++++++++++++
projects/instantbird/config | 1 +
2 files changed, 1356 insertions(+)
diff --git a/projects/instantbird/certificate-settings-xul.patch b/projects/instantbird/certificate-settings-xul.patch
new file mode 100644
index 0000000..7650cb8
--- /dev/null
+++ b/projects/instantbird/certificate-settings-xul.patch
@@ -0,0 +1,1355 @@
+
+# HG changeset patch
+# User Patrick Cloke <clokep at gmail.com>
+# Date 1437737959 -7200
+# Node ID 0b348fa4d3448a8c341ba35f83ff51b8d00f6742
+# Parent 6962356b69b1fa7c71243cc934a8c67d9144ae7e
+Bug 955738 - Port 'Bug 733632 - Remove TLS version UI (Options > Advanced > Encryption > Protocols)'. r=florian
+
+diff --git a/im/content/preferences/advanced.js b/im/content/preferences/advanced.js
+--- a/im/content/preferences/advanced.js
++++ b/im/content/preferences/advanced.js
+@@ -1,15 +1,20 @@
+-# -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++# -*- indent-tabs-mode: nil; js-indent-level: 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/.
+
+ // Load DownloadUtils module for convertByteUnits
+ Components.utils.import("resource://gre/modules/DownloadUtils.jsm");
++Components.utils.import("resource://gre/modules/ctypes.jsm");
++Components.utils.import("resource://gre/modules/Services.jsm");
++Components.utils.import("resource://gre/modules/LoadContextInfo.jsm");
++Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
++Components.utils.import("resource://gre/modules/BrowserUtils.jsm");
+
+ var gAdvancedPane = {
+ _inited: false,
+
+ /**
+ * Brings the appropriate tab to the front and initializes various bits of UI.
+ */
+ init: function ()
+@@ -23,35 +28,44 @@ var gAdvancedPane = {
+ } else {
+ var preference = document.getElementById("browser.preferences.advanced.selectedTabIndex");
+ if (preference.value !== null)
+ advancedPrefs.selectedIndex = preference.value;
+ }
+
+ this.updateConnectionGroupbox();
+ #ifdef MOZ_UPDATER
+- this.updateAppUpdateItems();
+- this.updateAutoItems();
+- this.updateModeItems();
++ let onUnload = function () {
++ window.removeEventListener("unload", onUnload, false);
++ Services.prefs.removeObserver("app.update.", this);
++ }.bind(this);
++ window.addEventListener("unload", onUnload, false);
++ Services.prefs.addObserver("app.update.", this, false);
++ this.updateReadPrefs();
+ #endif
++
++ let bundlePrefs = document.getElementById("bundlePreferences");
++
++ // Notify observers that the UI is now ready
++ Services.obs.notifyObservers(window, "advanced-pane-loaded", null);
+ },
+
+ /**
+ * Stores the identity of the current tab in preferences so that the selected
+ * tab can be persisted between openings of the preferences window.
+ */
+ tabSelectionChanged: function ()
+ {
+ if (!this._inited)
+ return;
+ var advancedPrefs = document.getElementById("advancedPrefs");
+ var preference = document.getElementById("browser.preferences.advanced.selectedTabIndex");
+ preference.valueFromPreferences = advancedPrefs.selectedIndex;
+ },
+-
++
+ // GENERAL TAB
+
+ /*
+ * Preferences:
+ *
+ * accessibility.browsewithcaret
+ * - true enables keyboard navigation and selection within web pages using a
+ * visible caret, false uses normal keyboard navigation with no caret
+@@ -110,31 +124,68 @@ var gAdvancedPane = {
+ var window = Services.wm.getMostRecentWindow("Browser:SearchManager");
+ if (window)
+ window.focus();
+ else {
+ openDialog("chrome://instantbird/content/engineManager.xul",
+ "_blank", "chrome,dialog,modal,centerscreen");
+ }
+ },
+-
++
+ showConfigEdit: function()
+ {
+ document.documentElement.openWindow("Preferences:ConfigManager",
+ "chrome://global/content/config.xul",
+ "", null);
+ },
+
++ /**
++ * security.OCSP.enabled is an integer value for legacy reasons.
++ * A value of 1 means OCSP is enabled. Any other value means it is disabled.
++ */
++ readEnableOCSP: function ()
++ {
++ var preference = document.getElementById("security.OCSP.enabled");
++ // This is the case if the preference is the default value.
++ if (preference.value === undefined) {
++ return true;
++ }
++ return preference.value == 1;
++ },
++
++ /**
++ * See documentation for readEnableOCSP.
++ */
++ writeEnableOCSP: function ()
++ {
++ var checkbox = document.getElementById("enableOCSP");
++ return checkbox.checked ? 1 : 0;
++ },
++
++ /**
++ * When the user toggles the layers.acceleration.disabled pref,
++ * sync its new value to the gfx.direct2d.disabled pref too.
++ */
++ updateHardwareAcceleration: function()
++ {
++#ifdef XP_WIN
++ var fromPref = document.getElementById("layers.acceleration.disabled");
++ var toPref = document.getElementById("gfx.direct2d.disabled");
++ toPref.value = fromPref.value;
++#endif
++ },
++
+ // NETWORK TAB
+
+ /*
+ * Preferences:
+ *
+ * browser.cache.disk.capacity
+ * - the size of the browser cache in KB
++ * - Only used if browser.cache.disk.smart_size.enabled is disabled
+ */
+
+ /**
+ * Displays a dialog in which proxy settings may be changed.
+ */
+ showConnections: function ()
+ {
+ document.documentElement.openSubDialog("chrome://instantbird/content/preferences/connection.xul",
+@@ -185,92 +236,137 @@ var gAdvancedPane = {
+ * app.update.mode
+ * - an integer:
+ * 0 do not warn if an update will disable extensions or themes
+ * 1 warn if an update will disable extensions or themes
+ * 2 warn if an update will disable extensions or themes *or* if the
+ * update is a major update
+ */
+
++#ifdef MOZ_UPDATER
+ /**
+- * Enables and disables various UI preferences as necessary to reflect locked,
+- * disabled, and checked/unchecked states.
++ * Selects the item of the radiogroup, and sets the warnIncompatible checkbox
++ * based on the pref values and locked states.
+ *
+ * UI state matrix for update preference conditions
+- *
+- * UI Components: Preferences
+- * 1 = Firefox checkbox i = app.update.enabled
+- * 2 = When updates for Firefox are found label ii = app.update.auto
+- * 3 = Automatic Radiogroup (Ask vs. Automatically) iii = app.update.mode
+- * 4 = Warn before disabling extensions checkbox
+- *
+- * States:
+- * Element p val locked Disabled
+- * 1 i t/f f false
+- * i t/f t true
+- * ii t/f t/f false
+- * iii 0/1/2 t/f false
+- * 2,3 i t t/f false
+- * i f t/f true
+- * ii t/f f false
+- * ii t/f t true
+- * iii 0/1/2 t/f false
+- * 4 i t t/f false
+- * i f t/f true
+- * ii t t/f false
+- * ii f t/f true
+- * iii 0/1/2 f false
+- * iii 0/1/2 t true
+- *
++ *
++ * UI Components: Preferences
++ * Radiogroup i = app.update.enabled
++ * Warn before disabling extensions checkbox ii = app.update.auto
++ * iii = app.update.mode
++ *
++ * Disabled states:
++ * Element pref value locked disabled
++ * radiogroup i t/f f false
++ * i t/f *t* *true*
++ * ii t/f f false
++ * ii t/f *t* *true*
++ * iii 0/1/2 t/f false
++ * warnIncompatible i t f false
++ * i t *t* *true*
++ * i *f* t/f *true*
++ * ii t f false
++ * ii t *t* *true*
++ * ii *f* t/f *true*
++ * iii 0/1/2 f false
++ * iii 0/1/2 *t* *true*
+ */
+-#ifdef MOZ_UPDATER
+- updateAppUpdateItems: function ()
++ updateReadPrefs: function ()
+ {
+- var aus =
+- Components.classes["@mozilla.org/updates/update-service;1"].
+- getService(Components.interfaces.nsIApplicationUpdateService);
++ var enabledPref = document.getElementById("app.update.enabled");
++ var autoPref = document.getElementById("app.update.auto");
++ var radiogroup = document.getElementById("updateRadioGroup");
+
+- var enabledPref = document.getElementById("app.update.enabled");
+- var enableAppUpdate = document.getElementById("enableAppUpdate");
++ if (!enabledPref.value) // Don't care for autoPref.value in this case.
++ radiogroup.value="manual"; // 3. Never check for updates.
++ else if (autoPref.value) // enabledPref.value && autoPref.value
++ radiogroup.value="auto"; // 1. Automatically install updates for Desktop only
++ else // enabledPref.value && !autoPref.value
++ radiogroup.value="checkOnly"; // 2. Check, but let me choose
+
+- enableAppUpdate.disabled = !aus.canCheckForUpdates || enabledPref.locked;
++ var canCheck = Components.classes["@mozilla.org/updates/update-service;1"].
++ getService(Components.interfaces.nsIApplicationUpdateService).
++ canCheckForUpdates;
++ // canCheck is false if the enabledPref is false and locked,
++ // or the binary platform or OS version is not known.
++ // A locked pref is sufficient to disable the radiogroup.
++ radiogroup.disabled = !canCheck || enabledPref.locked || autoPref.locked;
++
++ var modePref = document.getElementById("app.update.mode");
++ var warnIncompatible = document.getElementById("warnIncompatible");
++ // the warnIncompatible checkbox value is set by readAddonWarn
++ warnIncompatible.disabled = radiogroup.disabled || modePref.locked ||
++ !enabledPref.value || !autoPref.value;
++
++#ifdef MOZ_MAINTENANCE_SERVICE
++ // Check to see if the maintenance service is installed.
++ // If it is don't show the preference at all.
++ var installed;
++ try {
++ var wrk = Components.classes["@mozilla.org/windows-registry-key;1"]
++ .createInstance(Components.interfaces.nsIWindowsRegKey);
++ wrk.open(wrk.ROOT_KEY_LOCAL_MACHINE,
++ "SOFTWARE\\Mozilla\\MaintenanceService",
++ wrk.ACCESS_READ | wrk.WOW64_64);
++ installed = wrk.readIntValue("Installed");
++ wrk.close();
++ } catch(e) {
++ }
++ if (installed != 1) {
++ document.getElementById("useService").hidden = true;
++ }
++ try {
++ const DRIVE_FIXED = 3;
++ const LPCWSTR = ctypes.char16_t.ptr;
++ const UINT = ctypes.uint32_t;
++ let kernel32 = ctypes.open("kernel32");
++ let GetDriveType = kernel32.declare("GetDriveTypeW", ctypes.default_abi, UINT, LPCWSTR);
++ var UpdatesDir = Components.classes["@mozilla.org/updates/update-service;1"].
++ getService(Components.interfaces.nsIApplicationUpdateService);
++ let rootPath = UpdatesDir.getUpdatesDirectory();
++ while (rootPath.parent != null) {
++ rootPath = rootPath.parent;
++ }
++ if (GetDriveType(rootPath.path) != DRIVE_FIXED) {
++ document.getElementById("useService").hidden = true;
++ }
++ kernel32.close();
++ } catch(e) {
++ }
++#endif
+ },
+
+ /**
+- * Enables/disables UI for "when updates are found" based on the values,
+- * and "locked" states of associated preferences.
++ * Sets the pref values based on the selected item of the radiogroup,
++ * and sets the disabled state of the warnIncompatible checkbox accordingly.
+ */
+- updateAutoItems: function ()
+- {
+- var enabledPref = document.getElementById("app.update.enabled");
+- var autoPref = document.getElementById("app.update.auto");
+-
+- var updateModeLabel = document.getElementById("updateModeLabel");
+- var updateMode = document.getElementById("updateMode");
+-
+- var disable = enabledPref.locked || !enabledPref.value ||
+- autoPref.locked;
+- updateModeLabel.disabled = updateMode.disabled = disable;
+- },
+-
+- /**
+- * Enables/disables the "warn if incompatible extensions/themes exist" UI
+- * based on the values and "locked" states of various preferences.
+- */
+- updateModeItems: function ()
++ updateWritePrefs: function ()
+ {
+ var enabledPref = document.getElementById("app.update.enabled");
+ var autoPref = document.getElementById("app.update.auto");
+ var modePref = document.getElementById("app.update.mode");
+-
++ var radiogroup = document.getElementById("updateRadioGroup");
++ switch (radiogroup.value) {
++ case "auto": // 1. Automatically install updates for Desktop only
++ enabledPref.value = true;
++ autoPref.value = true;
++ break;
++ case "checkOnly": // 2. Check, but let me choose
++ enabledPref.value = true;
++ autoPref.value = false;
++ break;
++ case "manual": // 3. Never check for updates.
++ enabledPref.value = false;
++ autoPref.value = false;
++ }
++
+ var warnIncompatible = document.getElementById("warnIncompatible");
+-
+- var disable = enabledPref.locked || !enabledPref.value || autoPref.locked ||
+- !autoPref.value || modePref.locked;
+- warnIncompatible.disabled = disable;
++ warnIncompatible.disabled = enabledPref.locked || !enabledPref.value ||
++ autoPref.locked || !autoPref.value ||
++ modePref.locked;
+ },
+
+ /**
+ * Stores the value of the app.update.mode preference, which is a tristate
+ * integer preference. We store the value here so that we can properly
+ * restore the preference value if the UI reflecting the preference value
+ * is in a state which can represent either of two integer values (as
+ * opposed to only one possible value in the other UI state).
+@@ -279,28 +375,28 @@ var gAdvancedPane = {
+
+ /**
+ * Reads the app.update.mode preference and converts its value into a
+ * true/false value for use in determining whether the "Warn me if this will
+ * disable extensions or themes" checkbox is checked. We also save the value
+ * of the preference so that the preference value can be properly restored if
+ * the user's preferences cannot adequately be expressed by a single checkbox.
+ *
+- * app.update.modee Checkbox State Meaning
++ * app.update.mode Checkbox State Meaning
+ * 0 Unchecked Do not warn
+ * 1 Checked Warn if there are incompatibilities
+ * 2 Checked Warn if there are incompatibilities,
+ * or the update is major.
+ */
+ readAddonWarn: function ()
+ {
+ var preference = document.getElementById("app.update.mode");
+- var doNotWarn = preference.value != 0;
+- gAdvancedPane._modePreference = doNotWarn ? preference.value : 1;
+- return doNotWarn;
++ var warn = preference.value != 0;
++ gAdvancedPane._modePreference = warn ? preference.value : 1;
++ return warn;
+ },
+
+ /**
+ * Converts the state of the "Warn me if this will disable extensions or
+ * themes" checkbox into the integer preference which represents it,
+ * returning that value.
+ */
+ writeAddonWarn: function ()
+@@ -315,37 +411,21 @@ var gAdvancedPane = {
+ showUpdates: function ()
+ {
+ var prompter = Components.classes["@mozilla.org/updates/update-prompt;1"]
+ .createInstance(Components.interfaces.nsIUpdatePrompt);
+ prompter.showUpdateHistory(window);
+ },
+ #endif
+
+- /**
+- * The Extensions checkbox and button are disabled only if the enable Addon
+- * update preference is locked.
+- */
+- updateAddonUpdateUI: function ()
+- {
+- var enabledPref = document.getElementById("extensions.update.enabled");
+- var enableAddonUpdate = document.getElementById("enableAddonUpdate");
+-
+- enableAddonUpdate.disabled = enabledPref.locked;
+- },
+-
+ // ENCRYPTION TAB
+
+ /*
+ * Preferences:
+ *
+- * security.enable_ssl3
+- * - true if SSL 3 encryption is enabled, false otherwise
+- * security.enable_tls
+- * - true if TLS encryption is enabled, false otherwise
+ * 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
+ */
+@@ -356,71 +436,27 @@ var gAdvancedPane = {
+ showCertificates: function ()
+ {
+ document.documentElement.openWindow("mozilla:certmanager",
+ "chrome://pippki/content/certManager.xul",
+ "", null);
+ },
+
+ /**
+- * Displays a dialog in which OCSP preferences can be configured.
+- */
+- showOCSP: function ()
+- {
+- document.documentElement.openSubDialog("chrome://mozapps/content/preferences/ocsp.xul",
+- "", null);
+- },
+-
+- /**
+ * Displays a dialog from which the user can manage his security devices.
+ */
+ showSecurityDevices: function ()
+ {
+ document.documentElement.openWindow("mozilla:devicemanager",
+ "chrome://pippki/content/device_manager.xul",
+ "", null);
+- }
+-#ifdef HAVE_SHELL_SERVICE
+- ,
++ },
+
+- // SYSTEM DEFAULTS
+-
+- /*
+- * Preferences:
+- *
+- * browser.shell.checkDefault
+- * - true if a default-browser check (and prompt to make it so if necessary)
+- * occurs at startup, false otherwise
+- */
+-
+- /**
+- * Checks whether the browser is currently registered with the operating
+- * system as the default browser. If the browser is not currently the
+- * default browser, the user is given the option of making it the default;
+- * otherwise, the user is informed that this browser already is the browser.
+- */
+- checkNow: function ()
+- {
+- var shellSvc = Components.classes["@mozilla.org/browser/shell-service;1"]
+- .getService(Components.interfaces.nsIShellService);
+- var brandBundle = document.getElementById("bundleBrand");
+- var shellBundle = document.getElementById("bundleShell");
+- var brandShortName = brandBundle.getString("brandShortName");
+- var promptTitle = shellBundle.getString("setDefaultBrowserTitle");
+- var promptMessage;
+- var psvc = Services.prompt;
+- if (!shellSvc.isDefaultBrowser(false)) {
+- promptMessage = shellBundle.getFormattedString("setDefaultBrowserMessage",
+- [brandShortName]);
+- var rv = psvc.confirmEx(window, promptTitle, promptMessage,
+- psvc.STD_YES_NO_BUTTONS,
+- null, null, null, null, { });
+- if (rv == 0)
+- shellSvc.setDefaultBrowser(true, false);
++#ifdef MOZ_UPDATER
++ observe: function (aSubject, aTopic, aData) {
++ switch(aTopic) {
++ case "nsPref:changed":
++ this.updateReadPrefs();
++ break;
+ }
+- else {
+- promptMessage = shellBundle.getFormattedString("alreadyDefaultBrowser",
+- [brandShortName]);
+- psvc.alert(window, promptTitle, promptMessage);
+- }
+- }
++ },
+ #endif
+ };
+diff --git a/im/content/preferences/advanced.xul b/im/content/preferences/advanced.xul
+--- a/im/content/preferences/advanced.xul
++++ b/im/content/preferences/advanced.xul
+@@ -24,81 +24,85 @@
+ name="browser.preferences.advanced.selectedTabIndex"
+ type="int"/>
+
+ <!--XXX button prefs -->
+
+ <!-- General tab -->
+ <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"/>
+
+ <preference id="general.autoScroll" name="general.autoScroll" type="bool"/>
+ <preference id="general.smoothScroll" name="general.smoothScroll" type="bool"/>
++ <preference id="layers.acceleration.disabled" name="layers.acceleration.disabled" type="bool" inverted="true"
++ onchange="gAdvancedPane.updateHardwareAcceleration()"/>
++#ifdef XP_WIN
++ <preference id="gfx.direct2d.disabled" name="gfx.direct2d.disabled" type="bool" inverted="true"/>
++#endif
+ <preference id="layout.spellcheckDefault" name="layout.spellcheckDefault" type="int"/>
+
+-#ifdef HAVE_SHELL_SERVICE
+- <preference id="browser.shell.checkDefaultBrowser"
+- name="browser.shell.checkDefaultBrowser"
++ <!-- Network tab -->
++ <preference id="browser.cache.disk.capacity" name="browser.cache.disk.capacity" type="int"/>
++ <preference id="browser.offline-apps.notify" name="browser.offline-apps.notify" type="bool"/>
++
++ <preference id="browser.cache.disk.smart_size.enabled"
++ name="browser.cache.disk.smart_size.enabled"
++ inverted="true"
+ type="bool"/>
+
+- <preference id="pref.general.disable_button.default_browser"
+- name="pref.general.disable_button.default_browser"
+- type="bool"/>
+-#endif
+-
+- <!-- Update tab -->
++ <!-- Update tab -->
+ #ifdef MOZ_UPDATER
+- <preference id="app.update.enabled" name="app.update.enabled" type="bool"
+- onchange="gAdvancedPane.updateAppUpdateItems();
+- gAdvancedPane.updateAutoItems();
+- gAdvancedPane.updateModeItems();"/>
+- <preference id="app.update.auto" name="app.update.auto" type="bool"
+- onchange="gAdvancedPane.updateAutoItems();
+- gAdvancedPane.updateModeItems();"/>
+- <preference id="app.update.mode" name="app.update.mode" type="int"
+- onchange="gAdvancedPane.updateModeItems();"/>
++ <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.mode" name="app.update.mode" type="int"/>
+
+ <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="extensions.update.enabled" name="extensions.update.enabled" type="bool"
+- onchange="gAdvancedPane.updateAddonUpdateUI();"/>
+ <preference id="browser.search.update" name="browser.search.update" type="bool"/>
+
+- <!-- Encryption tab -->
+- <preference id="security.enable_ssl3" name="security.enable_ssl3" type="bool"/>
+- <preference id="security.enable_tls" name="security.enable_tls" type="bool"/>
+-
++ <!-- Certificates tab -->
+ <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"/>
+ </preferences>
+-
++
+ #ifdef HAVE_SHELL_SERVICE
+ <stringbundle id="bundleShell" src="chrome://browser/locale/shellservice.properties"/>
+ <stringbundle id="bundleBrand" src="chrome://branding/locale/brand.properties"/>
+ #endif
++ <stringbundle id="bundlePreferences" src="chrome://instantbird/locale/preferences/preferences.properties"/>
+
+ <script type="application/javascript" src="chrome://instantbird/content/preferences/advanced.js"/>
+
+ <tabbox id="advancedPrefs" flex="1"
+ onselect="gAdvancedPane.tabSelectionChanged();">
+
+ <tabs id="tabsElement">
+ <tab id="generalTab" label="&generalTab.label;"/>
+ <tab id="networkTab" label="&networkTab.label;"/>
+ <tab id="updateTab" label="&updateTab.label;"/>
+- <tab id="encryptionTab" label="&encryptionTab.label;"/>
++ <tab id="encryptionTab" label="&certificateTab.label;"/>
+ </tabs>
+
+ <tabpanels flex="1">
+
+ <!-- General -->
+ <tabpanel id="generalPanel" orient="vertical">
+
+ <!-- Accessibility -->
+@@ -122,16 +126,20 @@
+ <checkbox id="useAutoScroll"
+ label="&useAutoScroll.label;"
+ accesskey="&useAutoScroll.accesskey;"
+ preference="general.autoScroll"/>
+ <checkbox id="useSmoothScrolling"
+ label="&useSmoothScrolling.label;"
+ accesskey="&useSmoothScrolling.accesskey;"
+ preference="general.smoothScroll"/>
++ <checkbox id="allowHWAccel"
++ label="&allowHWAccel.label;"
++ accesskey="&allowHWAccel.accesskey;"
++ preference="layers.acceleration.disabled"/>
+ <checkbox id="checkSpelling"
+ label="&checkSpelling.label;"
+ accesskey="&checkSpelling.accesskey;"
+ onsyncfrompreference="return gAdvancedPane.readCheckSpelling();"
+ onsynctopreference="return gAdvancedPane.writeCheckSpelling();"
+ preference="layout.spellcheckDefault"/>
+ </groupbox>
+
+@@ -141,33 +149,16 @@
+
+ <description control="manageSearchEnginesButton"
+ flex="1">&searchEnginesDesc.label;</description>
+ <button id="manageSearchEnginesButton" label="&searchEngines.label;"
+ accesskey="&searchEngines.accesskey;"
+ oncommand="gAdvancedPane.showSearchEngineManager();"/>
+ </groupbox>
+
+-#ifdef HAVE_SHELL_SERVICE
+- <!-- System Defaults -->
+- <groupbox id="systemDefaultsGroup" orient="horizontal">
+- <caption label="&systemDefaults.label;"/>
+-
+- <hbox id="checkDefaultBox" align="center" flex="1">
+- <checkbox id="alwaysCheckDefault" preference="browser.shell.checkDefaultBrowser"
+- label="&alwaysCheckDefault.label;" accesskey="&alwaysCheckDefault.accesskey;"
+- flex="1"/>
+- <button id="checkDefaultButton"
+- label="&checkNow.label;" accesskey="&checkNow.accesskey;"
+- oncommand="gAdvancedPane.checkNow()"
+- preference="pref.general.disable_button.default_browser"/>
+- </hbox>
+- </groupbox>
+-#endif
+-
+ <!-- Advanced Configuration -->
+ <groupbox>
+ <caption label="&configEditDesc.label;"/>
+ <hbox pack="end">
+ <button id="configEditor" label="&configEdit.label;"
+ accesskey="&configEdit.accesskey;"
+ oncommand="gAdvancedPane.showConfigEdit();"/>
+ </hbox>
+@@ -201,134 +192,113 @@
+ <hbox align="center" id="mozillaConnectionBox">
+ <description id="mozConnLabelWithoutLibpurple" flex="1" control="connectionSettings">&connectionDesc.label;</description>
+ <description id="mozConnLabelWithLibpurple" flex="1" control="connectionSettings">&connectionOtherDesc.label;</description>
+ <button id="connectionSettings" icon="network" label="&connectionSettings.label;"
+ accesskey="&connectionSettings2.accesskey;"
+ oncommand="gAdvancedPane.showConnections();"/>
+ </hbox>
+ </groupbox>
++
++ <!-- Porting Note:
++ - The Cache and Offline apps section (+ related strings and
++ - JavaScript methods) have been removed. -->
+ </tabpanel>
+
+ <!-- Update -->
+- <tabpanel id="updatePanel" orient="vertical" align="start">
+- <label control="autoUpdateGroup">&autoCheck.label;</label>
+- <vbox class="indent" id="autoUpdateGroup" role="group">
++ <tabpanel id="updatePanel" orient="vertical">
+ #ifdef MOZ_UPDATER
+- <checkbox id="enableAppUpdate"
+- label="&enableAppUpdate.label;"
+- accesskey="&enableAppUpdate.accesskey;"
+- preference="app.update.enabled"/>
++ <groupbox id="updateApp">
++ <caption label="&updateApp.label;"/>
++ <radiogroup id="updateRadioGroup"
++ oncommand="gAdvancedPane.updateWritePrefs();">
++ <radio id="autoDesktop"
++ value="auto"
++ label="&updateAuto1.label;"
++ accesskey="&updateAuto1.accesskey;"/>
++ <hbox class="indent">
++ <checkbox id="warnIncompatible"
++ label="&updateAutoAddonWarn.label;"
++ accesskey="&updateAutoAddonWarn.accesskey;"
++ preference="app.update.mode"
++ onsyncfrompreference="return gAdvancedPane.readAddonWarn();"
++ onsynctopreference="return gAdvancedPane.writeAddonWarn();"/>
++ </hbox>
++ <radio value="checkOnly"
++ label="&updateCheck.label;"
++ accesskey="&updateCheck.accesskey;"/>
++ <radio value="manual"
++ label="&updateManual.label;"
++ accesskey="&updateManual.accesskey;"/>
++ </radiogroup>
++
++ <hbox>
++ <button id="showUpdateHistory"
++ label="&updateHistory.label;"
++ accesskey="&updateHistory.accesskey;"
++ preference="app.update.disable_button.showUpdateHistory"
++ oncommand="gAdvancedPane.showUpdates();"/>
++ </hbox>
++
++#ifdef MOZ_MAINTENANCE_SERVICE
++ <checkbox id="useService"
++ label="&useService.label;"
++ accesskey="&useService.accesskey;"
++ preference="app.update.service.enabled"/>
+ #endif
+- <checkbox id="enableAddonUpdate"
+- label="&enableAddonsUpdate.label;"
+- accesskey="&enableAddonsUpdate.accesskey;"
+- preference="extensions.update.enabled"/>
++ </groupbox>
++#endif
++ <groupbox id="updateOthers">
++ <caption label="&updateOthers.label;"/>
+ <checkbox id="enableSearchUpdate"
+ label="&enableSearchUpdate.label;"
+ accesskey="&enableSearchUpdate.accesskey;"
+ preference="browser.search.update"/>
+- </vbox>
+-
+-#ifdef MOZ_UPDATER
+- <separator id="updateSeparator1"/>
+-
+- <label id="updateModeLabel" control="updateMode">&whenUpdatesFound.label;</label>
+- <radiogroup id="updateMode" class="indent"
+- preference="app.update.auto">
+- <radio id="ask" value="false"
+- label="&askMe.label;"
+- accesskey="&askMe.accesskey;"/>
+- <radio id="automatic" value="true"
+- label="&modeAutomatic.label;"
+- accesskey="&modeAutomatic.accesskey;"/>
+- <hbox class="indent">
+- <checkbox id="warnIncompatible"
+- label="&modeAutoAddonWarn.label;" accesskey="&modeAutoAddonWarn.accesskey;"
+- preference="app.update.mode"
+- onsyncfrompreference="return gAdvancedPane.readAddonWarn();"
+- onsynctopreference="return gAdvancedPane.writeAddonWarn();"/>
+- </hbox>
+- </radiogroup>
+-
+- <separator id="updateSeparator2"/>
+-
+- <hbox>
+- <button id="showUpdateHistory"
+- label="&updateHistory.label;" accesskey="&updateHistory.accesskey;"
+- preference="app.update.disable_button.showUpdateHistory"
+- oncommand="gAdvancedPane.showUpdates();"/>
+- </hbox>
+-#endif
++ </groupbox>
+ </tabpanel>
+
+- <!-- Encryption -->
++ <!-- Certificates -->
+ <tabpanel id="encryptionPanel" orient="vertical">
+
+- <!-- Protocols -->
+- <groupbox id="protocolsGroup">
+- <caption label="&protocols.label;"/>
+-
+- <grid>
+- <columns>
+- <column flex="1"/>
+- <column flex="1"/>
+- </columns>
+- <rows>
+- <row>
+- <hbox>
+- <checkbox id="useSSL3" label="&useSSL3.label;"
+- accesskey="&useSSL3.accesskey;"
+- preference="security.enable_ssl3"/>
+- </hbox>
+- <hbox>
+- <checkbox id="useTLS1" label="&useTLS1.label;"
+- accesskey="&useTLS1.accesskey;"
+- preference="security.enable_tls"/>
+- </hbox>
+- </row>
+- </rows>
+- </grid>
+- </groupbox>
+-
+- <!-- Certificates -->
+- <groupbox id="certificatesGroup">
+- <caption id="CertGroupCaption" label="&certificates.label;"/>
+-
+ <description id="CertSelectionDesc" control="certSelection">&certSelection.description;</description>
+
+ <!--
+ The values on these radio buttons may look like l12y issues, but
+ they're not - this preference uses *those strings* as its values.
+ I KID YOU NOT.
+ -->
+ <radiogroup id="certSelection" orient="horizontal" preftype="string"
+ preference="security.default_personal_cert"
+- aria-labelledby="CertGroupCaption CertSelectionDesc">
+- <radio label="&certs.auto;" accesskey="&certs.auto.accesskey;"
++ aria-labelledby="CertSelectionDesc">
++ <radio label="&certs.auto;" accesskey="&certs.auto.accesskey;"
+ value="Select Automatically"/>
+- <radio label="&certs.ask;" accesskey="&certs.ask.accesskey;"
++ <radio label="&certs.ask;" accesskey="&certs.ask.accesskey;"
+ value="Ask Every Time"/>
+ </radiogroup>
+
+ <separator/>
+
++ <checkbox id="enableOCSP"
++ label="&enableOCSP.label;"
++ accesskey="&enableOCSP.accesskey;"
++ onsyncfrompreference="return gAdvancedPane.readEnableOCSP();"
++ onsynctopreference="return gAdvancedPane.writeEnableOCSP();"
++ preference="security.OCSP.enabled"/>
++
++ <separator/>
++
+ <hbox>
+ <button id="viewCertificatesButton"
+- label="&viewCerts.label;" accesskey="&viewCerts.accesskey;"
++ label="&viewCerts.label;" accesskey="&viewCerts.accesskey;"
+ oncommand="gAdvancedPane.showCertificates();"
+ preference="security.disable_button.openCertManager"/>
+- <button id="verificationButton"
+- label="&verify2.label;" accesskey="&verify2.accesskey;"
+- oncommand="gAdvancedPane.showOCSP();"/>
+ <button id="viewSecurityDevicesButton"
+ label="&viewSecurityDevices.label;" accesskey="&viewSecurityDevices.accesskey;"
+ oncommand="gAdvancedPane.showSecurityDevices();"
+ preference="security.disable_button.openDeviceManager"/>
+ </hbox>
+- </groupbox>
+ </tabpanel>
+
+ </tabpanels>
+ </tabbox>
+ </prefpane>
+
+ </overlay>
+diff --git a/im/content/preferences/connection.js b/im/content/preferences/connection.js
+--- a/im/content/preferences/connection.js
++++ b/im/content/preferences/connection.js
+@@ -1,91 +1,117 @@
++/* -*- indent-tabs-mode: nil; js-indent-level: 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/. */
+
+-Components.utils.import("resource:///modules/imServices.jsm");
+-
+ var gConnectionsDialog = {
+ beforeAccept: function ()
+ {
+ var proxyTypePref = document.getElementById("network.proxy.type");
+ if (proxyTypePref.value == 2) {
+ this.doAutoconfigURLFixup();
+ return true;
+ }
+
+ 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");
++
++ // 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);
++ // 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 &&
++ (prefName == "http" || !shareProxiesPref.value)) {
++ document.getElementById("networkProxy" + prefName.toUpperCase() + "_Port").focus();
++ return false;
++ }
++ }
++
++ // In the case of a shared proxy preference, backup the current values and update with the HTTP value
+ if (shareProxiesPref.value) {
+- var proxyPrefs = ["ssl", "ftp", "socks", "gopher"];
++ 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");
+- backupServerURLPref.value = proxyServerURLPref.value;
+- backupPortPref.value = proxyPortPref.value;
++ backupServerURLPref.value = backupServerURLPref.value || proxyServerURLPref.value;
++ backupPortPref.value = backupPortPref.value || proxyPortPref.value;
+ proxyServerURLPref.value = httpProxyURLPref.value;
+ proxyPortPref.value = httpProxyPortPref.value;
+ }
+ }
+
+- var noProxiesPref = document.getElementById("network.proxy.no_proxies_on");
+- noProxiesPref.value = noProxiesPref.value.replace(/[;]/g,',');
++ this.sanitizeNoProxiesPref();
+
+ return true;
+ },
+
+ checkForSystemProxy: function ()
+ {
+ if ("@mozilla.org/system-proxy-settings;1" in Components.classes)
+ document.getElementById("systemPref").removeAttribute("hidden");
+ },
+
+ proxyTypeChanged: function ()
+ {
+ var proxyTypePref = document.getElementById("network.proxy.type");
+-
++
+ // Update http
+ var httpProxyURLPref = document.getElementById("network.proxy.http");
+ httpProxyURLPref.disabled = proxyTypePref.value != 1;
+ var httpProxyPortPref = document.getElementById("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");
+ shareProxiesPref.disabled = proxyTypePref.value != 1;
+-
++ var autologinProxyPref = document.getElementById("signon.autologin.proxy");
++ autologinProxyPref.disabled = proxyTypePref.value == 0;
+ var noProxiesPref = document.getElementById("network.proxy.no_proxies_on");
+ noProxiesPref.disabled = proxyTypePref.value != 1;
+-
++
+ var autoconfigURLPref = document.getElementById("network.proxy.autoconfig_url");
+ autoconfigURLPref.disabled = proxyTypePref.value != 2;
+
+ this.updateReloadButton();
+ },
+-
++
++ updateDNSPref: function ()
++ {
++ 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 isDefinitelySocks4 = !socksVersionPref.disabled && socksVersionPref.value == 4;
++ socksDNSPref.disabled = (isDefinitelySocks4 || proxyTypePref.value == 0);
++ return undefined;
++ },
++
+ updateReloadButton: function ()
+ {
+ // Disable the "Reload PAC" button if the selected proxy type is not PAC or
+ // if the current value of the PAC textbox does not match the value stored
+ // in prefs. Likewise, disable the reload button if PAC is not configured
+ // in prefs.
+
+ var typedURL = document.getElementById("networkProxyAutoconfigURL").value;
+ var proxyTypeCur = document.getElementById("network.proxy.type").value;
+
+- var prefs = Services.prefs;
++ var prefs =
++ Components.classes["@mozilla.org/preferences-service;1"].
++ getService(Components.interfaces.nsIPrefBranch);
+ var pacURL = prefs.getCharPref("network.proxy.autoconfig_url");
+ var proxyType = prefs.getIntPref("network.proxy.type");
+
+ var disableReloadPref =
+ document.getElementById("pref.advanced.proxies.disable_button.reload");
+ disableReloadPref.disabled =
+ (proxyTypeCur != 2 || proxyType != 2 || typedURL != pacURL);
+ },
+@@ -95,17 +121,17 @@ var gConnectionsDialog = {
+ this.proxyTypeChanged();
+ return undefined;
+ },
+
+ updateProtocolPrefs: function ()
+ {
+ var proxyTypePref = document.getElementById("network.proxy.type");
+ var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
+- var proxyPrefs = ["ssl", "ftp", "socks", "gopher"];
++ 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");
+
+ // 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");
+@@ -121,17 +147,17 @@ var gConnectionsDialog = {
+
+ proxyServerURLPref.updateElements();
+ proxyPortPref.updateElements();
+ proxyServerURLPref.disabled = proxyTypePref.value != 1 || shareProxiesPref.value;
+ proxyPortPref.disabled = proxyServerURLPref.disabled;
+ }
+ var socksVersionPref = document.getElementById("network.proxy.socks_version");
+ socksVersionPref.disabled = proxyTypePref.value != 1 || shareProxiesPref.value;
+-
++ this.updateDNSPref();
+ return undefined;
+ },
+
+ readProxyProtocolPref: function (aProtocol, aIsPort)
+ {
+ var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
+ if (shareProxiesPref.value) {
+ var pref = document.getElementById("network.proxy.http" + (aIsPort ? "_port" : ""));
+@@ -153,16 +179,26 @@ var gConnectionsDialog = {
+ var autoURL = document.getElementById("networkProxyAutoconfigURL");
+ var autoURLPref = document.getElementById("network.proxy.autoconfig_url");
+ var URIFixup = Components.classes["@mozilla.org/docshell/urifixup;1"]
+ .getService(Components.interfaces.nsIURIFixup);
+ try {
+ autoURLPref.value = autoURL.value = URIFixup.createFixupURI(autoURL.value, 0).spec;
+ } catch(ex) {}
+ },
++
++ sanitizeNoProxiesPref: function()
++ {
++ var noProxiesPref = document.getElementById("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,');
++ // replace any remaining ; and \n since some may follow commas, etc.
++ noProxiesPref.value = noProxiesPref.value.replace(/[;\n]/g, '');
++ },
+
+ readHTTPProxyServer: function ()
+ {
+ var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
+ if (shareProxiesPref.value)
+ this.updateProtocolPrefs();
+ return undefined;
+ },
+diff --git a/im/content/preferences/connection.xul b/im/content/preferences/connection.xul
+--- a/im/content/preferences/connection.xul
++++ b/im/content/preferences/connection.xul
+@@ -7,62 +7,65 @@
+
+ <!DOCTYPE prefwindow SYSTEM "chrome://instantbird/locale/preferences/connection.dtd">
+
+ <?xml-stylesheet href="chrome://global/skin/"?>
+
+ <prefwindow id="ConnectionsDialog" type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ title="&connectionsDialog.title;"
+- dlgbuttons="accept,cancel"
++ dlgbuttons="accept,cancel,help"
+ onbeforeaccept="return gConnectionsDialog.beforeAccept();"
+ onload="gConnectionsDialog.checkForSystemProxy();"
+ #ifdef XP_MACOSX
+ style="width: &window.macWidth; !important;">
+ #else
+ style="width: &window.width; !important;">
+ #endif
+
+- <prefpane id="ConnectionsDialogPane">
++ <prefpane id="ConnectionsDialogPane"
++ helpTopic="prefs-connection-settings">
+
+ <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.gopher" name="network.proxy.gopher" type="string"/>
+- <preference id="network.proxy.gopher_port" name="network.proxy.gopher_port" type="int"/>
+- <preference id="network.proxy.socks_version" name="network.proxy.socks_version" 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"/>
+- <preference id="network.proxy.backup.gopher" name="network.proxy.backup.gopher" type="string"/>
+- <preference id="network.proxy.backup.gopher_port" name="network.proxy.backup.gopher_port" type="int"/>
+ </preferences>
+
+ <script type="application/javascript" src="chrome://instantbird/content/preferences/connection.js"/>
+
++ <stringbundle id="preferencesBundle" src="chrome://instantbird/locale/preferences/preferences.properties"/>
++
+ <groupbox>
+ <caption label="&proxyTitle.label;"/>
+
+ <radiogroup id="networkProxyType" preference="network.proxy.type"
+ onsyncfrompreference="return gConnectionsDialog.readProxyType();">
+ <radio value="0" label="&noProxyTypeRadio.label;" accesskey="&noProxyTypeRadio.accesskey;"/>
+ <radio value="4" label="&WPADTypeRadio.label;" accesskey="&WPADTypeRadio.accesskey;"/>
+ <radio value="5" label="&systemTypeRadio.label;" accesskey="&systemTypeRadio.accesskey;" id="systemPref" hidden="true"/>
+@@ -114,65 +117,55 @@
+ onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ftp', false);"/>
+ <label value="&port.label;" accesskey="&FTPport.accesskey;" control="networkProxyFTP_Port"/>
+ <textbox id="networkProxyFTP_Port" type="number" max="65535" size="5" preference="network.proxy.ftp_port"
+ onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('ftp', true);"/>
+ </hbox>
+ </row>
+ <row align="center">
+ <hbox pack="end">
+- <label value="&gopher.label;" accesskey="&gopher.accesskey;" control="networkProxyGopher"/>
+- </hbox>
+- <hbox align="center">
+- <textbox id="networkProxyGopher" flex="1" preference="network.proxy.gopher"
+- onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('gopher', false);"/>
+- <label value="&port.label;" accesskey="&gopherPort.accesskey;" control="networkProxyGopher_Port"/>
+- <textbox id="networkProxyGopher_Port" type="number" max="65535" size="5" preference="network.proxy.gopher_port"
+- onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('gopher', true);"/>
+- </hbox>
+- </row>
+- <row align="center">
+- <hbox pack="end">
+ <label value="&socks.label;" accesskey="&socks.accesskey;" control="networkProxySOCKS"/>
+ </hbox>
+ <hbox align="center">
+ <textbox id="networkProxySOCKS" flex="1" preference="network.proxy.socks"
+ onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('socks', false);"/>
+ <label value="&port.label;" accesskey="&SOCKSport.accesskey;" control="networkProxySOCKS_Port"/>
+ <textbox id="networkProxySOCKS_Port" type="number" max="65535" size="5" preference="network.proxy.socks_port"
+ onsyncfrompreference="return gConnectionsDialog.readProxyProtocolPref('socks', true);"/>
+ </hbox>
+ </row>
+ <row>
+ <spacer/>
++ <box pack="start">
+ <radiogroup id="networkProxySOCKSVersion" orient="horizontal"
+ preference="network.proxy.socks_version">
+ <radio id="networkProxySOCKSVersion4" value="4" label="&socks4.label;" accesskey="&socks4.accesskey;" />
+ <radio id="networkProxySOCKSVersion5" value="5" label="&socks5.label;" accesskey="&socks5.accesskey;" />
+ </radiogroup>
++ <checkbox id="networkProxySOCKSRemoteDNS" preference="network.proxy.socks_remote_dns" label="&socksRemoteDNS.label;" accesskey="&socksRemoteDNS.accesskey;" />
++ </box>
+ </row>
+-
+- <row align="center">
+- <hbox align="center" pack="end">
+- <label value="&noproxy.label;" accesskey="&noproxy.accesskey;" control="networkProxyNone"/>
+- </hbox>
+- <textbox id="networkProxyNone" preference="network.proxy.no_proxies_on"/>
+- </row>
+- <row>
+- <spacer/>
+- <label value="&noproxyExplain.label;" control="networkProxyNone"/>
+- </row>
++ <label value="&noproxy.label;" accesskey="&noproxy.accesskey;" control="networkProxyNone"/>
++ <textbox id="networkProxyNone" preference="network.proxy.no_proxies_on" multiline="true" rows="2"/>
++ <label value="&noproxyExplain.label;" control="networkProxyNone"/>
+ </rows>
+ </grid>
+ <radio value="2" label="&autoTypeRadio.label;" accesskey="&autoTypeRadio.accesskey;"/>
+ <hbox class="indent" flex="1" align="center">
+ <textbox id="networkProxyAutoconfigURL" flex="1" preference="network.proxy.autoconfig_url"
+ oninput="gConnectionsDialog.updateReloadButton();"/>
+ <button id="autoReload" icon="refresh"
+ label="&reload.label;" accesskey="&reload.accesskey;"
+ oncommand="gConnectionsDialog.reloadPAC();"
+ preference="pref.advanced.proxies.disable_button.reload"/>
+ </hbox>
+ </radiogroup>
+ </groupbox>
++ <separator class="thin"/>
++ <checkbox id="autologinProxy"
++ label="&autologinproxy.label;"
++ accesskey="&autologinproxy.accesskey;"
++ preference="signon.autologin.proxy"
++ tooltiptext="&autologinproxy.tooltip;"/>
++ <separator/>
+ </prefpane>
+ </prefwindow>
+
+diff --git a/im/locales/en-US/chrome/instantbird/preferences/advanced.dtd b/im/locales/en-US/chrome/instantbird/preferences/advanced.dtd
+--- a/im/locales/en-US/chrome/instantbird/preferences/advanced.dtd
++++ b/im/locales/en-US/chrome/instantbird/preferences/advanced.dtd
+@@ -14,16 +14,18 @@
+ <!ENTITY searchStartTyping.accesskey "x">
+
+ <!ENTITY conversations.label "Conversations">
+
+ <!ENTITY useAutoScroll.label "Use autoscrolling">
+ <!ENTITY useAutoScroll.accesskey "a">
+ <!ENTITY useSmoothScrolling.label "Use smooth scrolling">
+ <!ENTITY useSmoothScrolling.accesskey "m">
++<!ENTITY allowHWAccel.label "Use hardware acceleration when available">
++<!ENTITY allowHWAccel.accesskey "r">
+ <!ENTITY checkSpelling.label "Check my spelling as I type">
+ <!ENTITY checkSpelling.accesskey "t">
+
+ <!ENTITY searchEnginesGroup.label "Search engines">
+ <!ENTITY searchEnginesDesc.label "Change options for your search engines">
+ <!ENTITY searchEngines.label "Manage Search Enginesâ¦">
+ <!ENTITY searchEngines.accesskey "S">
+
+@@ -40,44 +42,42 @@
+ <!ENTITY connectionLibpurpleDesc.label "For libpurple-based accounts">
+ <!ENTITY connectionOtherDesc.label "For everything else (updates, addons, â¦)">
+ <!ENTITY connectionSettings.label "Settingsâ¦">
+ <!ENTITY connectionSettings.accesskey "e">
+ <!ENTITY connectionSettings2.accesskey "i">
+
+ <!ENTITY updateTab.label "Update">
+
+-<!ENTITY autoCheck.label "Automatically check for updates to:">
+-<!ENTITY enableAppUpdate.label "&brandShortName;">
+-<!ENTITY enableAppUpdate.accesskey "I">
+-<!ENTITY enableAddonsUpdate.label "Installed Add-ons">
+-<!ENTITY enableAddonsUpdate.accesskey "n">
+-<!ENTITY enableSearchUpdate.label "Search Engines">
+-<!ENTITY enableSearchUpdate.accesskey "h">
+-<!ENTITY whenUpdatesFound.label "When updates to &brandShortName; are found:">
+-<!ENTITY askMe.label "Ask me what I want to do">
+-<!ENTITY askMe.accesskey "k">
+-<!ENTITY modeAutomatic.label "Automatically download and install the update">
+-<!ENTITY modeAutomatic.accesskey "d">
+-<!ENTITY modeAutoAddonWarn.label "Warn me if this will disable any of my add-ons">
+-<!ENTITY modeAutoAddonWarn.accesskey "W">
++<!ENTITY updateApp.label "&brandShortName; updates:">
++<!ENTITY updateAuto1.label "Automatically install updates (recommended: improved security)">
++<!ENTITY updateAuto1.accesskey "A">
++<!ENTITY updateCheck.label "Check for updates, but let me choose whether to install them">
++<!ENTITY updateCheck.accesskey "C">
++<!ENTITY updateManual.label "Never check for updates (not recommended: security risk)">
++<!ENTITY updateManual.accesskey "N">
++
++<!ENTITY updateAutoAddonWarn.label "Warn me if this will disable any of my add-ons">
++<!ENTITY updateAutoAddonWarn.accesskey "W">
++
+ <!ENTITY updateHistory.label "Show Update History">
+ <!ENTITY updateHistory.accesskey "p">
+
+-<!ENTITY encryptionTab.label "Encryption">
++<!ENTITY useService.label "Use a background service to install updates">
++<!ENTITY useService.accesskey "b">
+
+-<!ENTITY protocols.label "Protocols">
+-<!ENTITY useSSL3.label "Use SSL 3.0">
+-<!ENTITY useSSL3.accesskey "3">
+-<!ENTITY useTLS1.label "Use TLS 1.0">
+-<!ENTITY useTLS1.accesskey "1">
+-<!ENTITY certificates.label "Certificates">
++<!ENTITY updateOthers.label "Automatically update:">
++<!ENTITY enableSearchUpdate.label "Search Engines">
++<!ENTITY enableSearchUpdate.accesskey "E">
++
++<!ENTITY certificateTab.label "Certificates">
++<!ENTITY certSelection.label "Requests">
+ <!ENTITY certSelection.description "When a server requests my personal certificate:">
+ <!ENTITY certs.auto "Select one automatically">
+-<!ENTITY certs.auto.accesskey "l">
++<!ENTITY certs.auto.accesskey "S">
+ <!ENTITY certs.ask "Ask me every time">
+-<!ENTITY certs.ask.accesskey "i">
++<!ENTITY certs.ask.accesskey "A">
++<!ENTITY enableOCSP.label "Query OCSP responder servers to confirm the current validity of certificates">
++<!ENTITY enableOCSP.accesskey "Q">
+ <!ENTITY viewCerts.label "View Certificates">
+-<!ENTITY viewCerts.accesskey "s">
+-<!ENTITY verify2.label "Validation">
+-<!ENTITY verify2.accesskey "V">
++<!ENTITY viewCerts.accesskey "C">
+ <!ENTITY viewSecurityDevices.label "Security Devices">
+-<!ENTITY viewSecurityDevices.accesskey "y">
++<!ENTITY viewSecurityDevices.accesskey "D">
+diff --git a/im/locales/en-US/chrome/instantbird/preferences/connection.dtd b/im/locales/en-US/chrome/instantbird/preferences/connection.dtd
+--- a/im/locales/en-US/chrome/instantbird/preferences/connection.dtd
++++ b/im/locales/en-US/chrome/instantbird/preferences/connection.dtd
+@@ -17,32 +17,33 @@
+ <!ENTITY manualTypeRadio.label "Manual proxy configuration:">
+ <!ENTITY manualTypeRadio.accesskey "m">
+ <!ENTITY autoTypeRadio.label "Automatic proxy configuration URL:">
+ <!ENTITY autoTypeRadio.accesskey "A">
+ <!ENTITY reload.label "Reload">
+ <!ENTITY reload.accesskey "e">
+ <!ENTITY ftp.label "FTP Proxy:">
+ <!ENTITY ftp.accesskey "F">
+-<!ENTITY gopher.label "Gopher Proxy:">
+-<!ENTITY gopher.accesskey "G">
+ <!ENTITY http.label "HTTP Proxy:">
+ <!ENTITY http.accesskey "x">
+ <!ENTITY ssl.label "SSL Proxy:">
+ <!ENTITY ssl.accesskey "L">
+ <!ENTITY socks.label "SOCKS Host:">
+ <!ENTITY socks.accesskey "C">
+ <!ENTITY socks4.label "SOCKS v4">
+ <!ENTITY socks4.accesskey "K">
+ <!ENTITY socks5.label "SOCKS v5">
+ <!ENTITY socks5.accesskey "v">
++<!ENTITY socksRemoteDNS.label "Remote DNS">
++<!ENTITY socksRemoteDNS.accesskey "d">
+ <!ENTITY port.label "Port:">
+ <!ENTITY HTTPport.accesskey "P">
+ <!ENTITY SSLport.accesskey "o">
+ <!ENTITY FTPport.accesskey "r">
+-<!-- No accesskey for gopher (':' doesn't go well) - mpt's going to redesign the window -->
+-<!ENTITY gopherPort.accesskey "">
+ <!ENTITY SOCKSport.accesskey "t">
+ <!ENTITY noproxy.label "No Proxy for:">
+ <!ENTITY noproxy.accesskey "n">
+ <!ENTITY noproxyExplain.label "Example: .mozilla.org, .net.nz, 192.168.1.0/24">
+ <!ENTITY shareproxy.label "Use this proxy server for all protocols">
+ <!ENTITY shareproxy.accesskey "s">
++<!ENTITY autologinproxy.label "Do not prompt for authentication if password is saved">
++<!ENTITY autologinproxy.accesskey "i">
++<!ENTITY autologinproxy.tooltip "This option silently authenticates you to proxies when you have saved credentials for them. You will be prompted if authentication fails.">
+
diff --git a/projects/instantbird/config b/projects/instantbird/config
index afdb042..4993c8c 100644
--- a/projects/instantbird/config
+++ b/projects/instantbird/config
@@ -74,6 +74,7 @@ input_files:
- filename: version.patch
- filename: search-context-menu.patch
- filename: search-preferences-xul.patch
+ - filename: certificate-settings-xul.patch
- filename: log-preferences-xul.patch
- filename: ifdef-performance-toolkit-xpt.patch
- filename: 8ea23862252b-remove__DATE__and__TIME__.nsspatch
More information about the tor-commits
mailing list