Bug 1348791 - Add a test for autocomplete master password timeout. r=MattN

MozReview-Commit-ID: GTZQhI4VUv8

--HG--
extra : rebase_source : 9c7aa29301e06816a7d9fcf91a7511d46418bb1f
This commit is contained in:
Johann Hofmann 2017-05-08 06:20:45 -04:00
Родитель 43e38cffa3
Коммит d3a523f13c
2 изменённых файлов: 60 добавлений и 0 удалений

Просмотреть файл

@ -54,6 +54,7 @@ support-files =
[browser_insecurePasswordConsoleWarning.js]
support-files =
form_cross_origin_insecure_action.html
[browser_master_password_autocomplete.js]
[browser_notifications.js]
[browser_notifications_username.js]
[browser_notifications_password.js]

Просмотреть файл

@ -0,0 +1,59 @@
const HOST = "https://example.com";
const URL = HOST + "/browser/toolkit/components/passwordmgr/test/browser/form_basic.html";
const TIMEOUT_PREF = "signon.masterPasswordReprompt.timeout_ms";
// Waits for the master password prompt and cancels it.
function waitForDialog() {
let dialogShown = TestUtils.topicObserved("common-dialog-loaded");
return dialogShown.then(function([subject]) {
let dialog = subject.Dialog;
is(dialog.args.title, "Password Required");
dialog.ui.button1.click();
});
}
// Test that autocomplete does not trigger a master password prompt
// for a certain time after it was cancelled.
add_task(function* test_mpAutocompleteTimeout() {
let login = LoginTestUtils.testData.formLogin({
hostname: "https://example.com",
formSubmitURL: "https://example.com",
username: "username",
password: "password",
});
Services.logins.addLogin(login);
LoginTestUtils.masterPassword.enable();
registerCleanupFunction(function() {
LoginTestUtils.masterPassword.disable();
Services.logins.removeAllLogins();
});
// Set master password prompt timeout to 3s.
// If this test goes intermittent, you likely have to increase this value.
yield SpecialPowers.pushPrefEnv({set: [[TIMEOUT_PREF, 3000]]});
// Wait for initial master password dialog after opening the tab.
let dialogShown = waitForDialog();
yield BrowserTestUtils.withNewTab(URL, function*(browser) {
yield dialogShown;
yield ContentTask.spawn(browser, null, function*() {
// Focus the password field to trigger autocompletion.
content.document.getElementById("form-basic-password").focus();
});
// Wait 4s, dialog should not have been shown
// (otherwise the code below will not work).
yield new Promise((c) => setTimeout(c, 4000));
dialogShown = waitForDialog();
yield ContentTask.spawn(browser, null, function*() {
// Re-focus the password field to trigger autocompletion.
content.document.getElementById("form-basic-username").focus();
content.document.getElementById("form-basic-password").focus();
});
yield dialogShown;
});
});