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

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

Issue 8895023: Options2: Pull the trigger. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: DIAF. Created 9 years 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/options2/personal_options.js
diff --git a/chrome/browser/resources/options2/personal_options.js b/chrome/browser/resources/options2/personal_options.js
new file mode 100644
index 0000000000000000000000000000000000000000..78d40dc84b334a2232e8983561f3af60e4136ab4
--- /dev/null
+++ b/chrome/browser/resources/options2/personal_options.js
@@ -0,0 +1,372 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+cr.define('options', function() {
+
+ var OptionsPage = options.OptionsPage;
+ var ArrayDataModel = cr.ui.ArrayDataModel;
+
+ /**
+ * Encapsulated handling of personal options page.
+ * @constructor
+ */
+ function PersonalOptions() {
+ OptionsPage.call(this, 'personal',
+ templateData.personalPageTabTitle,
+ 'personal-page');
+ if (cr.isChromeOS) {
+ // Username (canonical email) of the currently logged in user or
+ // |kGuestUser| if a guest session is active.
+ this.username_ = localStrings.getString('username');
+ }
+ }
+
+ cr.addSingletonGetter(PersonalOptions);
+
+ PersonalOptions.prototype = {
+ // Inherit PersonalOptions from OptionsPage.
+ __proto__: options.OptionsPage.prototype,
+
+ // State variables.
+ syncEnabled: false,
+ syncSetupCompleted: false,
+
+ // Initialize PersonalOptions page.
+ initializePage: function() {
+ // Call base class implementation to start preference initialization.
+ OptionsPage.prototype.initializePage.call(this);
+
+ var self = this;
+
+ // Sync.
+ $('sync-action-link').onclick = function(event) {
+ SyncSetupOverlay.showErrorUI();
+ };
+ $('start-stop-sync').onclick = function(event) {
+ if (self.syncSetupCompleted)
+ SyncSetupOverlay.showStopSyncingUI();
+ else
+ SyncSetupOverlay.showSetupUI();
+ };
+ $('customize-sync').onclick = function(event) {
+ SyncSetupOverlay.showSetupUI();
+ };
+
+ // Profiles.
+ var profilesList = $('profiles-list');
+ options.personal_options.ProfileList.decorate(profilesList);
+ profilesList.autoExpands = true;
+
+ profilesList.onchange = self.setProfileViewButtonsStatus_;
+ $('profiles-create').onclick = function(event) {
+ chrome.send('createProfile');
+ };
+ $('profiles-manage').onclick = function(event) {
+ var selectedProfile = self.getSelectedProfileItem_();
+ if (selectedProfile)
+ ManageProfileOverlay.showManageDialog(selectedProfile);
+ };
+ $('profiles-delete').onclick = function(event) {
+ var selectedProfile = self.getSelectedProfileItem_();
+ if (selectedProfile)
+ ManageProfileOverlay.showDeleteDialog(selectedProfile);
+ };
+
+ // 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']);
+ };
+ if (cr.isChromeOS && cr.commandLine && cr.commandLine.options['--bwsi']) {
+ // Hide Autofill options for the guest user.
+ $('autofill-section').hidden = true;
+ }
+
+ // Appearance.
+ $('themes-reset').onclick = function(event) {
+ chrome.send('themesReset');
+ };
+
+ if (!cr.isChromeOS) {
+ $('import-data').onclick = function(event) {
+ // Make sure that any previous import success message is hidden, and
+ // we're showing the UI to import further data.
+ $('import-data-configure').hidden = false;
+ $('import-data-success').hidden = true;
+ OptionsPage.navigateToPage('importData');
+ chrome.send('coreOptionsUserMetricsAction', ['Import_ShowDlg']);
+ };
+
+ if ($('themes-GTK-button')) {
+ $('themes-GTK-button').onclick = function(event) {
+ chrome.send('themesSetGTK');
+ };
+ }
+ } else {
+ $('change-picture-button').onclick = function(event) {
+ OptionsPage.navigateToPage('changePicture');
+ };
+ this.updateAccountPicture_();
+
+ if (cr.commandLine && cr.commandLine.options['--bwsi']) {
+ // Disable the screen lock checkbox and change-picture-button in
+ // guest mode.
+ $('enable-screen-lock').disabled = true;
+ $('change-picture-button').disabled = true;
+ }
+ }
+
+ if (PersonalOptions.disablePasswordManagement()) {
+ // Disable the Password Manager in guest mode.
+ $('passwords-offersave').disabled = true;
+ $('passwords-neversave').disabled = true;
+ $('passwords-offersave').value = false;
+ $('passwords-neversave').value = true;
+ $('manage-passwords').disabled = true;
+ }
+
+ $('mac-passwords-warning').hidden =
+ !(localStrings.getString('macPasswordsWarning'));
+
+ if (PersonalOptions.disableAutofillManagement()) {
+ $('autofill-settings').disabled = true;
+
+ // Disable and turn off autofill.
+ var autofillEnabled = $('autofill-enabled');
+ autofillEnabled.disabled = true;
+ autofillEnabled.checked = false;
+ cr.dispatchSimpleEvent(autofillEnabled, 'change');
+ }
+ },
+
+ setSyncEnabled_: function(enabled) {
+ this.syncEnabled = enabled;
+ },
+
+ setAutoLoginVisible_ : function(visible) {
+ $('enable-auto-login-checkbox').hidden = !visible;
+ },
+
+ setSyncSetupCompleted_: function(completed) {
+ this.syncSetupCompleted = completed;
+ $('customize-sync').hidden = !completed;
+ },
+
+ setSyncStatus_: function(status) {
+ var statusSet = status != '';
+ $('sync-overview').hidden = statusSet;
+ $('sync-status').hidden = !statusSet;
+ $('sync-status-text').innerHTML = status;
+ },
+
+ setSyncStatusErrorVisible_: function(visible) {
+ visible ? $('sync-status').classList.add('sync-error') :
+ $('sync-status').classList.remove('sync-error');
+ },
+
+ setCustomizeSyncButtonEnabled_: function(enabled) {
+ $('customize-sync').disabled = !enabled;
+ },
+
+ setSyncActionLinkEnabled_: function(enabled) {
+ $('sync-action-link').disabled = !enabled;
+ },
+
+ setSyncActionLinkLabel_: function(status) {
+ $('sync-action-link').textContent = status;
+
+ // link-button does is not zero-area when the contents of the button are
+ // empty, so explicitly hide the element.
+ $('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-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;
+ },
+
+ /**
+ * Helper function to set the status of profile view buttons to disabled or
+ * enabled, depending on the number of profiles and selection status of the
+ * profiles list.
+ */
+ setProfileViewButtonsStatus_: function() {
+ var profilesList = $('profiles-list');
+ var selectedProfile = profilesList.selectedItem;
+ var hasSelection = selectedProfile != null;
+ var hasSingleProfile = profilesList.dataModel.length == 1;
+ $('profiles-manage').disabled = !hasSelection ||
+ !selectedProfile.isCurrentProfile;
+ $('profiles-delete').disabled = !hasSelection && !hasSingleProfile;
+ },
+
+ /**
+ * Display the correct dialog layout, depending on how many profiles are
+ * available.
+ * @param {number} numProfiles The number of profiles to display.
+ */
+ setProfileViewSingle_: function(numProfiles) {
+ var hasSingleProfile = numProfiles == 1;
+ $('profiles-list').hidden = hasSingleProfile;
+ $('profiles-single-message').hidden = !hasSingleProfile;
+ $('profiles-manage').hidden = hasSingleProfile;
+ $('profiles-delete').textContent = hasSingleProfile ?
+ templateData.profilesDeleteSingle :
+ templateData.profilesDelete;
+ },
+
+ /**
+ * Adds all |profiles| to the list.
+ * @param {Array.<Object>} An array of profile info objects.
+ * each object is 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);
+ this.setProfileViewButtonsStatus_();
+ },
+
+ setStartStopButtonVisible_: function(visible) {
+ $('start-stop-sync').hidden = !visible;
+ },
+
+ setStartStopButtonEnabled_: function(enabled) {
+ $('start-stop-sync').disabled = !enabled;
+ },
+
+ setStartStopButtonLabel_: function(label) {
+ $('start-stop-sync').textContent = label;
+ },
+
+ setGtkThemeButtonEnabled_: function(enabled) {
+ if (!cr.isChromeOS && navigator.platform.match(/linux|BSD/i)) {
+ $('themes-GTK-button').disabled = !enabled;
+ }
+ },
+
+ setThemesResetButtonEnabled_: function(enabled) {
+ $('themes-reset').disabled = !enabled;
+ },
+
+ hideSyncSection_: function() {
+ $('sync-section').hidden = true;
+ },
+
+ /**
+ * Get the start/stop sync button DOM element.
+ * @return {DOMElement} The start/stop sync button.
+ * @private
+ */
+ getStartStopSyncButton_: function() {
+ return $('start-stop-sync');
+ },
+
+ /**
+ * (Re)loads IMG element with current user account picture.
+ */
+ updateAccountPicture_: function() {
+ $('account-picture').src =
+ 'chrome://userimage/' + this.username_ +
+ '?id=' + (new Date()).getTime();
+ },
+ };
+
+ /**
+ * Returns whether the user should be able to manage (view and edit) their
+ * stored passwords. Password management is disabled in guest mode.
+ * @return {boolean} True if password management should be disabled.
+ */
+ PersonalOptions.disablePasswordManagement = function() {
+ return cr.commandLine && cr.commandLine.options['--bwsi'];
+ };
+
+ /**
+ * Returns whether the user should be able to manage autofill settings.
+ * @return {boolean} True if password management should be disabled.
+ */
+ PersonalOptions.disableAutofillManagement = function() {
+ return cr.commandLine && cr.commandLine.options['--bwsi'];
+ };
+
+ if (cr.isChromeOS) {
+ /**
+ * Returns username (canonical email) of the user logged in (ChromeOS only).
+ * @return {string} user email.
+ */
+ PersonalOptions.getLoggedInUsername = function() {
+ return PersonalOptions.getInstance().username_;
+ };
+ }
+
+ // Forward public APIs to private implementations.
+ [
+ 'getStartStopSyncButton',
+ 'hideSyncSection',
+ 'setAutoLoginVisible',
+ 'setCustomizeSyncButtonEnabled',
+ 'setGtkThemeButtonEnabled',
+ 'setProfilesInfo',
+ 'setProfilesSectionVisible',
+ 'setStartStopButtonEnabled',
+ 'setStartStopButtonLabel',
+ 'setStartStopButtonVisible',
+ 'setSyncActionLinkEnabled',
+ 'setSyncActionLinkLabel',
+ 'setSyncEnabled',
+ 'setSyncSetupCompleted',
+ 'setSyncStatus',
+ 'setSyncStatusErrorVisible',
+ 'setThemesResetButtonEnabled',
+ 'updateAccountPicture',
+ ].forEach(function(name) {
+ PersonalOptions[name] = function(value) {
+ return PersonalOptions.getInstance()[name + '_'](value);
+ };
+ });
+
+ // Export
+ return {
+ PersonalOptions: PersonalOptions
+ };
+
+});

Powered by Google App Engine
This is Rietveld 408576698