| Index: chrome/browser/resources/settings/people_page/password_prompt_dialog.js
|
| diff --git a/chrome/browser/resources/settings/people_page/quick_unlock_authenticate.js b/chrome/browser/resources/settings/people_page/password_prompt_dialog.js
|
| similarity index 62%
|
| rename from chrome/browser/resources/settings/people_page/quick_unlock_authenticate.js
|
| rename to chrome/browser/resources/settings/people_page/password_prompt_dialog.js
|
| index 8fed447b6aa445c17d4759fab4c15a3fef329c23..944be300729a55d39fbc942c1d744a90b2e80790 100644
|
| --- a/chrome/browser/resources/settings/people_page/quick_unlock_authenticate.js
|
| +++ b/chrome/browser/resources/settings/people_page/password_prompt_dialog.js
|
| @@ -5,27 +5,29 @@
|
| /**
|
| * @fileoverview
|
| *
|
| - * 'settings-quick-unlock-authenticate' shows a password input prompt to the
|
| - * user. It validates the password is correct. Once the user has entered their
|
| - * account password, the page navigates to the quick unlock setup methods page.
|
| + * 'settings-password-prompt-dialog' shows a dialog which asks for the user to
|
| + * enter their password. It validates the password is correct. Once the user has
|
| + * entered their account password, the page fires an 'authenticated' event and
|
| + * updates the setModes binding.
|
| *
|
| - * This element provides a wrapper around chrome.quickUnlockPrivate.setModes
|
| - * which has a prebound account password (the |set-modes| property). The account
|
| - * password by itself is not available for other elements to access.
|
| + * The setModes binding is a wrapper around chrome.quickUnlockPrivate.setModes
|
| + * which has a prebound account password. The account password by itself is not
|
| + * available for other elements to access.
|
| *
|
| * Example:
|
| *
|
| - * <settings-quick-unlock-authenticate
|
| - * set-modes="[[setModes]]"
|
| - * profile-name="[[profileName_]]">
|
| - * </settings-quick-unlock-authenticate>
|
| + * <settings-password-prompt-dialog
|
| + * id="passwordPrompt"
|
| + * set-modes="[[setModes]]">
|
| + * </settings-password-prompt-dialog>
|
| + *
|
| + * this.$.passwordPrompt.open()
|
| */
|
|
|
| (function() {
|
| 'use strict';
|
|
|
| /** @const */ var PASSWORD_ACTIVE_DURATION_MS = 10 * 60 * 1000; // Ten minutes.
|
| -/** @const */ var AUTOSUBMIT_DELAY_MS = 500; // .5 seconds
|
|
|
| /**
|
| * Helper method that checks if |password| is valid.
|
| @@ -43,9 +45,7 @@ function checkAccountPassword_(password, onCheck) {
|
| }
|
|
|
| Polymer({
|
| - is: 'settings-quick-unlock-authenticate',
|
| -
|
| - behavior: [settings.RouteObserverBehavior],
|
| + is: 'settings-password-prompt-dialog',
|
|
|
| properties: {
|
| /**
|
| @@ -60,18 +60,16 @@ Polymer({
|
| },
|
|
|
| /**
|
| - * Name of the profile.
|
| - */
|
| - profileName: String,
|
| -
|
| - /**
|
| * The actual value of the password field. This is cleared whenever the
|
| * authentication screen is not displayed so that the user's password is not
|
| * easily available to an attacker. The actual password is stored as an
|
| * captured closure variable inside of setModes.
|
| * @private
|
| */
|
| - password_: String,
|
| + password_: {
|
| + type: String,
|
| + observer: 'onPasswordChanged_'
|
| + },
|
|
|
| /**
|
| * Helper property which marks password as valid/invalid.
|
| @@ -80,35 +78,44 @@ Polymer({
|
| passwordInvalid_: Boolean
|
| },
|
|
|
| - /** @protected */
|
| - currentRouteChanged: function() {
|
| - // Clear local state if this screen is not active so if this screen shows
|
| - // up again the user will get a fresh UI.
|
| - if (settings.getCurrentRoute() == settings.Route.QUICK_UNLOCK_AUTHENTICATE)
|
| + /**
|
| + * Open up the dialog. This will wait until the dialog has loaded before
|
| + * opening it.
|
| + */
|
| + open: function() {
|
| + // Wait until the dialog is attached to the DOM before trying to open it.
|
| + var dialog = /** @type {{isConnected: boolean}} */ (this.$.dialog);
|
| + if (!dialog.isConnected) {
|
| + setTimeout(this.open.bind(this));
|
| return;
|
| + }
|
| +
|
| + this.$.dialog.showModal();
|
| + },
|
| +
|
| + /** Close the dialog. */
|
| + close: function() {
|
| + if (this.$.dialog.open)
|
| + this.$.dialog.close();
|
|
|
| this.password_ = '';
|
| - this.passwordInvalid_ = false;
|
| },
|
|
|
| - /**
|
| - * Start or restart a timer to check the account password and move past the
|
| - * authentication screen.
|
| - * @private
|
| - */
|
| - startDelayedPasswordCheck_: function() {
|
| - clearTimeout(this.delayedPasswordCheckTimeout_);
|
| - this.delayedPasswordCheckTimeout_ =
|
| - setTimeout(this.checkPasswordNow_.bind(this), AUTOSUBMIT_DELAY_MS);
|
| + /** Cancel the password prompt. */
|
| + cancel: function() {
|
| + if (this.$.dialog.open)
|
| + this.$.dialog.cancel();
|
| +
|
| + // We bind setModes_ in an on-change event, so when the user hits cancel
|
| + // after they enter their valid password we may have authenticated them.
|
| + this.setModes_ = undefined;
|
| },
|
|
|
| /**
|
| - * Run the account password check right now. This will cancel any delayed
|
| - * check.
|
| + * Run the account password check.
|
| * @private
|
| */
|
| - checkPasswordNow_: function() {
|
| - clearTimeout(this.delayedPasswordCheckTimeout_);
|
| + checkPassword_: function() {
|
| clearTimeout(this.clearAccountPasswordTimeout_);
|
|
|
| // The user might have started entering a password and then deleted it all.
|
| @@ -142,13 +149,22 @@ Polymer({
|
| }
|
|
|
| this.clearAccountPasswordTimeout_ = setTimeout(
|
| - clearSetModes.bind(this), PASSWORD_ACTIVE_DURATION_MS);
|
| -
|
| - settings.navigateTo(settings.Route.QUICK_UNLOCK_CHOOSE_METHOD);
|
| + clearSetModes.bind(this), PASSWORD_ACTIVE_DURATION_MS);
|
| + this.close();
|
| }
|
| }
|
|
|
| checkAccountPassword_(this.password_, onPasswordChecked.bind(this));
|
| + },
|
| +
|
| + /** @private */
|
| + onPasswordChanged_: function() {
|
| + this.passwordInvalid_ = false;
|
| + },
|
| +
|
| + /** @private */
|
| + enableConfirm_: function() {
|
| + return !!this.password_ && !this.passwordInvalid_;
|
| }
|
| });
|
|
|
|
|