Bumping manifests a=b2g-bump
[gecko.git] / toolkit / content / aboutNetworking.js
blobcb6207009ff895c14e8c417f3f06c7128f4d1727
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 'use strict';
7 const Ci = Components.interfaces;
8 const Cc = Components.classes;
9 const Cu = Components.utils;
11 const gDashboard = Cc['@mozilla.org/network/dashboard;1'].
12   getService(Ci.nsIDashboard);
13 const gPrefs = Cc["@mozilla.org/preferences-service;1"].
14   getService(Ci.nsIPrefService).getBranch("network.");
15 const gRequestNetworkingData = {
16   "http": gDashboard.requestHttpConnections,
17   "sockets": gDashboard.requestSockets,
18   "dns": gDashboard.requestDNSInfo,
19   "websockets": gDashboard.requestWebsocketConnections
21 const gDashboardCallbacks = {
22   "http": displayHttp,
23   "sockets": displaySockets,
24   "dns": displayDns,
25   "websockets": displayWebsockets
28 const REFRESH_INTERVAL_MS = 3000;
30 function col(element) {
31   let col = document.createElement('td');
32   let content = document.createTextNode(element);
33   col.appendChild(content);
34   return col;
37 function displayHttp(data) {
38   let cont = document.getElementById('http_content');
39   let parent = cont.parentNode;
40   let new_cont = document.createElement('tbody');
41   new_cont.setAttribute('id', 'http_content');
43   for (let i = 0; i < data.connections.length; i++) {
44     let row = document.createElement('tr');
45     row.appendChild(col(data.connections[i].host));
46     row.appendChild(col(data.connections[i].port));
47     row.appendChild(col(data.connections[i].spdy));
48     row.appendChild(col(data.connections[i].ssl));
49     row.appendChild(col(data.connections[i].active.length));
50     row.appendChild(col(data.connections[i].idle.length));
51     new_cont.appendChild(row);
52   }
54   parent.replaceChild(new_cont, cont);
57 function displaySockets(data) {
58   let cont = document.getElementById('sockets_content');
59   let parent = cont.parentNode;
60   let new_cont = document.createElement('tbody');
61   new_cont.setAttribute('id', 'sockets_content');
63   for (let i = 0; i < data.sockets.length; i++) {
64     let row = document.createElement('tr');
65     row.appendChild(col(data.sockets[i].host));
66     row.appendChild(col(data.sockets[i].port));
67     row.appendChild(col(data.sockets[i].tcp));
68     row.appendChild(col(data.sockets[i].active));
69     row.appendChild(col(data.sockets[i].sent));
70     row.appendChild(col(data.sockets[i].received));
71     new_cont.appendChild(row);
72   }
74   parent.replaceChild(new_cont, cont);
77 function displayDns(data) {
78   let cont = document.getElementById('dns_content');
79   let parent = cont.parentNode;
80   let new_cont = document.createElement('tbody');
81   new_cont.setAttribute('id', 'dns_content');
83   for (let i = 0; i < data.entries.length; i++) {
84     let row = document.createElement('tr');
85     row.appendChild(col(data.entries[i].hostname));
86     row.appendChild(col(data.entries[i].family));
87     let column = document.createElement('td');
89     for (let j = 0; j < data.entries[i].hostaddr.length; j++) {
90       column.appendChild(document.createTextNode(data.entries[i].hostaddr[j]));
91       column.appendChild(document.createElement('br'));
92     }
94     row.appendChild(column);
95     row.appendChild(col(data.entries[i].expiration));
96     new_cont.appendChild(row);
97   }
99   parent.replaceChild(new_cont, cont);
102 function displayWebsockets(data) {
103   let cont = document.getElementById('websockets_content');
104   let parent = cont.parentNode;
105   let new_cont = document.createElement('tbody');
106   new_cont.setAttribute('id', 'websockets_content');
108   for (let i = 0; i < data.websockets.length; i++) {
109     let row = document.createElement('tr');
110     row.appendChild(col(data.websockets[i].hostport));
111     row.appendChild(col(data.websockets[i].encrypted));
112     row.appendChild(col(data.websockets[i].msgsent));
113     row.appendChild(col(data.websockets[i].msgreceived));
114     row.appendChild(col(data.websockets[i].sentsize));
115     row.appendChild(col(data.websockets[i].receivedsize));
116     new_cont.appendChild(row);
117   }
119   parent.replaceChild(new_cont, cont);
122 function requestAllNetworkingData() {
123   for (let id in gRequestNetworkingData)
124     requestNetworkingDataForTab(id);
127 function requestNetworkingDataForTab(id) {
128   gRequestNetworkingData[id](gDashboardCallbacks[id]);
131 function init() {
132   gDashboard.enableLogging = true;
133   if (gPrefs.getBoolPref("warnOnAboutNetworking")) {
134     let div = document.getElementById("warning_message");
135     div.classList.add("active");
136     document.getElementById("confpref").addEventListener("click", confirm);
137   }
139   requestAllNetworkingData();
141   let autoRefresh = document.getElementById("autorefcheck");
142   if (autoRefresh.checked)
143     setAutoRefreshInterval(autoRefresh);
145   autoRefresh.addEventListener("click", function() {
146     let refrButton = document.getElementById("refreshButton");
147     if (this.checked) {
148       setAutoRefreshInterval(this);
149       refrButton.disabled = "disabled";
150     } else {
151       clearInterval(this.interval);
152       refrButton.disabled = null;
153     }
154   });
156   let refr = document.getElementById("refreshButton");
157   refr.addEventListener("click", requestAllNetworkingData);
158   if (document.getElementById("autorefcheck").checked)
159     refr.disabled = "disabled";
161   // Event delegation on #menu element
162   let menu = document.getElementById("menu");
163   menu.addEventListener("click", function click(e) {
164     if (e.target && e.target.parentNode == menu)
165       show(e.target);
166   });
169 function confirm () {
170   let div = document.getElementById("warning_message");
171   div.classList.remove("active");
172   let warnBox = document.getElementById("warncheck");
173   gPrefs.setBoolPref("warnOnAboutNetworking", warnBox.checked);
176 function show(button) {
177   let current_tab = document.querySelector(".active");
178   let content = document.getElementById(button.value);
179   if (current_tab == content)
180     return;
181   current_tab.classList.remove("active");
182   content.classList.add("active");
184   let current_button = document.querySelector(".selected");
185   current_button.classList.remove("selected");
186   button.classList.add("selected");
188   let autoRefresh = document.getElementById("autorefcheck");
189   if (autoRefresh.checked) {
190     clearInterval(autoRefresh.interval);
191     setAutoRefreshInterval(autoRefresh);
192   }
195 function setAutoRefreshInterval(checkBox) {
196   let active_tab = document.querySelector(".active");
197   checkBox.interval = setInterval(function() {
198     requestNetworkingDataForTab(active_tab.id);
199   }, REFRESH_INTERVAL_MS);
202 window.addEventListener("DOMContentLoaded", function load() {
203   window.removeEventListener("DOMContentLoaded", load);
204   init();