| // 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').onclick = function(event) { |
| chrome.send('changeAccountPicture'); |
| }; |
| 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(event) { |
| 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) { |
| 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); |
| }, |
| |
| setAccountPicture_: function(image) { |
| $('account-picture').src = image; |
| }, |
| |
| setSyncStatus_: function(status) { |
| $('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); |
| }, |
| |
| 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', |
| 'setStartStopButtonVisible', |
| 'setStartStopButtonEnabled', |
| 'setStartStopButtonLabel', |
| 'setGtkThemeButtonEnabled', |
| 'setThemesResetButtonEnabled', |
| 'hideSyncSection', |
| 'setRegisteredDataTypes', |
| ].forEach(function(name) { |
| PersonalOptions[name] = function(value) { |
| PersonalOptions.getInstance()[name + '_'](value); |
| }; |
| }); |
| |
| // Export |
| return { |
| PersonalOptions: PersonalOptions |
| }; |
| |
| }); |