Index: chrome/browser/resources/options/manage_profile_overlay.js |
diff --git a/chrome/browser/resources/options/manage_profile_overlay.js b/chrome/browser/resources/options/manage_profile_overlay.js |
index bed229f546f2088e5e04b64dc0d2fe80cd340416..d277bc3f26f94502f736fdde0250b89fe4d28228 100644 |
--- a/chrome/browser/resources/options/manage_profile_overlay.js |
+++ b/chrome/browser/resources/options/manage_profile_overlay.js |
@@ -27,8 +27,16 @@ cr.define('options', function() { |
// Info about the currently managed/deleted profile. |
profileInfo_: null, |
- // An object containing all known profile names. |
- profileNames_: {}, |
+ // Whether the currently chosen name for a new profile was assigned |
+ // automatically by choosing an avatar. Set on receiveNewProfileDefaults; |
+ // cleared on first edit (in onNameChanged_). |
+ profileNameIsDefault_: false, |
+ |
+ // List of default profile names corresponding to the respective icons. |
+ defaultProfileNames_: [], |
+ |
+ // An object containing all names of existing profiles. |
+ existingProfileNames_: {}, |
// The currently selected icon in the icon grid. |
iconGridSelectedURL_: null, |
@@ -111,7 +119,7 @@ cr.define('options', function() { |
/** @override */ |
didShowPage: function() { |
- chrome.send('requestDefaultProfileIcons'); |
+ chrome.send('requestDefaultProfileIcons', ['manage']); |
// Just ignore the manage profile dialog on Chrome OS, they use /accounts. |
if (!cr.isChromeOS && window.location.pathname == '/manageProfile') |
@@ -134,6 +142,8 @@ cr.define('options', function() { |
$('manage-profile-ok').focus(); |
else |
manageNameField.focus(); |
+ |
+ this.profileNameIsDefault_ = false; |
}, |
/** |
@@ -180,28 +190,38 @@ cr.define('options', function() { |
}, |
/** |
- * Sets the name of the currently edited profile. |
+ * Sets the name of the profile being edited or created. |
+ * @param {string} name New profile name. |
+ * @param {string} mode A label that specifies the type of dialog box which |
+ * is currently being viewed (i.e. 'create' or 'manage'). |
* @private |
*/ |
- setProfileName_: function(name) { |
+ setProfileName_: function(name, mode) { |
if (this.profileInfo_) |
this.profileInfo_.name = name; |
- $('manage-profile-name').value = name; |
+ $(mode + '-profile-name').value = name; |
}, |
/** |
* Set an array of default icon URLs. These will be added to the grid that |
* the user will use to choose their profile icon. |
+ * @param {string} mode A label that specifies the type of dialog box which |
+ * is currently being viewed (i.e. 'create' or 'manage'). |
* @param {Array.<string>} iconURLs An array of icon URLs. |
+ * @param {Array.<string>} names An array of default names |
+ * corresponding to the icons. |
* @private |
*/ |
- receiveDefaultProfileIcons_: function(iconGrid, iconURLs) { |
- $(iconGrid).dataModel = new ArrayDataModel(iconURLs); |
+ receiveDefaultProfileIconsAndNames_: function(mode, iconURLs, names) { |
+ this.defaultProfileNames_ = names; |
+ |
+ var grid = $(mode + '-profile-icon-grid'); |
+ |
+ grid.dataModel = new ArrayDataModel(iconURLs); |
if (this.profileInfo_) |
- $(iconGrid).selectedItem = this.profileInfo_.iconURL; |
+ grid.selectedItem = this.profileInfo_.iconURL; |
- var grid = $(iconGrid); |
// Recalculate the measured item size. |
grid.measured_ = null; |
grid.columns = 0; |
@@ -219,6 +239,7 @@ cr.define('options', function() { |
*/ |
receiveNewProfileDefaults_: function(profileInfo) { |
ManageProfileOverlay.setProfileInfo(profileInfo, 'create'); |
+ this.profileNameIsDefault_ = true; |
$('create-profile-name-label').hidden = false; |
$('create-profile-name').hidden = false; |
// Trying to change the focus if this isn't the topmost overlay can |
@@ -241,8 +262,8 @@ cr.define('options', function() { |
* @param {Object} profileNames A dictionary of profile names. |
* @private |
*/ |
- receiveProfileNames_: function(profileNames) { |
- this.profileNames_ = profileNames; |
+ receiveExistingProfileNames_: function(profileNames) { |
+ this.existingProfileNames_ = profileNames; |
}, |
/** |
@@ -295,17 +316,23 @@ cr.define('options', function() { |
* @private |
*/ |
onNameChanged_: function(mode) { |
- var newName = $(mode + '-profile-name').value; |
- var oldName = this.profileInfo_.name; |
+ this.profileNameIsDefault_ = false; |
+ this.updateCreateOrImport_(mode); |
+ }, |
- // In 'create' mode, the initial name can be the name of an already |
- // existing supervised user. |
- if (newName == oldName && mode == 'manage') { |
- this.hideErrorBubble_(mode); |
- } else if (mode == 'create' && |
- !loadTimeData.getBoolean( |
- 'disableCreateExistingManagedUsers') && |
- $('create-profile-managed').checked) { |
+ /** |
+ * Called when the profile name is changed or the 'create managed' checkbox |
+ * is toggled. Updates the 'ok' button and the 'import existing supervised |
+ * user' link. |
+ * @param {string} mode A label that specifies the type of dialog box which |
+ * is currently being viewed (i.e. 'create' or 'manage'). |
+ * @private |
+ */ |
+ updateCreateOrImport_: function(mode) { |
+ // In 'create' mode, check for existing managed users with the same name. |
+ if (mode == 'create' && |
+ !loadTimeData.getBoolean('disableCreateExistingManagedUsers') && |
+ $('create-profile-managed').checked) { |
options.ManagedUserListData.requestExistingManagedUsers().then( |
this.receiveExistingManagedUsers_.bind(this), |
this.onSigninError_.bind(this)); |
@@ -381,8 +408,12 @@ cr.define('options', function() { |
* @private |
*/ |
updateOkButton_: function(mode) { |
+ var oldName = this.profileInfo_.name; |
var newName = $(mode + '-profile-name').value; |
- if (this.profileNames_[newName] != undefined) { |
+ var nameIsDuplicate = this.existingProfileNames_[newName] != undefined; |
+ if (mode == 'manage' && oldName == newName) |
+ nameIsDuplicate = false; |
+ if (nameIsDuplicate) { |
var errorHtml = |
loadTimeData.getString('manageProfilesDuplicateNameError'); |
this.showErrorBubble_(errorHtml, mode, true); |
@@ -448,6 +479,13 @@ cr.define('options', function() { |
if (!iconURL || iconURL == this.iconGridSelectedURL_) |
return; |
this.iconGridSelectedURL_ = iconURL; |
+ if (this.profileNameIsDefault_) { |
+ var index = $(mode + '-profile-icon-grid').selectionModel.selectedIndex; |
+ var name = this.defaultProfileNames_[index]; |
+ if (name) { |
+ this.setProfileName_(name, mode); |
+ } |
+ } |
if (this.profileInfo_ && this.profileInfo_.filePath) { |
chrome.send('profileIconSelectionChanged', |
[this.profileInfo_.filePath, iconURL]); |
@@ -531,9 +569,9 @@ cr.define('options', function() { |
// Forward public APIs to private implementations. |
[ |
- 'receiveDefaultProfileIcons', |
+ 'receiveDefaultProfileIconsAndNames', |
'receiveNewProfileDefaults', |
- 'receiveProfileNames', |
+ 'receiveExistingProfileNames', |
'receiveHasProfileShortcuts', |
'setProfileInfo', |
'setProfileName', |
@@ -575,7 +613,7 @@ cr.define('options', function() { |
*/ |
didShowPage: function() { |
chrome.send('requestCreateProfileUpdate'); |
- chrome.send('requestDefaultProfileIcons'); |
+ chrome.send('requestDefaultProfileIcons', ['create']); |
chrome.send('requestNewProfileDefaults'); |
$('manage-profile-overlay-create').hidden = false; |
@@ -599,12 +637,14 @@ cr.define('options', function() { |
$('import-existing-managed-user-link').hidden = true; |
if (!loadTimeData.getBoolean('disableCreateExistingManagedUsers')) { |
$('create-profile-managed').onchange = function() { |
- ManageProfileOverlay.getInstance().onNameChanged_('create'); |
+ ManageProfileOverlay.getInstance().updateCreateOrImport_('create'); |
}; |
} |
$('create-profile-managed-signed-in').disabled = true; |
$('create-profile-managed-signed-in').hidden = true; |
$('create-profile-managed-not-signed-in').hidden = true; |
+ |
+ this.profileNameIsDefault_ = false; |
}, |
/** @override */ |