Index: chrome/browser/resources/settings/people_page/setup_pin_dialog.js |
diff --git a/chrome/browser/resources/settings/people_page/setup_pin_dialog.js b/chrome/browser/resources/settings/people_page/setup_pin_dialog.js |
index f299a0eaea31aeff60d99f087c958cead71f0664..4ab711a57f967e577af5665a7bdb913767928ceb 100644 |
--- a/chrome/browser/resources/settings/people_page/setup_pin_dialog.js |
+++ b/chrome/browser/resources/settings/people_page/setup_pin_dialog.js |
@@ -15,16 +15,6 @@ |
(function() { |
'use strict'; |
-/** |
- * A list of the top-10 most commmonly used PINs. This list is taken from |
- * www.datagenetics.com/blog/september32012/. |
- * @const |
- */ |
-var WEAK_PINS = [ |
- '1234', '1111', '0000', '1212', '7777', '1004', '2000', '4444', '2222', |
- '6969' |
-]; |
- |
Polymer({ |
is: 'settings-setup-pin-dialog', |
@@ -106,48 +96,12 @@ Polymer({ |
}, |
/** |
- * Returns true if the given PIN is likely easy to guess. |
- * @private |
- * @param {string} pin |
- * @return {boolean} |
- */ |
- isPinWeak_: function(pin) { |
- // Warn if it's a top-10 pin. |
- if (WEAK_PINS.includes(pin)) |
- return true; |
- |
- // Warn if the PIN is consecutive digits. |
- var delta = 0; |
- for (var i = 1; i < pin.length; ++i) { |
- var prev = Number(pin[i - 1]); |
- var num = Number(pin[i]); |
- if (Number.isNaN(prev) || Number.isNaN(num)) |
- return false; |
- delta = Math.max(delta, Math.abs(num - prev)); |
- } |
- |
- return delta <= 1; |
- }, |
- |
- /** |
- * Returns true if the given PIN matches PIN requirements, such as minimum |
- * length. |
- * @private |
- * @param {string|undefined} pin |
- * @return {boolean} |
- */ |
- isPinLongEnough_: function(pin) { |
- return !!pin && pin.length >= 4; |
- }, |
- |
- /** |
* Returns true if the PIN is ready to be changed to a new value. |
* @private |
* @return {boolean} |
*/ |
canSubmit_: function() { |
- return this.isPinLongEnough_(this.pinKeyboardValue_) && |
- this.initialPin_ == this.pinKeyboardValue_; |
+ return this.initialPin_ == this.pinKeyboardValue_; |
}, |
/** |
@@ -155,34 +109,61 @@ Polymer({ |
* @private |
* @param {string} messageId |
* @param {string} problemClass |
+ * @param {string} additionalInformation Additional information to be |
+ * displayed, such as the minimum/maximum length. |
*/ |
- showProblem_: function(messageId, problemClass) { |
- this.problemMessage_ = this.i18n(messageId); |
+ showProblem_: function(messageId, problemClass, additionalInformation) { |
+ this.problemMessage_ = this.i18n(messageId, additionalInformation); |
this.problemClass_ = problemClass; |
this.updateStyles(); |
+ this.enableSubmit_ = (problemClass != 'error'); |
}, |
/** @private */ |
hideProblem_: function() { |
this.problemMessage_ = ''; |
this.problemClass_ = ''; |
+ this.enableSubmit_ = true; |
+ }, |
+ |
+ /** |
+ * Processes the message received from the quick unlock api and hides/shows |
+ * the problem based on the message. |
+ * @private |
+ * @param {Object} message The message received from isCredentialUsable. |
+ */ |
+ processPinProblems_: function(message) { |
+ if (message.failures.length < 1) { |
jdufault
2016/10/04 23:11:45
if (!messages.failures) {
this.hideProblem_();
sammiequon
2016/10/24 21:16:10
Done.
|
+ this.hideProblem_(); |
+ return; |
+ } |
+ switch (message.failures[0]) { |
+ case 'TOO_SHORT': |
+ this.showProblem_('configurePinTooShort', 'error', |
+ message.minLength); |
+ break; |
+ case 'TOO_LONG': |
+ this.showProblem_('configurePinTooLong', 'error', |
+ message.maxLength); |
+ break; |
+ case 'TOO_WEAK': |
+ this.showProblem_('configurePinWeakPin', 'warning'); |
+ break; |
+ default: |
+ assertNotReached(); |
+ break; |
+ } |
}, |
/** @private */ |
onPinChange_: function() { |
if (!this.isConfirmStep_) { |
- var isPinLongEnough = this.isPinLongEnough_(this.pinKeyboardValue_); |
- var isWeak = isPinLongEnough && this.isPinWeak_(this.pinKeyboardValue_); |
- |
- if (!isPinLongEnough && this.pinKeyboardValue_) |
- this.showProblem_('configurePinTooShort', 'error'); |
- else if (isWeak) |
- this.showProblem_('configurePinWeakPin', 'warning'); |
- else |
- this.hideProblem_(); |
- |
- this.enableSubmit_ = isPinLongEnough; |
- |
+ if (this.pinKeyboardValue_) { |
+ chrome.quickUnlockPrivate.isCredentialUsable( |
+ chrome.quickUnlockPrivate.QuickUnlockMode.PIN, |
+ this.pinKeyboardValue_, |
+ this.processPinProblems_.bind(this)); |
+ } |
} else { |
var canSubmit = this.canSubmit_(); |