toolkit/content/aboutNetworking.js

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:15a8677d3131
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/. */
4
5 'use strict';
6
7 const Ci = Components.interfaces;
8 const Cc = Components.classes;
9 const Cu = Components.utils;
10
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
20 };
21 const gDashboardCallbacks = {
22 "http": displayHttp,
23 "sockets": displaySockets,
24 "dns": displayDns,
25 "websockets": displayWebsockets
26 };
27
28 const REFRESH_INTERVAL_MS = 3000;
29
30 function col(element) {
31 let col = document.createElement('td');
32 let content = document.createTextNode(element);
33 col.appendChild(content);
34 return col;
35 }
36
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');
42
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 }
53
54 parent.replaceChild(new_cont, cont);
55 }
56
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');
62
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 }
73
74 parent.replaceChild(new_cont, cont);
75 }
76
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');
82
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');
88
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 }
93
94 row.appendChild(column);
95 row.appendChild(col(data.entries[i].expiration));
96 new_cont.appendChild(row);
97 }
98
99 parent.replaceChild(new_cont, cont);
100 }
101
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');
107
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 }
118
119 parent.replaceChild(new_cont, cont);
120 }
121
122 function requestAllNetworkingData() {
123 for (let id in gRequestNetworkingData)
124 requestNetworkingDataForTab(id);
125 }
126
127 function requestNetworkingDataForTab(id) {
128 gRequestNetworkingData[id](gDashboardCallbacks[id]);
129 }
130
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 }
138
139 requestAllNetworkingData();
140
141 let autoRefresh = document.getElementById("autorefcheck");
142 if (autoRefresh.checked)
143 setAutoRefreshInterval(autoRefresh);
144
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 });
155
156 let refr = document.getElementById("refreshButton");
157 refr.addEventListener("click", requestAllNetworkingData);
158 if (document.getElementById("autorefcheck").checked)
159 refr.disabled = "disabled";
160
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 });
167 }
168
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);
174 }
175
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");
183
184 let current_button = document.querySelector(".selected");
185 current_button.classList.remove("selected");
186 button.classList.add("selected");
187
188 let autoRefresh = document.getElementById("autorefcheck");
189 if (autoRefresh.checked) {
190 clearInterval(autoRefresh.interval);
191 setAutoRefreshInterval(autoRefresh);
192 }
193 }
194
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);
200 }
201
202 window.addEventListener("DOMContentLoaded", function load() {
203 window.removeEventListener("DOMContentLoaded", load);
204 init();
205 });

mercurial