1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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;
});
});
|