OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 cr.define('options', function() { | 5 cr.define('options', function() { |
6 /** @const */ var Page = cr.ui.pageManager.Page; | 6 /** @const */ var Page = cr.ui.pageManager.Page; |
7 /** @const */ var PageManager = cr.ui.pageManager.PageManager; | 7 /** @const */ var PageManager = cr.ui.pageManager.PageManager; |
8 | 8 |
9 // True if the synced account uses a custom passphrase. | 9 // True if the synced account uses a custom passphrase. |
10 var usePassphrase_ = false; | 10 var usePassphrase_ = false; |
11 | 11 |
12 // True if the synced account uses 'encrypt everything'. | 12 // True if the synced account uses 'encrypt everything'. |
13 var useEncryptEverything_ = false; | 13 var useEncryptEverything_ = false; |
14 | 14 |
15 // An object used as a cache of the arguments passed in while initially | 15 // An object used as a cache of the arguments passed in while initially |
16 // displaying the advanced sync settings dialog. Used to switch between the | 16 // displaying the advanced sync settings dialog. Used to switch between the |
17 // options in the main drop-down menu. Reset when the dialog is closed. | 17 // options in the main drop-down menu. Reset when the dialog is closed. |
18 var syncConfigureArgs_ = null; | 18 var syncConfigureArgs_ = null; |
19 | 19 |
20 // A dictionary that maps the sync data type checkbox names to their checked | 20 // A dictionary that maps the sync data type checkbox names to their checked |
21 // state. Initialized when the advanced settings dialog is first brought up, | 21 // state. Initialized when the advanced settings dialog is first brought up, |
22 // updated any time a box is checked / unchecked, and reset when the dialog is | 22 // updated any time a box is checked / unchecked, and reset when the dialog is |
23 // closed. Used to restore checkbox state while switching between the options | 23 // closed. Used to restore checkbox state while switching between the options |
24 // in the main drop-down menu. All checkboxes are checked and disabled when | 24 // in the main drop-down menu. All checkboxes are checked and disabled when |
25 // the "Sync everything" menu-item is selected, and unchecked and disabled | 25 // the "Sync everything" menu-item is selected, and unchecked and disabled |
26 // when "Sync nothing" is selected. When "Choose what to sync" is selected, | 26 // when "Sync nothing" is selected. When "Choose what to sync" is selected, |
27 // the boxes are restored to their most recent checked state from this cache. | 27 // the boxes are restored to their most recent checked state from this cache. |
28 var dataTypeBoxes_ = {}; | 28 var dataTypeBoxesChecked_ = {}; |
| 29 |
| 30 // A dictionary that maps the sync data type checkbox names to their disabled |
| 31 // state (when a data type is enabled programmatically without user choice). |
| 32 // Initialized when the advanced settings dialog is first brought up, and |
| 33 // reset when the dialog is closed. |
| 34 var dataTypeBoxesDisabled_ = {}; |
29 | 35 |
30 // Used to determine whether to bring the OK button / passphrase field into | 36 // Used to determine whether to bring the OK button / passphrase field into |
31 // focus. | 37 // focus. |
32 var confirmPageVisible_ = false; | 38 var confirmPageVisible_ = false; |
33 var customizePageVisible_ = false; | 39 var customizePageVisible_ = false; |
34 | 40 |
35 /** | 41 /** |
36 * The user's selection in the synced data type drop-down menu, as an index. | 42 * The user's selection in the synced data type drop-down menu, as an index. |
37 * @enum {number} | 43 * @enum {number} |
38 * @const | 44 * @const |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 self.closeOverlay_(); | 94 self.closeOverlay_(); |
89 }; | 95 }; |
90 }, | 96 }, |
91 | 97 |
92 showOverlay_: function() { | 98 showOverlay_: function() { |
93 PageManager.showPageByName('syncSetup'); | 99 PageManager.showPageByName('syncSetup'); |
94 }, | 100 }, |
95 | 101 |
96 closeOverlay_: function() { | 102 closeOverlay_: function() { |
97 this.syncConfigureArgs_ = null; | 103 this.syncConfigureArgs_ = null; |
98 this.dataTypeBoxes_ = {}; | 104 this.dataTypeBoxesChecked_ = {}; |
| 105 this.dataTypeBoxesDisabled_ = {}; |
99 | 106 |
100 var overlay = $('sync-setup-overlay'); | 107 var overlay = $('sync-setup-overlay'); |
101 if (!overlay.hidden) | 108 if (!overlay.hidden) |
102 PageManager.closeOverlay(); | 109 PageManager.closeOverlay(); |
103 }, | 110 }, |
104 | 111 |
105 /** @override */ | 112 /** @override */ |
106 didShowPage: function() { | 113 didShowPage: function() { |
107 chrome.send('SyncSetupShowSetupUI'); | 114 chrome.send('SyncSetupShowSetupUI'); |
108 }, | 115 }, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 * advanced sync settings dialog. Called when "Choose what to sync" is | 147 * advanced sync settings dialog. Called when "Choose what to sync" is |
141 * selected. Required because all the checkboxes are checked when | 148 * selected. Required because all the checkboxes are checked when |
142 * "Sync everything" is selected, and unchecked when "Sync nothing" is | 149 * "Sync everything" is selected, and unchecked when "Sync nothing" is |
143 * selected. Note: We only restore checkboxes for data types that are | 150 * selected. Note: We only restore checkboxes for data types that are |
144 * actually visible and whose old values are found in the cache, since it's | 151 * actually visible and whose old values are found in the cache, since it's |
145 * possible for some data types to not be registered, and therefore, their | 152 * possible for some data types to not be registered, and therefore, their |
146 * checkboxes remain hidden, and never get cached. | 153 * checkboxes remain hidden, and never get cached. |
147 * @private | 154 * @private |
148 */ | 155 */ |
149 restoreDataTypeCheckboxes_: function() { | 156 restoreDataTypeCheckboxes_: function() { |
150 for (dataType in dataTypeBoxes_) { | 157 for (dataType in dataTypeBoxesChecked_) { |
151 $(dataType).checked = dataTypeBoxes_[dataType]; | 158 $(dataType).checked = dataTypeBoxesChecked_[dataType]; |
152 } | 159 } |
153 }, | 160 }, |
154 | 161 |
155 /** | 162 /** |
156 * Enables / grays out the sync data type checkboxes in the advanced | 163 * Enables / grays out the sync data type checkboxes in the advanced |
157 * settings dialog. | 164 * settings dialog. |
158 * @param {boolean} enabled True for enabled, false for grayed out. | 165 * @param {boolean} enabled True for enabled, false for grayed out. |
159 * @private | 166 * @private |
160 */ | 167 */ |
161 setDataTypeCheckboxesEnabled_: function(enabled) { | 168 setDataTypeCheckboxesEnabled_: function(enabled) { |
162 var checkboxes = $('choose-data-types-body').querySelectorAll('input'); | 169 for (dataType in dataTypeBoxesDisabled_) { |
163 for (var i = 0; i < checkboxes.length; i++) { | 170 $(dataType).disabled = !enabled || dataTypeBoxesDisabled_[dataType]; |
164 checkboxes[i].disabled = !enabled; | |
165 } | 171 } |
166 }, | 172 }, |
167 | 173 |
168 /** | 174 /** |
169 * Sets the state of the sync data type checkboxes based on whether "Sync | 175 * Sets the state of the sync data type checkboxes based on whether "Sync |
170 * everything", "Choose what to sync", or "Sync nothing" are selected in the | 176 * everything", "Choose what to sync", or "Sync nothing" are selected in the |
171 * drop-down menu of the advanced settings dialog. | 177 * drop-down menu of the advanced settings dialog. |
172 * @param {cr.DataTypeSelection} selectedIndex Index of user's selection. | 178 * @param {cr.DataTypeSelection} selectedIndex Index of user's selection. |
173 * @private | 179 * @private |
174 */ | 180 */ |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 $('customize-link').disabled = disabled; | 299 $('customize-link').disabled = disabled; |
294 $('customize-link').onclick = disabled ? null : function() { | 300 $('customize-link').onclick = disabled ? null : function() { |
295 SyncSetupOverlay.showCustomizePage(self.syncConfigureArgs_, | 301 SyncSetupOverlay.showCustomizePage(self.syncConfigureArgs_, |
296 DataTypeSelection.SYNC_EVERYTHING); | 302 DataTypeSelection.SYNC_EVERYTHING); |
297 return false; | 303 return false; |
298 }; | 304 }; |
299 }, | 305 }, |
300 | 306 |
301 /** | 307 /** |
302 * Shows or hides the sync data type checkboxes in the advanced sync | 308 * Shows or hides the sync data type checkboxes in the advanced sync |
303 * settings dialog. Also initializes |dataTypeBoxes_| with their values, and | 309 * settings dialog. Also initializes |dataTypeBoxesChecked_| and |
304 * makes their onclick handlers update |dataTypeBoxes_|. | 310 * |dataTypeBoxedDisabled_| with their values, and makes their onclick |
| 311 * handlers update |dataTypeBoxesChecked_|. |
305 * @param {Object} args The configuration data used to show/hide UI. | 312 * @param {Object} args The configuration data used to show/hide UI. |
306 * @private | 313 * @private |
307 */ | 314 */ |
308 setChooseDataTypesCheckboxes_: function(args) { | 315 setChooseDataTypesCheckboxes_: function(args) { |
309 var datatypeSelect = $('sync-select-datatypes'); | 316 var datatypeSelect = $('sync-select-datatypes'); |
310 datatypeSelect.selectedIndex = args.syncAllDataTypes ? | 317 datatypeSelect.selectedIndex = args.syncAllDataTypes ? |
311 DataTypeSelection.SYNC_EVERYTHING : | 318 DataTypeSelection.SYNC_EVERYTHING : |
312 DataTypeSelection.CHOOSE_WHAT_TO_SYNC; | 319 DataTypeSelection.CHOOSE_WHAT_TO_SYNC; |
313 | 320 |
314 $('bookmarks-checkbox').checked = args.bookmarksSynced; | 321 $('bookmarks-checkbox').checked = args.bookmarksSynced; |
315 dataTypeBoxes_['bookmarks-checkbox'] = args.bookmarksSynced; | 322 dataTypeBoxesChecked_['bookmarks-checkbox'] = args.bookmarksSynced; |
| 323 dataTypeBoxesDisabled_['bookmarks-checkbox'] = args.bookmarksEnforced; |
316 $('bookmarks-checkbox').onclick = this.handleDataTypeClick_; | 324 $('bookmarks-checkbox').onclick = this.handleDataTypeClick_; |
317 | 325 |
318 $('preferences-checkbox').checked = args.preferencesSynced; | 326 $('preferences-checkbox').checked = args.preferencesSynced; |
319 dataTypeBoxes_['preferences-checkbox'] = args.preferencesSynced; | 327 dataTypeBoxesChecked_['preferences-checkbox'] = args.preferencesSynced; |
| 328 dataTypeBoxesDisabled_['preferences-checkbox'] = args.preferencesEnforced; |
320 $('preferences-checkbox').onclick = this.handleDataTypeClick_; | 329 $('preferences-checkbox').onclick = this.handleDataTypeClick_; |
321 | 330 |
322 $('themes-checkbox').checked = args.themesSynced; | 331 $('themes-checkbox').checked = args.themesSynced; |
323 dataTypeBoxes_['themes-checkbox'] = args.themesSynced; | 332 dataTypeBoxesChecked_['themes-checkbox'] = args.themesSynced; |
| 333 dataTypeBoxesDisabled_['themes-checkbox'] = args.themesEnforced; |
324 $('themes-checkbox').onclick = this.handleDataTypeClick_; | 334 $('themes-checkbox').onclick = this.handleDataTypeClick_; |
325 | 335 |
326 if (args.passwordsRegistered) { | 336 if (args.passwordsRegistered) { |
327 $('passwords-checkbox').checked = args.passwordsSynced; | 337 $('passwords-checkbox').checked = args.passwordsSynced; |
328 dataTypeBoxes_['passwords-checkbox'] = args.passwordsSynced; | 338 dataTypeBoxesChecked_['passwords-checkbox'] = args.passwordsSynced; |
| 339 dataTypeBoxesDisabled_['passwords-checkbox'] = args.passwordsEnforced; |
329 $('passwords-checkbox').onclick = this.handleDataTypeClick_; | 340 $('passwords-checkbox').onclick = this.handleDataTypeClick_; |
330 $('passwords-item').hidden = false; | 341 $('passwords-item').hidden = false; |
331 } else { | 342 } else { |
332 $('passwords-item').hidden = true; | 343 $('passwords-item').hidden = true; |
333 } | 344 } |
334 if (args.autofillRegistered) { | 345 if (args.autofillRegistered) { |
335 $('autofill-checkbox').checked = args.autofillSynced; | 346 $('autofill-checkbox').checked = args.autofillSynced; |
336 dataTypeBoxes_['autofill-checkbox'] = args.autofillSynced; | 347 dataTypeBoxesChecked_['autofill-checkbox'] = args.autofillSynced; |
| 348 dataTypeBoxesDisabled_['autofill-checkbox'] = args.autofillEnforced; |
337 $('autofill-checkbox').onclick = this.handleDataTypeClick_; | 349 $('autofill-checkbox').onclick = this.handleDataTypeClick_; |
338 $('autofill-item').hidden = false; | 350 $('autofill-item').hidden = false; |
339 } else { | 351 } else { |
340 $('autofill-item').hidden = true; | 352 $('autofill-item').hidden = true; |
341 } | 353 } |
342 if (args.extensionsRegistered) { | 354 if (args.extensionsRegistered) { |
343 $('extensions-checkbox').checked = args.extensionsSynced; | 355 $('extensions-checkbox').checked = args.extensionsSynced; |
344 dataTypeBoxes_['extensions-checkbox'] = args.extensionsSynced; | 356 dataTypeBoxesChecked_['extensions-checkbox'] = args.extensionsSynced; |
| 357 dataTypeBoxesDisabled_['extensions-checkbox'] = args.extensionsEnforced; |
345 $('extensions-checkbox').onclick = this.handleDataTypeClick_; | 358 $('extensions-checkbox').onclick = this.handleDataTypeClick_; |
346 $('extensions-item').hidden = false; | 359 $('extensions-item').hidden = false; |
347 } else { | 360 } else { |
348 $('extensions-item').hidden = true; | 361 $('extensions-item').hidden = true; |
349 } | 362 } |
350 if (args.typedUrlsRegistered) { | 363 if (args.typedUrlsRegistered) { |
351 $('typed-urls-checkbox').checked = args.typedUrlsSynced; | 364 $('typed-urls-checkbox').checked = args.typedUrlsSynced; |
352 dataTypeBoxes_['typed-urls-checkbox'] = args.typedUrlsSynced; | 365 dataTypeBoxesChecked_['typed-urls-checkbox'] = args.typedUrlsSynced; |
| 366 dataTypeBoxesDisabled_['typed-urls-checkbox'] = args.typedUrlsEnforced; |
353 $('typed-urls-checkbox').onclick = this.handleDataTypeClick_; | 367 $('typed-urls-checkbox').onclick = this.handleDataTypeClick_; |
354 $('omnibox-item').hidden = false; | 368 $('omnibox-item').hidden = false; |
355 } else { | 369 } else { |
356 $('omnibox-item').hidden = true; | 370 $('omnibox-item').hidden = true; |
357 } | 371 } |
358 if (args.appsRegistered) { | 372 if (args.appsRegistered) { |
359 $('apps-checkbox').checked = args.appsSynced; | 373 $('apps-checkbox').checked = args.appsSynced; |
360 dataTypeBoxes_['apps-checkbox'] = args.appsSynced; | 374 dataTypeBoxesChecked_['apps-checkbox'] = args.appsSynced; |
| 375 dataTypeBoxesDisabled_['apps-checkbox'] = args.appsEnforced; |
361 $('apps-checkbox').onclick = this.handleDataTypeClick_; | 376 $('apps-checkbox').onclick = this.handleDataTypeClick_; |
362 $('apps-item').hidden = false; | 377 $('apps-item').hidden = false; |
363 } else { | 378 } else { |
364 $('apps-item').hidden = true; | 379 $('apps-item').hidden = true; |
365 } | 380 } |
366 if (args.tabsRegistered) { | 381 if (args.tabsRegistered) { |
367 $('tabs-checkbox').checked = args.tabsSynced; | 382 $('tabs-checkbox').checked = args.tabsSynced; |
368 dataTypeBoxes_['tabs-checkbox'] = args.tabsSynced; | 383 dataTypeBoxesChecked_['tabs-checkbox'] = args.tabsSynced; |
| 384 dataTypeBoxesDisabled_['tabs-checkbox'] = args.tabsEnforced; |
369 $('tabs-checkbox').onclick = this.handleDataTypeClick_; | 385 $('tabs-checkbox').onclick = this.handleDataTypeClick_; |
370 $('tabs-item').hidden = false; | 386 $('tabs-item').hidden = false; |
371 } else { | 387 } else { |
372 $('tabs-item').hidden = true; | 388 $('tabs-item').hidden = true; |
373 } | 389 } |
374 | 390 |
375 this.setDataTypeCheckboxes_(datatypeSelect.selectedIndex); | 391 this.setDataTypeCheckboxes_(datatypeSelect.selectedIndex); |
376 }, | 392 }, |
377 | 393 |
378 /** | 394 /** |
379 * Updates the cached values of the sync data type checkboxes stored in | 395 * Updates the cached values of the sync data type checkboxes stored in |
380 * |dataTypeBoxes_|. Used as an onclick handler for each data type checkbox. | 396 * |dataTypeBoxesChecked_|. Used as an onclick handler for each data type |
| 397 * checkbox. |
381 * @private | 398 * @private |
382 */ | 399 */ |
383 handleDataTypeClick_: function() { | 400 handleDataTypeClick_: function() { |
384 dataTypeBoxes_[this.id] = this.checked; | 401 dataTypeBoxesChecked_[this.id] = this.checked; |
385 chrome.send('coreOptionsUserMetricsAction', | 402 chrome.send('coreOptionsUserMetricsAction', |
386 ['Options_SyncToggleDataType']); | 403 ['Options_SyncToggleDataType']); |
387 }, | 404 }, |
388 | 405 |
389 setEncryptionRadios_: function(args) { | 406 setEncryptionRadios_: function(args) { |
390 if (!args.encryptAllData && !args.usePassphrase) { | 407 if (!args.encryptAllData && !args.usePassphrase) { |
391 $('basic-encryption-option').checked = true; | 408 $('basic-encryption-option').checked = true; |
392 } else { | 409 } else { |
393 $('full-encryption-option').checked = true; | 410 $('full-encryption-option').checked = true; |
394 $('full-encryption-option').disabled = true; | 411 $('full-encryption-option').disabled = true; |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
787 | 804 |
788 SyncSetupOverlay.showStopSyncingUI = function() { | 805 SyncSetupOverlay.showStopSyncingUI = function() { |
789 SyncSetupOverlay.getInstance().showStopSyncingUI_(); | 806 SyncSetupOverlay.getInstance().showStopSyncingUI_(); |
790 }; | 807 }; |
791 | 808 |
792 // Export | 809 // Export |
793 return { | 810 return { |
794 SyncSetupOverlay: SyncSetupOverlay | 811 SyncSetupOverlay: SyncSetupOverlay |
795 }; | 812 }; |
796 }); | 813 }); |
OLD | NEW |