Extract code handling PrinterProviderAPI from PrintPreviewHandler
[chromium-blink-merge.git] / chrome / browser / resources / options / import_data_overlay.js
blobb8d0e61785271ff553a535506f98f9e2066405ac
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 cr.define('options', function() {
6   var Page = cr.ui.pageManager.Page;
7   var PageManager = cr.ui.pageManager.PageManager;
9   /**
10    * ImportDataOverlay class
11    * Encapsulated handling of the 'Import Data' overlay page.
12    * @class
13    */
14   function ImportDataOverlay() {
15     Page.call(this,
16               'importData',
17               loadTimeData.getString('importDataOverlayTabTitle'),
18               'import-data-overlay');
19   }
21   cr.addSingletonGetter(ImportDataOverlay);
23   /**
24   * @param {string} type The type of data to import. Used in the element's ID.
25   */
26   function importable(type) {
27     var id = 'import-' + type;
28     return $(id).checked && !$(id + '-with-label').hidden;
29   }
31   ImportDataOverlay.prototype = {
32     // Inherit from Page.
33     __proto__: Page.prototype,
35     /** @override */
36     initializePage: function() {
37       Page.prototype.initializePage.call(this);
39       var self = this;
40       var checkboxes =
41           document.querySelectorAll('#import-checkboxes input[type=checkbox]');
42       for (var i = 0; i < checkboxes.length; i++) {
43         checkboxes[i].customPrefChangeHandler = function(e) {
44           options.PrefCheckbox.prototype.defaultPrefChangeHandler.call(this, e);
45           self.validateCommitButton_();
46           return true;
47         };
48       }
50       $('import-browsers').onchange = function() {
51         self.updateCheckboxes_();
52         self.validateCommitButton_();
53         self.updateBottomBar_();
54       };
56       $('import-data-commit').onclick = function() {
57         chrome.send('importData', [
58             String($('import-browsers').selectedIndex),
59             String($('import-history').checked),
60             String($('import-favorites').checked),
61             String($('import-passwords').checked),
62             String($('import-search').checked),
63             String($('import-autofill-form-data').checked)]);
64       };
66       $('import-data-cancel').onclick = function() {
67         ImportDataOverlay.dismiss();
68       };
70       $('import-choose-file').onclick = function() {
71         chrome.send('chooseBookmarksFile');
72       };
74       $('import-data-confirm').onclick = function() {
75         ImportDataOverlay.dismiss();
76       };
78       // Form controls are disabled until the profile list has been loaded.
79       self.setAllControlsEnabled_(false);
80     },
82     /**
83      * Sets the enabled and checked state of the commit button.
84      * @private
85      */
86     validateCommitButton_: function() {
87       var somethingToImport =
88           importable('history') || importable('favorites') ||
89           importable('passwords') || importable('search') ||
90           importable('autofill-form-data');
91       $('import-data-commit').disabled = !somethingToImport;
92       $('import-choose-file').disabled = !$('import-favorites').checked;
93     },
95     /**
96      * Sets the enabled state of all the checkboxes and the commit button.
97      * @private
98      */
99     setAllControlsEnabled_: function(enabled) {
100       var checkboxes =
101           document.querySelectorAll('#import-checkboxes input[type=checkbox]');
102       for (var i = 0; i < checkboxes.length; i++)
103         this.setUpCheckboxState_(checkboxes[i], enabled);
104       $('import-data-commit').disabled = !enabled;
105       $('import-choose-file').hidden = !enabled;
106 <if expr="is_macosx">
107       $('mac-password-keychain').hidden = !enabled;
108 </if>
109     },
111     /**
112      * Sets the enabled state of a checkbox element.
113      * @param {Object} checkbox A checkbox element.
114      * @param {boolean} enabled The enabled state of the checkbox. If false,
115      *     the checkbox is disabled. If true, the checkbox is enabled.
116      * @private
117      */
118     setUpCheckboxState_: function(checkbox, enabled) {
119       checkbox.setDisabled('noProfileData', !enabled);
120     },
122     /**
123      * Update the enabled and visible states of all the checkboxes.
124      * @private
125      */
126     updateCheckboxes_: function() {
127       var index = $('import-browsers').selectedIndex;
128       var bookmarksFileSelected = index == this.browserProfiles.length - 1;
129       $('import-choose-file').hidden = !bookmarksFileSelected;
130       $('import-data-commit').hidden = bookmarksFileSelected;
132       var browserProfile;
133       if (this.browserProfiles.length > index)
134         browserProfile = this.browserProfiles[index];
135       var importOptions = ['history',
136                            'favorites',
137                            'passwords',
138                            'search',
139                            'autofill-form-data'];
140       for (var i = 0; i < importOptions.length; i++) {
141         var id = 'import-' + importOptions[i];
142         var enable = browserProfile && browserProfile[importOptions[i]];
143         this.setUpCheckboxState_($(id), enable);
144         $(id + '-with-label').hidden = !enable;
145       }
146     },
148     /**
149      * Show or hide gray message at the bottom.
150      * @private
151      */
152     updateBottomBar_: function() {
153       var index = $('import-browsers').selectedIndex;
154       var browserProfile;
155       if (this.browserProfiles.length > index)
156         browserProfile = this.browserProfiles[index];
157       var enable = browserProfile && browserProfile['show_bottom_bar'];
158 <if expr="is_macosx">
159       $('mac-password-keychain').hidden = !enable;
160 </if>
161     },
163     /**
164      * Update the supported browsers popup with given entries.
165      * @param {Array} browsers List of supported browsers name.
166      * @private
167      */
168     updateSupportedBrowsers_: function(browsers) {
169       this.browserProfiles = browsers;
170       var browserSelect = $('import-browsers');
171       browserSelect.remove(0);  // Remove the 'Loading...' option.
172       browserSelect.textContent = '';
173       var browserCount = browsers.length;
175       if (browserCount == 0) {
176         var option = new Option(loadTimeData.getString('noProfileFound'), 0);
177         browserSelect.appendChild(option);
179         this.setAllControlsEnabled_(false);
180       } else {
181         this.setAllControlsEnabled_(true);
182         for (var i = 0; i < browserCount; i++) {
183           var browser = browsers[i];
184           var option = new Option(browser.name, browser.index);
185           browserSelect.appendChild(option);
186         }
188         this.updateCheckboxes_();
189         this.validateCommitButton_();
190         this.updateBottomBar_();
191       }
192     },
194     /**
195      * Clear import prefs set when user checks/unchecks a checkbox so that each
196      * checkbox goes back to the default "checked" state (or alternatively, to
197      * the state set by a recommended policy).
198      * @private
199      */
200     clearUserPrefs_: function() {
201       var importPrefs = ['import_history',
202                          'import_bookmarks',
203                          'import_saved_passwords',
204                          'import_search_engine',
205                          'import_autofill_form_data'];
206       for (var i = 0; i < importPrefs.length; i++)
207         Preferences.clearPref(importPrefs[i], true);
208     },
210     /**
211      * Update the dialog layout to reflect success state.
212      * @param {boolean} success If true, show success dialog elements.
213      * @private
214      */
215     updateSuccessState_: function(success) {
216       var sections = document.querySelectorAll('.import-data-configure');
217       for (var i = 0; i < sections.length; i++)
218         sections[i].hidden = success;
220       sections = document.querySelectorAll('.import-data-success');
221       for (var i = 0; i < sections.length; i++)
222         sections[i].hidden = !success;
223     },
224   };
226   ImportDataOverlay.clearUserPrefs = function() {
227     ImportDataOverlay.getInstance().clearUserPrefs_();
228   };
230   /**
231    * Update the supported browsers popup with given entries.
232    * @param {Array} browsers List of supported browsers name.
233    */
234   ImportDataOverlay.updateSupportedBrowsers = function(browsers) {
235     ImportDataOverlay.getInstance().updateSupportedBrowsers_(browsers);
236   };
238   /**
239    * Update the UI to reflect whether an import operation is in progress.
240    * @param {boolean} importing True if an import operation is in progress.
241    */
242   ImportDataOverlay.setImportingState = function(importing) {
243     var checkboxes =
244         document.querySelectorAll('#import-checkboxes input[type=checkbox]');
245     for (var i = 0; i < checkboxes.length; i++)
246         checkboxes[i].setDisabled('Importing', importing);
247     if (!importing)
248       ImportDataOverlay.getInstance().updateCheckboxes_();
249     $('import-browsers').disabled = importing;
250     $('import-throbber').style.visibility = importing ? 'visible' : 'hidden';
251     ImportDataOverlay.getInstance().validateCommitButton_();
252   };
254   /**
255    * Remove the import overlay from display.
256    */
257   ImportDataOverlay.dismiss = function() {
258     ImportDataOverlay.clearUserPrefs();
259     PageManager.closeOverlay();
260   };
262   /**
263    * Show a message confirming the success of the import operation.
264    */
265   ImportDataOverlay.confirmSuccess = function() {
266     var showBookmarksMessage = $('import-favorites').checked;
267     ImportDataOverlay.setImportingState(false);
268     $('import-find-your-bookmarks').hidden = !showBookmarksMessage;
269     ImportDataOverlay.getInstance().updateSuccessState_(true);
270   };
272   /**
273    * Show the import data overlay.
274    */
275   ImportDataOverlay.show = function() {
276     // Make sure that any previous import success message is hidden, and
277     // we're showing the UI to import further data.
278     ImportDataOverlay.getInstance().updateSuccessState_(false);
279     ImportDataOverlay.getInstance().validateCommitButton_();
281     PageManager.showPageByName('importData');
282   };
284   // Export
285   return {
286     ImportDataOverlay: ImportDataOverlay
287   };