commit cb67f64b596101638e43478f54df6aac16b0d5fb Author: Sukhbir Singh sukhbir@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@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
tor-commits@lists.torproject.org