| 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 OptionsPage = options.OptionsPage; | 6 /** @const */ var OptionsPage = options.OptionsPage; |
| 7 | 7 |
| 8 // Variable to track if a captcha challenge was issued. If this gets set to | 8 // Variable to track if a captcha challenge was issued. If this gets set to |
| 9 // true, it stays that way until we are told about successful login from | 9 // true, it stays that way until we are told about successful login from |
| 10 // the browser. This means subsequent errors (like invalid password) are | 10 // the browser. This means subsequent errors (like invalid password) are |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 // the new unified encryption UI is displayed instead of the old encryption | 28 // the new unified encryption UI is displayed instead of the old encryption |
| 29 // ui (where passphrase and encrypted types could be set independently of | 29 // ui (where passphrase and encrypted types could be set independently of |
| 30 // each other). | 30 // each other). |
| 31 var keystoreEncryptionEnabled_ = false; | 31 var keystoreEncryptionEnabled_ = false; |
| 32 | 32 |
| 33 // The last email address that this profile was connected to. If the profile | 33 // The last email address that this profile was connected to. If the profile |
| 34 // was never connected this is an empty string. Otherwise it is a normalized | 34 // was never connected this is an empty string. Otherwise it is a normalized |
| 35 // email address. | 35 // email address. |
| 36 var lastEmailAddress_ = ''; | 36 var lastEmailAddress_ = ''; |
| 37 | 37 |
| 38 // An object used as a cache of the arguments passed in while initially |
| 39 // displaying the advanced sync settings dialog. Used to switch between the |
| 40 // options in the main drop-down menu. Reset when the dialog is closed. |
| 41 var syncConfigureArgs_ = null; |
| 42 |
| 43 // A dictionary that maps the sync data type checkbox names to their checked |
| 44 // state. Initialized when the advanced settings dialog is first brought up, |
| 45 // updated any time a box is checked / unchecked, and reset when the dialog is |
| 46 // closed. Used to restore checkbox state while switching between the options |
| 47 // in the main drop-down menu. All checkboxes are checked and disabled when |
| 48 // the "Sync everything" menu-item is selected, and unchecked and disabled |
| 49 // when "Sync nothing" is selected. When "Choose what to sync" is selected, |
| 50 // the boxes are restored to their most recent checked state from this cache. |
| 51 var dataTypeBoxes_ = {}; |
| 52 |
| 53 /** |
| 54 * The user's selection in the synced data type drop-down menu, as an index. |
| 55 * @enum {number} |
| 56 * @const |
| 57 */ |
| 58 var DataTypeSelection = { |
| 59 SYNC_EVERYTHING: 0, |
| 60 CHOOSE_WHAT_TO_SYNC: 1, |
| 61 SYNC_NOTHING: 2 |
| 62 }; |
| 63 |
| 38 /** | 64 /** |
| 39 * SyncSetupOverlay class | 65 * SyncSetupOverlay class |
| 40 * Encapsulated handling of the 'Sync Setup' overlay page. | 66 * Encapsulated handling of the 'Sync Setup' overlay page. |
| 41 * @class | 67 * @class |
| 42 */ | 68 */ |
| 43 function SyncSetupOverlay() { | 69 function SyncSetupOverlay() { |
| 44 OptionsPage.call(this, 'syncSetup', | 70 OptionsPage.call(this, 'syncSetup', |
| 45 loadTimeData.getString('syncSetupOverlayTabTitle'), | 71 loadTimeData.getString('syncSetupOverlayTabTitle'), |
| 46 'sync-setup-overlay'); | 72 'sync-setup-overlay'); |
| 47 } | 73 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 self.closeOverlay_(); | 114 self.closeOverlay_(); |
| 89 }; | 115 }; |
| 90 $('different-email').innerHTML = loadTimeData.getString('differentEmail'); | 116 $('different-email').innerHTML = loadTimeData.getString('differentEmail'); |
| 91 }, | 117 }, |
| 92 | 118 |
| 93 showOverlay_: function() { | 119 showOverlay_: function() { |
| 94 OptionsPage.navigateToPage('syncSetup'); | 120 OptionsPage.navigateToPage('syncSetup'); |
| 95 }, | 121 }, |
| 96 | 122 |
| 97 closeOverlay_: function() { | 123 closeOverlay_: function() { |
| 124 this.syncConfigureArgs_ = null; |
| 125 this.dataTypeBoxes_ = {}; |
| 98 OptionsPage.closeOverlay(); | 126 OptionsPage.closeOverlay(); |
| 99 }, | 127 }, |
| 100 | 128 |
| 101 /** @override */ | 129 /** @override */ |
| 102 didShowPage: function() { | 130 didShowPage: function() { |
| 103 chrome.send('SyncSetupShowSetupUI'); | 131 chrome.send('SyncSetupShowSetupUI'); |
| 104 }, | 132 }, |
| 105 | 133 |
| 106 /** @override */ | 134 /** @override */ |
| 107 didClosePage: function() { | 135 didClosePage: function() { |
| (...skipping 30 matching lines...) Expand all Loading... |
| 138 onPassphraseRadioChanged_: function() { | 166 onPassphraseRadioChanged_: function() { |
| 139 var visible = this.getPassphraseRadioCheckedValue_() == 'explicit'; | 167 var visible = this.getPassphraseRadioCheckedValue_() == 'explicit'; |
| 140 $('sync-custom-passphrase').hidden = !visible; | 168 $('sync-custom-passphrase').hidden = !visible; |
| 141 }, | 169 }, |
| 142 | 170 |
| 143 onEncryptionRadioChanged_: function() { | 171 onEncryptionRadioChanged_: function() { |
| 144 var visible = $('full-encryption-option').checked; | 172 var visible = $('full-encryption-option').checked; |
| 145 $('sync-custom-passphrase').hidden = !visible; | 173 $('sync-custom-passphrase').hidden = !visible; |
| 146 }, | 174 }, |
| 147 | 175 |
| 148 checkAllDataTypeCheckboxes_: function() { | 176 /** |
| 149 // Only check the visible ones (since there's no way to uncheck | 177 * Sets the checked state of the individual sync data type checkboxes in the |
| 150 // the invisible ones). | 178 * advanced sync settings dialog. |
| 179 * @param {boolean} value True for checked, false for unchecked. |
| 180 * @private |
| 181 */ |
| 182 checkAllDataTypeCheckboxes_: function(value) { |
| 183 // Only check / uncheck the visible ones (since there's no way to uncheck |
| 184 // / check the invisible ones). |
| 151 var checkboxes = $('choose-data-types-body').querySelectorAll( | 185 var checkboxes = $('choose-data-types-body').querySelectorAll( |
| 152 '.sync-type-checkbox:not([hidden]) input'); | 186 '.sync-type-checkbox:not([hidden]) input'); |
| 153 for (var i = 0; i < checkboxes.length; i++) { | 187 for (var i = 0; i < checkboxes.length; i++) { |
| 154 checkboxes[i].checked = true; | 188 checkboxes[i].checked = value; |
| 155 } | 189 } |
| 156 }, | 190 }, |
| 157 | 191 |
| 192 /** |
| 193 * Restores the checked states of the sync data type checkboxes in the |
| 194 * advanced sync settings dialog. Called when "Choose what to sync" is |
| 195 * selected. Required because all the checkboxes are checked when |
| 196 * "Sync everything" is selected, and unchecked when "Sync nothing" is |
| 197 * selected. Note: We only restore checkboxes for data types that are |
| 198 * actually visible and whose old values are found in the cache, since it's |
| 199 * possible for some data types to not be registered, and therefore, their |
| 200 * checkboxes remain hidden, and never get cached. |
| 201 * @private |
| 202 */ |
| 203 restoreDataTypeCheckboxes_: function() { |
| 204 for (dataType in dataTypeBoxes_) { |
| 205 $(dataType).checked = dataTypeBoxes_[dataType]; |
| 206 } |
| 207 }, |
| 208 |
| 209 /** |
| 210 * Enables / grays out the sync data type checkboxes in the advanced |
| 211 * settings dialog. |
| 212 * @param {boolean} enabled True for enabled, false for grayed out. |
| 213 * @private |
| 214 */ |
| 158 setDataTypeCheckboxesEnabled_: function(enabled) { | 215 setDataTypeCheckboxesEnabled_: function(enabled) { |
| 159 var checkboxes = $('choose-data-types-body').querySelectorAll('input'); | 216 var checkboxes = $('choose-data-types-body').querySelectorAll('input'); |
| 160 for (var i = 0; i < checkboxes.length; i++) { | 217 for (var i = 0; i < checkboxes.length; i++) { |
| 161 checkboxes[i].disabled = !enabled; | 218 checkboxes[i].disabled = !enabled; |
| 162 } | 219 } |
| 163 }, | 220 }, |
| 164 | 221 |
| 165 setCheckboxesToKeepEverythingSynced_: function(value) { | 222 /** |
| 166 this.setDataTypeCheckboxesEnabled_(!value); | 223 * Sets the state of the sync data type checkboxes based on whether "Sync |
| 167 if (value) | 224 * everything", "Choose what to sync", or "Sync nothing" are selected in the |
| 168 this.checkAllDataTypeCheckboxes_(); | 225 * drop-down menu of the advanced settings dialog. |
| 226 * @param {cr.DataTypeSelection} selectedIndex Index of user's selection. |
| 227 * @private |
| 228 */ |
| 229 setDataTypeCheckboxes_: function(selectedIndex) { |
| 230 if (selectedIndex == DataTypeSelection.CHOOSE_WHAT_TO_SYNC) { |
| 231 this.setDataTypeCheckboxesEnabled_(true); |
| 232 this.restoreDataTypeCheckboxes_(); |
| 233 } else { |
| 234 this.setDataTypeCheckboxesEnabled_(false); |
| 235 this.checkAllDataTypeCheckboxes_(selectedIndex == |
| 236 DataTypeSelection.SYNC_EVERYTHING); |
| 237 } |
| 169 }, | 238 }, |
| 170 | 239 |
| 171 // Returns true if none of the visible checkboxes are checked. | 240 // Returns true if none of the visible checkboxes are checked. |
| 172 noDataTypesChecked_: function() { | 241 noDataTypesChecked_: function() { |
| 173 var query = '.sync-type-checkbox:not([hidden]) input:checked'; | 242 var query = '.sync-type-checkbox:not([hidden]) input:checked'; |
| 174 var checkboxes = $('choose-data-types-body').querySelectorAll(query); | 243 var checkboxes = $('choose-data-types-body').querySelectorAll(query); |
| 175 return checkboxes.length == 0; | 244 return checkboxes.length == 0; |
| 176 }, | 245 }, |
| 177 | 246 |
| 178 checkPassphraseMatch_: function() { | 247 checkPassphraseMatch_: function() { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 201 return false; | 270 return false; |
| 202 } | 271 } |
| 203 | 272 |
| 204 return true; | 273 return true; |
| 205 }, | 274 }, |
| 206 | 275 |
| 207 sendConfiguration_: function() { | 276 sendConfiguration_: function() { |
| 208 // Trying to submit, so hide previous errors. | 277 // Trying to submit, so hide previous errors. |
| 209 $('error-text').hidden = true; | 278 $('error-text').hidden = true; |
| 210 | 279 |
| 211 var syncAll = $('sync-select-datatypes').selectedIndex == 0; | 280 var chooseWhatToSync = $('sync-select-datatypes').selectedIndex == |
| 212 if (!syncAll && this.noDataTypesChecked_()) { | 281 DataTypeSelection.CHOOSE_WHAT_TO_SYNC; |
| 282 if (chooseWhatToSync && this.noDataTypesChecked_()) { |
| 213 $('error-text').hidden = false; | 283 $('error-text').hidden = false; |
| 214 return; | 284 return; |
| 215 } | 285 } |
| 216 | 286 |
| 217 var encryptAllData = this.getEncryptionRadioCheckedValue_() == 'all'; | 287 var encryptAllData = this.getEncryptionRadioCheckedValue_() == 'all'; |
| 218 if (!encryptAllData && | 288 if (!encryptAllData && |
| 219 $('full-encryption-option').checked && | 289 $('full-encryption-option').checked && |
| 220 this.keystoreEncryptionEnabled_) { | 290 this.keystoreEncryptionEnabled_) { |
| 221 encryptAllData = true; | 291 encryptAllData = true; |
| 222 } | 292 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 250 usePassphrase = false; | 320 usePassphrase = false; |
| 251 } | 321 } |
| 252 | 322 |
| 253 // Don't allow the user to tweak the settings once we send the | 323 // Don't allow the user to tweak the settings once we send the |
| 254 // configuration to the backend. | 324 // configuration to the backend. |
| 255 this.setInputElementsDisabledState_(true); | 325 this.setInputElementsDisabledState_(true); |
| 256 this.animateDisableLink_($('use-default-link'), true, null); | 326 this.animateDisableLink_($('use-default-link'), true, null); |
| 257 | 327 |
| 258 // These values need to be kept in sync with where they are read in | 328 // These values need to be kept in sync with where they are read in |
| 259 // SyncSetupFlow::GetDataTypeChoiceData(). | 329 // SyncSetupFlow::GetDataTypeChoiceData(). |
| 330 var syncAll = $('sync-select-datatypes').selectedIndex == |
| 331 DataTypeSelection.SYNC_EVERYTHING; |
| 332 var syncNothing = $('sync-select-datatypes').selectedIndex == |
| 333 DataTypeSelection.SYNC_NOTHING; |
| 260 var result = JSON.stringify({ | 334 var result = JSON.stringify({ |
| 261 'syncAllDataTypes': syncAll, | 335 'syncAllDataTypes': syncAll, |
| 336 'syncNothing': syncNothing, |
| 262 'bookmarksSynced': syncAll || $('bookmarks-checkbox').checked, | 337 'bookmarksSynced': syncAll || $('bookmarks-checkbox').checked, |
| 263 'preferencesSynced': syncAll || $('preferences-checkbox').checked, | 338 'preferencesSynced': syncAll || $('preferences-checkbox').checked, |
| 264 'themesSynced': syncAll || $('themes-checkbox').checked, | 339 'themesSynced': syncAll || $('themes-checkbox').checked, |
| 265 'passwordsSynced': syncAll || $('passwords-checkbox').checked, | 340 'passwordsSynced': syncAll || $('passwords-checkbox').checked, |
| 266 'autofillSynced': syncAll || $('autofill-checkbox').checked, | 341 'autofillSynced': syncAll || $('autofill-checkbox').checked, |
| 267 'extensionsSynced': syncAll || $('extensions-checkbox').checked, | 342 'extensionsSynced': syncAll || $('extensions-checkbox').checked, |
| 268 'typedUrlsSynced': syncAll || $('typed-urls-checkbox').checked, | 343 'typedUrlsSynced': syncAll || $('typed-urls-checkbox').checked, |
| 269 'appsSynced': syncAll || $('apps-checkbox').checked, | 344 'appsSynced': syncAll || $('apps-checkbox').checked, |
| 270 'tabsSynced': syncAll || $('tabs-checkbox').checked, | 345 'tabsSynced': syncAll || $('tabs-checkbox').checked, |
| 271 'encryptAllData': encryptAllData, | 346 'encryptAllData': encryptAllData, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 286 */ | 361 */ |
| 287 setInputElementsDisabledState_: function(disabled) { | 362 setInputElementsDisabledState_: function(disabled) { |
| 288 var configureElements = | 363 var configureElements = |
| 289 $('customize-sync-preferences').querySelectorAll('input'); | 364 $('customize-sync-preferences').querySelectorAll('input'); |
| 290 for (var i = 0; i < configureElements.length; i++) | 365 for (var i = 0; i < configureElements.length; i++) |
| 291 configureElements[i].disabled = disabled; | 366 configureElements[i].disabled = disabled; |
| 292 $('sync-select-datatypes').disabled = disabled; | 367 $('sync-select-datatypes').disabled = disabled; |
| 293 | 368 |
| 294 var self = this; | 369 var self = this; |
| 295 this.animateDisableLink_($('customize-link'), disabled, function() { | 370 this.animateDisableLink_($('customize-link'), disabled, function() { |
| 296 self.showCustomizePage_(null, true); | 371 self.showCustomizePage_(null, DataTypeSelection.SYNC_EVERYTHING); |
| 297 }); | 372 }); |
| 298 }, | 373 }, |
| 299 | 374 |
| 300 /** | 375 /** |
| 301 * Animate a link being enabled/disabled. The link is hidden by animating | 376 * Animate a link being enabled/disabled. The link is hidden by animating |
| 302 * its opacity, but to ensure the user doesn't click it during that time, | 377 * its opacity, but to ensure the user doesn't click it during that time, |
| 303 * its onclick handler is changed to null as well. | 378 * its onclick handler is changed to null as well. |
| 304 * @param {HTMLElement} elt The anchor element to enable/disable. | 379 * @param {HTMLElement} elt The anchor element to enable/disable. |
| 305 * @param {boolean} disabled True if the link should be disabled. | 380 * @param {boolean} disabled True if the link should be disabled. |
| 306 * @param {function} enabledFunction The onclick handler when the link is | 381 * @param {function} enabledFunction The onclick handler when the link is |
| (...skipping 11 matching lines...) Expand all Loading... |
| 318 elt.classList.remove('transparent'); | 393 elt.classList.remove('transparent'); |
| 319 elt.hidden = true; | 394 elt.hidden = true; |
| 320 }); | 395 }); |
| 321 } else { | 396 } else { |
| 322 elt.hidden = false; | 397 elt.hidden = false; |
| 323 elt.onclick = enabledFunction; | 398 elt.onclick = enabledFunction; |
| 324 } | 399 } |
| 325 }, | 400 }, |
| 326 | 401 |
| 327 /** | 402 /** |
| 328 * Shows or hides the Sync data type checkboxes in the advanced | 403 * Shows or hides the sync data type checkboxes in the advanced sync |
| 329 * configuration screen. | 404 * settings dialog. Also initializes |dataTypeBoxes_| with their values, and |
| 405 * makes their onclick handlers update |dataTypeBoxes_|. |
| 330 * @param {Object} args The configuration data used to show/hide UI. | 406 * @param {Object} args The configuration data used to show/hide UI. |
| 331 * @private | 407 * @private |
| 332 */ | 408 */ |
| 333 setChooseDataTypesCheckboxes_: function(args) { | 409 setChooseDataTypesCheckboxes_: function(args) { |
| 334 var datatypeSelect = $('sync-select-datatypes'); | 410 var datatypeSelect = $('sync-select-datatypes'); |
| 335 datatypeSelect.selectedIndex = args.syncAllDataTypes ? 0 : 1; | 411 datatypeSelect.selectedIndex = args.syncAllDataTypes ? |
| 412 DataTypeSelection.SYNC_EVERYTHING : |
| 413 DataTypeSelection.CHOOSE_WHAT_TO_SYNC; |
| 336 | 414 |
| 337 $('bookmarks-checkbox').checked = args.bookmarksSynced; | 415 $('bookmarks-checkbox').checked = args.bookmarksSynced; |
| 416 dataTypeBoxes_['bookmarks-checkbox'] = args.bookmarksSynced; |
| 417 $('bookmarks-checkbox').onclick = this.handleDataTypeClick_; |
| 418 |
| 338 $('preferences-checkbox').checked = args.preferencesSynced; | 419 $('preferences-checkbox').checked = args.preferencesSynced; |
| 420 dataTypeBoxes_['preferences-checkbox'] = args.preferencesSynced; |
| 421 $('preferences-checkbox').onclick = this.handleDataTypeClick_; |
| 422 |
| 339 $('themes-checkbox').checked = args.themesSynced; | 423 $('themes-checkbox').checked = args.themesSynced; |
| 424 dataTypeBoxes_['themes-checkbox'] = args.themesSynced; |
| 425 $('themes-checkbox').onclick = this.handleDataTypeClick_; |
| 340 | 426 |
| 341 if (args.passwordsRegistered) { | 427 if (args.passwordsRegistered) { |
| 342 $('passwords-checkbox').checked = args.passwordsSynced; | 428 $('passwords-checkbox').checked = args.passwordsSynced; |
| 429 dataTypeBoxes_['passwords-checkbox'] = args.passwordsSynced; |
| 430 $('passwords-checkbox').onclick = this.handleDataTypeClick_; |
| 343 $('passwords-item').hidden = false; | 431 $('passwords-item').hidden = false; |
| 344 } else { | 432 } else { |
| 345 $('passwords-item').hidden = true; | 433 $('passwords-item').hidden = true; |
| 346 } | 434 } |
| 347 if (args.autofillRegistered) { | 435 if (args.autofillRegistered) { |
| 348 $('autofill-checkbox').checked = args.autofillSynced; | 436 $('autofill-checkbox').checked = args.autofillSynced; |
| 437 dataTypeBoxes_['autofill-checkbox'] = args.autofillSynced; |
| 438 $('autofill-checkbox').onclick = this.handleDataTypeClick_; |
| 349 $('autofill-item').hidden = false; | 439 $('autofill-item').hidden = false; |
| 350 } else { | 440 } else { |
| 351 $('autofill-item').hidden = true; | 441 $('autofill-item').hidden = true; |
| 352 } | 442 } |
| 353 if (args.extensionsRegistered) { | 443 if (args.extensionsRegistered) { |
| 354 $('extensions-checkbox').checked = args.extensionsSynced; | 444 $('extensions-checkbox').checked = args.extensionsSynced; |
| 445 dataTypeBoxes_['extensions-checkbox'] = args.extensionsSynced; |
| 446 $('extensions-checkbox').onclick = this.handleDataTypeClick_; |
| 355 $('extensions-item').hidden = false; | 447 $('extensions-item').hidden = false; |
| 356 } else { | 448 } else { |
| 357 $('extensions-item').hidden = true; | 449 $('extensions-item').hidden = true; |
| 358 } | 450 } |
| 359 if (args.typedUrlsRegistered) { | 451 if (args.typedUrlsRegistered) { |
| 360 $('typed-urls-checkbox').checked = args.typedUrlsSynced; | 452 $('typed-urls-checkbox').checked = args.typedUrlsSynced; |
| 453 dataTypeBoxes_['typed-urls-checkbox'] = args.typedUrlsSynced; |
| 454 $('typed-urls-checkbox').onclick = this.handleDataTypeClick_; |
| 361 $('omnibox-item').hidden = false; | 455 $('omnibox-item').hidden = false; |
| 362 } else { | 456 } else { |
| 363 $('omnibox-item').hidden = true; | 457 $('omnibox-item').hidden = true; |
| 364 } | 458 } |
| 365 if (args.appsRegistered) { | 459 if (args.appsRegistered) { |
| 366 $('apps-checkbox').checked = args.appsSynced; | 460 $('apps-checkbox').checked = args.appsSynced; |
| 461 dataTypeBoxes_['apps-checkbox'] = args.appsSynced; |
| 462 $('apps-checkbox').onclick = this.handleDataTypeClick_; |
| 367 $('apps-item').hidden = false; | 463 $('apps-item').hidden = false; |
| 368 } else { | 464 } else { |
| 369 $('apps-item').hidden = true; | 465 $('apps-item').hidden = true; |
| 370 } | 466 } |
| 371 if (args.tabsRegistered) { | 467 if (args.tabsRegistered) { |
| 372 $('tabs-checkbox').checked = args.tabsSynced; | 468 $('tabs-checkbox').checked = args.tabsSynced; |
| 469 dataTypeBoxes_['tabs-checkbox'] = args.tabsSynced; |
| 470 $('tabs-checkbox').onclick = this.handleDataTypeClick_; |
| 373 $('tabs-item').hidden = false; | 471 $('tabs-item').hidden = false; |
| 374 } else { | 472 } else { |
| 375 $('tabs-item').hidden = true; | 473 $('tabs-item').hidden = true; |
| 376 } | 474 } |
| 377 | 475 |
| 378 this.setCheckboxesToKeepEverythingSynced_(args.syncAllDataTypes); | 476 this.setDataTypeCheckboxes_(datatypeSelect.selectedIndex); |
| 477 }, |
| 478 |
| 479 /** |
| 480 * Updates the cached values of the sync data type checkboxes stored in |
| 481 * |dataTypeBoxes_|. Used as an onclick handler for each data type checkbox. |
| 482 * @private |
| 483 */ |
| 484 handleDataTypeClick_: function() { |
| 485 dataTypeBoxes_[this.id] = this.checked; |
| 379 }, | 486 }, |
| 380 | 487 |
| 381 setEncryptionRadios_: function(args) { | 488 setEncryptionRadios_: function(args) { |
| 382 if (args.encryptAllData) { | 489 if (args.encryptAllData) { |
| 383 $('encrypt-all-option').checked = true; | 490 $('encrypt-all-option').checked = true; |
| 384 this.disableEncryptionRadioGroup_(); | 491 this.disableEncryptionRadioGroup_(); |
| 385 } else { | 492 } else { |
| 386 $('encrypt-sensitive-option').checked = true; | 493 $('encrypt-sensitive-option').checked = true; |
| 387 } | 494 } |
| 388 | 495 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 410 | 517 |
| 411 setCheckboxesAndErrors_: function(args) { | 518 setCheckboxesAndErrors_: function(args) { |
| 412 this.setChooseDataTypesCheckboxes_(args); | 519 this.setChooseDataTypesCheckboxes_(args); |
| 413 this.setEncryptionRadios_(args); | 520 this.setEncryptionRadios_(args); |
| 414 this.setPassphraseRadios_(args); | 521 this.setPassphraseRadios_(args); |
| 415 }, | 522 }, |
| 416 | 523 |
| 417 showConfigure_: function(args) { | 524 showConfigure_: function(args) { |
| 418 var datatypeSelect = $('sync-select-datatypes'); | 525 var datatypeSelect = $('sync-select-datatypes'); |
| 419 var self = this; | 526 var self = this; |
| 527 |
| 528 // Cache the sync config args so they can be reused when we transition |
| 529 // between the drop-down menu items in the advanced settings dialog. |
| 530 if (args) |
| 531 this.syncConfigureArgs_ = args; |
| 532 |
| 533 // Once the advanced sync settings dialog is visible, we transition |
| 534 // between its drop-down menu items as follows: |
| 535 // "Sync everything": Show encryption and passphrase sections, and disable |
| 536 // and check all data type checkboxes. |
| 537 // "Sync everything": Hide encryption and passphrase sections, and disable |
| 538 // and uncheck all data type checkboxes. |
| 539 // "Choose what to sync": Show encryption and passphrase sections, enable |
| 540 // data type checkboxes, and restore their checked state to the last time |
| 541 // the "Choose what to sync" was selected while the dialog was still up. |
| 420 datatypeSelect.onchange = function() { | 542 datatypeSelect.onchange = function() { |
| 421 var syncAll = this.selectedIndex == 0; | 543 if (this.selectedIndex == DataTypeSelection.SYNC_NOTHING) { |
| 422 self.setCheckboxesToKeepEverythingSynced_(syncAll); | 544 self.showSyncNothingPage_(); |
| 545 } else { |
| 546 self.showCustomizePage_(self.syncConfigureArgs_, this.selectedIndex); |
| 547 if (this.selectedIndex == DataTypeSelection.SYNC_EVERYTHING) |
| 548 self.checkAllDataTypeCheckboxes_(true); |
| 549 else |
| 550 self.restoreDataTypeCheckboxes_(); |
| 551 } |
| 423 }; | 552 }; |
| 424 | 553 |
| 425 this.resetPage_('sync-setup-configure'); | 554 this.resetPage_('sync-setup-configure'); |
| 426 $('sync-setup-configure').hidden = false; | 555 $('sync-setup-configure').hidden = false; |
| 427 | 556 |
| 428 // onsubmit is changed when submitting a passphrase. Reset it to its | 557 // onsubmit is changed when submitting a passphrase. Reset it to its |
| 429 // default. | 558 // default. |
| 430 $('choose-data-types-form').onsubmit = function() { | 559 $('choose-data-types-form').onsubmit = function() { |
| 431 self.sendConfiguration_(); | 560 self.sendConfiguration_(); |
| 432 return false; | 561 return false; |
| 433 }; | 562 }; |
| 434 | 563 |
| 435 if (args) { | 564 if (args) { |
| 436 this.setCheckboxesAndErrors_(args); | 565 this.setCheckboxesAndErrors_(args); |
| 437 | 566 |
| 438 this.useEncryptEverything_ = args.encryptAllData; | 567 this.useEncryptEverything_ = args.encryptAllData; |
| 439 | 568 |
| 440 // Whether to display the 'Sync everything' confirmation page or the | 569 // Determine whether to display the 'OK, sync everything' confirmation |
| 441 // customize data types page. | 570 // dialog or the advanced sync settings dialog. |
| 442 var syncAllDataTypes = args.syncAllDataTypes; | |
| 443 this.usePassphrase_ = args.usePassphrase; | 571 this.usePassphrase_ = args.usePassphrase; |
| 444 this.keystoreEncryptionEnabled_ = args.keystoreEncryptionEnabled; | 572 this.keystoreEncryptionEnabled_ = args.keystoreEncryptionEnabled; |
| 445 if (args.showSyncEverythingPage == false || this.usePassphrase_ || | 573 if (args.showSyncEverythingPage == false || this.usePassphrase_ || |
| 446 syncAllDataTypes == false || args.showPassphrase) { | 574 args.syncAllDataTypes == false || args.showPassphrase) { |
| 447 this.showCustomizePage_(args, syncAllDataTypes); | 575 var index = args.syncAllDataTypes ? |
| 576 DataTypeSelection.SYNC_EVERYTHING : |
| 577 DataTypeSelection.CHOOSE_WHAT_TO_SYNC; |
| 578 this.showCustomizePage_(args, index); |
| 448 } else { | 579 } else { |
| 449 this.showSyncEverythingPage_(); | 580 this.showSyncEverythingPage_(); |
| 450 } | 581 } |
| 451 } | 582 } |
| 452 }, | 583 }, |
| 453 | 584 |
| 454 showSpinner_: function() { | 585 showSpinner_: function() { |
| 455 this.resetPage_('sync-setup-spinner'); | 586 this.resetPage_('sync-setup-spinner'); |
| 456 $('sync-setup-spinner').hidden = false; | 587 $('sync-setup-spinner').hidden = false; |
| 457 }, | 588 }, |
| 458 | 589 |
| 459 showTimeoutPage_: function() { | 590 showTimeoutPage_: function() { |
| 460 this.resetPage_('sync-setup-timeout'); | 591 this.resetPage_('sync-setup-timeout'); |
| 461 $('sync-setup-timeout').hidden = false; | 592 $('sync-setup-timeout').hidden = false; |
| 462 }, | 593 }, |
| 463 | 594 |
| 464 showSyncEverythingPage_: function() { | 595 showSyncEverythingPage_: function() { |
| 465 $('confirm-sync-preferences').hidden = false; | 596 $('confirm-sync-preferences').hidden = false; |
| 466 $('customize-sync-preferences').hidden = true; | 597 $('customize-sync-preferences').hidden = true; |
| 467 | 598 |
| 468 // Reset the selection to 'Sync everything'. | 599 // Reset the selection to 'Sync everything'. |
| 469 $('sync-select-datatypes').selectedIndex = 0; | 600 $('sync-select-datatypes').selectedIndex = 0; |
| 470 | 601 |
| 471 // The default state is to sync everything. | 602 // The default state is to sync everything. |
| 472 this.setCheckboxesToKeepEverythingSynced_(true); | 603 this.setDataTypeCheckboxes_(DataTypeSelection.SYNC_EVERYTHING); |
| 473 | 604 |
| 474 // Encrypt passwords is the default, but don't set it if the previously | 605 // Encrypt passwords is the default, but don't set it if the previously |
| 475 // synced account is already set to encrypt everything. | 606 // synced account is already set to encrypt everything. |
| 476 if (!this.useEncryptEverything_) | 607 if (!this.useEncryptEverything_) |
| 477 $('encrypt-sensitive-option').checked = true; | 608 $('encrypt-sensitive-option').checked = true; |
| 478 | 609 |
| 479 // If the account is not synced with a custom passphrase, reset the | 610 // If the account is not synced with a custom passphrase, reset the |
| 480 // passphrase radio when switching to the 'Sync everything' page. | 611 // passphrase radio when switching to the 'Sync everything' page. |
| 481 if (!this.usePassphrase_) { | 612 if (!this.usePassphrase_) { |
| 482 $('google-option').checked = true; | 613 $('google-option').checked = true; |
| 483 $('sync-custom-passphrase').hidden = true; | 614 $('sync-custom-passphrase').hidden = true; |
| 484 } | 615 } |
| 485 | 616 |
| 486 if (!this.useEncryptEverything_ && !this.usePassphrase_) | 617 if (!this.useEncryptEverything_ && !this.usePassphrase_) |
| 487 $('basic-encryption-option').checked = true; | 618 $('basic-encryption-option').checked = true; |
| 488 | 619 |
| 489 $('confirm-everything-ok').focus(); | 620 $('confirm-everything-ok').focus(); |
| 490 }, | 621 }, |
| 491 | 622 |
| 492 /** | 623 /** |
| 624 * Reveals the UI for when the user chooses not to sync any data types. |
| 625 * This happens when the user signs in and selects "Sync nothing" in the |
| 626 * advanced sync settings dialog. |
| 627 * @private |
| 628 */ |
| 629 showSyncNothingPage_: function() { |
| 630 // Reset the selection to 'Sync nothing'. |
| 631 $('sync-select-datatypes').selectedIndex = DataTypeSelection.SYNC_NOTHING; |
| 632 |
| 633 // Uncheck and disable the individual data type checkboxes. |
| 634 this.checkAllDataTypeCheckboxes_(false); |
| 635 this.setDataTypeCheckboxesEnabled_(false); |
| 636 |
| 637 // Hide the encryption section. |
| 638 $('customize-sync-encryption').hidden = true; |
| 639 $('customize-sync-encryption-new').hidden = true; |
| 640 $('sync-custom-passphrase-container').hidden = true; |
| 641 $('sync-existing-passphrase-container').hidden = true; |
| 642 |
| 643 // Hide the "use default settings" link. |
| 644 $('use-default-link').hidden = true; |
| 645 }, |
| 646 |
| 647 /** |
| 493 * Reveals the UI for entering a custom passphrase during initial setup. | 648 * Reveals the UI for entering a custom passphrase during initial setup. |
| 494 * This happens if the user has previously enabled a custom passphrase on a | 649 * This happens if the user has previously enabled a custom passphrase on a |
| 495 * different machine. | 650 * different machine. |
| 496 * @param {Array} args The args that contain the passphrase UI | 651 * @param {Array} args The args that contain the passphrase UI |
| 497 * configuration. | 652 * configuration. |
| 498 * @private | 653 * @private |
| 499 */ | 654 */ |
| 500 showPassphraseContainer_: function(args) { | 655 showPassphraseContainer_: function(args) { |
| 501 // Once we require a passphrase, we prevent the user from returning to | 656 // Once we require a passphrase, we prevent the user from returning to |
| 502 // the Sync Everything pane. | 657 // the Sync Everything pane. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 521 // Warn the user about their incorrect passphrase if we need a passphrase | 676 // Warn the user about their incorrect passphrase if we need a passphrase |
| 522 // and the passphrase field is non-empty (meaning they tried to set it | 677 // and the passphrase field is non-empty (meaning they tried to set it |
| 523 // previously but failed). | 678 // previously but failed). |
| 524 $('incorrect-passphrase').hidden = | 679 $('incorrect-passphrase').hidden = |
| 525 !(args.usePassphrase && args.passphraseFailed); | 680 !(args.usePassphrase && args.passphraseFailed); |
| 526 | 681 |
| 527 $('sync-passphrase-warning').hidden = false; | 682 $('sync-passphrase-warning').hidden = false; |
| 528 $('passphrase').focus(); | 683 $('passphrase').focus(); |
| 529 }, | 684 }, |
| 530 | 685 |
| 531 /** @private */ | 686 /** |
| 532 showCustomizePage_: function(args, syncEverything) { | 687 * Displays the advanced sync setting dialog, and pre-selects either the |
| 688 * "Sync everything" or the "Choose what to sync" drop-down menu item. |
| 689 * @param {cr.DataTypeSelection} index Index of item to pre-select. |
| 690 * @private |
| 691 */ |
| 692 showCustomizePage_: function(args, index) { |
| 533 $('confirm-sync-preferences').hidden = true; | 693 $('confirm-sync-preferences').hidden = true; |
| 534 $('customize-sync-preferences').hidden = false; | 694 $('customize-sync-preferences').hidden = false; |
| 535 | 695 |
| 536 $('sync-custom-passphrase-container').hidden = false; | 696 $('sync-custom-passphrase-container').hidden = false; |
| 537 | 697 |
| 538 if (this.keystoreEncryptionEnabled_) { | 698 if (this.keystoreEncryptionEnabled_) { |
| 539 $('customize-sync-encryption').hidden = true; | 699 $('customize-sync-encryption').hidden = true; |
| 540 $('sync-custom-passphrase-options').hidden = true; | 700 $('sync-custom-passphrase-options').hidden = true; |
| 541 $('sync-new-encryption-section-container').hidden = false; | 701 $('sync-new-encryption-section-container').hidden = false; |
| 542 $('customize-sync-encryption-new').hidden = false; | 702 $('customize-sync-encryption-new').hidden = false; |
| 543 } else { | 703 } else { |
| 544 $('customize-sync-encryption').hidden = false; | 704 $('customize-sync-encryption').hidden = false; |
| 545 $('sync-custom-passphrase-options').hidden = false; | 705 $('sync-custom-passphrase-options').hidden = false; |
| 546 $('customize-sync-encryption-new').hidden = true; | 706 $('customize-sync-encryption-new').hidden = true; |
| 547 } | 707 } |
| 548 | 708 |
| 549 $('sync-existing-passphrase-container').hidden = true; | 709 $('sync-existing-passphrase-container').hidden = true; |
| 550 | 710 |
| 551 // If the user has selected the 'Customize' page on initial set up, it's | |
| 552 // likely he intends to change the data types. Select the | |
| 553 // 'Choose data types' option in this case. | |
| 554 var index = syncEverything ? 0 : 1; | |
| 555 $('sync-select-datatypes').selectedIndex = index; | 711 $('sync-select-datatypes').selectedIndex = index; |
| 556 this.setDataTypeCheckboxesEnabled_(!syncEverything); | 712 this.setDataTypeCheckboxesEnabled_( |
| 713 index == DataTypeSelection.CHOOSE_WHAT_TO_SYNC); |
| 557 | 714 |
| 558 // The passphrase input may need to take over focus from the OK button, so | 715 // The passphrase input may need to take over focus from the OK button, so |
| 559 // set focus before that logic. | 716 // set focus before that logic. |
| 560 $('choose-datatypes-ok').focus(); | 717 $('choose-datatypes-ok').focus(); |
| 561 | 718 |
| 562 if (args && args.showPassphrase) { | 719 if (args && args.showPassphrase) { |
| 563 this.showPassphraseContainer_(args); | 720 this.showPassphraseContainer_(args); |
| 564 } else { | 721 } else { |
| 565 // We only show the 'Use Default' link if we're not prompting for an | 722 // We only show the 'Use Default' link if we're not prompting for an |
| 566 // existing passphrase. | 723 // existing passphrase. |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 | 1169 |
| 1013 SyncSetupOverlay.getLoginPasswd = function() { | 1170 SyncSetupOverlay.getLoginPasswd = function() { |
| 1014 return SyncSetupOverlay.getInstance().getLoginPasswd_(); | 1171 return SyncSetupOverlay.getInstance().getLoginPasswd_(); |
| 1015 }; | 1172 }; |
| 1016 | 1173 |
| 1017 SyncSetupOverlay.getSignInButton = function() { | 1174 SyncSetupOverlay.getSignInButton = function() { |
| 1018 return SyncSetupOverlay.getInstance().getSignInButton_(); | 1175 return SyncSetupOverlay.getInstance().getSignInButton_(); |
| 1019 }; | 1176 }; |
| 1020 | 1177 |
| 1021 // These methods are for general consumption. | 1178 // These methods are for general consumption. |
| 1179 SyncSetupOverlay.closeOverlay = function() { |
| 1180 SyncSetupOverlay.getInstance().closeOverlay_(); |
| 1181 }; |
| 1182 |
| 1022 SyncSetupOverlay.showErrorUI = function() { | 1183 SyncSetupOverlay.showErrorUI = function() { |
| 1023 SyncSetupOverlay.getInstance().showErrorUI_(); | 1184 SyncSetupOverlay.getInstance().showErrorUI_(); |
| 1024 }; | 1185 }; |
| 1025 | 1186 |
| 1026 SyncSetupOverlay.showSetupUI = function() { | 1187 SyncSetupOverlay.showSetupUI = function() { |
| 1027 SyncSetupOverlay.getInstance().showSetupUI_(); | 1188 SyncSetupOverlay.getInstance().showSetupUI_(); |
| 1028 }; | 1189 }; |
| 1029 | 1190 |
| 1030 SyncSetupOverlay.startSignIn = function() { | 1191 SyncSetupOverlay.startSignIn = function() { |
| 1031 SyncSetupOverlay.getInstance().startSignIn_(); | 1192 SyncSetupOverlay.getInstance().startSignIn_(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1049 | 1210 |
| 1050 SyncSetupOverlay.showStopSyncingUI = function() { | 1211 SyncSetupOverlay.showStopSyncingUI = function() { |
| 1051 SyncSetupOverlay.getInstance().showStopSyncingUI_(); | 1212 SyncSetupOverlay.getInstance().showStopSyncingUI_(); |
| 1052 }; | 1213 }; |
| 1053 | 1214 |
| 1054 // Export | 1215 // Export |
| 1055 return { | 1216 return { |
| 1056 SyncSetupOverlay: SyncSetupOverlay | 1217 SyncSetupOverlay: SyncSetupOverlay |
| 1057 }; | 1218 }; |
| 1058 }); | 1219 }); |
| OLD | NEW |