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

Side by Side Diff: chrome/test/data/webui/settings/quick_unlock_authenticate_browsertest_chromeos.js

Issue 2313103002: Added uma for pin unlock set up. (Closed)
Patch Set: Closure compiler fix. Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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('settings_people_page_quick_unlock', function() { 5 cr.define('settings_people_page_quick_unlock', function() {
6 var element = null; 6 var element = null;
7 var quickUnlockPrivateApi = null; 7 var quickUnlockPrivateApi = null;
8 var QuickUnlockMode = chrome.quickUnlockPrivate.QuickUnlockMode; 8 var QuickUnlockMode = chrome.quickUnlockPrivate.QuickUnlockMode;
9 var fakeUma = null;
9 10
10 /** 11 /**
11 * Returns if the element is visible. 12 * Returns if the element is visible.
12 * @param {!Element} element 13 * @param {!Element} element
13 */ 14 */
14 function isVisible(element) { 15 function isVisible(element) {
15 while (element) { 16 while (element) {
16 if (element.offsetWidth <= 0 || element.offsetHeight <= 0 || 17 if (element.offsetWidth <= 0 || element.offsetHeight <= 0 ||
17 element.hidden) { 18 element.hidden) {
18 return false; 19 return false;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 } 55 }
55 56
56 function registerAuthenticateTests() { 57 function registerAuthenticateTests() {
57 suite('authenticate', function() { 58 suite('authenticate', function() {
58 var passwordElement = null; 59 var passwordElement = null;
59 60
60 setup(function() { 61 setup(function() {
61 PolymerTest.clearBody(); 62 PolymerTest.clearBody();
62 63
63 quickUnlockPrivateApi = new settings.FakeQuickUnlockPrivate(); 64 quickUnlockPrivateApi = new settings.FakeQuickUnlockPrivate();
65 fakeUma = new settings.FakeQuickUnlockUma();
64 66
65 element = document.createElement('settings-password-prompt-dialog'); 67 element = document.createElement('settings-password-prompt-dialog');
66 element.quickUnlockPrivate_ = quickUnlockPrivateApi; 68 element.quickUnlockPrivate_ = quickUnlockPrivateApi;
69 element.writeUma_ = fakeUma.recordProgress.bind(fakeUma);
67 document.body.appendChild(element); 70 document.body.appendChild(element);
68 71
69 passwordElement = getFromElement('#passwordInput'); 72 passwordElement = getFromElement('#passwordInput');
70 }); 73 });
71 74
72 test('PasswordCheckDoesNotChangeActiveMode', function() { 75 test('PasswordCheckDoesNotChangeActiveMode', function() {
73 // No active modes. 76 // No active modes.
74 quickUnlockPrivateApi.activeModes = []; 77 quickUnlockPrivateApi.activeModes = [];
75 passwordElement.value = 'foo'; 78 passwordElement.value = 'foo';
76 element.submitPassword_(); 79 element.submitPassword_();
77 assertDeepEquals([], quickUnlockPrivateApi.activeModes); 80 assertDeepEquals([], quickUnlockPrivateApi.activeModes);
78 assertDeepEquals([], quickUnlockPrivateApi.credentials); 81 assertDeepEquals([], quickUnlockPrivateApi.credentials);
79 82
80 // PIN is active. 83 // PIN is active.
81 quickUnlockPrivateApi.activeModes = [QuickUnlockMode.PIN]; 84 quickUnlockPrivateApi.activeModes = [QuickUnlockMode.PIN];
82 passwordElement.value = 'foo'; 85 passwordElement.value = 'foo';
83 element.submitPassword_(); 86 element.submitPassword_();
84 assertDeepEquals([QuickUnlockMode.PIN], 87 assertDeepEquals([QuickUnlockMode.PIN],
85 quickUnlockPrivateApi.activeModes); 88 quickUnlockPrivateApi.activeModes);
86 assertDeepEquals([''], quickUnlockPrivateApi.credentials); 89 assertDeepEquals([''], quickUnlockPrivateApi.credentials);
87 }); 90 });
88 91
89 // A bad password does not provide an authenticated setModes object. 92 // A bad password does not provide an authenticated setModes object, and a
93 // entered password correctly uma should not be recorded.
90 test('InvalidPasswordDoesNotProvideAuthentication', function() { 94 test('InvalidPasswordDoesNotProvideAuthentication', function() {
91 quickUnlockPrivateApi.accountPassword = 'bar'; 95 quickUnlockPrivateApi.accountPassword = 'bar';
92 96
93 passwordElement.value = 'foo'; 97 passwordElement.value = 'foo';
94 element.submitPassword_(); 98 element.submitPassword_();
95 99
100 assertEquals(0, fakeUma.getHistogramValue(
101 LockScreenProgress.ENTER_PASSWORD_CORRECTLY));
96 assertFalse(!!element.setModes); 102 assertFalse(!!element.setModes);
97 }); 103 });
98 104
99 // A valid password provides an authenticated setModes object. 105 // A valid password provides an authenticated setModes object, and a
106 // entered password correctly uma should be recorded.
100 test('ValidPasswordProvidesAuthentication', function() { 107 test('ValidPasswordProvidesAuthentication', function() {
101 quickUnlockPrivateApi.accountPassword = 'foo'; 108 quickUnlockPrivateApi.accountPassword = 'foo';
102 109
103 passwordElement.value = 'foo'; 110 passwordElement.value = 'foo';
104 element.submitPassword_(); 111 element.submitPassword_();
105 112
113 assertEquals(1, fakeUma.getHistogramValue(
114 LockScreenProgress.ENTER_PASSWORD_CORRECTLY));
106 assertTrue(!!element.setModes); 115 assertTrue(!!element.setModes);
107 }); 116 });
108 117
109 // The setModes objects times out after a delay. 118 // The setModes objects times out after a delay.
110 test('AuthenticationTimesOut', function(done) { 119 test('AuthenticationTimesOut', function(done) {
111 quickUnlockPrivateApi.accountPassword = 'foo'; 120 quickUnlockPrivateApi.accountPassword = 'foo';
112 121
113 element.passwordActiveDurationMs_ = 0; 122 element.passwordActiveDurationMs_ = 0;
114 passwordElement.value = 'foo'; 123 passwordElement.value = 'foo';
115 element.submitPassword_(); 124 element.submitPassword_();
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 200
192 CrSettingsPrefs.deferInitialization = true; 201 CrSettingsPrefs.deferInitialization = true;
193 202
194 // Build pref fakes. 203 // Build pref fakes.
195 var fakePrefs = [{ 204 var fakePrefs = [{
196 key: ENABLE_LOCK_SCREEN_PREF, 205 key: ENABLE_LOCK_SCREEN_PREF,
197 type: chrome.settingsPrivate.PrefType.BOOLEAN, 206 type: chrome.settingsPrivate.PrefType.BOOLEAN,
198 value: true 207 value: true
199 }]; 208 }];
200 fakeSettings = new settings.FakeSettingsPrivate(fakePrefs); 209 fakeSettings = new settings.FakeSettingsPrivate(fakePrefs);
210 fakeUma = new settings.FakeQuickUnlockUma();
201 setLockScreenPref(true); 211 setLockScreenPref(true);
202 var prefElement = document.createElement('settings-prefs'); 212 var prefElement = document.createElement('settings-prefs');
203 prefElement.initialize(fakeSettings); 213 prefElement.initialize(fakeSettings);
204 document.body.appendChild(prefElement); 214 document.body.appendChild(prefElement);
205 215
206 // Wait for prefElement to finish initializing; it takes some time for 216 // Wait for prefElement to finish initializing; it takes some time for
207 // the prefs element to get allocated. 217 // the prefs element to get allocated.
208 prefElement.addEventListener('prefs-changed', function prefsReady() { 218 prefElement.addEventListener('prefs-changed', function prefsReady() {
209 prefElement.removeEventListener('prefs-changed', prefsReady); 219 prefElement.removeEventListener('prefs-changed', prefsReady);
210 220
211 quickUnlockPrivateApi = new settings.FakeQuickUnlockPrivate(); 221 quickUnlockPrivateApi = new settings.FakeQuickUnlockPrivate();
212 222
213 // Create choose-method element. 223 // Create choose-method element.
214 element = document.createElement('settings-lock-screen'); 224 element = document.createElement('settings-lock-screen');
215 element.settingsPrivate_ = fakeSettings; 225 element.settingsPrivate_ = fakeSettings;
216 element.quickUnlockPrivate_ = quickUnlockPrivateApi; 226 element.quickUnlockPrivate_ = quickUnlockPrivateApi;
217 element.prefs = prefElement.prefs; 227 element.prefs = prefElement.prefs;
228 element.writeUma_ = fakeUma.recordProgress.bind(fakeUma);
218 229
219 document.body.appendChild(element); 230 document.body.appendChild(element);
220 Polymer.dom.flush(); 231 Polymer.dom.flush();
221 232
222 element.setModes_ = 233 element.setModes_ =
223 quickUnlockPrivateApi.setModes.bind(quickUnlockPrivateApi, ''); 234 quickUnlockPrivateApi.setModes.bind(quickUnlockPrivateApi, '');
224 235
225 passwordRadioButton = 236 passwordRadioButton =
226 getFromElement('paper-radio-button[name="password"]'); 237 getFromElement('paper-radio-button[name="password"]');
227 pinPasswordRadioButton = 238 pinPasswordRadioButton =
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 test('EnablingQuickUnlockChangesButtonState', function() { 289 test('EnablingQuickUnlockChangesButtonState', function() {
279 setActiveModes([QuickUnlockMode.PIN]); 290 setActiveModes([QuickUnlockMode.PIN]);
280 assertRadioButtonActive(pinPasswordRadioButton); 291 assertRadioButtonActive(pinPasswordRadioButton);
281 assertTrue(isVisible(configureButton)); 292 assertTrue(isVisible(configureButton));
282 293
283 setActiveModes([]); 294 setActiveModes([]);
284 assertRadioButtonActive(passwordRadioButton); 295 assertRadioButtonActive(passwordRadioButton);
285 assertDeepEquals([], quickUnlockPrivateApi.activeModes); 296 assertDeepEquals([], quickUnlockPrivateApi.activeModes);
286 }); 297 });
287 298
288 // Tapping the PIN configure button opens up the setup PIN dialog. 299 // Tapping the PIN configure button opens up the setup PIN dialog, and
300 // records a chose pin or password uma.
289 test('TappingConfigureOpensSetupPin', function() { 301 test('TappingConfigureOpensSetupPin', function() {
302 assertEquals(0, fakeUma.getHistogramValue(
303 LockScreenProgress.CHOOSE_PIN_OR_PASSWORD));
290 assertRadioButtonActive(passwordRadioButton); 304 assertRadioButtonActive(passwordRadioButton);
291 305
292 MockInteractions.tap(pinPasswordRadioButton); 306 MockInteractions.tap(pinPasswordRadioButton);
293 assertTrue(isVisible(configureButton)); 307 assertTrue(isVisible(configureButton));
294 assertRadioButtonActive(pinPasswordRadioButton) 308 assertRadioButtonActive(pinPasswordRadioButton)
295 309
296 MockInteractions.tap(configureButton); 310 MockInteractions.tap(configureButton);
297 var setupPinDialog = getFromElement('#setupPin'); 311 var setupPinDialog = getFromElement('#setupPin');
298 assertTrue(setupPinDialog.$.dialog.open); 312 assertTrue(setupPinDialog.$.dialog.open);
313 assertEquals(1, fakeUma.getHistogramValue(
314 LockScreenProgress.CHOOSE_PIN_OR_PASSWORD));
299 }); 315 });
300 }); 316 });
301 } 317 }
302 318
303 function registerSetupPinDialogTests() { 319 function registerSetupPinDialogTests() {
304 suite('setup-pin-dialog', function() { 320 suite('setup-pin-dialog', function() {
305 var titleDiv = null; 321 var titleDiv = null;
306 var problemDiv = null; 322 var problemDiv = null;
307 var pinKeyboard = null; 323 var pinKeyboard = null;
308 var backButton = null; 324 var backButton = null;
309 var continueButton = null; 325 var continueButton = null;
310 326
311 suiteSetup(function() { 327 suiteSetup(function() {
312 var urls = ['chrome://md-settings/i18n_setup.html']; 328 var urls = ['chrome://md-settings/i18n_setup.html'];
313 return Promise.all(urls.map(PolymerTest.importHtml)); 329 return Promise.all(urls.map(PolymerTest.importHtml));
314 }); 330 });
315 331
316 setup(function() { 332 setup(function() {
317 PolymerTest.clearBody(); 333 PolymerTest.clearBody();
318 334
319 quickUnlockPrivateApi = new settings.FakeQuickUnlockPrivate(); 335 quickUnlockPrivateApi = new settings.FakeQuickUnlockPrivate();
336 fakeUma = new settings.FakeQuickUnlockUma();
320 337
321 // Create setup-pin element. 338 // Create setup-pin element.
322 element = document.createElement('settings-setup-pin-dialog'); 339 element = document.createElement('settings-setup-pin-dialog');
323 element.setModes = 340 element.setModes =
324 quickUnlockPrivateApi.setModes.bind(quickUnlockPrivateApi, ''); 341 quickUnlockPrivateApi.setModes.bind(quickUnlockPrivateApi, '');
342 element.writeUma_ = fakeUma.recordProgress.bind(fakeUma);
325 343
326 document.body.appendChild(element); 344 document.body.appendChild(element);
327 Polymer.dom.flush(); 345 Polymer.dom.flush();
328 346
329 element.open(); 347 element.open();
330 348
331 titleDiv = getFromElement('div[class="title"]'); 349 titleDiv = getFromElement('div[class="title"]');
332 problemDiv = getFromElement('#problemDiv'); 350 problemDiv = getFromElement('#problemDiv');
333 pinKeyboard = getFromElement('pin-keyboard'); 351 pinKeyboard = getFromElement('pin-keyboard');
334 backButton = getFromElement('paper-button[class="cancel-button"]'); 352 backButton = getFromElement('paper-button[class="cancel-button"]');
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 }); 449 });
432 450
433 // User has to re-enter PIN for confirm step. 451 // User has to re-enter PIN for confirm step.
434 test('PinKeyboardIsResetForConfirmStep', function() { 452 test('PinKeyboardIsResetForConfirmStep', function() {
435 pinKeyboard.value = '1111'; 453 pinKeyboard.value = '1111';
436 MockInteractions.tap(continueButton); 454 MockInteractions.tap(continueButton);
437 assertEquals('', pinKeyboard.value); 455 assertEquals('', pinKeyboard.value);
438 }); 456 });
439 457
440 // Completing the flow results in a call to the quick unlock private API. 458 // Completing the flow results in a call to the quick unlock private API.
459 // Check that uma stats are called as expected.
441 test('SubmittingPinCallsQuickUnlockApi', function() { 460 test('SubmittingPinCallsQuickUnlockApi', function() {
442 // Entering the same (even weak) pin twice calls the quick unlock API 461 // Entering the same (even weak) pin twice calls the quick unlock API
443 // and sets up a PIN. 462 // and sets up a PIN.
463 assertEquals(0, fakeUma.getHistogramValue(
464 LockScreenProgress.ENTER_PIN));
465 assertEquals(0, fakeUma.getHistogramValue(
466 LockScreenProgress.CONFIRM_PIN));
444 pinKeyboard.value = '1111'; 467 pinKeyboard.value = '1111';
445 MockInteractions.tap(continueButton); 468 MockInteractions.tap(continueButton);
469 assertEquals(1, fakeUma.getHistogramValue(
470 LockScreenProgress.ENTER_PIN));
471
446 pinKeyboard.value = '1111'; 472 pinKeyboard.value = '1111';
447 MockInteractions.tap(continueButton); 473 MockInteractions.tap(continueButton);
448 474
475 assertEquals(1, fakeUma.getHistogramValue(
476 LockScreenProgress.CONFIRM_PIN));
449 assertDeepEquals(['PIN'], quickUnlockPrivateApi.activeModes); 477 assertDeepEquals(['PIN'], quickUnlockPrivateApi.activeModes);
450 assertDeepEquals(['1111'], quickUnlockPrivateApi.credentials); 478 assertDeepEquals(['1111'], quickUnlockPrivateApi.credentials);
451 }); 479 });
452 }); 480 });
453 } 481 }
454 482
455 return { 483 return {
456 registerAuthenticateTests: registerAuthenticateTests, 484 registerAuthenticateTests: registerAuthenticateTests,
457 registerLockScreenTests: registerLockScreenTests, 485 registerLockScreenTests: registerLockScreenTests,
458 registerSetupPinDialogTests: registerSetupPinDialogTests 486 registerSetupPinDialogTests: registerSetupPinDialogTests
459 }; 487 };
460 }); 488 });
OLDNEW
« no previous file with comments | « chrome/test/data/webui/settings/fake_quick_unlock_uma.js ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698