1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/content/aboutNetworking.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,205 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +'use strict'; 1.9 + 1.10 +const Ci = Components.interfaces; 1.11 +const Cc = Components.classes; 1.12 +const Cu = Components.utils; 1.13 + 1.14 +const gDashboard = Cc['@mozilla.org/network/dashboard;1']. 1.15 + getService(Ci.nsIDashboard); 1.16 +const gPrefs = Cc["@mozilla.org/preferences-service;1"]. 1.17 + getService(Ci.nsIPrefService).getBranch("network."); 1.18 +const gRequestNetworkingData = { 1.19 + "http": gDashboard.requestHttpConnections, 1.20 + "sockets": gDashboard.requestSockets, 1.21 + "dns": gDashboard.requestDNSInfo, 1.22 + "websockets": gDashboard.requestWebsocketConnections 1.23 +}; 1.24 +const gDashboardCallbacks = { 1.25 + "http": displayHttp, 1.26 + "sockets": displaySockets, 1.27 + "dns": displayDns, 1.28 + "websockets": displayWebsockets 1.29 +}; 1.30 + 1.31 +const REFRESH_INTERVAL_MS = 3000; 1.32 + 1.33 +function col(element) { 1.34 + let col = document.createElement('td'); 1.35 + let content = document.createTextNode(element); 1.36 + col.appendChild(content); 1.37 + return col; 1.38 +} 1.39 + 1.40 +function displayHttp(data) { 1.41 + let cont = document.getElementById('http_content'); 1.42 + let parent = cont.parentNode; 1.43 + let new_cont = document.createElement('tbody'); 1.44 + new_cont.setAttribute('id', 'http_content'); 1.45 + 1.46 + for (let i = 0; i < data.connections.length; i++) { 1.47 + let row = document.createElement('tr'); 1.48 + row.appendChild(col(data.connections[i].host)); 1.49 + row.appendChild(col(data.connections[i].port)); 1.50 + row.appendChild(col(data.connections[i].spdy)); 1.51 + row.appendChild(col(data.connections[i].ssl)); 1.52 + row.appendChild(col(data.connections[i].active.length)); 1.53 + row.appendChild(col(data.connections[i].idle.length)); 1.54 + new_cont.appendChild(row); 1.55 + } 1.56 + 1.57 + parent.replaceChild(new_cont, cont); 1.58 +} 1.59 + 1.60 +function displaySockets(data) { 1.61 + let cont = document.getElementById('sockets_content'); 1.62 + let parent = cont.parentNode; 1.63 + let new_cont = document.createElement('tbody'); 1.64 + new_cont.setAttribute('id', 'sockets_content'); 1.65 + 1.66 + for (let i = 0; i < data.sockets.length; i++) { 1.67 + let row = document.createElement('tr'); 1.68 + row.appendChild(col(data.sockets[i].host)); 1.69 + row.appendChild(col(data.sockets[i].port)); 1.70 + row.appendChild(col(data.sockets[i].tcp)); 1.71 + row.appendChild(col(data.sockets[i].active)); 1.72 + row.appendChild(col(data.sockets[i].sent)); 1.73 + row.appendChild(col(data.sockets[i].received)); 1.74 + new_cont.appendChild(row); 1.75 + } 1.76 + 1.77 + parent.replaceChild(new_cont, cont); 1.78 +} 1.79 + 1.80 +function displayDns(data) { 1.81 + let cont = document.getElementById('dns_content'); 1.82 + let parent = cont.parentNode; 1.83 + let new_cont = document.createElement('tbody'); 1.84 + new_cont.setAttribute('id', 'dns_content'); 1.85 + 1.86 + for (let i = 0; i < data.entries.length; i++) { 1.87 + let row = document.createElement('tr'); 1.88 + row.appendChild(col(data.entries[i].hostname)); 1.89 + row.appendChild(col(data.entries[i].family)); 1.90 + let column = document.createElement('td'); 1.91 + 1.92 + for (let j = 0; j < data.entries[i].hostaddr.length; j++) { 1.93 + column.appendChild(document.createTextNode(data.entries[i].hostaddr[j])); 1.94 + column.appendChild(document.createElement('br')); 1.95 + } 1.96 + 1.97 + row.appendChild(column); 1.98 + row.appendChild(col(data.entries[i].expiration)); 1.99 + new_cont.appendChild(row); 1.100 + } 1.101 + 1.102 + parent.replaceChild(new_cont, cont); 1.103 +} 1.104 + 1.105 +function displayWebsockets(data) { 1.106 + let cont = document.getElementById('websockets_content'); 1.107 + let parent = cont.parentNode; 1.108 + let new_cont = document.createElement('tbody'); 1.109 + new_cont.setAttribute('id', 'websockets_content'); 1.110 + 1.111 + for (let i = 0; i < data.websockets.length; i++) { 1.112 + let row = document.createElement('tr'); 1.113 + row.appendChild(col(data.websockets[i].hostport)); 1.114 + row.appendChild(col(data.websockets[i].encrypted)); 1.115 + row.appendChild(col(data.websockets[i].msgsent)); 1.116 + row.appendChild(col(data.websockets[i].msgreceived)); 1.117 + row.appendChild(col(data.websockets[i].sentsize)); 1.118 + row.appendChild(col(data.websockets[i].receivedsize)); 1.119 + new_cont.appendChild(row); 1.120 + } 1.121 + 1.122 + parent.replaceChild(new_cont, cont); 1.123 +} 1.124 + 1.125 +function requestAllNetworkingData() { 1.126 + for (let id in gRequestNetworkingData) 1.127 + requestNetworkingDataForTab(id); 1.128 +} 1.129 + 1.130 +function requestNetworkingDataForTab(id) { 1.131 + gRequestNetworkingData[id](gDashboardCallbacks[id]); 1.132 +} 1.133 + 1.134 +function init() { 1.135 + gDashboard.enableLogging = true; 1.136 + if (gPrefs.getBoolPref("warnOnAboutNetworking")) { 1.137 + let div = document.getElementById("warning_message"); 1.138 + div.classList.add("active"); 1.139 + document.getElementById("confpref").addEventListener("click", confirm); 1.140 + } 1.141 + 1.142 + requestAllNetworkingData(); 1.143 + 1.144 + let autoRefresh = document.getElementById("autorefcheck"); 1.145 + if (autoRefresh.checked) 1.146 + setAutoRefreshInterval(autoRefresh); 1.147 + 1.148 + autoRefresh.addEventListener("click", function() { 1.149 + let refrButton = document.getElementById("refreshButton"); 1.150 + if (this.checked) { 1.151 + setAutoRefreshInterval(this); 1.152 + refrButton.disabled = "disabled"; 1.153 + } else { 1.154 + clearInterval(this.interval); 1.155 + refrButton.disabled = null; 1.156 + } 1.157 + }); 1.158 + 1.159 + let refr = document.getElementById("refreshButton"); 1.160 + refr.addEventListener("click", requestAllNetworkingData); 1.161 + if (document.getElementById("autorefcheck").checked) 1.162 + refr.disabled = "disabled"; 1.163 + 1.164 + // Event delegation on #menu element 1.165 + let menu = document.getElementById("menu"); 1.166 + menu.addEventListener("click", function click(e) { 1.167 + if (e.target && e.target.parentNode == menu) 1.168 + show(e.target); 1.169 + }); 1.170 +} 1.171 + 1.172 +function confirm () { 1.173 + let div = document.getElementById("warning_message"); 1.174 + div.classList.remove("active"); 1.175 + let warnBox = document.getElementById("warncheck"); 1.176 + gPrefs.setBoolPref("warnOnAboutNetworking", warnBox.checked); 1.177 +} 1.178 + 1.179 +function show(button) { 1.180 + let current_tab = document.querySelector(".active"); 1.181 + let content = document.getElementById(button.value); 1.182 + if (current_tab == content) 1.183 + return; 1.184 + current_tab.classList.remove("active"); 1.185 + content.classList.add("active"); 1.186 + 1.187 + let current_button = document.querySelector(".selected"); 1.188 + current_button.classList.remove("selected"); 1.189 + button.classList.add("selected"); 1.190 + 1.191 + let autoRefresh = document.getElementById("autorefcheck"); 1.192 + if (autoRefresh.checked) { 1.193 + clearInterval(autoRefresh.interval); 1.194 + setAutoRefreshInterval(autoRefresh); 1.195 + } 1.196 +} 1.197 + 1.198 +function setAutoRefreshInterval(checkBox) { 1.199 + let active_tab = document.querySelector(".active"); 1.200 + checkBox.interval = setInterval(function() { 1.201 + requestNetworkingDataForTab(active_tab.id); 1.202 + }, REFRESH_INTERVAL_MS); 1.203 +} 1.204 + 1.205 +window.addEventListener("DOMContentLoaded", function load() { 1.206 + window.removeEventListener("DOMContentLoaded", load); 1.207 + init(); 1.208 +});