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

Unified Diff: chrome/browser/resources/options/personal_options.js

Issue 7400032: Multi-profile WebUI settings (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Notify when deleting profile from cache Created 9 years, 5 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/personal_options.js
diff --git a/chrome/browser/resources/options/personal_options.js b/chrome/browser/resources/options/personal_options.js
index e5c17532b1a782c2d563a4e32dcfa7cd2ee6aba5..b76b22ac849de91532a8f535c0b0ca59d325d8ae 100644
--- a/chrome/browser/resources/options/personal_options.js
+++ b/chrome/browser/resources/options/personal_options.js
@@ -5,6 +5,7 @@
cr.define('options', function() {
var OptionsPage = options.OptionsPage;
+ var ArrayDataModel = cr.ui.ArrayDataModel;
// State variables.
var syncEnabled = false;
@@ -32,6 +33,8 @@ cr.define('options', function() {
OptionsPage.prototype.initializePage.call(this);
var self = this;
+
+ // sync
James Hawkins 2011/07/19 20:22:09 Sync. Capitalize comment sentences (or word) and
$('sync-action-link').onclick = function(event) {
SyncSetupOverlay.showErrorUI();
};
@@ -44,17 +47,52 @@ cr.define('options', function() {
$('customize-sync').onclick = function(event) {
SyncSetupOverlay.showSetupUI();
};
+
+ // profiles
+ var profilesList = $('profiles-list');
+ options.personal_options.ProfileList.decorate(profilesList);
+ profilesList.autoExpands = true;
+
+ profilesList.addEventListener('change', function(event) {
James Hawkins 2011/07/19 20:22:09 onchange = function(...
+ var selectedProfile = profilesList.selectedItem;
+ var hasSelection = selectedProfile != null;
+ $('profiles-manage').disabled = !hasSelection;
+ $('profiles-delete').disabled = !hasSelection;
+ });
+ $('profiles-create').onclick = function(event) {
+ chrome.send('profilesCreate');
+ };
+ $('profiles-manage').onclick = function(event) {
+ var selectedProfile = self.getSelectedProfileItem_();
+ if (selectedProfile) {
+ ProfilesManageOverlay.show(selectedProfile);
+ }
+ };
+ $('profiles-delete').onclick = function(event) {
+ var selectedProfile = self.getSelectedProfileItem_();
+ if (!selectedProfile)
+ return;
+
+ ProfilesManageOverlay.showDeleteDialog(selectedProfile);
+ chrome.send('profilesDeleteShowWarnings', selectedProfile.filePath);
+ };
+
+ // passwords
$('manage-passwords').onclick = function(event) {
OptionsPage.navigateToPage('passwords');
OptionsPage.showTab($('passwords-nav-tab'));
chrome.send('coreOptionsUserMetricsAction',
['Options_ShowPasswordManager']);
};
+
+ // autofill
$('autofill-settings').onclick = function(event) {
OptionsPage.navigateToPage('autofill');
chrome.send('coreOptionsUserMetricsAction',
['Options_ShowAutofillSettings']);
};
+
+ // appearance
$('themes-reset').onclick = function(event) {
chrome.send('themesReset');
};
@@ -173,16 +211,75 @@ cr.define('options', function() {
$('sync-action-link').hidden = !status.length;
},
+ /**
+ * Display or hide the profiles section of the page. This is used for
+ * multi-profile settings.
+ * @param {boolean} visible True to show the section.
+ * @private
+ */
setProfilesSectionVisible_: function(visible) {
- $('profiles-create').hidden = !visible;
+ $('profiles-section').hidden = !visible;
+ },
+
+ /**
+ * Get the selected profile item from the profile list. This also works
+ * correctly if the list is not displayed.
+ * @return {Object} the profile item object, or null if nothing is selected.
+ * @private
+ */
+ getSelectedProfileItem_: function() {
+ var profilesList = $('profiles-list');
+ if (profilesList.hidden) {
+ if (profilesList.dataModel.length > 0)
+ return profilesList.dataModel.item(0);
+ } else {
+ return profilesList.selectedItem;
+ }
+ return null;
+ },
+
+ /**
+ * Delete the profile given by |profileInfo|.
+ * @param {Object} profileInfo The profile info object of the profile that
+ * should be deleted.
+ */
+ deleteProfile_: function(profileInfo) {
+ chrome.send('profilesDelete', [profileInfo.filePath]);
James Hawkins 2011/07/19 20:22:09 rename: deleteProfile
},
- setNewProfileButtonEnabled_: function(enabled) {
- $('new-profile').disabled = !enabled;
- if (enabled)
- $('profiles-create').classList.remove('disabled');
- else
- $('profiles-create').classList.add('disabled');
+ /**
+ * Display the correct dialog layout, depending on how many profiles are
+ * available.
+ * @param {number} The number of profiles to display.
James Hawkins 2011/07/19 20:22:09 @param {number} numProfiles The...
+ */
+ setProfileViewSingle_: function(numProfiles) {
+ $('profiles-list').hidden = numProfiles <= 1;
James Hawkins 2011/07/19 20:22:09 You can do the same for profiles-manage and profil
+ if (numProfiles <= 1) {
+ $('profiles-manage').hidden = true;
+ $('profiles-delete').hidden = true;
+ } else {
+ $('profiles-list').redraw();
+ $('profiles-manage').hidden = false;
+ $('profiles-delete').hidden = false;
+ }
+ },
+
+ /**
+ * Called by the C++ handler. Adds all |profiles| to the list.
James Hawkins 2011/07/19 20:22:09 No need to specify the first sentence.
+ * @param {Array.<Object>} An array of profile info objects.
+ * each object is like:
James Hawkins 2011/07/19 20:22:09 s/like/of the form/
+ * profileInfo = {
+ * name: "Profile Name",
+ * iconURL: "chrome://path/to/icon/image",
+ * filePath: "/path/to/profile/data/on/disk",
+ * isCurrentProfile: false
+ * };
+ */
+ setProfilesInfo_: function(profiles) {
+ this.setProfileViewSingle_(profiles.length);
+ // add it to the list, even if the list is hidden so we can access it
+ // later.
+ $('profiles-list').dataModel = new ArrayDataModel(profiles);
},
setStartStopButtonVisible_: function(visible) {
@@ -256,8 +353,8 @@ cr.define('options', function() {
'setSyncStatusErrorVisible',
'setSyncActionLinkEnabled',
'setSyncActionLinkLabel',
+ 'setProfilesInfo',
'setProfilesSectionVisible',
- 'setNewProfileButtonEnabled',
'setStartStopButtonVisible',
'setStartStopButtonEnabled',
'setStartStopButtonLabel',

Powered by Google App Engine
This is Rietveld 408576698