Bug 865850 - Integrate about:networking into Firefox. r=ttaubert

This commit is contained in:
Valentin Gosu 2013-08-07 20:15:28 -04:00
parent f534b77616
commit e3dcbfc16c
9 changed files with 377 additions and 0 deletions

View File

@ -624,6 +624,9 @@ pref("network.protocol-handler.expose.news", false);
pref("network.protocol-handler.expose.snews", false);
pref("network.protocol-handler.expose.nntp", false);
// Warning for about:networking page
pref("network.warnOnAboutNetworking", true);
pref("accessibility.typeaheadfind", false);
pref("accessibility.typeaheadfind.timeout", 5000);
pref("accessibility.typeaheadfind.linksonly", false);

View File

@ -65,6 +65,8 @@ static RedirEntry kRedirMap[] = {
nsIAboutModule::ALLOW_SCRIPT },
{ "telemetry", "chrome://global/content/aboutTelemetry.xhtml",
nsIAboutModule::ALLOW_SCRIPT },
{ "networking", "chrome://global/content/aboutNetworking.xhtml",
nsIAboutModule::ALLOW_SCRIPT },
// about:srcdoc is unresolvable by specification. It is included here
// because the security manager would disallow srcdoc iframes otherwise.
{ "srcdoc", "about:blank",

View File

@ -183,6 +183,7 @@ const mozilla::Module::ContractIDEntry kDocShellContracts[] = {
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "newaddon", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "support", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "telemetry", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "networking", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "srcdoc", &kNS_ABOUT_REDIRECTOR_MODULE_CID },
{ NS_URI_LOADER_CONTRACTID, &kNS_URI_LOADER_CID },
{ NS_DOCUMENTLOADER_SERVICE_CONTRACTID, &kNS_DOCUMENTLOADER_SERVICE_CID },

View File

@ -0,0 +1,60 @@
/* 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/. */
body {
min-width: 330px;
max-width: 100%;
min-height: 330px;
max-height: 100%;
}
#menu {
position: absolute;
top: 5px;
color: gray;
}
.warningBackground {
display: none;
background: -moz-Dialog;
width:100%;
height:100%;
z-index:10;
top:0;
left:0;
position:fixed;
}
.warningMessage {
color: -moz-FieldText;
position: relative;
min-width: 330px;
max-width: 50em;
margin: 4em auto;
border: 1px solid ThreeDShadow;
border-radius: 10px;
padding: 3em;
-moz-padding-start: 30px;
background: -moz-Field;
margin-left: auto;
text-align: center;
}
.tab {
display: none;
}
.active {
display: block;
}
#menu .selected {
color: blue;
}
#refreshdiv {
top: 5px;
position: absolute;
right: 30px;
}

View File

@ -0,0 +1,174 @@
/* 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/. */
'use strict';
const Ci = Components.interfaces;
const Cc = Components.classes;
const Cu = Components.utils;
const gDashboard = Cc['@mozilla.org/network/dashboard;1'].
getService(Ci.nsIDashboard);
const gPrefs = Cc["@mozilla.org/preferences-service;1"].
getService(Ci.nsIPrefService).getBranch("network.");
const REFRESH_INTERVAL_MS = 3000;
function col(element) {
let col = document.createElement('td');
let content = document.createTextNode(element);
col.appendChild(content);
return col;
}
function displayHttp(data) {
let cont = document.getElementById('http_content');
let parent = cont.parentNode;
let new_cont = document.createElement('tbody');
new_cont.setAttribute('id', 'http_content');
for (let i = 0; i < data.host.length; i++) {
let row = document.createElement('tr');
row.appendChild(col(data.host[i]));
row.appendChild(col(data.port[i]));
row.appendChild(col(data.spdy[i]));
row.appendChild(col(data.ssl[i]));
row.appendChild(col(data.active[i].rtt.length));
row.appendChild(col(data.idle[i].rtt.length));
new_cont.appendChild(row);
}
parent.replaceChild(new_cont, cont);
}
function displaySockets(data) {
let cont = document.getElementById('sockets_content');
let parent = cont.parentNode;
let new_cont = document.createElement('tbody');
new_cont.setAttribute('id', 'sockets_content');
for (let i = 0; i < data.host.length; i++) {
let row = document.createElement('tr');
row.appendChild(col(data.host[i]));
row.appendChild(col(data.port[i]));
row.appendChild(col(data.tcp[i]));
row.appendChild(col(data.active[i]));
row.appendChild(col(data.socksent[i]));
row.appendChild(col(data.sockreceived[i]));
new_cont.appendChild(row);
}
parent.replaceChild(new_cont, cont);
}
function displayDns(data) {
let cont = document.getElementById('dns_content');
let parent = cont.parentNode;
let new_cont = document.createElement('tbody');
new_cont.setAttribute('id', 'dns_content');
for (let i = 0; i < data.hostname.length; i++) {
let row = document.createElement('tr');
row.appendChild(col(data.hostname[i]));
row.appendChild(col(data.family[i]));
let column = document.createElement('td');
for (let j = 0; j< data.hostaddr[i].length; j++) {
column.appendChild(document.createTextNode(data.hostaddr[i][j]));
column.appendChild(document.createElement('br'));
}
row.appendChild(column);
row.appendChild(col(data.expiration[i]));
new_cont.appendChild(row);
}
parent.replaceChild(new_cont, cont);
}
function displayWebsockets(data) {
let cont = document.getElementById('websockets_content');
let parent = cont.parentNode;
let new_cont = document.createElement('tbody');
new_cont.setAttribute('id', 'websockets_content');
for (let i = 0; i < data.hostport.length; i++) {
let row = document.createElement('tr');
row.appendChild(col(data.hostport[i]));
row.appendChild(col(data.encrypted[i]));
row.appendChild(col(data.msgsent[i]));
row.appendChild(col(data.msgreceived[i]));
row.appendChild(col(data.sentsize[i]));
row.appendChild(col(data.receivedsize[i]));
new_cont.appendChild(row);
}
parent.replaceChild(new_cont, cont);
}
function requestNetworkingData() {
gDashboard.requestSockets(displaySockets);
gDashboard.requestHttpConnections(displayHttp);
gDashboard.requestWebsocketConnections(displayWebsockets);
gDashboard.requestDNSInfo(displayDns);
}
function init() {
gDashboard.enableLogging = true;
if (gPrefs.getBoolPref("warnOnAboutNetworking")) {
let div = document.getElementById("warning_message");
div.classList.add("active");
document.getElementById("confpref").addEventListener("click", confirm);
}
requestNetworkingData();
document.getElementById("autorefcheck").addEventListener("click", function() {
let refrButton = document.getElementById("refreshButton");
if (this.checked) {
this.interval = setInterval(requestNetworkingData, REFRESH_INTERVAL_MS);
refrButton.disabled = "disabled";
} else {
clearInterval(this.interval);
refrButton.disabled = null;
}
});
let refr = document.getElementById("refreshButton");
refr.addEventListener("click", requestNetworkingData);
if (document.getElementById("autorefcheck").checked)
refr.disabled = "disabled";
// Event delegation on #menu element
let menu = document.getElementById("menu");
menu.addEventListener("click", function click(e) {
if (e.target)
show(e.target);
});
}
function confirm () {
let div = document.getElementById("warning_message");
div.classList.remove("active");
let warnBox = document.getElementById("warncheck");
gPrefs.setBoolPref("warnOnAboutNetworking", warnBox.checked);
}
function show(button) {
let current_tab = document.querySelector(".active");
let content = document.getElementById(button.value);
if (current_tab == content)
return;
current_tab.classList.remove("active");
content.classList.add("active");
let current_button = document.querySelector(".selected");
current_button.classList.remove("selected");
button.classList.add("selected");
}
window.addEventListener("DOMContentLoaded", function load() {
window.removeEventListener("DOMContentLoaded", load);
init();
});

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- 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/. -->
<!DOCTYPE html [
<!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> %htmlDTD;
<!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd"> %globalDTD;
<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd"> %brandDTD;
<!ENTITY % networkingDTD SYSTEM "chrome://global/locale/aboutNetworking.dtd"> %networkingDTD;
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>&aboutNetworking.title;</title>
<link rel="stylesheet" href="chrome://global/skin/about.css" type="text/css" />
<link rel="stylesheet" href="chrome://global/content/aboutNetworking.css" type="text/css" />
<script type="application/javascript;version=1.7" src="chrome://global/content/aboutNetworking.js" />
</head>
<body id="body">
<div id="warning_message" class="warningBackground">
<div class="warningMessage">
&aboutNetworking.warning; <br/> <br/>
<label><input id="warncheck" type="checkbox" checked="yes" />&aboutNetworking.showNextTime;</label> <br/> <br/>
<button id="confpref">&aboutNetworking.ok;</button>
</div>
</div>
<div id="menu">
<button class="selected" value="http">&aboutNetworking.http;</button>
<button value="sockets">&aboutNetworking.sockets;</button>
<button value="dns">&aboutNetworking.dns;</button>
<button value="websockets">&aboutNetworking.websockets;</button>
</div>
<div id="refreshdiv">
<button id="refreshButton">&aboutNetworking.refresh;</button>
<input id="autorefcheck" type="checkbox" name="Autorefresh" />&aboutNetworking.autoRefresh;
</div>
<div id="http" class="tab active">
<table border="1" width="100%">
<thead>
<tr>
<th>&aboutNetworking.hostname;</th>
<th>&aboutNetworking.port;</th>
<th>&aboutNetworking.spdy;</th>
<th>&aboutNetworking.ssl;</th>
<th>&aboutNetworking.active;</th>
<th>&aboutNetworking.idle;</th>
</tr>
</thead>
<tbody id="http_content" />
</table>
</div>
<div id="sockets" class="tab">
<table border="1" width="100%">
<thead>
<tr>
<th>&aboutNetworking.host;</th>
<th>&aboutNetworking.port;</th>
<th>&aboutNetworking.tcp;</th>
<th>&aboutNetworking.active;</th>
<th>&aboutNetworking.sent;</th>
<th>&aboutNetworking.received;</th>
</tr>
</thead>
<tbody id="sockets_content" />
</table>
</div>
<div id="dns" class="tab">
<table border="1" width="100%">
<thead>
<tr>
<th>&aboutNetworking.hostname;</th>
<th>&aboutNetworking.family;</th>
<th>&aboutNetworking.addresses;</th>
<th>&aboutNetworking.expires;</th>
</tr>
</thead>
<tbody id="dns_content" />
</table>
</div>
<div id="websockets" class="tab">
<table border="1" width="100%">
<thead>
<tr>
<th>&aboutNetworking.hostname;</th>
<th>&aboutNetworking.ssl;</th>
<th>&aboutNetworking.messagesSent;</th>
<th>&aboutNetworking.messagesReceived;</th>
<th>&aboutNetworking.bytesSent;</th>
<th>&aboutNetworking.bytesReceived;</th>
</tr>
</thead>
<tbody id="websockets_content" />
</table>
</div>
</body>
</html>

View File

@ -14,6 +14,9 @@ toolkit.jar:
content/global/aboutAbout.xhtml (aboutAbout.xhtml)
content/global/aboutRights.xhtml (aboutRights.xhtml)
content/global/aboutRights-unbranded.xhtml (aboutRights-unbranded.xhtml)
content/global/aboutNetworking.js
content/global/aboutNetworking.xhtml
content/global/aboutNetworking.css
* content/global/aboutSupport.js
* content/global/aboutSupport.xhtml
* content/global/aboutTelemetry.js

View File

@ -0,0 +1,31 @@
<!-- 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/. -->
<!ENTITY aboutNetworking.title "About Networking">
<!ENTITY aboutNetworking.warning "This is very experimental. Do not use without adult supervision.">
<!ENTITY aboutNetworking.showNextTime "Show this warning next time">
<!ENTITY aboutNetworking.ok "OK">
<!ENTITY aboutNetworking.http "Http">
<!ENTITY aboutNetworking.sockets "Sockets">
<!ENTITY aboutNetworking.dns "DNS">
<!ENTITY aboutNetworking.websockets "WebSockets">
<!ENTITY aboutNetworking.refresh "Refresh">
<!ENTITY aboutNetworking.autoRefresh "Autorefresh every 3 seconds">
<!ENTITY aboutNetworking.hostname "Hostname">
<!ENTITY aboutNetworking.port "Port">
<!ENTITY aboutNetworking.spdy "SPDY">
<!ENTITY aboutNetworking.ssl "SSL">
<!ENTITY aboutNetworking.active "Active">
<!ENTITY aboutNetworking.idle "Idle">
<!ENTITY aboutNetworking.host "Host">
<!ENTITY aboutNetworking.tcp "TCP">
<!ENTITY aboutNetworking.sent "Sent">
<!ENTITY aboutNetworking.received "Received">
<!ENTITY aboutNetworking.family "Family">
<!ENTITY aboutNetworking.addresses "Addresses">
<!ENTITY aboutNetworking.expires "Expires (Seconds)">
<!ENTITY aboutNetworking.messagesSent "Messages Sent">
<!ENTITY aboutNetworking.messagesReceived "Messages Received">
<!ENTITY aboutNetworking.bytesSent "Bytes Sent">
<!ENTITY aboutNetworking.bytesReceived "Bytes Received">

View File

@ -9,6 +9,7 @@
locale/@AB_CD@/global/about.dtd (%chrome/global/about.dtd)
locale/@AB_CD@/global/aboutAbout.dtd (%chrome/global/aboutAbout.dtd)
locale/@AB_CD@/global/aboutRights.dtd (%chrome/global/aboutRights.dtd)
locale/@AB_CD@/global/aboutNetworking.dtd (%chrome/global/aboutNetworking.dtd)
locale/@AB_CD@/global/aboutSupport.dtd (%chrome/global/aboutSupport.dtd)
locale/@AB_CD@/global/aboutSupport.properties (%chrome/global/aboutSupport.properties)
locale/@AB_CD@/global/aboutTelemetry.dtd (%chrome/global/aboutTelemetry.dtd)