summaryrefslogtreecommitdiffstats
path: root/comm/suite/components/pref/content/pref-proxies.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--comm/suite/components/pref/content/pref-proxies.js188
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, "");
+}