// 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; // State variables. var syncEnabled = false; var syncSetupCompleted = false; /** * Encapsulated handling of personal options page. * @constructor */ function PersonalOptions() { OptionsPage.call(this, 'personal', templateData.personalPageTabTitle, 'personal-page'); } cr.addSingletonGetter(PersonalOptions); PersonalOptions.prototype = { // Inherit PersonalOptions from OptionsPage. __proto__: options.OptionsPage.prototype, // Initialize PersonalOptions page. initializePage: function() { // Call base class implementation to start preference initialization. OptionsPage.prototype.initializePage.call(this); var self = this; $('sync-action-link').onclick = function(event) { chrome.send('showSyncActionDialog'); }; $('start-stop-sync').onclick = function(event) { if (self.syncSetupCompleted) self.showStopSyncingOverlay_(); else chrome.send('showSyncLoginDialog'); }; $('customize-sync').onclick = function(event) { chrome.send('showCustomizeSyncDialog'); }; $('privacy-dashboard-link').onclick = function(event) { chrome.send('openPrivacyDashboardTabAndActivate'); }; $('manage-passwords').onclick = function(event) { OptionsPage.navigateToPage('passwords'); OptionsPage.showTab($('passwords-nav-tab')); chrome.send('coreOptionsUserMetricsAction', ['Options_ShowPasswordManager']); }; $('autofill-settings').onclick = function(event) { OptionsPage.navigateToPage('autofill'); chrome.send('coreOptionsUserMetricsAction', ['Options_ShowAutofillSettings']); }; $('themes-reset').onclick = function(event) { chrome.send('themesReset'); }; if (!cr.isChromeOS) { $('import-data').onclick = function(event) { 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'); }; chrome.send('loadAccountPicture'); } if (cr.commandLine.options['--bwsi']) { // Disable the screen lock checkbox for the guest mode. $('enable-screen-lock').disabled = true; } if (PersonalOptions.disablePasswordManagement()) { $('passwords-offersave').disabled = true; $('passwords-neversave').disabled = true; $('passwords-offersave').value = false; $('passwords-neversave').value = true; $('manage-passwords').disabled = true; } }, showStopSyncingOverlay_: function() { AlertOverlay.show(localStrings.getString('stop_syncing_title'), localStrings.getString('stop_syncing_explanation'), localStrings.getString('stop_syncing_confirm'), localStrings.getString('cancel'), function() { chrome.send('stopSyncing'); }); }, setElementVisible_: function(element, visible) { element.hidden = !visible; if (visible) element.classList.remove('hidden'); else element.classList.add('hidden'); }, setSyncEnabled_: function(enabled) { this.syncEnabled = enabled; }, setSyncSetupCompleted_: function(completed) { this.syncSetupCompleted = completed; this.setElementVisible_($('customize-sync'), completed); $('privacy-dashboard-link').hidden = !completed; }, setAccountPicture_: function(image) { $('account-picture').src = image; }, setSyncStatus_: function(status) { var statusSet = status != ''; $('sync-overview').hidden = statusSet; $('sync-status').hidden = !statusSet; $('sync-status-text').textContent = status; }, setSyncStatusErrorVisible_: function(visible) { visible ? $('sync-status').classList.add('sync-error') : $('sync-status').classList.remove('sync-error'); }, 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. this.setElementVisible_($('sync-action-link'), status.length != 0); }, setProfilesSectionVisible_: function(visible) { this.setElementVisible_($('profiles-create'), visible); }, setNewProfileButtonEnabled_: function(enabled) { $('new-profile').disabled = !enabled; if (enabled) $('profiles-create').classList.remove('disabled'); else $('profiles-create').classList.add('disabled'); }, setStartStopButtonVisible_: function(visible) { this.setElementVisible_($('start-stop-sync'), 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() { this.setElementVisible_($('sync-section'), false); }, /** * Toggles the visibility of the data type checkboxes based on whether they * are enabled on not. * @param {Object} dict A mapping from data type to a boolean indicating * whether it is enabled. * @private */ setRegisteredDataTypes_: function(dict) { for (var type in dict) { if (type.match(/Registered$/) && !dict[type]) { node = $(type.replace(/([a-z]+)Registered$/i, '$1').toLowerCase() + '-check'); if (node) node.parentNode.style.display = 'none'; } } }, }; /** * 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.options['--bwsi']; }; // Forward public APIs to private implementations. [ 'setSyncEnabled', 'setSyncSetupCompleted', 'setAccountPicture', 'setSyncStatus', 'setSyncStatusErrorVisible', 'setSyncActionLinkEnabled', 'setSyncActionLinkLabel', 'setProfilesSectionVisible', 'setNewProfileButtonEnabled', 'setStartStopButtonVisible', 'setStartStopButtonEnabled', 'setStartStopButtonLabel', 'setGtkThemeButtonEnabled', 'setThemesResetButtonEnabled', 'hideSyncSection', 'setRegisteredDataTypes', ].forEach(function(name) { PersonalOptions[name] = function(value) { PersonalOptions.getInstance()[name + '_'](value); }; }); // Export return { PersonalOptions: PersonalOptions }; });