blob: b8d0e61785271ff553a535506f98f9e2066405ac [file] [log] [blame]
// 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_();
self.updateBottomBar_();
};
$('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;
<if expr="is_macosx">
$('mac-password-keychain').hidden = !enabled;
</if>
},
/**
* 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;
}
},
/**
* Show or hide gray message at the bottom.
* @private
*/
updateBottomBar_: function() {
var index = $('import-browsers').selectedIndex;
var browserProfile;
if (this.browserProfiles.length > index)
browserProfile = this.browserProfiles[index];
var enable = browserProfile && browserProfile['show_bottom_bar'];
<if expr="is_macosx">
$('mac-password-keychain').hidden = !enable;
</if>
},
/**
* 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_();
this.updateBottomBar_();
}
},
/**
* 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
};
});