Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(855)

Unified Diff: chrome/browser/resources/options/sync_setup_overlay.js

Issue 7003007: Apply content-security-policy to the HTML options page. This is a (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/options/sync_setup_overlay.js
===================================================================
--- chrome/browser/resources/options/sync_setup_overlay.js (revision 84868)
+++ chrome/browser/resources/options/sync_setup_overlay.js (working copy)
@@ -1,660 +0,0 @@
-// Copyright (c) 2011 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() {
- const OptionsPage = options.OptionsPage;
-
- // Variable to track if a captcha challenge was issued. If this gets set to
- // true, it stays that way until we are told about successful login from
- // the browser. This means subsequent errors (like invalid password) are
- // rendered in the captcha state, which is basically identical except we
- // don't show the top error blurb "Error Signing in" or the "Create
- // account" link.
- var captchaChallengeActive_ = false;
-
- // True if the synced account uses a custom passphrase.
- var usePassphrase_ = false;
-
- /**
- * SyncSetupOverlay class
- * Encapsulated handling of the 'Sync Setup' overlay page.
- * @class
- */
- function SyncSetupOverlay() {
- OptionsPage.call(this, 'syncSetup',
- templateData.syncSetupOverlayTitle,
- 'sync-setup-overlay');
- }
-
- cr.addSingletonGetter(SyncSetupOverlay);
-
- SyncSetupOverlay.prototype = {
- __proto__: OptionsPage.prototype,
-
- /**
- * Initializes the page.
- */
- initializePage: function() {
- OptionsPage.prototype.initializePage.call(this);
-
- var acct_text = $('gaia-account-text');
- var translated_text = acct_text.textContent;
- var posGoogle = translated_text.indexOf('Google');
- if (posGoogle != -1) {
- var ltr = templateData['textdirection'] == 'ltr';
- var googleIsAtEndOfSentence = posGoogle != 0;
- if (googleIsAtEndOfSentence == ltr) {
- // We're in ltr and in the translation the word 'Google' is AFTER the
- // word 'Account' OR we're in rtl and 'Google' is BEFORE 'Account'.
- var logo_td = $('gaia-logo');
- logo_td.parentNode.appendChild(logo_td);
- }
- acct_text.textContent = translated_text.replace('Google','');
- }
-
- var self = this;
- $('gaia-login-form').onsubmit = function() {
- self.sendCredentialsAndClose_();
- return false;
- };
- $('choose-data-types-form').onsubmit = function() {
- self.sendConfiguration_();
- return false;
- };
- $('google-option').onchange = $('explicit-option').onchange = function() {
- self.onRadioChange_();
- };
- $('choose-datatypes-cancel').onclick = $('sync-setup-cancel').onclick =
- $('confirm-everything-cancel').onclick = function() {
- self.closeOverlay_();
- };
- $('customize-link').onclick = function() {
- self.showCustomizePage_(false);
- };
- $('confirm-everything-ok').onclick = function() {
- self.sendConfiguration_();
- };
- $('use-default-link').onclick = function() {
- self.showSyncEverythingPage_();
- };
- $('cancel-no-button').onclick = function() {
- self.hideCancelWarning_();
- return false;
- };
- $('cancel-yes-button').onclick = function() {
- chrome.send('PassphraseCancel', ['']);
- return false;
- };
- $('passphrase-form').onsubmit = $('passphrase-ok').onclick = function() {
- self.sendPassphraseAndClose_();
- return false;
- };
- $('passphrase-cancel').onclick = function() {
- self.showCancelWarning_();
- return false;
- };
- },
-
- closeOverlay_: function() {
- OptionsPage.closeOverlay();
- },
-
- /** @inheritDoc */
- didShowPage: function() {
- chrome.send('didShowPage');
- },
-
- /** @inheritDoc */
- didClosePage: function() {
- chrome.send('didClosePage');
- },
-
- showCancelWarning_: function() {
- $('cancel-warning-box').hidden = false;
- $('passphrase-ok').disabled = true;
- $('passphrase-cancel').disabled = true;
- $('cancel-no-button').focus();
- },
-
- sendPassphraseAndClose_: function() {
- var f = $('passphrase-form');
- var result = JSON.stringify({"passphrase": f.passphrase.value});
- chrome.send("Passphrase", [result]);
- },
-
- getRadioCheckedValue_: function() {
- var f = $('choose-data-types-form');
- for (var i = 0; i < f.option.length; ++i) {
- if (f.option[i].checked) {
- return f.option[i].value;
- }
- }
-
- return undefined;
- },
-
- onRadioChange_: function() {
- var visible = this.getRadioCheckedValue_() == "explicit";
- $('sync-custom-passphrase').hidden = !visible;
- },
-
- checkAllDataTypeCheckboxes_: function() {
- var checkboxes = document.getElementsByName("dataTypeCheckbox");
- for (var i = 0; i < checkboxes.length; i++) {
- // Only check the visible ones (since there's no way to uncheck
- // the invisible ones).
- if (checkboxes[i].parentElement.className == "sync-item-show") {
- checkboxes[i].checked = true;
- }
- }
- },
-
- setDataTypeCheckboxesEnabled_: function(enabled) {
- var checkboxes = document.getElementsByName("dataTypeCheckbox");
- var labels = document.getElementsByName("dataTypeLabel");
- for (var i = 0; i < checkboxes.length; i++) {
- checkboxes[i].disabled = !enabled;
- if (checkboxes[i].disabled) {
- labels[i].className = "sync-label-inactive";
- } else {
- labels[i].className = "sync-label-active";
- }
- }
- },
-
- setCheckboxesToKeepEverythingSynced_: function(value) {
- this.setDataTypeCheckboxesEnabled_(!value);
- if (value)
- this.checkAllDataTypeCheckboxes_();
- },
-
- // Returns true if at least one data type is enabled and no data types are
- // checked. (If all data type checkboxes are disabled, it's because "keep
- // everything synced" is checked.)
- noDataTypesChecked_: function() {
- var checkboxes = document.getElementsByName("dataTypeCheckbox");
- var atLeastOneChecked = false;
- var atLeastOneEnabled = false;
- for (var i = 0; i < checkboxes.length; i++) {
- if (!checkboxes[i].disabled &&
- checkboxes[i].parentElement.className == "sync-item-show") {
- atLeastOneEnabled = true;
- if (checkboxes[i].checked) {
- atLeastOneChecked = true;
- }
- }
- }
-
- return atLeastOneEnabled && !atLeastOneChecked;
- },
-
- checkPassphraseMatch_: function() {
- var emptyError = $('empty-error');
- var mismatchError = $('mismatch-error');
- emptyError.style.display = "none";
- mismatchError.style.display = "none";
-
- var f = $('choose-data-types-form');
- if (this.getRadioCheckedValue_() != "explicit" || f.option[0].disabled)
- return true;
-
- var customPassphrase = $('custom-passphrase');
- if (customPassphrase.value.length == 0) {
- emptyError.style.display = "block";
- return false;
- }
-
- var confirmPassphrase = $('confirm-passphrase');
- if (confirmPassphrase.value != customPassphrase.value) {
- mismatchError.style.display = "block";
- return false;
- }
-
- return true;
- },
-
- hideCancelWarning_: function() {
- $('cancel-warning-box').hidden = true;
- $('passphrase-ok').disabled = false;
- $('passphrase-cancel').disabled = false;
- },
-
- sendConfiguration_: function() {
- // Trying to submit, so hide previous errors.
- $('aborted-text').className = "sync-error-hide";
- $('error-text').className = "sync-error-hide";
-
- if (this.noDataTypesChecked_()) {
- $('error-text').className = "sync-error-show";
- return;
- }
-
- var f = $('choose-data-types-form');
- if (!this.checkPassphraseMatch_())
- return;
-
- var syncAll =
- document.getElementById('sync-select-datatypes').selectedIndex == 0;
-
- // These values need to be kept in sync with where they are read in
- // SyncSetupFlow::GetDataTypeChoiceData().
- var result = JSON.stringify({
- "keepEverythingSynced": syncAll,
- "syncBookmarks": syncAll || $('bookmarks-checkbox').checked,
- "syncPreferences": syncAll || $('preferences-checkbox').checked,
- "syncThemes": syncAll || $('themes-checkbox').checked,
- "syncPasswords": syncAll || $('passwords-checkbox').checked,
- "syncAutofill": syncAll || $('autofill-checkbox').checked,
- "syncExtensions": syncAll || $('extensions-checkbox').checked,
- "syncTypedUrls": syncAll || $('typed-urls-checkbox').checked,
- "syncApps": syncAll || $('apps-checkbox').checked,
- "syncSessions": syncAll || $('sessions-checkbox').checked,
- "usePassphrase": (this.getRadioCheckedValue_() == 'explicit'),
- "passphrase": $('custom-passphrase').value
- });
- chrome.send("Configure", [result]);
- },
-
- setChooseDataTypesCheckboxes_: function(args) {
- // If this frame is on top, the focus should be on it, so pressing enter
- // submits this form.
- if (args.iframeToShow == 'configure') {
- $('choose-datatypes-ok').focus();
- }
-
- var datatypeSelect = document.getElementById('sync-select-datatypes');
- datatypeSelect.selectedIndex = args.keepEverythingSynced ? 0 : 1;
-
- $('bookmarks-checkbox').checked = args.syncBookmarks;
- $('preferences-checkbox').checked = args.syncPreferences;
- $('themes-checkbox').checked = args.syncThemes;
-
- if (args.passwordsRegistered) {
- $('passwords-checkbox').checked = args.syncPasswords;
- $('passwords-item').className = "sync-item-show";
- } else {
- $('passwords-item').className = "sync-item-hide";
- }
- if (args.autofillRegistered) {
- $('autofill-checkbox').checked = args.syncAutofill;
- $('autofill-item').className = "sync-item-show";
- } else {
- $('autofill-item').className = "sync-item-hide";
- }
- if (args.extensionsRegistered) {
- $('extensions-checkbox').checked = args.syncExtensions;
- $('extensions-item').className = "sync-item-show";
- } else {
- $('extensions-item').className = "sync-item-hide";
- }
- if (args.typedUrlsRegistered) {
- $('typedUrls-checkbox').checked = args.syncTypedUrls;
- $('omnibox-item').className = "sync-item-show";
- } else {
- $('omnibox-item').className = "sync-item-hide";
- }
- if (args.appsRegistered) {
- $('apps-checkbox').checked = args.syncApps;
- $('apps-item').className = "sync-item-show";
- } else {
- $('apps-item').className = "sync-item-hide";
- }
-
- this.setCheckboxesToKeepEverythingSynced_(args.keepEverythingSynced);
- if (args.sessionsRegistered) {
- $('sessions-checkbox').checked = args.syncSessions;
- $('sessions-item').className = "sync-item-show";
- } else {
- $('sessions-item').className = "sync-item-hide";
- }
- },
-
- setEncryptionCheckboxes_: function(args) {
- if (args["usePassphrase"]) {
- $('explicit-option').checked = true;
-
- // The passphrase, once set, cannot be unset, but we show a reset link.
- $('explicit-option').disabled = true;
- $('google-option').disabled = true;
- $('sync-custom-passphrase').hidden = true;
- } else {
- $('google-option').checked = true;
- }
- },
-
- setErrorState_: function(args) {
- if (!args.was_aborted)
- return;
-
- $('aborted-text').className = "sync-error-show";
- $('choose-datatypes-ok').disabled = true;
- },
-
- setCheckboxesAndErrors_: function(args) {
- this.setChooseDataTypesCheckboxes_(args);
- this.setEncryptionCheckboxes_(args);
- this.setErrorState_(args);
- },
-
- // Called once, when this html/js is loaded.
- showConfigure_: function(args) {
- var datatypeSelect = document.getElementById('sync-select-datatypes');
- var self = this;
- datatypeSelect.onchange = function() {
- var syncAll = this.selectedIndex == 0;
- self.setCheckboxesToKeepEverythingSynced_(syncAll);
- };
-
- $('sync-setup-configure').classList.remove('hidden');
-
- if (args) {
- this.setCheckboxesAndErrors_(args);
-
- // Whether to display the 'Sync everything' confirmation page or the
- // customize data types page.
- var showSyncEverythingPage = args['showSyncEverythingPage'];
- var keepEverythingSynced = args['keepEverythingSynced'];
- this.usePassphrase_ = args['usePassphrase'];
- if (showSyncEverythingPage == false ||
- keepEverythingSynced == false || this.usePassphrase_) {
- this.showCustomizePage_(keepEverythingSynced);
- } else {
- this.showSyncEverythingPage_();
- }
- }
- },
-
- showSyncEverythingPage_: function() {
- $('confirm-sync-preferences').hidden = false;
- $('customize-sync-preferences').hidden = true;
-
- // Reset the selection to 'Sync everything'.
- $('sync-select-datatypes').selectedIndex = 0;
-
- // The default state is to sync everything.
- this.setCheckboxesToKeepEverythingSynced_(true);
-
- // If the account is not synced with a custom passphrase, reset the
- // passphrase radio when switching to the 'Sync everything' page.
- if (!this.usePassphrase_) {
- $('google-option').checked = true;
- $('sync-custom-passphrase').hidden = true;
- }
-
- $('confirm-everything-ok').focus();
- },
-
- showCustomizePage_: function(syncEverything) {
- document.getElementById('confirm-sync-preferences').hidden = true;
- document.getElementById('customize-sync-preferences').hidden = false;
-
- // If the user has selected the 'Customize' page on initial set up, it's
- // likely he intends to change the data types. Select the
- // 'Choose data types' option in this case.
- var index = syncEverything ? 0 : 1;
- document.getElementById('sync-select-datatypes').selectedIndex = index;
- this.setDataTypeCheckboxesEnabled_(!syncEverything);
- $('choose-datatypes-ok').focus();
- },
-
- showSyncSetupPage_: function(page, args) {
- if (page == 'settingUp') {
- this.setThrobbersVisible_(true);
- return;
- } else {
- this.setThrobbersVisible_(false);
- }
-
- // Hide an existing visible overlay.
- var overlay = $('sync-setup-overlay');
- for (var i = 0; i < overlay.children.length; i++)
- overlay.children[i].classList.add('hidden');
-
- if (page == 'login')
- this.showGaiaLogin_(args);
- else if (page == 'configure')
- this.showConfigure_(args);
- else if (page == 'passphrase')
- this.showPassphrase_(args);
- else if (page == 'done')
- this.closeOverlay_();
- },
-
- setThrobbersVisible_: function(visible) {
- var throbbers = document.getElementsByClassName("throbber");
- for (var i = 0; i < throbbers.length; i++)
- throbbers[i].style.visibility = visible ? "visible" : "hidden";
- },
-
- showPassphrase_: function(args) {
- $('sync-setup-passphrase').classList.remove('hidden');
-
- $('passphrase-rejected-body').style.display = "none";
- $('normal-body').style.display = "none";
- $('incorrect-passphrase').style.display = "none";
-
- if (args["passphrase_creation_rejected"]) {
- $('passphrase-rejected-body').style.display = "block";
- } else {
- $('normal-body').style.display = "block";
- }
-
- if (args["passphrase_setting_rejected"]) {
- $('incorrect-passphrase').style.display = "block";
- }
-
- $('passphrase').focus();
- },
-
- setElementDisplay_: function(id, display) {
- var d = document.getElementById(id);
- if (d)
- d.style.display = display;
- },
-
- loginSetFocus_: function() {
- var email = $('gaia-email');
- var passwd = $('gaia-passwd');
- if (email && (email.value == null || email.value == "")) {
- email.focus();
- } else if (passwd) {
- passwd.focus();
- }
- },
-
- showAccessCodeRequired_: function() {
- this.setElementDisplay_("password-row", "none");
- this.setElementDisplay_("email-row", "none");
- $('create-account-cell').style.visibility = "hidden";
-
- this.setElementDisplay_("access-code-label-row", "table-row");
- this.setElementDisplay_("access-code-input-row", "table-row");
- this.setElementDisplay_("access-code-help-row", "table-row");
- document.getElementById('access-code').disabled = false;
- },
-
- showCaptcha_: function(args) {
- this.captchaChallengeActive_ = true;
-
- // The captcha takes up lots of space, so make room.
- this.setElementDisplay_("top-blurb", "none");
- this.setElementDisplay_("top-blurb-error", "none");
- this.setElementDisplay_("create-account-div", "none");
- document.getElementById('create-account-cell').height = 0;
-
- // It's showtime for the captcha now.
- this.setElementDisplay_("captcha-div", "block");
- document.getElementById('gaia-email').disabled = true;
- document.getElementById('gaia-passwd').disabled = false;
- document.getElementById('captcha-value').disabled = false;
- document.getElementById('captcha-wrapper').style.backgroundImage =
- url(args.captchaUrl);
- },
-
- showGaiaLogin_: function(args) {
- $('sync-setup-login').classList.remove('hidden');
-
- document.getElementById('gaia-email').disabled = false;
- document.getElementById('gaia-passwd').disabled = false;
-
- var f = $('gaia-login-form');
- var email = $('gaia-email');
- var passwd = $('gaia-passwd');
- if (f) {
- if (args.user != undefined) {
- if (email.value != args.user)
- passwd.value = ""; // Reset the password field
- email.value = args.user;
- }
-
- if (!args.editable_user) {
- email.style.display = 'none';
- var span = document.getElementById('email-readonly');
- span.appendChild(document.createTextNode(email.value));
- span.style.display = 'inline';
- this.setElementDisplay_("create-account-div", "none");
- }
-
- f.accessCode.disabled = true;
- }
-
- if (1 == args.error) {
- var access_code = document.getElementById('access-code');
- if (access_code.value && access_code.value != "") {
- this.setElementDisplay_("errormsg-0-access-code", 'block');
- this.showAccessCodeRequired_();
- } else {
- this.setElementDisplay_("errormsg-1-password", 'table-row');
- }
- this.setBlurbError_(args.error_message);
- } else if (3 == args.error) {
- this.setElementDisplay_("errormsg-0-connection", 'table-row');
- this.setBlurbError_(args.error_message);
- } else if (4 == args.error) {
- this.showCaptcha_(args);
- } else if (8 == args.error) {
- this.showAccessCodeRequired_();
- } else if (args.error_message) {
- this.setBlurbError_(args.error_message);
- }
-
- $('sign-in').disabled = false;
- $('sign-in').value = templateData['signin'];
- this.loginSetFocus_();
- },
-
- resetErrorVisibility_: function() {
- this.setElementDisplay_("errormsg-0-email", 'none');
- this.setElementDisplay_("errormsg-0-password", 'none');
- this.setElementDisplay_("errormsg-1-password", 'none');
- this.setElementDisplay_("errormsg-0-connection", 'none');
- this.setElementDisplay_("errormsg-0-access-code", 'none');
- },
-
- setBlurbError_: function(error_message) {
- if (this.captchaChallengeActive_)
- return; // No blurb in captcha challenge mode.
-
- if (error_message) {
- document.getElementById('error-signing-in').style.display = 'none';
- document.getElementById('error-custom').style.display = 'inline';
- document.getElementById('error-custom').textContent = error_message;
- } else {
- document.getElementById('error-signing-in').style.display = 'inline';
- document.getElementById('error-custom').style.display = 'none';
- }
-
- $('top-blurb-error').style.visibility = "visible";
- document.getElementById('gaia-email').disabled = false;
- document.getElementById('gaia-passwd').disabled = false;
- },
-
- setErrorVisibility_: function() {
- this.resetErrorVisibility_();
- var f = $('gaia-login-form');
- var email = $('gaia-email');
- var passwd = $('gaia-passwd');
- if (null == email.value || "" == email.value) {
- this.setElementDisplay_("errormsg-0-email", 'table-row');
- this.setBlurbError_();
- return false;
- }
- if (null == passwd.value || "" == passwd.value) {
- this.setElementDisplay_("errormsg-0-password", 'table-row');
- this.setBlurbError_();
- return false;
- }
- if (!f.accessCode.disabled && (null == f.accessCode.value ||
- "" == f.accessCode.value)) {
- this.setElementDisplay_("errormsg-0-password", 'table-row');
- return false;
- }
- return true;
- },
-
- sendCredentialsAndClose_: function() {
- if (!this.setErrorVisibility_()) {
- return false;
- }
-
- $('gaia-email').disabled = true;
- $('gaia-passwd').disabled = true;
- $('captcha-value').disabled = true;
- $('access-code').disabled = true;
-
- $('logging-in-throbber').style.visibility = "visible";
-
- var f = $('gaia-login-form');
- var email = $('gaia-email');
- var passwd = $('gaia-passwd');
- var result = JSON.stringify({"user" : email.value,
- "pass" : passwd.value,
- "captcha" : f.captchaValue.value,
- "access_code" : f.accessCode.value});
- $('sign-in').disabled = true;
- chrome.send("SubmitAuth", [result]);
- },
-
- showGaiaSuccessAndClose_: function() {
- $('sign-in').value = localStrings.getString('loginSuccess');
- setTimeout(this.closeOverlay_, 1600);
- },
-
- showSuccessAndSettingUp_: function() {
- $('sign-in').value = localStrings.getString('settingUp');
- },
-
- /** @inheritDoc */
- shouldClose: function() {
- if (!$('cancel-warning-box').hidden) {
- chrome.send('PassphraseCancel', ['']);
- return true;
- } else if (!$('sync-setup-passphrase').classList.contains('hidden')) {
- // The Passphrase page is showing, and the use has pressed escape.
- // Activate the cancel logic in this case.
- this.showCancelWarning_();
- return false;
- }
-
- return true;
- },
- };
-
- SyncSetupOverlay.showSyncSetupPage = function(page, args) {
- SyncSetupOverlay.getInstance().showSyncSetupPage_(page, args);
- };
-
- SyncSetupOverlay.showSuccessAndClose = function() {
- SyncSetupOverlay.getInstance().showSuccessAndClose_();
- };
-
- SyncSetupOverlay.showSuccessAndSettingUp = function() {
- SyncSetupOverlay.getInstance().showSuccessAndSettingUp_();
- };
-
- // Export
- return {
- SyncSetupOverlay: SyncSetupOverlay
- };
-});

Powered by Google App Engine
This is Rietveld 408576698