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

Unified 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: Fix win/mac test expectations 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options/chromeos/internet_detail.js
diff --git a/chrome/browser/resources/options/chromeos/internet_detail.js b/chrome/browser/resources/options/chromeos/internet_detail.js
index 31e5d5f0d7d6a4e997e96357e063672035dc6129..d8c139231c4264c1e15c1018597705e0e4a5d66b 100644
--- a/chrome/browser/resources/options/chromeos/internet_detail.js
+++ b/chrome/browser/resources/options/chromeos/internet_detail.js
@@ -11,22 +11,13 @@
// networkingPrivate API. See network_config.js.
// See crbug.com/279351 for more info.
-/** @typedef {{address: (string|undefined),
- * gateway: (string|undefined),
- * nameServers: (string|undefined),
- * netmask: (string|undefined),
- * prefixLength: (number|undefined)}}
- * @see chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
- */
-var IPInfo;
-
cr.define('options.internet', function() {
var OncData = cr.onc.OncData;
var Page = cr.ui.pageManager.Page;
var PageManager = cr.ui.pageManager.PageManager;
/** @const */ var IPAddressField = options.internet.IPAddressField;
- /** @const */ var GoogleNameServersString = '8.8.4.4,8.8.8.8';
+ /** @const */ var GoogleNameServers = ['8.8.4.4', '8.8.8.8'];
/** @const */ var CarrierGenericUMTS = 'Generic UMTS';
/**
@@ -136,6 +127,49 @@ cr.define('options.internet', function() {
return netmask;
}
+ /**
+ * Returns the prefix length from the netmask string.
+ * @param {string} netmask The netmask string, e.g. 255.255.255.0.
+ * @return {number} The corresponding netmask or -1 if invalid.
+ */
+ function netmaskToPrefixLength(netmask) {
+ var prefixLength = 0;
+ var tokens = netmask.split('.');
+ if (tokens.length != 4)
+ return -1;
+ for (var i = 0; i < tokens.length; ++i) {
+ var token = tokens[i];
+ // If we already found the last mask and the current one is not
+ // '0' then the netmask is invalid. For example, 255.224.255.0
+ if (prefixLength / 8 != i) {
+ if (token != '0')
+ return -1;
+ } else if (token == '255') {
+ prefixLength += 8;
+ } else if (token == '254') {
+ prefixLength += 7;
+ } else if (token == '252') {
+ prefixLength += 6;
+ } else if (token == '248') {
+ prefixLength += 5;
+ } else if (token == '240') {
+ prefixLength += 4;
+ } else if (token == '224') {
+ prefixLength += 3;
+ } else if (token == '192') {
+ prefixLength += 2;
+ } else if (token == '128') {
+ prefixLength += 1;
+ } else if (token == '0') {
+ prefixLength += 0;
+ } else {
+ // mask is not a valid number.
+ return -1;
+ }
+ }
+ return prefixLength;
+ }
+
/////////////////////////////////////////////////////////////////////////////
// DetailsInternetPage class:
@@ -354,33 +388,51 @@ cr.define('options.internet', function() {
},
/**
- * Sends the IP Config info to chrome.
+ * Gets the IPConfig ONC Object.
* @param {string} nameServerType The selected name server type:
* 'automatic', 'google', or 'user'.
+ * @return {Object} The IPConfig ONC object.
* @private
*/
- sendIpConfig_: function(nameServerType) {
- var userNameServerString = '';
- if (nameServerType == 'user') {
+ getIpConfig_: function(nameServerType) {
+ var ipConfig = {};
+ // If 'ip-address' is empty, automatic configuration will be used.
+ if (!$('ip-automatic-configuration-checkbox').checked &&
+ $('ip-address').model.value) {
+ ipConfig['IPAddress'] = $('ip-address').model.value;
+ var netmask = $('ip-netmask').model.value;
+ var routingPrefix = 0;
+ if (netmask) {
+ routingPrefix = netmaskToPrefixLength(netmask);
+ if (routingPrefix == -1) {
+ console.error('Invalid netmask: ' + netmask);
+ routingPrefix = 0;
+ }
+ }
+ ipConfig['RoutingPrefix'] = routingPrefix;
+ ipConfig['Gateway'] = $('ip-gateway').model.value || '';
+ }
+
+ // Note: If no nameserver fields are set, automatic configuration will be
+ // used. TODO(stevenjb): Validate input fields.
+ if (nameServerType != 'automatic') {
var userNameServers = [];
- for (var i = 1; i <= 4; ++i) {
- var nameServerField = $('ipconfig-dns' + i);
- // Skip empty values.
- if (nameServerField && nameServerField.model &&
- nameServerField.model.value) {
- userNameServers.push(nameServerField.model.value);
+ if (nameServerType == 'google') {
+ userNameServers = GoogleNameServers.splice();
+ } else if (nameServerType == 'user') {
+ for (var i = 1; i <= 4; ++i) {
+ var nameServerField = $('ipconfig-dns' + i);
+ // Skip empty values.
+ if (nameServerField && nameServerField.model &&
+ nameServerField.model.value) {
+ userNameServers.push(nameServerField.model.value);
+ }
}
}
- userNameServerString = userNameServers.sort().join(',');
+ if (userNameServers.length)
+ ipConfig['NameServers'] = userNameServers.sort();
}
- chrome.send('setIPConfig',
- [this.servicePath_,
- Boolean($('ip-automatic-configuration-checkbox').checked),
- $('ip-address').model.value || '',
- $('ip-netmask').model.value || '',
- $('ip-gateway').model.value || '',
- nameServerType,
- userNameServerString]);
+ return ipConfig;
},
/**
@@ -1108,10 +1160,16 @@ cr.define('options.internet', function() {
break;
}
}
- detailsPage.sendIpConfig_(nameServerType);
+ var ipConfig = detailsPage.getIpConfig_(nameServerType);
+ var ipAddressType = ('IPAddress' in ipConfig) ? 'Static' : 'DHCP';
+ var nameServersType = ('NameServers' in ipConfig) ? 'Static' : 'DHCP';
+ oncData.setProperty('IPAddressConfigType', ipAddressType);
+ oncData.setProperty('NameServersConfigType', nameServersType);
+ oncData.setProperty('StaticIPConfig', ipConfig);
var data = oncData.getData();
if (Object.keys(data).length > 0) {
+ // TODO(stevenjb): Only set changed properties.
// TODO(stevenjb): chrome.networkingPrivate.setProperties
chrome.send('setProperties', [servicePath, data]);
}
@@ -1226,6 +1284,10 @@ cr.define('options.internet', function() {
var restrictedString = loadTimeData.getString(
restricted ? 'restrictedYes' : 'restrictedNo');
+ // These objects contain an 'automatic' property that is displayed when
+ // ip-automatic-configuration-checkbox is checked, and a 'value' property
+ // that is displayed when unchecked and used to set the associated ONC
+ // property for StaticIPConfig on commit.
var inetAddress = {};
var inetNetmask = {};
var inetGateway = {};
@@ -1264,13 +1326,14 @@ cr.define('options.internet', function() {
}
}
- // Override the "automatic" values with the real saved DHCP values,
- // if they are set.
+ // Override the 'automatic' properties with the saved DHCP values if the
+ // saved value is set, and set any unset 'value' properties.
var savedNameServersString;
var savedIpAddress = onc.getActiveValue('SavedIPConfig.IPAddress');
if (savedIpAddress != undefined) {
inetAddress.automatic = savedIpAddress;
- inetAddress.value = savedIpAddress;
+ if (!inetAddress.value)
+ inetAddress.value = savedIpAddress;
}
var savedPrefix = onc.getActiveValue('SavedIPConfig.RoutingPrefix');
if (savedPrefix != undefined) {
@@ -1278,13 +1341,16 @@ cr.define('options.internet', function() {
var savedNetmask = prefixLengthToNetmask(
/** @type {number} */(savedPrefix));
inetNetmask.automatic = savedNetmask;
- inetNetmask.value = savedNetmask;
+ if (!inetNetmask.value)
+ inetNetmask.value = savedNetmask;
}
var savedGateway = onc.getActiveValue('SavedIPConfig.Gateway');
if (savedGateway != undefined) {
inetGateway.automatic = savedGateway;
- inetGateway.value = savedGateway;
+ if (!inetGateway.value)
+ inetGateway.value = savedGateway;
}
+
var savedNameServers = onc.getActiveValue('SavedIPConfig.NameServers');
if (savedNameServers) {
savedNameServers = savedNameServers.sort();
@@ -1292,29 +1358,28 @@ cr.define('options.internet', function() {
}
var ipAutoConfig = 'automatic';
-
- var staticNameServersString;
- var staticIpAddress = onc.getActiveValue('StaticIPConfig.IPAddress');
- if (staticIpAddress != undefined) {
+ if (onc.getActiveValue('IPAddressConfigType') == 'Static') {
ipAutoConfig = 'user';
+ var staticIpAddress = onc.getActiveValue('StaticIPConfig.IPAddress');
inetAddress.user = staticIpAddress;
inetAddress.value = staticIpAddress;
- }
- var staticPrefix = onc.getActiveValue('StaticIPConfig.RoutingPrefix');
- if (staticPrefix != undefined) {
- assert(typeof staticPrefix == 'number');
+
+ var staticPrefix = onc.getActiveValue('StaticIPConfig.RoutingPrefix');
+ if (typeof staticPrefix != 'number')
+ staticPrefix = 0;
var staticNetmask = prefixLengthToNetmask(
- /** @type {number} */(staticPrefix));
+ /** @type {number} */ (staticPrefix));
inetNetmask.user = staticNetmask;
inetNetmask.value = staticNetmask;
- }
- var staticGateway = onc.getActiveValue('StaticIPConfig.Gateway');
- if (staticGateway != undefined) {
+
+ var staticGateway = onc.getActiveValue('StaticIPConfig.Gateway');
inetGateway.user = staticGateway;
inetGateway.value = staticGateway;
}
- var staticNameServers = onc.getActiveValue('StaticIPConfig.NameServers');
- if (staticNameServers) {
+
+ var staticNameServersString;
+ if (onc.getActiveValue('NameServersConfigType') == 'Static') {
+ var staticNameServers = onc.getActiveValue('StaticIPConfig.NameServers');
staticNameServers = staticNameServers.sort();
staticNameServersString = staticNameServers.join(',');
}
@@ -1340,7 +1405,7 @@ cr.define('options.internet', function() {
if (staticNameServersString) {
// If static nameservers are defined and match the google name servers,
// show that in the UI, otherwise show the custom static nameservers.
- if (staticNameServersString == GoogleNameServersString)
+ if (staticNameServersString == GoogleNameServers.join(','))
nameServerType = 'google';
else if (staticNameServersString == inetNameServersString)
nameServerType = 'user';
@@ -1349,7 +1414,7 @@ cr.define('options.internet', function() {
$('automatic-dns-display').textContent = inetNameServersString;
else
$('automatic-dns-display').textContent = savedNameServersString;
- $('google-dns-display').textContent = GoogleNameServersString;
+ $('google-dns-display').textContent = GoogleNameServers.join(',');
var nameServersUser = [];
if (staticNameServers) {

Powered by Google App Engine
This is Rietveld 408576698