Revision control

Copy as Markdown

Other Tools

/* 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, "");
}