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

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: Use formatted templates in grd file to handle the long paragraphs of UI strings. 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() {}
xiyuan 2012/08/15 23:41:28 nit: Move this down to be with cr.addSingletonGett
hshi1 2012/08/16 00:29:17 Done.
12
13 /*
14 * Remove all children nodes for an element.
15 * @param {element} parent of the elements to be removed.
16 */
17 function removeChildren(element) {
18 element.textContent = '';
19 }
20
21 /**
22 * Creates an element named |elementName| containing the content |text|.
23 * @param {string} elementName Name of the new element to be created.
24 * @param {string} text Text to be contained in the new element.
25 * @return {HTMLElement} The newly created HTML element.
26 */
27 function createElementFromText(elementName, text) {
28 var element = document.createElement(elementName);
29 element.appendChild(document.createTextNode(text));
30 return element;
31 }
32
33 cr.addSingletonGetter(DiagPage);
34
35 /**
36 * List of network adapter types.
37 */
38 DiagPage.AdapterType = [
39 {adapter: 'wlan0', name: localStrings.getString('wlan0')},
40 {adapter: 'eth0', name: localStrings.getString('eth0')},
41 {adapter: 'eth1', name: localStrings.getString('eth1')},
42 {adapter: 'wwan0', name: localStrings.getString('wwan0')},
43 ];
44
45 /**
46 * List of network adapter status.
47 * The numeric value assigned to each status reflects how healthy the network
48 * adapter is.
49 *
50 * @enum {int}
51 */
52 DiagPage.AdapterStatus = {
53 NOT_FOUND: 0,
54 DISABLED: 1,
55 NO_IP: 2,
56 VALID_IP: 3
57 };
58
59 DiagPage.prototype = {
60 /**
61 * Perform initial setup.
62 */
63 initialize: function() {
64 // Initialize member variables.
65 this.activeAdapter_ = -1;
66 this.adapterStatus_ = new Array();
67
68 // Attempt to update.
69 chrome.send('pageLoaded');
70 },
71
72 /**
73 * Updates the connectivity status with netif information.
74 * @param {String} netifStatus Dictionary of network adapter status.
75 */
76 setNetifStatus_: function(netifStatus) {
77 // Hide the "loading" message.
78 $('loading').hidden = true;
79
80 // Update netif state.
81 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
82 var adapterType = DiagPage.AdapterType[i];
83 var status = netifStatus[adapterType.adapter];
84 if (!status)
85 this.adapterStatus_[i] = DiagPage.AdapterStatus.NOT_FOUND;
86 else if (!status.flags || status.flags.indexOf('up') == -1)
87 this.adapterStatus_[i] = DiagPage.AdapterStatus.DISABLED;
88 else if (!status.ipv4)
89 this.adapterStatus_[i] = DiagPage.AdapterStatus.NO_IP;
90 else
91 this.adapterStatus_[i] = DiagPage.AdapterStatus.VALID_IP;
92 }
93
94 // Update UI
95 this.updateAdapterSelection_();
96 this.updateConnectivityStatus_();
97 },
98
99 /**
100 * Gets the HTML radio input element id for a network adapter.
101 * @private
102 */
103 getAdapterElementId_: function(adapter) {
104 return 'adapter-' + DiagPage.AdapterType[adapter].adapter;
105 },
106
107 /**
108 * Gets the most active adapter based on their status.
109 * @private
110 */
111 getActiveAdapter_: function() {
112 var activeAdapter = -1;
113 var activeAdapterStatus = DiagPage.AdapterStatus.NOT_FOUND;
114 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
115 var status = this.adapterStatus_[i];
116 if (status == DiagPage.AdapterStatus.NOT_FOUND)
117 continue;
118 if (activeAdapter == -1 || status > activeAdapterStatus) {
119 activeAdapter = i;
120 activeAdapterStatus = status;
121 }
122 }
123 return activeAdapter;
124 },
125
126 /**
127 * Update the adapter selection section.
128 * @private
129 */
130 updateAdapterSelection_: function() {
131 // Determine active adapter.
132 if (this.activeAdapter_ == -1)
133 this.activeAdapter_ = this.getActiveAdapter_();
134 // Create HTML radio input elements.
135 var adapterSelectionElement = $('adapter-selection');
136 removeChildren(adapterSelectionElement);
137 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
138 if (this.adapterStatus_[i] == DiagPage.AdapterStatus.NOT_FOUND)
139 continue;
140 var radioElement = document.createElement('input');
141 radioElement.setAttribute('type', 'radio');
142 radioElement.setAttribute('name', 'adapter');
143 radioElement.setAttribute('id', this.getAdapterElementId_(i));
144 if (i == this.activeAdapter_)
145 radioElement.setAttribute('checked', 'true');
146 radioElement.onclick = function(adapter) {
147 this.activeAdapter_ = adapter;
148 this.updateConnectivityStatus_();
149 }.bind(this, i);
150 adapterSelectionElement.appendChild(radioElement);
151 adapterSelectionElement.appendChild(
152 document.createTextNode(DiagPage.AdapterType[i].name));
xiyuan 2012/08/15 23:41:28 nit: Maybe use a <label for="radio_element_id">xxx
hshi1 2012/08/16 00:29:17 Done.
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', 1, name);
176 testStatusElements[1].innerHTML =
177 localStrings.getStringF('testing-connection-to-router', 2);
178 testStatusElements[2].innerHTML =
179 localStrings.getStringF('testing-connection-to-internet', 3);
xiyuan 2012/08/15 23:41:28 nit: It seems to be that your cuold make step numb
hshi1 2012/08/16 00:29:17 Done.
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 var failIconElement = document.createElement('img');
186 var tickIconElement = document.createElement('img');
xiyuan 2012/08/15 23:41:28 nit: Since we are cloneNode of the two image eleme
hshi1 2012/08/16 00:29:17 Done.
187 errorElement.setAttribute('class', 'test-error');
xiyuan 2012/08/15 23:41:28 nit: errorElement.className = 'test-error'; or err
hshi1 2012/08/16 00:29:17 Done.
188 recommendationElement.setAttribute('class', 'recommendation');
189 failIconElement.setAttribute('src', 'fail.png');
190 tickIconElement.setAttribute('src', 'tick.png');
191
192 testStatusElements[0].setAttribute('class', 'test-performed');
193 if (status == DiagPage.AdapterStatus.DISABLED) {
194 errorElement.appendChild(failIconElement.cloneNode());
195 errorElement.appendChild(document.createTextNode(
196 localStrings.getStringF('adapter-disabled', name)));
197 recommendationElement.innerHTML =
198 localStrings.getStringF('enable-adapter', name);
199 connectivityStatusElement.insertBefore(errorElement,
200 testStatusElements[1]);
201 connectivityStatusElement.insertBefore(recommendationElement,
202 testStatusElements[1]);
203 testStatusElements[1].setAttribute('class', 'test-pending');
204 testStatusElements[2].setAttribute('class', 'test-pending');
205 } else {
206 testStatusElements[0].appendChild(tickIconElement.cloneNode());
207 testStatusElements[1].setAttribute('class', 'test-performed');
208 if (status == DiagPage.AdapterStatus.NO_IP) {
209 errorElement.appendChild(failIconElement.cloneNode());
210 errorElement.appendChild(document.createTextNode(
211 localStrings.getStringF('adapter-no-ip', name)));
212 recommendationElement.innerHTML =
213 localStrings.getStringF('fix-connection-to-router');
214 connectivityStatusElement.insertBefore(errorElement,
215 testStatusElements[2]);
216 connectivityStatusElement.insertBefore(recommendationElement,
217 testStatusElements[2]);
218 testStatusElements[2].setAttribute('class', 'test-pending');
219 } else {
220 testStatusElements[1].appendChild(tickIconElement.cloneNode());
221 testStatusElements[2].setAttribute('class', 'test-performed');
222 testStatusElements[2].appendChild(tickIconElement.cloneNode());
223 }
224 }
225 }
226 };
227
228 DiagPage.setNetifStatus = function(netifStatus) {
229 DiagPage.getInstance().setNetifStatus_(netifStatus);
230 }
231
232 // Export
233 return {
234 DiagPage: DiagPage
235 };
236 });
237
5 /** 238 /**
6 * Updates the Connectivity Status section. 239 * Initialize the DiagPage upon DOM content loaded.
7 * @param {String} connStatus Dictionary containing connectivity status.
8 */ 240 */
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() { 241 document.addEventListener('DOMContentLoaded', function() {
38 chrome.send('pageLoaded'); 242 diag.DiagPage.getInstance().initialize();
39 }); 243 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698