diff options
Diffstat (limited to '')
-rw-r--r-- | comm/suite/components/pref/content/pref-proxies.js | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/comm/suite/components/pref/content/pref-proxies.js b/comm/suite/components/pref/content/pref-proxies.js new file mode 100644 index 0000000000..5120c3f5d0 --- /dev/null +++ b/comm/suite/components/pref/content/pref-proxies.js @@ -0,0 +1,188 @@ +/* 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/. */ + +const kNoProxy = 0; +const kManualProxy = 1; +const kAutoConfigProxy = 2; +const kObsoleteProxy = 3; +const kAutoDiscoverProxy = 4; +const kSystemProxy = 5; + +var gInstantApply; +var gHTTP; +var gHTTPPort; +var gSSL; +var gSSLPort; +var gFTP; +var gFTPPort; +var gAutoURL; +var gProxyType; +var gShareSettings; + +// Only used by main prefwindow +function Startup() +{ + InitCommonGlobals(); + gAutoURL = document.getElementById("network.proxy.autoconfig_url"); + gProxyType = document.getElementById("network.proxy.type"); + + // Check for system proxy settings class and unhide UI if present + if ("@mozilla.org/system-proxy-settings;1" in Cc) + document.getElementById("systemPref").hidden = false; + + // Calculate a sane default for network.proxy.share_proxy_settings. + if (gShareSettings.value == null) + gShareSettings.value = DefaultForShareSettingsPref(); + + // The pref value 3 (kObsoleteProxy) for network.proxy.type is unused to + // maintain backwards compatibility. Treat 3 (kObsoleteProxy) equally to + // 0 (kNoProxy). See bug 115720. + if (gProxyType.value == kObsoleteProxy) + gProxyType.value = kNoProxy; + + DoEnabling(); +} + +// Only used by child prefwindow +function AdvancedInit() +{ + InitCommonGlobals(); + DoProxyCopy(gShareSettings.value); +} + +function InitCommonGlobals() +{ + gInstantApply = document.documentElement.instantApply; + gHTTP = document.getElementById("network.proxy.http"); + gHTTPPort = document.getElementById("network.proxy.http_port"); + gSSL = document.getElementById("network.proxy.ssl"); + gSSLPort = document.getElementById("network.proxy.ssl_port"); + gFTP = document.getElementById("network.proxy.ftp"); + gFTPPort = document.getElementById("network.proxy.ftp_port"); + gShareSettings = document.getElementById("network.proxy.share_proxy_settings"); +} + +// Returns true if all protocol specific proxies and all their +// ports are set to the same value, false otherwise. +function DefaultForShareSettingsPref() +{ + return gHTTP.value == gSSL.value && + gHTTP.value == gFTP.value && + gHTTPPort.value == gSSLPort.value && + gHTTPPort.value == gFTPPort.value; +} + +function DoEnabling() +{ + // convenience arrays + var manual = ["networkProxyHTTP", "networkProxyHTTP_Port", + "networkProxyNone", "advancedButton"]; + var auto = ["networkProxyAutoconfigURL", "autoReload"]; + + switch (gProxyType.value) + { + case kNoProxy: + case kAutoDiscoverProxy: + case kSystemProxy: + Disable(manual); + Disable(auto); + break; + case kManualProxy: + Disable(auto); + if (!gProxyType.locked) + EnableUnlockedElements(manual, true); + break; + case kAutoConfigProxy: + default: + Disable(manual); + if (!gProxyType.locked) + { + EnableElementById("networkProxyAutoconfigURL", true, false); + EnableUnlockedButton(gAutoURL); + } + break; + } +} + +function Disable(aElementIds) +{ + for (var i = 0; i < aElementIds.length; i++) + document.getElementById(aElementIds[i]).setAttribute("disabled", "true"); +} + +function EnableUnlockedElements(aElementIds, aEnable) +{ + for (var i = 0; i < aElementIds.length; i++) + EnableElementById(aElementIds[i], aEnable, false); +} + +function EnableUnlockedButton(aElement) +{ + var enable = gInstantApply || + (aElement.valueFromPreferences == aElement.value); + EnableElementById("autoReload", enable, false); +} + +function ReloadPAC() { + // This reloads the PAC URL stored in preferences. + // When not in instant apply mode, the button that calls this gets + // disabled if the preference and what is showing in the UI differ. + Cc["@mozilla.org/network/protocol-proxy-service;1"] + .getService().reloadPAC(); +} + +function FixProxyURL(aURL) +{ + try + { + aURL.value = + Services.uriFixup.createFixupURI(aURL.value, + Ci.nsIURIFixup.FIXUP_FLAG_NONE).spec; + } + catch (e) {} + + if (!gInstantApply) + EnableUnlockedButton(aURL); +} + +function OpenAdvancedDialog() +{ + document.documentElement.openSubDialog("chrome://communicator/content/pref/pref-proxies-advanced.xul", + "AdvancedProxyPreferences", null); +} + +function DoProxyCopy(aChecked) +{ + DoProxyHostCopy(gHTTP.value); + DoProxyPortCopy(gHTTPPort.value); + var nonshare = ["networkProxySSL", "networkProxySSL_Port", + "networkProxyFTP", "networkProxyFTP_Port"]; + EnableUnlockedElements(nonshare, !aChecked); +} + +function DoProxyHostCopy(aValue) +{ + if (!gShareSettings.value) + return; + + gSSL.value = aValue; + gFTP.value = aValue; +} + +function DoProxyPortCopy(aValue) +{ + if (!gShareSettings.value) + return; + + gSSLPort.value = aValue; + gFTPPort.value = aValue; +} + +function UpdateProxies() +{ + var noProxiesPref = document.getElementById("network.proxy.no_proxies_on"); + + noProxiesPref.value = noProxiesPref.value.replace(/[;, \n]+/g, ", ") + .replace(/^, |, $/g, ""); +} |