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

Side by Side Diff: chrome/browser/resources/options/chromeos/internet_detail.js

Issue 708563005: Use setProperties for IP Config. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@issue_430113_internet_options_1
Patch Set: Add managed indicator to userNameServers, feedback, fix tests Created 5 years, 11 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
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 // require: onc_data.js 5 // require: onc_data.js
6 6
7 // NOTE(stevenjb): This code is in the process of being converted to be 7 // NOTE(stevenjb): This code is in the process of being converted to be
8 // compatible with the networkingPrivate extension API: 8 // compatible with the networkingPrivate extension API:
9 // * The network property dictionaries are being converted to use ONC values. 9 // * The network property dictionaries are being converted to use ONC values.
10 // * chrome.send calls will be replaced with an API object that simulates the 10 // * chrome.send calls will be replaced with an API object that simulates the
11 // networkingPrivate API. See network_config.js. 11 // networkingPrivate API. See network_config.js.
12 // See crbug.com/279351 for more info. 12 // See crbug.com/279351 for more info.
13 13
14 /** @typedef {{address: (string|undefined),
15 * gateway: (string|undefined),
16 * nameServers: (string|undefined),
17 * netmask: (string|undefined),
18 * prefixLength: (number|undefined)}}
19 * @see chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
20 */
21 var IPInfo;
22
23 cr.define('options.internet', function() { 14 cr.define('options.internet', function() {
24 var OncData = cr.onc.OncData; 15 var OncData = cr.onc.OncData;
25 var Page = cr.ui.pageManager.Page; 16 var Page = cr.ui.pageManager.Page;
26 var PageManager = cr.ui.pageManager.PageManager; 17 var PageManager = cr.ui.pageManager.PageManager;
27 /** @const */ var IPAddressField = options.internet.IPAddressField; 18 /** @const */ var IPAddressField = options.internet.IPAddressField;
28 19
29 /** @const */ var GoogleNameServersString = '8.8.4.4,8.8.8.8'; 20 /** @const */ var GoogleNameServers = ['8.8.4.4', '8.8.8.8'];
30 /** @const */ var CarrierGenericUMTS = 'Generic UMTS'; 21 /** @const */ var CarrierGenericUMTS = 'Generic UMTS';
31 22
32 /** 23 /**
33 * Helper function to set hidden attribute for elements matching a selector. 24 * Helper function to set hidden attribute for elements matching a selector.
34 * @param {string} selector CSS selector for extracting a list of elements. 25 * @param {string} selector CSS selector for extracting a list of elements.
35 * @param {boolean} hidden New hidden value. 26 * @param {boolean} hidden New hidden value.
36 */ 27 */
37 function updateHidden(selector, hidden) { 28 function updateHidden(selector, hidden) {
38 var elements = cr.doc.querySelectorAll(selector); 29 var elements = cr.doc.querySelectorAll(selector);
39 for (var i = 0, el; el = elements[i]; i++) { 30 for (var i = 0, el; el = elements[i]; i++) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 if (i > 0) 120 if (i > 0)
130 netmask += '.'; 121 netmask += '.';
131 var value = 0; 122 var value = 0;
132 if (remainder != 0) 123 if (remainder != 0)
133 value = ((2 << (remainder - 1)) - 1) << (8 - remainder); 124 value = ((2 << (remainder - 1)) - 1) << (8 - remainder);
134 netmask += value.toString(); 125 netmask += value.toString();
135 } 126 }
136 return netmask; 127 return netmask;
137 } 128 }
138 129
130 /**
131 * Returns the prefix length from the netmask string.
132 * @param {string} netmask The netmask string, e.g. 255.255.255.0.
133 * @return {number} The corresponding netmask or -1 if invalid.
134 */
135 function netmaskToPrefixLength(netmask) {
136 var prefixLength = 0;
137 var tokens = netmask.split('.');
138 if (tokens.length != 4)
139 return -1;
140 for (var i = 0; i < tokens.length; ++i) {
141 var token = tokens[i];
142 // If we already found the last mask and the current one is not
143 // '0' then the netmask is invalid. For example, 255.224.255.0
144 if (prefixLength / 8 != i) {
145 if (token != '0')
146 return -1;
147 } else if (token == '255') {
148 prefixLength += 8;
149 } else if (token == '254') {
150 prefixLength += 7;
151 } else if (token == '252') {
152 prefixLength += 6;
153 } else if (token == '248') {
154 prefixLength += 5;
155 } else if (token == '240') {
156 prefixLength += 4;
157 } else if (token == '224') {
158 prefixLength += 3;
159 } else if (token == '192') {
160 prefixLength += 2;
161 } else if (token == '128') {
162 prefixLength += 1;
163 } else if (token == '0') {
164 prefixLength += 0;
165 } else {
166 // mask is not a valid number.
167 return -1;
168 }
169 }
170 return prefixLength;
171 }
172
139 ///////////////////////////////////////////////////////////////////////////// 173 /////////////////////////////////////////////////////////////////////////////
140 // DetailsInternetPage class: 174 // DetailsInternetPage class:
141 175
142 /** 176 /**
143 * Encapsulated handling of ChromeOS internet details overlay page. 177 * Encapsulated handling of ChromeOS internet details overlay page.
144 * @constructor 178 * @constructor
145 * @extends {cr.ui.pageManager.Page} 179 * @extends {cr.ui.pageManager.Page}
146 */ 180 */
147 function DetailsInternetPage() { 181 function DetailsInternetPage() {
148 // Cached Apn properties 182 // Cached Apn properties
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 * Handler for when the name server selection changes. 381 * Handler for when the name server selection changes.
348 * @param {Event} event The click event. 382 * @param {Event} event The click event.
349 * @private 383 * @private
350 */ 384 */
351 handleNameServerTypeChange_: function(event) { 385 handleNameServerTypeChange_: function(event) {
352 var type = event.target.value; 386 var type = event.target.value;
353 DetailsInternetPage.updateNameServerDisplay(type); 387 DetailsInternetPage.updateNameServerDisplay(type);
354 }, 388 },
355 389
356 /** 390 /**
357 * Sends the IP Config info to chrome. 391 * Gets the IPConfig ONC Object.
358 * @param {string} nameServerType The selected name server type: 392 * @param {string} nameServerType The selected name server type:
359 * 'automatic', 'google', or 'user'. 393 * 'automatic', 'google', or 'user'.
394 * @return {Object} The IPConfig ONC object.
360 * @private 395 * @private
361 */ 396 */
362 sendIpConfig_: function(nameServerType) { 397 getIpConfig_: function(nameServerType) {
363 var userNameServerString = ''; 398 var ipConfig = {};
364 if (nameServerType == 'user') { 399 // If 'ip-address' is empty, automatic configuration will be used.
365 var userNameServers = []; 400 if (!$('ip-automatic-configuration-checkbox').checked &&
366 for (var i = 1; i <= 4; ++i) { 401 $('ip-address').model.value) {
367 var nameServerField = $('ipconfig-dns' + i); 402 ipConfig['IPAddress'] = $('ip-address').model.value;
368 // Skip empty values. 403 var netmask = $('ip-netmask').model.value;
369 if (nameServerField && nameServerField.model && 404 var routingPrefix = 0;
370 nameServerField.model.value) { 405 if (netmask) {
371 userNameServers.push(nameServerField.model.value); 406 routingPrefix = netmaskToPrefixLength(netmask);
407 if (routingPrefix == -1) {
408 console.error('Invalid netmask: ' + netmask);
409 routingPrefix = 0;
372 } 410 }
373 } 411 }
374 userNameServerString = userNameServers.sort().join(','); 412 ipConfig['RoutingPrefix'] = routingPrefix;
413 ipConfig['Gateway'] = $('ip-gateway').model.value || '';
375 } 414 }
376 chrome.send('setIPConfig', 415
377 [this.servicePath_, 416 // Note: If no nameserver fields are set, automatic configuration will be
378 Boolean($('ip-automatic-configuration-checkbox').checked), 417 // used. TODO(stevenjb): Validate input fields.
379 $('ip-address').model.value || '', 418 if (nameServerType != 'automatic') {
380 $('ip-netmask').model.value || '', 419 var userNameServers = [];
381 $('ip-gateway').model.value || '', 420 if (nameServerType == 'google') {
382 nameServerType, 421 userNameServers = GoogleNameServers.splice();
383 userNameServerString]); 422 } else if (nameServerType == 'user') {
423 for (var i = 1; i <= 4; ++i) {
424 var nameServerField = $('ipconfig-dns' + i);
425 // Skip empty values.
426 if (nameServerField && nameServerField.model &&
427 nameServerField.model.value) {
428 userNameServers.push(nameServerField.model.value);
429 }
430 }
431 }
432 if (userNameServers.length)
433 ipConfig['NameServers'] = userNameServers.sort();
434 }
435 return ipConfig;
384 }, 436 },
385 437
386 /** 438 /**
387 * Creates an indicator event for controlled properties using 439 * Creates an indicator event for controlled properties using
388 * the same dictionary format as CoreOptionsHandler::CreateValueForPref. 440 * the same dictionary format as CoreOptionsHandler::CreateValueForPref.
389 * @param {string} name The name for the Event. 441 * @param {string} name The name for the Event.
390 * @param {{value: *, controlledBy: *, recommendedValue: *}} propData 442 * @param {{value: *, controlledBy: *, recommendedValue: *}} propData
391 * Property dictionary. 443 * Property dictionary.
392 * @private 444 * @private
393 */ 445 */
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 } 1153 }
1102 1154
1103 var nameServerTypes = ['automatic', 'google', 'user']; 1155 var nameServerTypes = ['automatic', 'google', 'user'];
1104 var nameServerType = 'automatic'; 1156 var nameServerType = 'automatic';
1105 for (var i = 0; i < nameServerTypes.length; ++i) { 1157 for (var i = 0; i < nameServerTypes.length; ++i) {
1106 if ($(nameServerTypes[i] + '-dns-radio').checked) { 1158 if ($(nameServerTypes[i] + '-dns-radio').checked) {
1107 nameServerType = nameServerTypes[i]; 1159 nameServerType = nameServerTypes[i];
1108 break; 1160 break;
1109 } 1161 }
1110 } 1162 }
1111 detailsPage.sendIpConfig_(nameServerType); 1163 var ipConfig = detailsPage.getIpConfig_(nameServerType);
1164 var ipAddressType = ('IPAddress' in ipConfig) ? 'Static' : 'DHCP';
1165 var nameServersType = ('NameServers' in ipConfig) ? 'Static' : 'DHCP';
1166 oncData.setProperty('IPAddressConfigType', ipAddressType);
1167 oncData.setProperty('NameServersConfigType', nameServersType);
1168 oncData.setProperty('StaticIPConfig', ipConfig);
1112 1169
1113 var data = oncData.getData(); 1170 var data = oncData.getData();
1114 if (Object.keys(data).length > 0) { 1171 if (Object.keys(data).length > 0) {
1172 // TODO(stevenjb): Only set changed properties.
1115 // TODO(stevenjb): chrome.networkingPrivate.setProperties 1173 // TODO(stevenjb): chrome.networkingPrivate.setProperties
1116 chrome.send('setProperties', [servicePath, data]); 1174 chrome.send('setProperties', [servicePath, data]);
1117 } 1175 }
1118 1176
1119 PageManager.closeOverlay(); 1177 PageManager.closeOverlay();
1120 }; 1178 };
1121 1179
1122 /** 1180 /**
1123 * Event handler called when the name server type changes. 1181 * Event handler called when the name server type changes.
1124 * @param {string} type The selected name sever type, 'automatic', 'google', 1182 * @param {string} type The selected name sever type, 'automatic', 'google',
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 } else { 1277 } else {
1220 detailsPage.showProxy_ = false; 1278 detailsPage.showProxy_ = false;
1221 } 1279 }
1222 1280
1223 $('web-proxy-auto-discovery').hidden = true; 1281 $('web-proxy-auto-discovery').hidden = true;
1224 1282
1225 var restricted = onc.getActiveValue('RestrictedConnectivity'); 1283 var restricted = onc.getActiveValue('RestrictedConnectivity');
1226 var restrictedString = loadTimeData.getString( 1284 var restrictedString = loadTimeData.getString(
1227 restricted ? 'restrictedYes' : 'restrictedNo'); 1285 restricted ? 'restrictedYes' : 'restrictedNo');
1228 1286
1287 // These objects contain an 'automatic' property that is displayed when
1288 // ip-automatic-configuration-checkbox is checked, and a 'value' property
1289 // that is displayed when unchecked and used to set the associated ONC
1290 // property for StaticIPConfig on commit.
1229 var inetAddress = {}; 1291 var inetAddress = {};
1230 var inetNetmask = {}; 1292 var inetNetmask = {};
1231 var inetGateway = {}; 1293 var inetGateway = {};
1232 1294
1233 var inetNameServersString; 1295 var inetNameServersString;
1234 1296
1235 var ipconfigList = onc.getActiveValue('IPConfigs'); 1297 var ipconfigList = onc.getActiveValue('IPConfigs');
1236 if (Array.isArray(ipconfigList)) { 1298 if (Array.isArray(ipconfigList)) {
1237 for (var i = 0; i < ipconfigList.length; ++i) { 1299 for (var i = 0; i < ipconfigList.length; ++i) {
1238 var ipconfig = ipconfigList[i]; 1300 var ipconfig = ipconfigList[i];
(...skipping 18 matching lines...) Expand all
1257 } 1319 }
1258 if ('NameServers' in ipconfig) { 1320 if ('NameServers' in ipconfig) {
1259 var inetNameServers = ipconfig['NameServers']; 1321 var inetNameServers = ipconfig['NameServers'];
1260 inetNameServers = inetNameServers.sort(); 1322 inetNameServers = inetNameServers.sort();
1261 inetNameServersString = inetNameServers.join(','); 1323 inetNameServersString = inetNameServers.join(',');
1262 } 1324 }
1263 break; // Use the first IPv4 entry. 1325 break; // Use the first IPv4 entry.
1264 } 1326 }
1265 } 1327 }
1266 1328
1267 // Override the "automatic" values with the real saved DHCP values, 1329 // Override the 'automatic' properties with the saved DHCP values if the
1268 // if they are set. 1330 // saved value is set, and set any unset 'value' properties.
1269 var savedNameServersString; 1331 var savedNameServersString;
1270 var savedIpAddress = onc.getActiveValue('SavedIPConfig.IPAddress'); 1332 var savedIpAddress = onc.getActiveValue('SavedIPConfig.IPAddress');
1271 if (savedIpAddress != undefined) { 1333 if (savedIpAddress != undefined) {
1272 inetAddress.automatic = savedIpAddress; 1334 inetAddress.automatic = savedIpAddress;
1273 inetAddress.value = savedIpAddress; 1335 if (!inetAddress.value)
1336 inetAddress.value = savedIpAddress;
1274 } 1337 }
1275 var savedPrefix = onc.getActiveValue('SavedIPConfig.RoutingPrefix'); 1338 var savedPrefix = onc.getActiveValue('SavedIPConfig.RoutingPrefix');
1276 if (savedPrefix != undefined) { 1339 if (savedPrefix != undefined) {
1277 assert(typeof savedPrefix == 'number'); 1340 assert(typeof savedPrefix == 'number');
1278 var savedNetmask = prefixLengthToNetmask( 1341 var savedNetmask = prefixLengthToNetmask(
1279 /** @type {number} */(savedPrefix)); 1342 /** @type {number} */(savedPrefix));
1280 inetNetmask.automatic = savedNetmask; 1343 inetNetmask.automatic = savedNetmask;
1281 inetNetmask.value = savedNetmask; 1344 if (!inetNetmask.value)
1345 inetNetmask.value = savedNetmask;
1282 } 1346 }
1283 var savedGateway = onc.getActiveValue('SavedIPConfig.Gateway'); 1347 var savedGateway = onc.getActiveValue('SavedIPConfig.Gateway');
1284 if (savedGateway != undefined) { 1348 if (savedGateway != undefined) {
1285 inetGateway.automatic = savedGateway; 1349 inetGateway.automatic = savedGateway;
1286 inetGateway.value = savedGateway; 1350 if (!inetGateway.value)
1351 inetGateway.value = savedGateway;
1287 } 1352 }
1353
1288 var savedNameServers = onc.getActiveValue('SavedIPConfig.NameServers'); 1354 var savedNameServers = onc.getActiveValue('SavedIPConfig.NameServers');
1289 if (savedNameServers) { 1355 if (savedNameServers) {
1290 savedNameServers = savedNameServers.sort(); 1356 savedNameServers = savedNameServers.sort();
1291 savedNameServersString = savedNameServers.join(','); 1357 savedNameServersString = savedNameServers.join(',');
1292 } 1358 }
1293 1359
1294 var ipAutoConfig = 'automatic'; 1360 var ipAutoConfig = 'automatic';
1295 1361 if (onc.getActiveValue('IPAddressConfigType') == 'Static') {
1296 var staticNameServersString;
1297 var staticIpAddress = onc.getActiveValue('StaticIPConfig.IPAddress');
1298 if (staticIpAddress != undefined) {
1299 ipAutoConfig = 'user'; 1362 ipAutoConfig = 'user';
1363 var staticIpAddress = onc.getActiveValue('StaticIPConfig.IPAddress');
1300 inetAddress.user = staticIpAddress; 1364 inetAddress.user = staticIpAddress;
1301 inetAddress.value = staticIpAddress; 1365 inetAddress.value = staticIpAddress;
1302 } 1366
1303 var staticPrefix = onc.getActiveValue('StaticIPConfig.RoutingPrefix'); 1367 var staticPrefix = onc.getActiveValue('StaticIPConfig.RoutingPrefix');
1304 if (staticPrefix != undefined) { 1368 if (typeof staticPrefix != 'number')
1305 assert(typeof staticPrefix == 'number'); 1369 staticPrefix = 0;
1306 var staticNetmask = prefixLengthToNetmask( 1370 var staticNetmask = prefixLengthToNetmask(
1307 /** @type {number} */(staticPrefix)); 1371 /** @type {number} */ (staticPrefix));
1308 inetNetmask.user = staticNetmask; 1372 inetNetmask.user = staticNetmask;
1309 inetNetmask.value = staticNetmask; 1373 inetNetmask.value = staticNetmask;
1310 } 1374
1311 var staticGateway = onc.getActiveValue('StaticIPConfig.Gateway'); 1375 var staticGateway = onc.getActiveValue('StaticIPConfig.Gateway');
1312 if (staticGateway != undefined) {
1313 inetGateway.user = staticGateway; 1376 inetGateway.user = staticGateway;
1314 inetGateway.value = staticGateway; 1377 inetGateway.value = staticGateway;
1315 } 1378 }
1316 var staticNameServers = onc.getActiveValue('StaticIPConfig.NameServers'); 1379
1317 if (staticNameServers) { 1380 var staticNameServersString;
1381 if (onc.getActiveValue('NameServersConfigType') == 'Static') {
1382 var staticNameServers = onc.getActiveValue('StaticIPConfig.NameServers');
1318 staticNameServers = staticNameServers.sort(); 1383 staticNameServers = staticNameServers.sort();
1319 staticNameServersString = staticNameServers.join(','); 1384 staticNameServersString = staticNameServers.join(',');
1320 } 1385 }
1321 1386
1322 $('ip-automatic-configuration-checkbox').checked = 1387 $('ip-automatic-configuration-checkbox').checked =
1323 ipAutoConfig == 'automatic'; 1388 ipAutoConfig == 'automatic';
1324 1389
1325 inetAddress.autoConfig = ipAutoConfig; 1390 inetAddress.autoConfig = ipAutoConfig;
1326 inetNetmask.autoConfig = ipAutoConfig; 1391 inetNetmask.autoConfig = ipAutoConfig;
1327 inetGateway.autoConfig = ipAutoConfig; 1392 inetGateway.autoConfig = ipAutoConfig;
1328 1393
1329 var configureAddressField = function(field, model) { 1394 var configureAddressField = function(field, model) {
1330 IPAddressField.decorate(field); 1395 IPAddressField.decorate(field);
1331 field.model = model; 1396 field.model = model;
1332 field.editable = model.autoConfig == 'user'; 1397 field.editable = model.autoConfig == 'user';
1333 }; 1398 };
1334 configureAddressField($('ip-address'), inetAddress); 1399 configureAddressField($('ip-address'), inetAddress);
1335 configureAddressField($('ip-netmask'), inetNetmask); 1400 configureAddressField($('ip-netmask'), inetNetmask);
1336 configureAddressField($('ip-gateway'), inetGateway); 1401 configureAddressField($('ip-gateway'), inetGateway);
1337 1402
1338 // Set Nameserver fields. 1403 // Set Nameserver fields.
1339 var nameServerType = 'automatic'; 1404 var nameServerType = 'automatic';
1340 if (staticNameServersString) { 1405 if (staticNameServersString) {
1341 // If static nameservers are defined and match the google name servers, 1406 // If static nameservers are defined and match the google name servers,
1342 // show that in the UI, otherwise show the custom static nameservers. 1407 // show that in the UI, otherwise show the custom static nameservers.
1343 if (staticNameServersString == GoogleNameServersString) 1408 if (staticNameServersString == GoogleNameServers.join(','))
1344 nameServerType = 'google'; 1409 nameServerType = 'google';
1345 else if (staticNameServersString == inetNameServersString) 1410 else if (staticNameServersString == inetNameServersString)
1346 nameServerType = 'user'; 1411 nameServerType = 'user';
1347 } 1412 }
1348 if (nameServerType == 'automatic') 1413 if (nameServerType == 'automatic')
1349 $('automatic-dns-display').textContent = inetNameServersString; 1414 $('automatic-dns-display').textContent = inetNameServersString;
1350 else 1415 else
1351 $('automatic-dns-display').textContent = savedNameServersString; 1416 $('automatic-dns-display').textContent = savedNameServersString;
1352 $('google-dns-display').textContent = GoogleNameServersString; 1417 $('google-dns-display').textContent = GoogleNameServers.join(',');
1353 1418
1354 var nameServersUser = []; 1419 var nameServersUser = [];
1355 if (staticNameServers) { 1420 if (staticNameServers) {
1356 nameServersUser = staticNameServers; 1421 nameServersUser = staticNameServers;
1357 } else if (savedNameServers) { 1422 } else if (savedNameServers) {
1358 // Pre-populate with values provided by DHCP server. 1423 // Pre-populate with values provided by DHCP server.
1359 nameServersUser = savedNameServers; 1424 nameServersUser = savedNameServers;
1360 } 1425 }
1361 1426
1362 var nameServerModels = []; 1427 var nameServerModels = [];
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
1587 1652
1588 // Don't show page name in address bar and in history to prevent people 1653 // Don't show page name in address bar and in history to prevent people
1589 // navigate here by hand and solve issue with page session restore. 1654 // navigate here by hand and solve issue with page session restore.
1590 PageManager.showPageByName('detailsInternetPage', false); 1655 PageManager.showPageByName('detailsInternetPage', false);
1591 }; 1656 };
1592 1657
1593 return { 1658 return {
1594 DetailsInternetPage: DetailsInternetPage 1659 DetailsInternetPage: DetailsInternetPage
1595 }; 1660 };
1596 }); 1661 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698