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

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: Determine active adapter. 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 cr.define('diag', function() {
6 /**
7 * Encapsulated handling of the diagnostics page.
8 */
9 function DiagPage() {}
10
11 cr.addSingletonGetter(DiagPage);
12
13 /**
14 * List of network adapter types.
15 */
16 DiagPage.AdapterType = [
17 {adapter: 'wlan0', name: 'Wi-Fi'},
18 {adapter: 'eth0', name: 'Ethernet 1'},
19 {adapter: 'eth1', name: 'Ethernet 2'},
20 {adapter: 'wwan0', name: '3G'},
xiyuan 2012/08/14 17:00:01 Do we need to worry about i18n for the names?
hshi1 2012/08/14 20:09:28 Yes I think all strings should be localized. Can
xiyuan 2012/08/14 23:00:39 Include local_strings.js and you can get i18n stri
hshi1 2012/08/15 00:44:32 Done.
21 ];
22
23 /**
24 * List of network adapter status.
25 * The numeric value assigned to each status reflects how healthy the network
26 * adapter is.
27 *
28 * @enum {int}
29 */
30 DiagPage.AdapterStatus = {
31 NOT_FOUND: 0,
32 DISABLED: 1,
33 NO_IP: 2,
34 VALID_IP: 3
35 };
36
37 DiagPage.prototype = {
38 /**
39 * Perform initial setup.
40 */
41 initialize: function() {
42 // Initialize member variables.
43 this.activeAdapter_ = -1;
44 this.adapterStatus_ = new Array();
45
46 // Attempt to update.
47 chrome.send('pageLoaded');
48 },
49
50 /**
51 * Updates the connectivity status with netif information.
52 * @param {String} netifStatus Dictionary of network adapter status.
53 */
54 setNetifStatus_: function(netifStatus) {
55 // Hide the "loading" message.
56 $('loading').setAttribute('style', 'display:none');
xiyuan 2012/08/14 17:00:01 $('loading').hidden = true;
hshi1 2012/08/14 20:09:28 Done.
57
58 // Update netif state.
59 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
60 var adapterType = DiagPage.AdapterType[i];
61 var status = netifStatus[adapterType.adapter];
62 if (!status)
63 this.adapterStatus_[i] = DiagPage.AdapterStatus.NOT_FOUND;
64 else if (!status.flags || status.flags.indexOf('up') == -1)
65 this.adapterStatus_[i] = DiagPage.AdapterStatus.DISABLED;
66 else if (!status.ipv4)
67 this.adapterStatus_[i] = DiagPage.AdapterStatus.NO_IP;
68 else
69 this.adapterStatus_[i] = DiagPage.AdapterStatus.VALID_IP;
70 }
71
72 // Update UI
73 this.updateAdapterSelection_();
74 this.updateConnectivityStatus_();
75 },
76
77 /**
78 * Gets the HTML radio input element id for a network adapter.
79 * @private
80 */
81 getAdapterElementId_: function(adapter) {
82 return 'adapter-' + DiagPage.AdapterType[adapter].adapter;
83 },
84
85 /**
86 * Gets the most active adapter based on their status.
87 * @private
88 */
89 getActiveAdapter_: function() {
90 var activeAdapter = -1;
91 var activeAdapterStatus = DiagPage.AdapterStatus.NOT_FOUND;
92 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
93 var status = this.adapterStatus_[i];
94 if (status == DiagPage.AdapterStatus.NOT_FOUND)
95 continue;
96 if (activeAdapter == -1 || status > activeAdapterStatus) {
97 activeAdapter = i;
98 activeAdapterStatus = status;
99 }
100 }
101 return activeAdapter;
102 },
103
104 /**
105 * Update the adapter selection section.
106 * @private
107 */
108 updateAdapterSelection_: function() {
109 // Create HTML radio input elements.
110 var adapterSelectionHTML = '';
111 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
112 if (this.adapterStatus_[i] != DiagPage.AdapterStatus.NOT_FOUND) {
113 adapterSelectionHTML +=
114 '<input type="radio" name="adapter" id="' +
115 this.getAdapterElementId_(i) + '">' + DiagPage.AdapterType[i].name +
116 '</input><br />';
117 }
118 }
119 // Set click handlers for adapter selection.
120 $('adapter-selection').innerHTML = adapterSelectionHTML;
xiyuan 2012/08/14 17:00:01 Is it possible to use our js list instead of doing
hshi1 2012/08/14 20:09:28 Can you please elaborate what does it mean to use
xiyuan 2012/08/14 23:00:39 Search for "cr.ui.List" in js files and you could
hshi1 2012/08/15 00:44:32 I'll explicitly create the DOM elements and append
121 for (var i = 0; i < DiagPage.AdapterType.length; i++) {
122 var radioElement = $(this.getAdapterElementId_(i));
123 if (radioElement) {
124 radioElement.onclick = function(adapter) {
125 this.activeAdapter_ = adapter;
126 this.updateConnectivityStatus_();
127 }.bind(this, i);
128 }
129 }
130 if (this.activeAdapter_ == -1) {
131 this.activeAdapter_ = this.getActiveAdapter_();
132 $(this.getAdapterElementId_(this.activeAdapter_)).setAttribute(
133 'checked', 'true');
134 }
135 },
136
137 /**
138 * Update the connectivity status for the specified network interface.
139 * @private
140 */
141 updateConnectivityStatus_: function() {
142 var adapter = this.activeAdapter_;
143 var status = this.adapterStatus_[adapter];
144 var name = DiagPage.AdapterType[adapter].name;
145 var statusHTML = '<div class="test-performed">' +
146 '<b>1. </b>Testing ' + name + ' hardware...';
147 if (status == DiagPage.AdapterStatus.DISABLED) {
148 statusHTML += '</div><div class="test-error"><img src="fail.png" />' +
149 'The ' + name + ' adapter was not enabled.</div>' +
150 '<div class="recommendation"><b>Recommendation: </b>' +
151 'Enable the ' + name + ' adapter.</div>' +
152 '<div class="test-pending">' +
153 '<b>2. </b>Testing connection to router<br />' +
154 '<b>3. </b>Testing connection to internet</div>';
155 } else {
156 statusHTML += '<img src="tick.png" /><br />' +
157 '<b>2. </b>Testing connection to router...';
158 if (status == DiagPage.AdapterStatus.NO_IP) {
159 statusHTML +=
160 '</div><div class="test-error"><img src="fail.png" />' +
161 'The ' + name + ' adapter does not have an IP address and cannot ' +
162 'connect to the internet.</div>' +
163 '<div class="recommendation"><b>Recommendation: </b>' +
164 '<i>Please ensure that</i><br />' +
165 '1) you are trying to connect to the right network<br />' +
166 '2) you are using the right authentication method<br />' +
167 '3) your router is configured correctly<br />' +
168 '<i>Try to</i><br />' +
169 '1) connect to a different network<br />' +
170 '2) reboot your router<br /></div>' +
171 '<div class="test-pending"><b>3. </b>Testing connection to ' +
172 'internet</div>';
173 } else {
174 statusHTML +=
175 '<img src="tick.png" /><br />' +
176 '<b>3. </b>Testing connection to internet...' +
177 '<img src="tick.png" /></div>';
178 }
179 }
180 $('connectivity-status').innerHTML = statusHTML;
xiyuan 2012/08/14 17:00:01 i18n? And in general, we should avoid manipulatin
181 }
182 };
183
184 DiagPage.setNetifStatus = function(netifStatus) {
185 DiagPage.getInstance().setNetifStatus_(netifStatus);
186 }
187
188 // Export
189 return {
190 DiagPage: DiagPage
191 };
192 });
193
5 /** 194 /**
6 * Updates the Connectivity Status section. 195 * Initialize the DiagPage upon DOM content loaded.
7 * @param {String} connStatus Dictionary containing connectivity status.
8 */ 196 */
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() { 197 document.addEventListener('DOMContentLoaded', function() {
38 chrome.send('pageLoaded'); 198 diag.DiagPage.getInstance().initialize();
39 }); 199 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698