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