| 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 a4307a8321d1a4ec8eff2baf978a14622588ed1c..f8f06c018f08d2a0aab037fd5af044763a6b3499 100644
|
| --- a/chrome/browser/resources/options/chromeos/internet_detail.js
|
| +++ b/chrome/browser/resources/options/chromeos/internet_detail.js
|
| @@ -17,6 +17,8 @@ cr.define('options.internet', function() {
|
| var PageManager = cr.ui.pageManager.PageManager;
|
| /** @const */ var IPAddressField = options.internet.IPAddressField;
|
|
|
| + /** @const */ var GoogleNameServersString = '8.8.4.4,8.8.8.8';
|
| +
|
| /**
|
| * Helper function to set hidden attribute for elements matching a selector.
|
| * @param {string} selector CSS selector for extracting a list of elements.
|
| @@ -79,6 +81,34 @@ cr.define('options.internet', function() {
|
| chrome.send(message, [path, checkbox.checked ? 'true' : 'false']);
|
| }
|
|
|
| + /**
|
| + * Returns the netmask as a string for a given prefix length.
|
| + * @param {string} prefixLength The ONC routing prefix length.
|
| + * @return {string} The corresponding netmask.
|
| + */
|
| + function PrefixLengthToNetmask(prefixLength) {
|
| + // Return the empty string for invalid inputs.
|
| + if (prefixLength < 0 || prefixLength > 32)
|
| + return '';
|
| + var netmask = '';
|
| + for (var i = 0; i < 4; ++i) {
|
| + var remainder = 8;
|
| + if (prefixLength >= 8) {
|
| + prefixLength -= 8;
|
| + } else {
|
| + remainder = prefixLength;
|
| + prefixLength = 0;
|
| + }
|
| + if (i > 0)
|
| + netmask += '.';
|
| + var value = 0;
|
| + if (remainder != 0)
|
| + value = ((2 << (remainder - 1)) - 1) << (8 - remainder);
|
| + netmask += value.toString();
|
| + }
|
| + return netmask;
|
| + }
|
| +
|
| /////////////////////////////////////////////////////////////////////////////
|
| // DetailsInternetPage class:
|
|
|
| @@ -329,7 +359,7 @@ cr.define('options.internet', function() {
|
| // page is fixed. http://crbug.com/242865
|
| if (loadTimeData.data_) {
|
| $('google-dns-label').innerHTML =
|
| - loadTimeData.getString('googleNameServers');
|
| + loadTimeData.getString('googleNameServers');
|
| }
|
| },
|
|
|
| @@ -805,8 +835,7 @@ cr.define('options.internet', function() {
|
| }
|
| }
|
|
|
| - userNameServers = userNameServers.join(',');
|
| -
|
| + userNameServers = userNameServers.sort();
|
| chrome.send('setIPConfig',
|
| [servicePath,
|
| Boolean($('ip-automatic-configuration-checkbox').checked),
|
| @@ -814,7 +843,7 @@ cr.define('options.internet', function() {
|
| $('ip-netmask').model.value || '',
|
| $('ip-gateway').model.value || '',
|
| nameServerType,
|
| - userNameServers]);
|
| + userNameServers.join(',')]);
|
| PageManager.closeOverlay();
|
| };
|
|
|
| @@ -1003,93 +1032,143 @@ cr.define('options.internet', function() {
|
| var restricted = onc.getActiveValue('RestrictedConnectivity');
|
| var restrictedString = loadTimeData.getString(
|
| restricted ? 'restrictedYes' : 'restrictedNo');
|
| - var ipAutoConfig = data.ipAutoConfig ? 'automatic' : 'user';
|
| - $('ip-automatic-configuration-checkbox').checked = data.ipAutoConfig;
|
| - var inetAddress = {autoConfig: ipAutoConfig};
|
| - var inetNetmask = {autoConfig: ipAutoConfig};
|
| - var inetGateway = {autoConfig: ipAutoConfig};
|
| -
|
| - if (data.ipconfig.value) {
|
| - inetAddress.automatic = data.ipconfig.value.address;
|
| - inetAddress.value = data.ipconfig.value.address;
|
| - inetNetmask.automatic = data.ipconfig.value.netmask;
|
| - inetNetmask.value = data.ipconfig.value.netmask;
|
| - inetGateway.automatic = data.ipconfig.value.gateway;
|
| - inetGateway.value = data.ipconfig.value.gateway;
|
| - if (data.ipconfig.value.webProxyAutoDiscoveryUrl) {
|
| - $('web-proxy-auto-discovery').hidden = false;
|
| - $('web-proxy-auto-discovery-url').value =
|
| - data.ipconfig.value.webProxyAutoDiscoveryUrl;
|
| +
|
| + var inetAddress = {};
|
| + var inetNetmask = {};
|
| + var inetGateway = {};
|
| +
|
| + var inetNameServersString;
|
| +
|
| + if ('IPConfigs' in data) {
|
| + var ipconfigList = onc.getActiveValue('IPConfigs');
|
| + for (var i = 0; i < ipconfigList.length; ++i) {
|
| + var ipconfig = ipconfigList[i];
|
| + var type = ipconfig['Type'];
|
| + if (type != 'IPv4') {
|
| + // TODO(stevenjb): Handle IPv6 properties.
|
| + continue;
|
| + }
|
| + var address = ipconfig['IPAddress'];
|
| + inetAddress.automatic = address;
|
| + inetAddress.value = address;
|
| + var netmask = PrefixLengthToNetmask(ipconfig['RoutingPrefix']);
|
| + inetNetmask.automatic = netmask;
|
| + inetNetmask.value = netmask;
|
| + var gateway = ipconfig['Gateway'];
|
| + inetGateway.automatic = gateway;
|
| + inetGateway.value = gateway;
|
| + if ('WebProxyAutoDiscoveryUrl' in ipconfig) {
|
| + $('web-proxy-auto-discovery').hidden = false;
|
| + $('web-proxy-auto-discovery-url').value =
|
| + ipconfig['WebProxyAutoDiscoveryUrl'];
|
| + }
|
| + if ('NameServers' in ipconfig) {
|
| + var inetNameServers = ipconfig['NameServers'];
|
| + inetNameServers = inetNameServers.sort();
|
| + inetNameServersString = inetNameServers.join(',');
|
| + }
|
| + break; // Use the first IPv4 entry.
|
| }
|
| }
|
|
|
| // Override the "automatic" values with the real saved DHCP values,
|
| // if they are set.
|
| - if (data.savedIP.address) {
|
| - inetAddress.automatic = data.savedIP.address;
|
| - inetAddress.value = data.savedIP.address;
|
| - }
|
| - if (data.savedIP.netmask) {
|
| - inetNetmask.automatic = data.savedIP.netmask;
|
| - inetNetmask.value = data.savedIP.netmask;
|
| - }
|
| - if (data.savedIP.gateway) {
|
| - inetGateway.automatic = data.savedIP.gateway;
|
| - inetGateway.value = data.savedIP.gateway;
|
| + var savedNameServersString;
|
| + if ('SavedIPConfig' in data) {
|
| + var savedIpAddress = onc.getActiveValue('SavedIPConfig.IPAddress');
|
| + if (savedIpAddress != undefined) {
|
| + inetAddress.automatic = savedIpAddress;
|
| + inetAddress.value = savedIpAddress;
|
| + }
|
| + var savedPrefix = onc.getActiveValue('SavedIPConfig.RoutingPrefix');
|
| + if (savedPrefix != undefined) {
|
| + var savedNetmask = PrefixLengthToNetmask(savedPrefix);
|
| + inetNetmask.automatic = savedNetmask;
|
| + inetNetmask.value = savedNetmask;
|
| + }
|
| + var savedGateway = onc.getActiveValue('SavedIPConfig.Gateway');
|
| + if (savedGateway != undefined) {
|
| + inetGateway.automatic = savedGateway;
|
| + inetGateway.value = savedGateway;
|
| + }
|
| + var savedNameServers = onc.getActiveValue('SavedIPConfig.NameServers');
|
| + if (savedNameServers) {
|
| + savedNameServers = savedNameServers.sort();
|
| + savedNameServersString = savedNameServers.join(',');
|
| + }
|
| }
|
|
|
| - if (ipAutoConfig == 'user') {
|
| - if (data.staticIP.value.address) {
|
| - inetAddress.value = data.staticIP.value.address;
|
| - inetAddress.user = data.staticIP.value.address;
|
| + var ipAutoConfig = 'automatic';
|
| +
|
| + var staticNameServersString;
|
| + if ('StaticIPConfig' in data) {
|
| + var staticIpAddress = onc.getActiveValue('StaticIPConfig.IPAddress');
|
| + if (staticIpAddress != undefined) {
|
| + ipAutoConfig = 'user';
|
| + inetAddress.user = staticIpAddress;
|
| + inetAddress.value = staticIpAddress;
|
| + }
|
| + var staticPrefix = onc.getActiveValue('StaticIPConfig.RoutingPrefix');
|
| + if (staticPrefix != undefined) {
|
| + var staticNetmask = PrefixLengthToNetmask(staticPrefix);
|
| + inetNetmask.user = staticNetmask;
|
| + inetNetmask.value = staticNetmask;
|
| }
|
| - if (data.staticIP.value.netmask) {
|
| - inetNetmask.value = data.staticIP.value.netmask;
|
| - inetNetmask.user = data.staticIP.value.netmask;
|
| + var staticGateway = onc.getActiveValue('StaticIPConfig.Gateway');
|
| + if (staticGateway != undefined) {
|
| + inetGateway.user = staticGateway;
|
| + inetGateway.value = staticGateway;
|
| }
|
| - if (data.staticIP.value.gateway) {
|
| - inetGateway.value = data.staticIP.value.gateway;
|
| - inetGateway.user = data.staticIP.value.gateway;
|
| + var staticNameServers = onc.getActiveValue('StaticIPConfig.NameServers');
|
| + if (staticNameServers) {
|
| + staticNameServers = staticNameServers.sort();
|
| + staticNameServersString = staticNameServers.join(',');
|
| }
|
| }
|
|
|
| + $('ip-automatic-configuration-checkbox').checked =
|
| + ipAutoConfig == 'automatic';
|
| +
|
| + inetAddress.autoConfig = ipAutoConfig;
|
| + inetNetmask.autoConfig = ipAutoConfig;
|
| + inetGateway.autoConfig = ipAutoConfig;
|
| +
|
| var configureAddressField = function(field, model) {
|
| IPAddressField.decorate(field);
|
| field.model = model;
|
| field.editable = model.autoConfig == 'user';
|
| };
|
| -
|
| configureAddressField($('ip-address'), inetAddress);
|
| configureAddressField($('ip-netmask'), inetNetmask);
|
| configureAddressField($('ip-gateway'), inetGateway);
|
|
|
| - var inetNameServers = '';
|
| - if (data.ipconfig.value && data.ipconfig.value.nameServers) {
|
| - inetNameServers = data.ipconfig.value.nameServers;
|
| - $('automatic-dns-display').textContent = inetNameServers;
|
| + // Set Nameserver fields.
|
| + var nameServerType = 'automatic';
|
| + if (staticNameServersString &&
|
| + staticNameServersString == inetNameServersString) {
|
| + nameServerType = 'user';
|
| }
|
| + if (inetNameServersString == GoogleNameServersString)
|
| + nameServerType = 'google';
|
|
|
| - if (data.savedIP && data.savedIP.nameServers)
|
| - $('automatic-dns-display').textContent = data.savedIP.nameServers;
|
| -
|
| - if (data.nameServersGoogle)
|
| - $('google-dns-display').textContent = data.nameServersGoogle;
|
| + $('automatic-dns-display').textContent = inetNameServersString;
|
| + $('google-dns-display').textContent = GoogleNameServersString;
|
|
|
| var nameServersUser = [];
|
| - if (data.staticIP.value.nameServers)
|
| - nameServersUser = data.staticIP.value.nameServers.split(',');
|
| + if (staticNameServers)
|
| + nameServersUser = staticNameServers;
|
|
|
| var nameServerModels = [];
|
| for (var i = 0; i < 4; ++i)
|
| nameServerModels.push({value: nameServersUser[i] || ''});
|
|
|
| - $(data.nameServerType + '-dns-radio').checked = true;
|
| + $(nameServerType + '-dns-radio').checked = true;
|
| configureAddressField($('ipconfig-dns1'), nameServerModels[0]);
|
| configureAddressField($('ipconfig-dns2'), nameServerModels[1]);
|
| configureAddressField($('ipconfig-dns3'), nameServerModels[2]);
|
| configureAddressField($('ipconfig-dns4'), nameServerModels[3]);
|
|
|
| - DetailsInternetPage.updateNameServerDisplay(data.nameServerType);
|
| + DetailsInternetPage.updateNameServerDisplay(nameServerType);
|
|
|
| var macAddress = onc.getActiveValue('MacAddress');
|
| if (macAddress) {
|
| @@ -1237,8 +1316,15 @@ cr.define('options.internet', function() {
|
| var otherOption = apnSelector[0];
|
| data.selectedApn = -1;
|
| data.userApnIndex = -1;
|
| - var activeApn = onc.getActiveValue('Cellular.APN');
|
| - var lastGoodApn = onc.getActiveValue('Cellular.LastGoodAPN');
|
| + var activeApn = onc.getActiveValue('Cellular.APN.AccessPointName');
|
| + var activeUsername = onc.getActiveValue('Cellular.APN.Username');
|
| + var activePassword = onc.getActiveValue('Cellular.APN.Password');
|
| + var lastGoodApn =
|
| + onc.getActiveValue('Cellular.LastGoodAPN.AccessPointName');
|
| + var lastGoodUsername =
|
| + onc.getActiveValue('Cellular.LastGoodAPN.Username');
|
| + var lastGoodPassword =
|
| + onc.getActiveValue('Cellular.LastGoodAPN.Password');
|
| var apnList = onc.getActiveValue('Cellular.APNList');
|
| for (var i = 0; i < apnList.length; i++) {
|
| var apnDict = apnList[i];
|
| @@ -1251,24 +1337,21 @@ cr.define('options.internet', function() {
|
| option.value = i;
|
| // If this matches the active Apn, or LastGoodApn, set it as the
|
| // selected Apn.
|
| - if ((activeApn != undefined &&
|
| - activeApn['AccessPointName'] == accessPointName &&
|
| - activeApn['Username'] == apnDict['Username'] &&
|
| - activeApn['Password'] == apnDict['Password']) ||
|
| - ((activeApn == undefined || !activeApn['AccessPointName']) &&
|
| - lastGoodApn != undefined &&
|
| - lastGoodApn['AccessPointName'] == accessPointName &&
|
| - lastGoodApn['Username'] == apnDict['Username'] &&
|
| - lastGoodApn['Password'] == apnDict['Password'])) {
|
| + if ((activeApn == accessPointName &&
|
| + activeUsername == apnDict['Username'] &&
|
| + activePassword == apnDict['Password']) ||
|
| + (!activeApn &&
|
| + lastGoodApn == accessPointName &&
|
| + lastGoodUsername == apnDict['Username'] &&
|
| + lastGoodPassword == apnDict['Password'])) {
|
| data.selectedApn = i;
|
| }
|
| // Insert new option before "other" option.
|
| apnSelector.add(option, otherOption);
|
| }
|
| - if (data.selectedApn == -1 &&
|
| - activeApn != undefined && activeApn['AccessPointName']) {
|
| + if (data.selectedApn == -1 && activeApn) {
|
| var option = document.createElement('option');
|
| - option.textContent = activeApn['AccessPointName'];
|
| + option.textContent = activeApn;
|
| option.value = -1;
|
| apnSelector.add(option, otherOption);
|
| data.selectedApn = apnSelector.length - 2;
|
|
|