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

Side by Side Diff: chrome/browser/resources/chromeos/network_ui/network_ui.js

Issue 260083007: Replace chrome://network implementation with networkConfig API (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use callback id map, add getProperties Created 6 years, 7 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 NetworkUI = function() { 5 var NetworkUI = (function() {
6 'use strict';
7
6 // Properties to display in the network state table. Each entry can be either 8 // Properties to display in the network state table. Each entry can be either
7 // a single state field or an array of state fields. If more than one is 9 // a single state field or an array of state fields. If more than one is
8 // specified then the first non empty value is used. 10 // specified then the first non empty value is used.
9 var NETWORK_STATE_FIELDS = [ 11 var NETWORK_STATE_FIELDS = [
10 'Name', 'Type', 'State', 'Profile', 'Connectable', 12 networkConfig.Service.ServicePath,
pneubeck (no reviews) 2014/05/02 09:43:46 optional: var Service = networkConfig.Service ...
stevenjb 2014/05/02 22:07:38 Done.
11 'Error', 'Security', 13 networkConfig.Service.GUID,
12 ['Cellular.NetworkTechnology', 'EAP.EAP'], 14 networkConfig.Service.Name,
13 'Cellular.ActivationState', 'Cellular.RoamingState', 15 networkConfig.Service.Type,
14 'Cellular.OutOfCredits', 'Strength' 16 networkConfig.Service.ConnectionState,
17 networkConfig.Service.ErrorState,
18 networkConfig.Service.WiFi.Security,
19 [networkConfig.Service.Cellular.NetworkTechnology,
20 networkConfig.Service.EAP.EAP],
21 networkConfig.Service.Cellular.ActivationState,
22 networkConfig.Service.Cellular.RoamingState,
23 networkConfig.Service.Cellular.OutOfCredits,
24 networkConfig.Service.WiFi.SignalStrength
15 ]; 25 ];
16 26
17 var FAVORITE_STATE_FIELDS = [ 27 var FAVORITE_STATE_FIELDS = [
18 'Name', 'Type', 'Profile', 'onc_source' 28 networkConfig.Service.ServicePath,
29 networkConfig.Service.GUID,
30 networkConfig.Service.Name,
31 networkConfig.Service.Type,
32 networkConfig.Service.Profile,
33 networkConfig.Service.OncSource
19 ]; 34 ];
20 35
21 var LOG_LEVEL_CLASSNAME = { 36 var LOG_LEVEL_CLASSNAME = {
22 'Error': 'network-log-level-error', 37 'Error': 'network-log-level-error',
23 'User': 'network-log-level-user', 38 'User': 'network-log-level-user',
24 'Event': 'network-log-level-event', 39 'Event': 'network-log-level-event',
25 'Debug': 'network-log-level-debug' 40 'Debug': 'network-log-level-debug'
26 }; 41 };
27 42
28 var LOG_LEVEL_CHECKBOX = { 43 var LOG_LEVEL_CHECKBOX = {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 container.appendChild(entry); 108 container.appendChild(entry);
94 } 109 }
95 }; 110 };
96 111
97 /** 112 /**
98 * Create a cell with a button for expanding a network state table row. 113 * Create a cell with a button for expanding a network state table row.
99 * 114 *
100 * @param {dictionary} state Property values for the network or favorite. 115 * @param {dictionary} state Property values for the network or favorite.
101 * @return {DOMElement} The created td element that displays the given value. 116 * @return {DOMElement} The created td element that displays the given value.
102 */ 117 */
103 var createStateTableExpandButton = function(state) { 118 var createStateTableExpandButton = function(guid) {
104 var cell = document.createElement('td'); 119 var cell = document.createElement('td');
105 cell.className = 'state-table-expand-button-cell'; 120 cell.className = 'state-table-expand-button-cell';
106 var button = document.createElement('button'); 121 var button = document.createElement('button');
107 button.addEventListener('click', function(event) { 122 button.addEventListener('click', function(event) {
108 toggleExpandRow(event.target, state); 123 toggleExpandRow(event.target, guid);
109 }); 124 });
110 button.className = 'state-table-expand-button'; 125 button.className = 'state-table-expand-button';
111 cell.appendChild(button); 126 cell.appendChild(button);
112 return cell; 127 return cell;
113 }; 128 };
114 129
115 /** 130 /**
116 * Create a cell in network state table. 131 * Create a cell in network state table.
117 * 132 *
118 * @param {string} value Content in the cell. 133 * @param {string} value Content in the cell.
119 * @return {DOMElement} The created td element that displays the given value. 134 * @return {DOMElement} The created td element that displays the given value.
120 */ 135 */
121 var createStateTableCell = function(value) { 136 var createStateTableCell = function(value) {
122 var cell = document.createElement('td'); 137 var cell = document.createElement('td');
123 cell.textContent = value || ''; 138 cell.textContent = value || '';
124 return cell; 139 return cell;
125 }; 140 };
126 141
127 /** 142 /**
128 * Create a row in the network state table. 143 * Create a row in the network state table.
129 * 144 *
130 * @param {string} stateFields The state fields to use for the row. 145 * @param {string} stateFields The state fields to use for the row.
131 * @param {string} path The network or favorite path.
132 * @param {dictionary} state Property values for the network or favorite. 146 * @param {dictionary} state Property values for the network or favorite.
133 * @return {DOMElement} The created tr element that contains the network 147 * @return {DOMElement} The created tr element that contains the network
134 * state information. 148 * state information.
135 */ 149 */
136 var createStateTableRow = function(stateFields, path, state) { 150 var createStateTableRow = function(stateFields, state) {
137 var row = document.createElement('tr'); 151 var row = document.createElement('tr');
138 row.className = 'state-table-row'; 152 row.className = 'state-table-row';
139 row.appendChild(createStateTableExpandButton(state)); 153 var guid = state[networkConfig.Service.GUID];
pneubeck (no reviews) 2014/05/02 09:43:46 state.GUID
stevenjb 2014/05/02 22:07:38 Right, so, my intention here was to generate a run
140 row.appendChild(createStateTableCell(path)); 154 if (!guid)
141 var guid = state['GUID']; 155 guid = state[networkConfig.Service.ServicePath];
pneubeck (no reviews) 2014/05/02 09:43:46 state.ServicePath
stevenjb 2014/05/02 22:07:38 ditto
142 if (guid) 156 row.appendChild(createStateTableExpandButton(guid));
143 guid = guid.slice(1, 9);
144 row.appendChild(createStateTableCell(guid));
145 for (var i = 0; i < stateFields.length; ++i) { 157 for (var i = 0; i < stateFields.length; ++i) {
146 var field = stateFields[i]; 158 var field = stateFields[i];
147 var value = ''; 159 var value = '';
148 if (typeof field == 'string') { 160 if (typeof field == 'string') {
149 value = state[field]; 161 var dot = field.indexOf('.');
pneubeck (no reviews) 2014/05/02 09:43:46 this doesn't work for arbitrarily nested fields.
stevenjb 2014/05/02 22:07:38 I added a helper to networkConfig. I don't think w
162 if (dot > 0) {
163 var field1 = field.substring(0, dot);
164 var field2 = field.substring(dot + 1);
165 var fieldobj = state[field1];
166 if (fieldobj)
167 value = fieldobj[field2];
168 } else {
169 value = state[field];
170 }
150 } else { 171 } else {
151 for (var j = 0; j < field.length; ++j) { 172 for (var j = 0; j < field.length; ++j) {
152 value = state[field[j]]; 173 value = state[field[j]];
pneubeck (no reviews) 2014/05/02 09:43:46 should use the helper function
stevenjb 2014/05/02 22:07:38 Done.
153 if (value) 174 if (value)
154 break; 175 break;
155 } 176 }
156 } 177 }
178 if (field == networkConfig.Service.GUID)
179 value = value.slice(1, 9);
157 row.appendChild(createStateTableCell(value)); 180 row.appendChild(createStateTableCell(value));
158 } 181 }
159 return row; 182 return row;
160 }; 183 };
161 184
162 /** 185 /**
163 * Create table for networks or favorites. 186 * Create table for networks or favorites.
164 * 187 *
165 * @param {string} tablename The name of the table to be created. 188 * @param {string} tablename The name of the table to be created.
166 * @param {Array.<Object>} stateFields The list of fields for the table. 189 * @param {Array.<Object>} stateFields The list of fields for the table.
167 * @param {Array.<Object>} states An array of network or favorite states. 190 * @param {Array.<Object>} states An array of network or favorite states.
168 */ 191 */
169 var createStateTable = function(tablename, stateFields, states) { 192 var createStateTable = function(tablename, stateFields, states) {
170 var table = $(tablename); 193 var table = $(tablename);
171 var oldRows = table.querySelectorAll('.state-table-row'); 194 var oldRows = table.querySelectorAll('.state-table-row');
172 for (var i = 0; i < oldRows.length; ++i) 195 for (var i = 0; i < oldRows.length; ++i)
173 table.removeChild(oldRows[i]); 196 table.removeChild(oldRows[i]);
174 for (var path in states) 197 for (var s in states)
pneubeck (no reviews) 2014/05/02 09:43:46 arrays should be traversed by index or with the fo
stevenjb 2014/05/02 22:07:38 Done.
175 table.appendChild(createStateTableRow(stateFields, path, states[path])); 198 table.appendChild(createStateTableRow(stateFields, states[s]));
176 }; 199 };
177 200
178 /** 201 /**
179 * This callback function is triggered when the data is received. 202 * This callback function is triggered when the network log is received.
180 * 203 *
181 * @param {dictionary} data A dictionary that contains network state 204 * @param {dictionary} data A JSON structure of event log entries.
182 * information.
183 */ 205 */
184 var onNetworkInfoReceived = function(data) { 206 var getNetworkLogCallback = function(data) {
185 createEventLog(JSON.parse(data.networkEventLog)); 207 createEventLog(JSON.parse(data));
186 createStateTable(
187 'network-state-table', NETWORK_STATE_FIELDS, data.networkStates);
188 createStateTable(
189 'favorite-state-table', FAVORITE_STATE_FIELDS, data.favoriteStates);
190 }; 208 };
191 209
192 /** 210 /**
211 * This callback function is triggered when visible networks are received.
212 *
213 * @param {dictionary} data A list of network state information for each
214 * visible network.
215 */
216 var onVisibleNetworksReceived = function(data) {
217 createStateTable('network-state-table', NETWORK_STATE_FIELDS, data[0]);
pneubeck (no reviews) 2014/05/02 09:43:46 data[0] -> data (note that onFavoriteNetworksRecei
stevenjb 2014/05/02 22:07:38 'data' works with the change to using 'apply' in n
218 };
219
220 /**
221 * This callback function is triggered when favorite networks are received.
222 *
223 * @param {dictionary} data A list of network state information for each
224 * favorite network.
225 */
226 var onFavoriteNetworksReceived = function(data) {
227 createStateTable('favorite-state-table', FAVORITE_STATE_FIELDS, data);
228 };
229
230 /**
193 * Toggle the button state and add or remove a row displaying the complete 231 * Toggle the button state and add or remove a row displaying the complete
194 * state information for a row. 232 * state information for a row.
195 * 233 *
196 * @param {DOMElement} btn The button that was clicked. 234 * @param {DOMElement} btn The button that was clicked.
197 * @param {dictionary} state Property values for the network or favorite. 235 * @param {dictionary} state Property values for the network or favorite.
198 */ 236 */
199 var toggleExpandRow = function(btn, state) { 237 var toggleExpandRow = function(btn, guid) {
200 var cell = btn.parentNode; 238 var cell = btn.parentNode;
201 var row = cell.parentNode; 239 var row = cell.parentNode;
202 if (btn.classList.contains('state-table-expand-button-expanded')) { 240 if (btn.classList.contains('state-table-expand-button-expanded')) {
203 btn.classList.remove('state-table-expand-button-expanded'); 241 btn.classList.remove('state-table-expand-button-expanded');
204 row.parentNode.removeChild(row.nextSibling); 242 row.parentNode.removeChild(row.nextSibling);
205 } else { 243 } else {
206 btn.classList.add('state-table-expand-button-expanded'); 244 btn.classList.add('state-table-expand-button-expanded');
207 var expandedRow = createExpandedRow(state, row); 245 var expandedRow = createExpandedRow(guid, row);
208 row.parentNode.insertBefore(expandedRow, row.nextSibling); 246 row.parentNode.insertBefore(expandedRow, row.nextSibling);
209 } 247 }
210 }; 248 };
211 249
212 /** 250 /**
213 * Creates the expanded row for displaying the complete state as JSON. 251 * Creates the expanded row for displaying the complete state as JSON.
214 * 252 *
215 * @param {dictionary} state Property values for the network or favorite. 253 * @param {dictionary} state Property values for the network or favorite.
216 * @param {DOMElement} baseRow The unexpanded row associated with the new row. 254 * @param {DOMElement} baseRow The unexpanded row associated with the new row.
217 * @return {DOMElement} The created tr element for the expanded row. 255 * @return {DOMElement} The created tr element for the expanded row.
218 */ 256 */
219 var createExpandedRow = function(state, baseRow) { 257 var createExpandedRow = function(guid, baseRow) {
220 var expandedRow = document.createElement('tr'); 258 var expandedRow = document.createElement('tr');
221 expandedRow.className = 'state-table-row'; 259 expandedRow.className = 'state-table-row';
222 var emptyCell = document.createElement('td'); 260 var emptyCell = document.createElement('td');
223 emptyCell.style.border = 'none'; 261 emptyCell.style.border = 'none';
224 expandedRow.appendChild(emptyCell); 262 expandedRow.appendChild(emptyCell);
225 var detailCell = document.createElement('td'); 263 var detailCell = document.createElement('td');
226 detailCell.className = 'state-table-expanded-cell'; 264 detailCell.className = 'state-table-expanded-cell';
227 detailCell.colSpan = baseRow.childNodes.length - 1; 265 detailCell.colSpan = baseRow.childNodes.length - 1;
228 detailCell.innerHTML = JSON.stringify(state, null, '\t');
229 expandedRow.appendChild(detailCell); 266 expandedRow.appendChild(detailCell);
267 networkConfig.getProperties(guid, function(arg_list) {
pneubeck (no reviews) 2014/05/02 09:43:46 function(arg_list) -> function(state)
stevenjb 2014/05/02 22:07:38 ditto
268 var state = arg_list[0];
pneubeck (no reviews) 2014/05/02 09:43:46 remove
stevenjb 2014/05/02 22:07:38 Done.
269 detailCell.innerHTML = JSON.stringify(state, null, '\t');
270 });
230 return expandedRow; 271 return expandedRow;
231 }; 272 };
232 273
233 /** 274 /**
234 * Sends a refresh request. 275 * Requests a network log update.
235 */ 276 */
236 var sendRefresh = function() { 277 var requestLog = function() {
237 chrome.send('requestNetworkInfo'); 278 chrome.send('NetworkUI.getNetworkLog');
238 }; 279 };
239 280
240 /** 281 /**
282 * Requests an update of all network info.
283 */
284 var requestNetworks = function() {
285 networkConfig.getVisibleNetworks(networkConfig.Type.All,
286 onVisibleNetworksReceived);
287 // TODO(stevenjb): Request favorites.
288 };
289
290 /**
241 * Sets refresh rate if the interval is found in the url. 291 * Sets refresh rate if the interval is found in the url.
242 */ 292 */
243 var setRefresh = function() { 293 var setRefresh = function() {
244 var interval = parseQueryParams(window.location)['refresh']; 294 var interval = parseQueryParams(window.location)['refresh'];
245 if (interval && interval != '') 295 if (interval && interval != '')
246 setInterval(sendRefresh, parseInt(interval) * 1000); 296 setInterval(requestNetworks, parseInt(interval) * 1000);
247 }; 297 };
248 298
249 /** 299 /**
250 * Get network information from WebUI. 300 * Get network information from WebUI.
251 */ 301 */
252 document.addEventListener('DOMContentLoaded', function() { 302 document.addEventListener('DOMContentLoaded', function() {
253 $('log-refresh').onclick = sendRefresh; 303 $('log-refresh').onclick = requestLog;
254 $('log-error').checked = true; 304 $('log-error').checked = true;
255 $('log-error').onclick = sendRefresh; 305 $('log-error').onclick = requestLog;
256 $('log-user').checked = true; 306 $('log-user').checked = true;
257 $('log-user').onclick = sendRefresh; 307 $('log-user').onclick = requestLog;
258 $('log-event').checked = true; 308 $('log-event').checked = true;
259 $('log-event').onclick = sendRefresh; 309 $('log-event').onclick = requestLog;
260 $('log-debug').checked = false; 310 $('log-debug').checked = false;
261 $('log-debug').onclick = sendRefresh; 311 $('log-debug').onclick = requestLog;
262 $('log-fileinfo').checked = false; 312 $('log-fileinfo').checked = false;
263 $('log-fileinfo').onclick = sendRefresh; 313 $('log-fileinfo').onclick = requestLog;
264 $('log-timedetail').checked = false; 314 $('log-timedetail').checked = false;
265 $('log-timedetail').onclick = sendRefresh; 315 $('log-timedetail').onclick = requestLog;
266 setRefresh(); 316 setRefresh();
267 sendRefresh(); 317 requestLog();
318 requestNetworks();
268 }); 319 });
269 320
270 return { 321 return {
271 onNetworkInfoReceived: onNetworkInfoReceived 322 getNetworkLogCallback: getNetworkLogCallback
272 }; 323 };
273 }(); 324 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698