Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(896)

Side by Side Diff: chrome/browser/resources/chromeos/diagnostics/main.js

Issue 10825291: Diagnostics UI: more UI implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase @ 151975. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 var localStrings = new LocalStrings();
6
7 cr.define('diag', function() {
8 /**
9 * Encapsulated handling of the diagnostics page.
10 */
11 function DiagPage() {}
12
13 cr.addSingletonGetter(DiagPage);
14
15 /*
16 * Remove all children nodes for an element.
17 * @param {element} parent of the elements to be removed.
18 */
19 function removeChildren(element) {
20 element.textContent = '';
21 }
22
23 /**
24 * List of network adapter types.
25 */
26 DiagPage.AdapterType = [
27 {adapter: 'wlan0', name: localStrings.getString('wlan0')},
28 {adapter: 'eth0', name: localStrings.getString('eth0')},
29 {adapter: 'eth1', name: localStrings.getString('eth1')},
30 {adapter: 'wwan0', name: localStrings.getString('wwan0')},
31 ];
32
33 /**
34 * List of network adapter status.
35 * The numeric value assigned to each status reflects how healthy the network
36 * adapter is.
37 *
38 * @enum {int}
39 */
40 DiagPage.AdapterStatus = {
41 NOT_FOUND: 0,
42 DISABLED: 1,
43 NO_IP: 2,
44 VALID_IP: 3
45 };
46
47 /**
48 * Image elements for icons.
49 */
50 DiagPage.FailIconElement = document.createElement('img');
51 DiagPage.TickIconElement = document.createElement('img');
52 DiagPage.FailIconElement.setAttribute('src', 'fail.png');
53 DiagPage.TickIconElement.setAttribute('src', 'tick.png');
54
55 DiagPage.prototype = {
56 /**
57 * Perform initial setup.
58 */
59 initialize: function() {
60 // Initialize member variables.
61 this.activeAdapter_ = -1;
62 this.adapterStatus_ = new Array();
63
64 // Attempt to update.
65 chrome.send('pageLoaded');
66 },
67
68 /**
69 * Updates the connectivity status with netif information.
70 * @param {String} netifStatus Dictionary of network adapter status.
71 */
72 setNetifStatus_: function(netifStatus) {
73 // Hide the "loading" message.
74 $('loading').hidden = true;
75
76 // Update netif state.
77 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
78 var adapterType = DiagPage.AdapterType[i];
79 var status = netifStatus[adapterType.adapter];
80 if (!status)
81 this.adapterStatus_[i] = DiagPage.AdapterStatus.NOT_FOUND;
82 else if (!status.flags || status.flags.indexOf('up') == -1)
83 this.adapterStatus_[i] = DiagPage.AdapterStatus.DISABLED;
84 else if (!status.ipv4)
85 this.adapterStatus_[i] = DiagPage.AdapterStatus.NO_IP;
86 else
87 this.adapterStatus_[i] = DiagPage.AdapterStatus.VALID_IP;
88 }
89
90 // Update UI
91 this.updateAdapterSelection_();
92 this.updateConnectivityStatus_();
93 },
94
95 /**
96 * Gets the HTML radio input element id for a network adapter.
97 * @private
98 */
99 getAdapterElementId_: function(adapter) {
100 return 'adapter-' + DiagPage.AdapterType[adapter].adapter;
101 },
102
103 /**
104 * Gets the most active adapter based on their status.
105 * @private
106 */
107 getActiveAdapter_: function() {
108 var activeAdapter = -1;
109 var activeAdapterStatus = DiagPage.AdapterStatus.NOT_FOUND;
110 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
111 var status = this.adapterStatus_[i];
112 if (status == DiagPage.AdapterStatus.NOT_FOUND)
113 continue;
114 if (activeAdapter == -1 || status > activeAdapterStatus) {
115 activeAdapter = i;
116 activeAdapterStatus = status;
117 }
118 }
119 return activeAdapter;
120 },
121
122 /**
123 * Update the adapter selection section.
124 * @private
125 */
126 updateAdapterSelection_: function() {
127 // Determine active adapter.
128 if (this.activeAdapter_ == -1)
129 this.activeAdapter_ = this.getActiveAdapter_();
130 // Create HTML radio input elements.
131 var adapterSelectionElement = $('adapter-selection');
132 removeChildren(adapterSelectionElement);
133 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
134 if (this.adapterStatus_[i] == DiagPage.AdapterStatus.NOT_FOUND)
135 continue;
136 var radioElement = document.createElement('input');
137 var elementId = this.getAdapterElementId_(i);
138 radioElement.setAttribute('type', 'radio');
139 radioElement.setAttribute('name', 'adapter');
140 radioElement.setAttribute('id', elementId);
141 if (i == this.activeAdapter_)
142 radioElement.setAttribute('checked', 'true');
143 radioElement.onclick = function(adapter) {
144 this.activeAdapter_ = adapter;
145 this.updateConnectivityStatus_();
146 }.bind(this, i);
147 var labelElement = document.createElement('label');
148 labelElement.setAttribute('for', elementId);
149 labelElement.appendChild(radioElement);
150 labelElement.appendChild(
151 document.createTextNode(DiagPage.AdapterType[i].name));
152 adapterSelectionElement.appendChild(labelElement);
153 adapterSelectionElement.appendChild(document.createElement('br'));
154 }
155 },
156
157 /**
158 * Update the connectivity status for the specified network interface.
159 * @private
160 */
161 updateConnectivityStatus_: function() {
162 var adapter = this.activeAdapter_;
163 var status = this.adapterStatus_[adapter];
164 var name = DiagPage.AdapterType[adapter].name;
165
166 // Status messages for individual tests.
167 var connectivityStatusElement = $('connectivity-status');
168 var testStatusElements = new Array();
169 removeChildren(connectivityStatusElement);
170 for (var i = 0; i < 3; i++) {
171 testStatusElements[i] = document.createElement('div');
172 connectivityStatusElement.appendChild(testStatusElements[i]);
173 }
174 testStatusElements[0].innerHTML =
175 localStrings.getStringF('testing-hardware', name);
176 testStatusElements[1].innerHTML =
177 localStrings.getString('testing-connection-to-router');
178 testStatusElements[2].innerHTML =
179 localStrings.getString('testing-connection-to-internet');
180
181 // Error and recommendation messages may be inserted in test status
182 // elements.
183 var errorElement = document.createElement('div');
184 var recommendationElement = document.createElement('div');
185 errorElement.className = 'test-error';
186 recommendationElement.className = 'recommendation';
187 testStatusElements[0].className = 'test-performed';
188 if (status == DiagPage.AdapterStatus.DISABLED) {
189 errorElement.appendChild(DiagPage.FailIconElement.cloneNode());
190 errorElement.appendChild(document.createTextNode(
191 localStrings.getStringF('adapter-disabled', name)));
192 recommendationElement.innerHTML =
193 localStrings.getStringF('enable-adapter', name);
194 connectivityStatusElement.insertBefore(errorElement,
195 testStatusElements[1]);
196 connectivityStatusElement.insertBefore(recommendationElement,
197 testStatusElements[1]);
198 testStatusElements[1].className = 'test-pending';
199 testStatusElements[2].className = 'test-pending';
200 } else {
201 testStatusElements[0].appendChild(DiagPage.TickIconElement.cloneNode());
202 testStatusElements[1].className = 'test-performed';
203 if (status == DiagPage.AdapterStatus.NO_IP) {
204 errorElement.appendChild(DiagPage.FailIconElement.cloneNode());
205 errorElement.appendChild(document.createTextNode(
206 localStrings.getStringF('adapter-no-ip', name)));
207 recommendationElement.innerHTML =
208 localStrings.getStringF('fix-connection-to-router');
209 connectivityStatusElement.insertBefore(errorElement,
210 testStatusElements[2]);
211 connectivityStatusElement.insertBefore(recommendationElement,
212 testStatusElements[2]);
213 testStatusElements[2].className = 'test-pending';
214 } else {
215 testStatusElements[1].appendChild(
216 DiagPage.TickIconElement.cloneNode());
217 testStatusElements[2].className = 'test-performed';
218 testStatusElements[2].appendChild(
219 DiagPage.TickIconElement.cloneNode());
220 }
221 }
222 }
223 };
224
225 DiagPage.setNetifStatus = function(netifStatus) {
226 DiagPage.getInstance().setNetifStatus_(netifStatus);
227 }
228
229 // Export
230 return {
231 DiagPage: DiagPage
232 };
233 });
234
5 /** 235 /**
6 * Updates the Connectivity Status section. 236 * Initialize the DiagPage upon DOM content loaded.
7 * @param {String} connStatus Dictionary containing connectivity status.
8 */ 237 */
9 function updateConnectivityStatus(connStatus) {
10 var deviceTypes = ['wlan0', 'wwan0', 'eth0', 'eth1'];
11 var deviceNames = ['Wi-Fi', '3G', 'Ethernet0', 'Ethernet1'];
12 for (var i = 0; i < deviceTypes.length; i++) {
13 var deviceName = deviceNames[i];
14 var nameElement = document.createElement('h2');
15 nameElement.appendChild(document.createTextNode(deviceName));
16 $('connectivity-status').appendChild(nameElement);
17
18 var deviceType = deviceTypes[i];
19 var deviceStatus = connStatus[deviceType];
20 var statusMessage;
21 if (!deviceStatus) {
22 statusMessage = 'Device not found.';
23 } else if (!deviceStatus.flags ||
24 deviceStatus.flags.indexOf('up') == -1) {
25 statusMessage = 'Device disabled.';
26 } else if (!deviceStatus.ipv4) {
27 statusMessage = 'IPv4 address unavailable.';
28 } else {
29 statusMessage = 'IPv4 address: ' + deviceStatus.ipv4.addrs;
30 }
31 var statusElement = document.createElement('p');
32 statusElement.appendChild(document.createTextNode(statusMessage));
33 $('connectivity-status').appendChild(statusElement);
34 }
35 }
36
37 document.addEventListener('DOMContentLoaded', function() { 238 document.addEventListener('DOMContentLoaded', function() {
38 chrome.send('pageLoaded'); 239 diag.DiagPage.getInstance().initialize();
39 }); 240 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698