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 61% |
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 b2bae7663f8fc8ab29797be91deedfaf344c2141..b51cff9bcaa07ff339d6865c0e11150f1c734926 100644 |
--- a/chrome/browser/resources/settings/people_page/quick_unlock_authenticate.js |
+++ b/chrome/browser/resources/settings/people_page/password_prompt_dialog.js |
@@ -5,28 +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 |
tommycli
2016/08/05 17:46:19
Nice adaptation of existing code here!
jdufault
2016/08/05 20:59:52
:)
|
+ * 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]]" |
- * current-route="{{currentRoute}}" |
- * 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. |
@@ -44,15 +45,9 @@ function checkAccountPassword_(password, onCheck) { |
} |
Polymer({ |
- is: 'settings-quick-unlock-authenticate', |
+ is: 'settings-password-prompt-dialog', |
properties: { |
- /** @type {!settings.Route} */ |
- currentRoute: { |
- type: Object, |
- observer: 'onRouteChanged_', |
- }, |
- |
/** |
* A wrapper around chrome.quickUnlockPrivate.setModes with the account |
* password already supplied. If this is null, the authentication screen |
@@ -65,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. |
@@ -85,34 +78,34 @@ Polymer({ |
passwordInvalid_: Boolean |
}, |
- /** @private */ |
- onRouteChanged_: function(currentRoute) { |
- // Clear local state if this screen is not active so if this screen shows |
- // up again the user will get a fresh UI. |
- if (this.currentRoute != settings.Route.QUICK_UNLOCK_AUTHENTICATE) { |
- this.password_ = ''; |
- this.passwordInvalid_ = false; |
+ /** |
+ * 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(); |
}, |
/** |
- * Start or restart a timer to check the account password and move past the |
- * authentication screen. |
- * @private |
+ * Close the dialog. |
*/ |
- startDelayedPasswordCheck_: function() { |
- clearTimeout(this.delayedPasswordCheckTimeout_); |
- this.delayedPasswordCheckTimeout_ = |
- setTimeout(this.checkPasswordNow_.bind(this), AUTOSUBMIT_DELAY_MS); |
+ close: function() { |
+ if (this.$.dialog.open) |
+ this.$.dialog.close(); |
}, |
/** |
- * 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. |
@@ -146,13 +139,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.$.dialog.close(); |
} |
} |
checkAccountPassword_(this.password_, onPasswordChecked.bind(this)); |
+ }, |
+ |
+ /** @private */ |
+ onPasswordChanged_: function() { |
+ this.passwordInvalid_ = false; |
+ }, |
+ |
+ /** @private */ |
+ enableConfirm_: function() { |
+ return !!this.password_ && !this.passwordInvalid_; |
} |
}); |