// Copyright (c) 2012 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 Page = cr.ui.pageManager.Page; var PageManager = cr.ui.pageManager.PageManager; /** * ImportDataOverlay class * Encapsulated handling of the 'Import Data' overlay page. * @class */ function ImportDataOverlay() { Page.call(this, 'importData', loadTimeData.getString('importDataOverlayTabTitle'), 'import-data-overlay'); } cr.addSingletonGetter(ImportDataOverlay); /** * @param {string} type The type of data to import. Used in the element's ID. */ function importable(type) { var id = 'import-' + type; return $(id).checked && !$(id + '-with-label').hidden; } ImportDataOverlay.prototype = { // Inherit from Page. __proto__: Page.prototype, /** @override */ initializePage: function() { Page.prototype.initializePage.call(this); var self = this; var checkboxes = document.querySelectorAll('#import-checkboxes input[type=checkbox]'); for (var i = 0; i < checkboxes.length; i++) { checkboxes[i].customPrefChangeHandler = function(e) { options.PrefCheckbox.prototype.defaultPrefChangeHandler.call(this, e); self.validateCommitButton_(); return true; }; } $('import-browsers').onchange = function() { self.updateCheckboxes_(); self.validateCommitButton_(); }; $('import-data-commit').onclick = function() { chrome.send('importData', [ String($('import-browsers').selectedIndex), String($('import-history').checked), String($('import-favorites').checked), String($('import-passwords').checked), String($('import-search').checked), String($('import-autofill-form-data').checked)]); }; $('import-data-cancel').onclick = function() { ImportDataOverlay.dismiss(); }; $('import-choose-file').onclick = function() { chrome.send('chooseBookmarksFile'); }; $('import-data-confirm').onclick = function() { ImportDataOverlay.dismiss(); }; // Form controls are disabled until the profile list has been loaded. self.setAllControlsEnabled_(false); }, /** * Sets the enabled and checked state of the commit button. * @private */ validateCommitButton_: function() { var somethingToImport = importable('history') || importable('favorites') || importable('passwords') || importable('search') || importable('autofill-form-data'); $('import-data-commit').disabled = !somethingToImport; $('import-choose-file').disabled = !$('import-favorites').checked; }, /** * Sets the enabled state of all the checkboxes and the commit button. * @private */ setAllControlsEnabled_: function(enabled) { var checkboxes = document.querySelectorAll('#import-checkboxes input[type=checkbox]'); for (var i = 0; i < checkboxes.length; i++) this.setUpCheckboxState_(checkboxes[i], enabled); $('import-data-commit').disabled = !enabled; $('import-choose-file').hidden = !enabled; }, /** * Sets the enabled state of a checkbox element. * @param {Object} checkbox A checkbox element. * @param {boolean} enabled The enabled state of the checkbox. If false, * the checkbox is disabled. If true, the checkbox is enabled. * @private */ setUpCheckboxState_: function(checkbox, enabled) { checkbox.setDisabled('noProfileData', !enabled); }, /** * Update the enabled and visible states of all the checkboxes. * @private */ updateCheckboxes_: function() { var index = $('import-browsers').selectedIndex; var bookmarksFileSelected = index == this.browserProfiles.length - 1; $('import-choose-file').hidden = !bookmarksFileSelected; $('import-data-commit').hidden = bookmarksFileSelected; var browserProfile; if (this.browserProfiles.length > index) browserProfile = this.browserProfiles[index]; var importOptions = ['history', 'favorites', 'passwords', 'search', 'autofill-form-data']; for (var i = 0; i < importOptions.length; i++) { var id = 'import-' + importOptions[i]; var enable = browserProfile && browserProfile[importOptions[i]]; this.setUpCheckboxState_($(id), enable); $(id + '-with-label').hidden = !enable; } }, /** * Update the supported browsers popup with given entries. * @param {Array} browsers List of supported browsers name. * @private */ updateSupportedBrowsers_: function(browsers) { this.browserProfiles = browsers; var browserSelect = $('import-browsers'); browserSelect.remove(0); // Remove the 'Loading...' option. browserSelect.textContent = ''; var browserCount = browsers.length; if (browserCount == 0) { var option = new Option(loadTimeData.getString('noProfileFound'), 0); browserSelect.appendChild(option); this.setAllControlsEnabled_(false); } else { this.setAllControlsEnabled_(true); for (var i = 0; i < browserCount; i++) { var browser = browsers[i]; var option = new Option(browser.name, browser.index); browserSelect.appendChild(option); } this.updateCheckboxes_(); this.validateCommitButton_(); } }, /** * Clear import prefs set when user checks/unchecks a checkbox so that each * checkbox goes back to the default "checked" state (or alternatively, to * the state set by a recommended policy). * @private */ clearUserPrefs_: function() { var importPrefs = ['import_history', 'import_bookmarks', 'import_saved_passwords', 'import_search_engine', 'import_autofill_form_data']; for (var i = 0; i < importPrefs.length; i++) Preferences.clearPref(importPrefs[i], true); }, /** * Update the dialog layout to reflect success state. * @param {boolean} success If true, show success dialog elements. * @private */ updateSuccessState_: function(success) { var sections = document.querySelectorAll('.import-data-configure'); for (var i = 0; i < sections.length; i++) sections[i].hidden = success; sections = document.querySelectorAll('.import-data-success'); for (var i = 0; i < sections.length; i++) sections[i].hidden = !success; }, }; ImportDataOverlay.clearUserPrefs = function() { ImportDataOverlay.getInstance().clearUserPrefs_(); }; /** * Update the supported browsers popup with given entries. * @param {Array} browsers List of supported browsers name. */ ImportDataOverlay.updateSupportedBrowsers = function(browsers) { ImportDataOverlay.getInstance().updateSupportedBrowsers_(browsers); }; /** * Update the UI to reflect whether an import operation is in progress. * @param {boolean} importing True if an import operation is in progress. */ ImportDataOverlay.setImportingState = function(importing) { var checkboxes = document.querySelectorAll('#import-checkboxes input[type=checkbox]'); for (var i = 0; i < checkboxes.length; i++) checkboxes[i].setDisabled('Importing', importing); if (!importing) ImportDataOverlay.getInstance().updateCheckboxes_(); $('import-browsers').disabled = importing; $('import-throbber').style.visibility = importing ? 'visible' : 'hidden'; ImportDataOverlay.getInstance().validateCommitButton_(); }; /** * Remove the import overlay from display. */ ImportDataOverlay.dismiss = function() { ImportDataOverlay.clearUserPrefs(); PageManager.closeOverlay(); }; /** * Show a message confirming the success of the import operation. */ ImportDataOverlay.confirmSuccess = function() { var showBookmarksMessage = $('import-favorites').checked; ImportDataOverlay.setImportingState(false); $('import-find-your-bookmarks').hidden = !showBookmarksMessage; ImportDataOverlay.getInstance().updateSuccessState_(true); }; /** * Show the import data overlay. */ ImportDataOverlay.show = function() { // Make sure that any previous import success message is hidden, and // we're showing the UI to import further data. ImportDataOverlay.getInstance().updateSuccessState_(false); ImportDataOverlay.getInstance().validateCommitButton_(); PageManager.showPageByName('importData'); }; // Export return { ImportDataOverlay: ImportDataOverlay }; });