| 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 b433aacb611e75ac27a83f4c4e7271f47912ea2f..94538be2e48dc8a10e582e8b31a146f5775a5e68 100644
|
| --- a/chrome/browser/resources/options/chromeos/internet_detail.js
|
| +++ b/chrome/browser/resources/options/chromeos/internet_detail.js
|
| @@ -179,10 +179,16 @@ cr.define('options.internet', function() {
|
| * @extends {cr.ui.pageManager.Page}
|
| */
|
| function DetailsInternetPage() {
|
| - // Cached Apn properties
|
| + // If non-negative, indicates a custom entry in select-apn.
|
| this.userApnIndex_ = -1;
|
| - this.selectedApnIndex_ = -1;
|
| +
|
| + // The custom APN properties associated with entry |userApnIndex_|.
|
| this.userApn_ = {};
|
| +
|
| + // The currently selected APN entry in $('select-apn') (which may or may not
|
| + // == userApnIndex_).
|
| + this.selectedApnIndex_ = -1;
|
| +
|
| // We show the Proxy configuration tab for remembered networks and when
|
| // configuring a proxy from the login screen.
|
| this.showProxy_ = false;
|
| @@ -784,18 +790,29 @@ cr.define('options.internet', function() {
|
| },
|
|
|
| /**
|
| - * Helper method called from initializeDetailsPage to initialize the Apn
|
| - * list.
|
| + * Helper method to insert a 'user' option into the Apn list.
|
| + * @param {Object} userOption The 'user' apn dictionary
|
| * @private
|
| */
|
| - initializeApnList_: function() {
|
| - var onc = this.onc_;
|
| + insertApnUserOption_: function(userOption) {
|
| + // Add the 'user' option before the last option ('other')
|
| + var apnSelector = $('select-apn');
|
| + assert(apnSelector.length > 0);
|
| + var otherOption = apnSelector[apnSelector.length - 1];
|
| + apnSelector.add(userOption, otherOption);
|
| + this.userApnIndex_ = apnSelector.length - 2;
|
| + this.selectedApnIndex_ = this.userApnIndex_;
|
| + },
|
|
|
| + /**
|
| + * Helper method called from initializeApnList to populate the Apn list.
|
| + * @param {Array} apnList List of available APNs.
|
| + * @private
|
| + */
|
| + populateApnList_: function(apnList) {
|
| + var onc = this.onc_;
|
| var apnSelector = $('select-apn');
|
| - // Clear APN lists, keep only last element that "other".
|
| - while (apnSelector.length != 1) {
|
| - apnSelector.remove(0);
|
| - }
|
| + assert(apnSelector.length == 1);
|
| var otherOption = apnSelector[0];
|
| var activeApn = onc.getActiveValue('Cellular.APN.AccessPointName');
|
| var activeUsername = onc.getActiveValue('Cellular.APN.Username');
|
| @@ -806,7 +823,6 @@ cr.define('options.internet', function() {
|
| 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];
|
| var option = document.createElement('option');
|
| @@ -816,30 +832,58 @@ cr.define('options.internet', function() {
|
| option.textContent =
|
| name ? (name + ' (' + accessPointName + ')') : accessPointName;
|
| option.value = i;
|
| - // Insert new option before "other" option.
|
| + // Insert new option before 'other' option.
|
| apnSelector.add(option, otherOption);
|
| if (this.selectedApnIndex_ != -1)
|
| continue;
|
| - // If this matches the active Apn, or LastGoodApn (or there is no last
|
| - // good APN), set it as the selected Apn.
|
| - if ((activeApn == accessPointName &&
|
| - activeUsername == apnDict['Username'] &&
|
| - activePassword == apnDict['Password']) ||
|
| - (!activeApn && !lastGoodApn) ||
|
| - (!activeApn &&
|
| - lastGoodApn == accessPointName &&
|
| - lastGoodUsername == apnDict['Username'] &&
|
| - lastGoodPassword == apnDict['Password'])) {
|
| + // If this matches the active Apn name, or LastGoodApn name (or there
|
| + // is no last good APN), set it as the selected Apn.
|
| + if ((activeApn == accessPointName) ||
|
| + (!activeApn && (!lastGoodApn || lastGoodApn == accessPointName))) {
|
| this.selectedApnIndex_ = i;
|
| }
|
| }
|
| if (this.selectedApnIndex_ == -1 && activeApn) {
|
| - var activeOption = document.createElement('option');
|
| - activeOption.textContent = activeApn;
|
| - activeOption.value = -1;
|
| - apnSelector.add(activeOption, otherOption);
|
| - this.selectedApnIndex_ = apnSelector.length - 2;
|
| - this.userApnIndex_ = this.selectedApnIndex_;
|
| + this.userApn_ = activeApn;
|
| + // Create a 'user' entry for any active apn not in the list.
|
| + var userOption = document.createElement('option');
|
| + userOption.textContent = activeApn;
|
| + userOption.value = -1;
|
| + this.insertApnUserOption_(userOption);
|
| + }
|
| + },
|
| +
|
| + /**
|
| + * Helper method called from initializeDetailsPage to initialize the Apn
|
| + * list.
|
| + * @private
|
| + */
|
| + initializeApnList_: function() {
|
| + this.selectedApnIndex_ = -1;
|
| + this.userApnIndex_ = -1;
|
| +
|
| + var onc = this.onc_;
|
| + var apnSelector = $('select-apn');
|
| +
|
| + // Clear APN lists, keep only last element, 'other'.
|
| + while (apnSelector.length != 1)
|
| + apnSelector.remove(0);
|
| +
|
| + var apnList = onc.getActiveValue('Cellular.APNList');
|
| + if (apnList) {
|
| + // Populate the list with the existing APNs.
|
| + this.populateApnList_(apnList);
|
| + } else {
|
| + // Create a single 'default' entry.
|
| + var otherOption = apnSelector[0];
|
| + var defaultOption = document.createElement('option');
|
| + defaultOption.textContent =
|
| + loadTimeData.getString('cellularApnUseDefault');
|
| + defaultOption.value = -1;
|
| + // Add 'default' entry before 'other' option
|
| + apnSelector.add(defaultOption, otherOption);
|
| + assert(apnSelector.length == 2); // 'default', 'other'
|
| + this.selectedApnIndex_ = 0; // Select 'default'
|
| }
|
| assert(this.selectedApnIndex_ >= 0);
|
| apnSelector.selectedIndex = this.selectedApnIndex_;
|
| @@ -848,37 +892,49 @@ cr.define('options.internet', function() {
|
| },
|
|
|
| /**
|
| + * Helper function for setting APN properties.
|
| + * @param {Object} apnValue Dictionary of APN properties.
|
| + * @private
|
| + */
|
| + setActiveApn_: function(apnValue) {
|
| + var activeApn = {};
|
| + var apnName = apnValue['AccessPointName'];
|
| + if (apnName) {
|
| + activeApn['AccessPointName'] = apnName;
|
| + activeApn['Username'] = stringFromValue(apnValue['Username']);
|
| + activeApn['Password'] = stringFromValue(apnValue['Password']);
|
| + }
|
| + // Set the cached ONC data.
|
| + this.onc_.setProperty('Cellular.APN', activeApn);
|
| + // Set an ONC object with just the APN values.
|
| + var oncData = new OncData({});
|
| + oncData.setProperty('Cellular.APN', activeApn);
|
| + // TODO(stevenjb): chrome.networkingPrivate.setProperties
|
| + chrome.send('setProperties', [this.servicePath_, oncData.getData()]);
|
| + },
|
| +
|
| + /**
|
| * Event Listener for the cellular-apn-use-default button.
|
| * @private
|
| */
|
| setDefaultApn_: function() {
|
| - var onc = this.onc_;
|
| var apnSelector = $('select-apn');
|
|
|
| + // Remove the 'user' entry if it exists.
|
| if (this.userApnIndex_ != -1) {
|
| + assert(this.userApnIndex_ < apnSelector.length - 1);
|
| apnSelector.remove(this.userApnIndex_);
|
| this.userApnIndex_ = -1;
|
| }
|
|
|
| - var iApn = -1;
|
| - var apnList = onc.getActiveValue('Cellular.APNList');
|
| - if (apnList != undefined && apnList.length > 0) {
|
| - iApn = 0;
|
| - var defaultApn = apnList[iApn];
|
| - var activeApn = {};
|
| - activeApn['AccessPointName'] =
|
| - stringFromValue(defaultApn['AccessPointName']);
|
| - activeApn['Username'] = stringFromValue(defaultApn['Username']);
|
| - activeApn['Password'] = stringFromValue(defaultApn['Password']);
|
| - onc.setProperty('Cellular.APN', activeApn);
|
| - chrome.send('setApn', [this.servicePath_,
|
| - activeApn['AccessPointName'],
|
| - activeApn['Username'],
|
| - activeApn['Password']]);
|
| - }
|
| + var apnList = this.onc_.getActiveValue('Cellular.APNList');
|
| + var iApn = (apnList != undefined && apnList.length > 0) ? 0 : -1;
|
| apnSelector.selectedIndex = iApn;
|
| this.selectedApnIndex_ = iApn;
|
|
|
| + // Clear any user APN entry to inform Chrome to use the default APN.
|
| + this.setActiveApn_({});
|
| +
|
| updateHidden('.apn-list-view', false);
|
| updateHidden('.apn-details-view', true);
|
| },
|
| @@ -891,32 +947,29 @@ cr.define('options.internet', function() {
|
| if (apnValue == '')
|
| return;
|
|
|
| - var onc = this.onc_;
|
| var apnSelector = $('select-apn');
|
|
|
| var activeApn = {};
|
| activeApn['AccessPointName'] = stringFromValue(apnValue);
|
| activeApn['Username'] = stringFromValue($('cellular-apn-username').value);
|
| activeApn['Password'] = stringFromValue($('cellular-apn-password').value);
|
| - onc.setProperty('Cellular.APN', activeApn);
|
| + this.setActiveApn_(activeApn);
|
| + // Set the user selected APN.
|
| this.userApn_ = activeApn;
|
| - chrome.send('setApn', [this.servicePath_,
|
| - activeApn['AccessPointName'],
|
| - activeApn['Username'],
|
| - activeApn['Password']]);
|
|
|
| + // Remove any existing 'user' entry.
|
| if (this.userApnIndex_ != -1) {
|
| + assert(this.userApnIndex_ < apnSelector.length - 1);
|
| apnSelector.remove(this.userApnIndex_);
|
| this.userApnIndex_ = -1;
|
| }
|
|
|
| + // Create a new 'user' entry with the new active apn.
|
| var option = document.createElement('option');
|
| option.textContent = activeApn['AccessPointName'];
|
| option.value = -1;
|
| option.selected = true;
|
| - apnSelector.add(option, apnSelector[apnSelector.length - 1]);
|
| - this.userApnIndex_ = apnSelector.length - 2;
|
| - this.selectedApnIndex_ = this.userApnIndex_;
|
| + this.insertApnUserOption_(option);
|
|
|
| updateHidden('.apn-list-view', false);
|
| updateHidden('.apn-details-view', true);
|
| @@ -927,9 +980,7 @@ cr.define('options.internet', function() {
|
| * @private
|
| */
|
| cancelApn_: function() {
|
| - $('select-apn').selectedIndex = this.selectedApnIndex_;
|
| - updateHidden('.apn-list-view', false);
|
| - updateHidden('.apn-details-view', true);
|
| + this.initializeApnList_();
|
| },
|
|
|
| /**
|
| @@ -939,31 +990,31 @@ cr.define('options.internet', function() {
|
| selectApn_: function() {
|
| var onc = this.onc_;
|
| var apnSelector = $('select-apn');
|
| - var apnDict;
|
| if (apnSelector[apnSelector.selectedIndex].value != -1) {
|
| var apnList = onc.getActiveValue('Cellular.APNList');
|
| var apnIndex = apnSelector.selectedIndex;
|
| assert(apnIndex < apnList.length);
|
| - apnDict = apnList[apnIndex];
|
| - chrome.send('setApn', [this.servicePath_,
|
| - stringFromValue(apnDict['AccessPointName']),
|
| - stringFromValue(apnDict['Username']),
|
| - stringFromValue(apnDict['Password'])]);
|
| this.selectedApnIndex_ = apnIndex;
|
| + this.setActiveApn_(apnList[apnIndex]);
|
| } else if (apnSelector.selectedIndex == this.userApnIndex_) {
|
| - apnDict = this.userApn_;
|
| - chrome.send('setApn', [this.servicePath_,
|
| - stringFromValue(apnDict['AccessPointName']),
|
| - stringFromValue(apnDict['Username']),
|
| - stringFromValue(apnDict['Password'])]);
|
| this.selectedApnIndex_ = apnSelector.selectedIndex;
|
| - } else {
|
| - $('cellular-apn').value =
|
| - stringFromValue(onc.getActiveValue('Cellular.APN.AccessPointName'));
|
| - $('cellular-apn-username').value =
|
| - stringFromValue(onc.getActiveValue('Cellular.APN.Username'));
|
| - $('cellular-apn-password').value =
|
| - stringFromValue(onc.getActiveValue('Cellular.APN.Password'));
|
| + this.setActiveApn_(this.userApn_);
|
| + } else { // 'Other'
|
| + var apnDict;
|
| + if (this.userApn_['AccessPointName']) {
|
| + // Fill in the details fields with the existing 'user' config.
|
| + apnDict = this.userApn_;
|
| + } else {
|
| + // No 'user' config, use the current values.
|
| + apnDict = {};
|
| + apnDict['AccessPointName'] =
|
| + onc.getActiveValue('Cellular.APN.AccessPointName');
|
| + apnDict['Username'] = onc.getActiveValue('Cellular.APN.Username');
|
| + apnDict['Password'] = onc.getActiveValue('Cellular.APN.Password');
|
| + }
|
| + $('cellular-apn').value = stringFromValue(apnDict['AccessPointName']);
|
| + $('cellular-apn-username').value = stringFromValue(apnDict['Username']);
|
| + $('cellular-apn-password').value = stringFromValue(apnDict['Password']);
|
| updateHidden('.apn-list-view', true);
|
| updateHidden('.apn-details-view', false);
|
| }
|
|
|