bug=223908(Add "Net config" selector)

r=neil.parkwaycc.co.uk sr=jst patch=leon.sha@sun.com
This commit is contained in:
pete.zha%sun.com 2003-12-31 07:13:12 +00:00
Родитель 7dfde6c1de
Коммит 518649d98b
6 изменённых файлов: 175 добавлений и 8 удалений

Просмотреть файл

@ -336,4 +336,7 @@ Contributor(s):
<statusbarpanel class="statusbarpanel-iconic" id="security-button"
onclick="BrowserPageInfo(null, 'securityTab')"/>
</statusbar>
<popupset>
<popup id="networkProperties"/>
</popupset>
</window>

Просмотреть файл

@ -52,6 +52,11 @@
const kIOServiceProgID = "@mozilla.org/network/io-service;1";
const kObserverServiceProgID = "@mozilla.org/observer-service;1";
const kProxyManual = ["network.proxy.ftp",
"network.proxy.gopher",
"network.proxy.http",
"network.proxy.socks",
"network.proxy.ssl"];
function toggleOfflineStatus()
{
@ -74,6 +79,102 @@ function toggleOfflineStatus()
ioService.offline = !ioService.offline;
}
function setNetworkStatus(networkProxyType)
{
var prefService = Components.classes["@mozilla.org/preferences-service;1"];
prefService = prefService.getService(Components.interfaces.nsIPrefService);
var prefBranch = prefService.getBranch(null);
try {
prefBranch.setIntPref("network.proxy.type", networkProxyType);
}
catch (ex) {}
}
function InitProxyMenu()
{
var networkProxyNo = document.getElementById("network-proxy-no");
var networkProxyManual = document.getElementById("network-proxy-manual");
var networkProxyPac = document.getElementById("network-proxy-pac");
if (!networkProxyNo || !networkProxyManual || !networkProxyPac)
return;
var networkProxyStatus = [networkProxyNo, networkProxyManual, networkProxyPac];
var prefService = Components.classes["@mozilla.org/preferences-service;1"];
prefService = prefService.getService(Components.interfaces.nsIPrefService);
var prefBranch = prefService.getBranch(null);
var proxyLocked = prefBranch.prefIsLocked("network.proxy.type");
if (proxyLocked) {
networkProxyNo.setAttribute("disabled", "true");
}
else {
networkProxyNo.removeAttribute("disabled");
}
// If no proxy is configured, disable the menuitems.
// Checking for proxy manual settings.
var proxyManuallyConfigured = false;
for (var i = 0; i < kProxyManual.length; i++) {
if (GetStringPref(kProxyManual[i]) != "") {
proxyManuallyConfigured = true;
break;
}
}
if (proxyManuallyConfigured && !proxyLocked) {
networkProxyManual.removeAttribute("disabled");
}
else {
networkProxyManual.setAttribute("disabled", "true");
}
//Checking for proxy PAC settings.
var proxyAutoConfigured = false;
if (GetStringPref("network.proxy.autoconfig_url") != "")
proxyAutoConfigured = true;
if (proxyAutoConfigured && !proxyLocked) {
networkProxyPac.removeAttribute("disabled");
}
else {
networkProxyPac.setAttribute("disabled", "true");
}
var networkProxyType;
try {
networkProxyType = prefBranch.getIntPref("network.proxy.type");
} catch(e) {}
networkProxyStatus[networkProxyType].setAttribute("checked", "true");
}
function setProxyTypeUI()
{
var panel = document.getElementById("offline-status");
if (!panel)
return;
var prefService = Components.classes["@mozilla.org/preferences-service;1"];
prefService = prefService.getService(Components.interfaces.nsIPrefService);
var prefBranch = prefService.getBranch(null);
try {
var networkProxyType = prefBranch.getIntPref("network.proxy.type");
} catch(e) {}
var onlineTooltip = "onlineTooltip" + networkProxyType;
var bundle = srGetStrBundle("chrome://communicator/locale/utilityOverlay.properties");
panel.setAttribute("tooltiptext", bundle.GetStringFromName(onlineTooltip));
}
function GetStringPref(name)
{
try {
return pref.getComplexValue(name, Components.interfaces.nsISupportsString).data;
} catch (e) {}
return "";
}
function setOfflineUI(offline)
{
var broadcaster = document.getElementById("Communicator:WorkMode");
@ -83,9 +184,7 @@ function setOfflineUI(offline)
//Checking for a preference "network.online", if it's locked, disabling
// network icon and menu item
var prefService = Components.classes["@mozilla.org/preferences-service;1"];
prefService = prefService.getService();
prefService = prefService.QueryInterface(Components.interfaces.nsIPrefService);
prefService = prefService.getService(Components.interfaces.nsIPrefService);
var prefBranch = prefService.getBranch(null);
var offlineLocked = prefBranch.prefIsLocked("network.online");
@ -100,13 +199,19 @@ function setOfflineUI(offline)
{
broadcaster.setAttribute("offline", "true");
broadcaster.setAttribute("checked", "true");
panel.removeAttribute("context");
panel.setAttribute("tooltiptext", bundle.GetStringFromName("offlineTooltip"));
}
else
{
broadcaster.removeAttribute("offline");
broadcaster.removeAttribute("checked");
panel.setAttribute("tooltiptext", bundle.GetStringFromName("onlineTooltip"));
panel.setAttribute("context", "networkProperties");
try {
var networkProxyType = prefBranch.getIntPref("network.proxy.type");
} catch(e) {}
var onlineTooltip = "onlineTooltip" + networkProxyType;
panel.setAttribute("tooltiptext", bundle.GetStringFromName(onlineTooltip));
}
}
@ -382,6 +487,16 @@ var offlineObserver = {
}
}
var proxyTypeObserver = {
observe: function(subject, topic, state) {
// sanity checks
var ioService = Components.classes[kIOServiceProgID]
.getService(Components.interfaces.nsIIOService);
if (state == "network.proxy.type" && !ioService.offline)
setProxyTypeUI();
}
}
function utilityOnLoad(aEvent)
{
var broadcaster = document.getElementById("Communicator:WorkMode");
@ -389,9 +504,14 @@ function utilityOnLoad(aEvent)
var observerService = Components.classes[kObserverServiceProgID]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(offlineObserver, "network:offline-status-changed", false);
// make sure we remove this observer later
var prefService = Components.classes["@mozilla.org/preferences-service;1"];
prefService = prefService.getService(Components.interfaces.nsIPrefService);
var prefBranch = prefService.getBranch(null);
prefBranch.addObserver("network.proxy.type", proxyTypeObserver, false);
addEventListener("unload", utilityOnUnload, false);
// set the initial state
@ -405,6 +525,11 @@ function utilityOnUnload(aEvent)
var observerService = Components.classes[kObserverServiceProgID]
.getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(offlineObserver, "network:offline-status-changed");
var prefService = Components.classes["@mozilla.org/preferences-service;1"];
prefService = prefService.getService(Components.interfaces.nsIPrefService);
var prefBranch = prefService.getBranch(null);
prefBranch.removeObserver("network.proxy.type", proxyTypeObserver);
}
addEventListener("load", utilityOnLoad, false);

Просмотреть файл

@ -29,7 +29,34 @@
type="checkbox"
oncommand="toggleOfflineStatus();"/>
<statusbarpanel id="offline-status"
<popup id="networkProperties" onpopupshown="InitProxyMenu();">
<menuitem id="network-proxy-no"
type="radio"
name="status"
label="&direct.label;"
accesskey="&direct.accesskey;"
oncommand="setNetworkStatus('0')"/>
<menuitem id="network-proxy-manual"
type="radio"
name="status"
label="&manual.label;"
accesskey="&manual.accesskey;"
oncommand="setNetworkStatus('1')"/>
<menuitem id="network-proxy-pac"
type="radio"
name="status"
label="&pac.label;"
accesskey="&pac.accesskey;"
oncommand="setNetworkStatus('2')"/>
<menuseparator/>
<menuitem label="&proxy.label;"
accesskey="&proxy.accesskey;"
oncommand="goPreferences('advancedItem',
'chrome://communicator/content/pref/pref-proxies.xul',
'proxiesItem');"/>
</popup>
<statusbarpanel id="offline-status" context="networkProperties"
observes="Communicator:WorkMode"/>
<menuitem id="offlineGoOfflineCmd"

Просмотреть файл

@ -70,3 +70,13 @@
<!ENTITY aboutCmd.accesskey "A">
<!ENTITY aboutCommPluginsCmd.label "About Plug-ins">
<!ENTITY aboutCommPluginsCmd.accesskey "p">
<!ENTITY direct.label "Online (proxy: none)">
<!ENTITY direct.accesskey "n">
<!ENTITY manual.label "Online (proxy: manual)">
<!ENTITY manual.accesskey "m">
<!ENTITY pac.label "Online (proxy: auto)">
<!ENTITY pac.accesskey "a">
<!ENTITY proxy.label "Proxy Configuration...">
<!ENTITY proxy.accesskey "C">

Просмотреть файл

@ -1,4 +1,6 @@
onlineTooltip=You are online. Click the icon to go offline.
onlineTooltip0=You are online (proxy: none). Click the icon to go offline.
onlineTooltip1=You are online (proxy: manual). Click the icon to go offline.
onlineTooltip2=You are online (proxy: auto). Click the icon to go offline.
offlineTooltip=You are offline. Click the icon to go online.

Просмотреть файл

@ -142,7 +142,7 @@
<treecell url="chrome://communicator/content/pref/pref-cache.xul" label="&cache.label;"/>
</treerow>
</treeitem>
<treeitem>
<treeitem id="proxiesItem">
<treerow>
<treecell url="chrome://communicator/content/pref/pref-proxies.xul" label="&proxies.label;"/>
</treerow>