Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
const TEST_ORIGIN = "https://example.com";
const BASIC_FORM_PAGE_PATH = DIRECTORY_PATH + "form_basic.html";
add_task(async function test_doorhanger_dismissal_un() {
let url = TEST_ORIGIN + BASIC_FORM_PAGE_PATH;
await BrowserTestUtils.withNewTab(
{
gBrowser,
url,
},
async function test_un_value_as_ccnumber(browser) {
// If the username field has a credit card number and if
// the password field is a three digit numberic value,
// we automatically dismiss the save logins prompt on submission.
let passwordFilledPromise = listenForTestNotification(
"PasswordEditedOrGenerated"
);
await changeContentFormValues(browser, {
"#form-basic-password": "123",
// We are interested in the state of the doorhanger created and don't want a
// false positive from the password-edited handling
"#form-basic-username": "4111111111111111",
});
info("Waiting for passwordFilledPromise");
await passwordFilledPromise;
// reset doorhanger/notifications, we're only interested in the submit outcome
await cleanupDoorhanger();
await cleanupPasswordNotifications();
// reset message cache so we can disambiguate between dismissed doorhanger from
// password edited vs form submitted w. cc number as username
await clearMessageCache(browser);
let processedPromise = listenForTestNotification("ShowDoorhanger");
await SpecialPowers.spawn(browser, [], async () => {
content.document.getElementById("form-basic-submit").click();
});
info("Waiting for FormSubmit");
await processedPromise;
let notif = getCaptureDoorhanger("password-save");
Assert.ok(notif, "got notification popup");
Assert.ok(
notif.dismissed,
"notification popup was automatically dismissed"
);
await cleanupDoorhanger(notif);
}
);
});
add_task(async function test_doorhanger_dismissal_pw() {
let url = TEST_ORIGIN + BASIC_FORM_PAGE_PATH;
await BrowserTestUtils.withNewTab(
{
gBrowser,
url,
},
async function test_pw_value_as_ccnumber(browser) {
// If the password field has a credit card number and if
// the password field is also tagged autocomplete="cc-number",
// we automatically dismiss the save logins prompt on submission.
let passwordFilledPromise = listenForTestNotification(
"PasswordEditedOrGenerated"
);
await changeContentFormValues(browser, {
"#form-basic-password": "4111111111111111",
"#form-basic-username": "aaa",
});
await SpecialPowers.spawn(browser, [], async () => {
content.document
.getElementById("form-basic-password")
.setAttribute("autocomplete", "cc-number");
});
await passwordFilledPromise;
// reset doorhanger/notifications, we're only interested in the submit outcome
await cleanupDoorhanger();
await cleanupPasswordNotifications();
// reset message cache so we can disambiguate between dismissed doorhanger from
// password edited vs form submitted w. cc number as password
await clearMessageCache(browser);
let processedPromise = listenForTestNotification("ShowDoorhanger");
await SpecialPowers.spawn(browser, [], async () => {
content.document.getElementById("form-basic-submit").click();
});
await processedPromise;
let notif = getCaptureDoorhanger("password-save");
Assert.ok(notif, "got notification popup");
Assert.ok(
notif.dismissed,
"notification popup was automatically dismissed"
);
await cleanupDoorhanger(notif);
}
);
});
add_task(async function test_doorhanger_shown_on_un_with_invalid_ccnumber() {
let url = TEST_ORIGIN + BASIC_FORM_PAGE_PATH;
await BrowserTestUtils.withNewTab(
{
gBrowser,
url,
},
async function test_un_with_invalid_cc_number(browser) {
// If the username field has a CC number that is invalid,
// we show the doorhanger to save logins like we usually do.
let passwordFilledPromise = listenForTestNotification(
"PasswordEditedOrGenerated"
);
await changeContentFormValues(browser, {
"#form-basic-password": "411",
"#form-basic-username": "1234123412341234",
});
await passwordFilledPromise;
// reset doorhanger/notifications, we're only interested in the submit outcome
await cleanupDoorhanger();
await cleanupPasswordNotifications();
// reset message cache so we can disambiguate between dismissed doorhanger from
// password edited vs form submitted w. cc number as password
await clearMessageCache(browser);
let processedPromise = listenForTestNotification("ShowDoorhanger");
await SpecialPowers.spawn(browser, [], async () => {
content.document.getElementById("form-basic-submit").click();
});
await processedPromise;
let notif = await getCaptureDoorhangerThatMayOpen("password-save");
Assert.ok(notif, "got notification popup");
Assert.ok(
!notif.dismissed,
"notification popup was not automatically dismissed"
);
await cleanupDoorhanger(notif);
}
);
});
add_task(async function test_doorhanger_dismissal_on_change() {
let url = TEST_ORIGIN + BASIC_FORM_PAGE_PATH;
await BrowserTestUtils.withNewTab(
{
gBrowser,
url,
},
async function test_change_in_pw(browser) {
let nsLoginInfo = new Components.Constructor(
"@mozilla.org/login-manager/loginInfo;1",
Ci.nsILoginInfo,
"init"
);
let login = new nsLoginInfo(
TEST_ORIGIN,
TEST_ORIGIN,
null,
"4111111111111111",
"111", // password looks like a card security code
"form-basic-username",
"form-basic-password"
);
await Services.logins.addLoginAsync(login);
let passwordFilledPromise = listenForTestNotification(
"PasswordEditedOrGenerated"
);
await changeContentFormValues(browser, {
"#form-basic-password": "222", // password looks like a card security code
"#form-basic-username": "4111111111111111",
});
await passwordFilledPromise;
// reset doorhanger/notifications, we're only interested in the submit outcome
await cleanupDoorhanger();
await cleanupPasswordNotifications();
// reset message cache so we can disambiguate between dismissed doorhanger from
// password edited vs form submitted w. cc number as username
await clearMessageCache(browser);
let processedPromise = listenForTestNotification("ShowDoorhanger");
await SpecialPowers.spawn(browser, [], async () => {
content.document.getElementById("form-basic-submit").click();
});
await processedPromise;
let notif = getCaptureDoorhanger("password-change");
Assert.ok(notif, "got notification popup");
Assert.ok(
notif.dismissed,
"notification popup was automatically dismissed"
);
await cleanupDoorhanger(notif);
}
);
});