Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
/**
* Testing every label of the labeled counter pwmgr.form_autofill_result (Glean metric)
*/
"use strict";
const { AUTOFILL_RESULT } = ChromeUtils.importESModule(
);
const gAutofillLabels = Object.values(AUTOFILL_RESULT);
const gLogin = LoginTestUtils.testData.formLogin({
username: "username1",
password: "password1",
});
const gMultipleLogin = LoginTestUtils.testData.formLogin({
username: "username2",
password: "password2",
});
const gLoginInsecureAction = LoginTestUtils.testData.formLogin({
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
username: "username3",
password: "password3",
});
const TEST_CASES = [
{
description: "Autofill result - filled",
autofill_result: "filled",
},
{
description: "Autofill result - no_password_field",
autofill_result: "no_password_field",
},
{
description: "Autofill result - password_disabled_readonly",
autofill_result: "password_disabled_readonly",
form_processed_count: 2,
metric_count: 2,
},
{
description: "Autofill results no_logins_fit",
autofill_result: "no_logins_fit",
metric_count: 2,
},
{
description: "Autofill results - no_saved_logins",
autofill_result: "no_saved_logins",
},
{
description: "Autofill results - existing_password",
autofill_result: "existing_password",
},
{
description: "Autofill results - existing_username",
autofill_result: "existing_username",
},
{
description: "Autofill results - multiple_logins",
autofill_result: "multiple_logins",
extra_login: gMultipleLogin,
},
{
description: "Autofill results - no_autofill_forms",
autofill_result: "no_autofill_forms",
prefs: [["signon.autofillForms", false]],
},
{
description: "Autofill results - autocomplete_off",
autofill_result: "autocomplete_off",
prefs: [["signon.autofillForms.autocompleteOff", false]],
},
{
description: "Autofill results - insecure",
autofill_result: "insecure",
extra_login: gLoginInsecureAction,
},
{
description: "Autofill results - password_autocomplete_new_password",
autofill_result: "password_autocomplete_new_password",
},
{
description: "Autofill results - type_no_longer_password",
autofill_result: "type_no_longer_password",
},
{
description: "Autofill results - form_in_crossorigin_subframe",
autofill_result: "form_in_crossorigin_subframe",
},
{
description: "Autofill result - filled_username_only_form",
autofill_result: "filled_username_only_form",
},
];
add_setup(async () => {
await Services.logins.addLoginAsync(gLogin);
});
async function verifyAutofillResults(testCase) {
info(`Test case: ${testCase.description}`);
if (testCase.prefs) {
await SpecialPowers.pushPrefEnv({
set: testCase.prefs,
});
}
if (testCase.extra_login) {
await Services.logins.addLoginAsync(testCase.extra_login);
}
await Services.fog.testFlushAllChildren();
Services.fog.testResetFOG();
let formProcessed = listenForTestNotification(
"FormProcessed",
testCase.form_processed_count ?? 1
);
const tab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
testCase.test_url
);
await formProcessed;
await Services.fog.testFlushAllChildren();
gBrowser.removeTab(tab);
gAutofillLabels.forEach(label => {
if (label != testCase.autofill_result) {
Assert.equal(
undefined,
Glean.pwmgr.formAutofillResult[label].testGetValue(),
`The counter for the label ${label} was not incremented.`
);
} else {
Assert.equal(
testCase.metric_count ?? 1,
Glean.pwmgr.formAutofillResult[testCase.autofill_result].testGetValue(),
`The counter for the label ${label} was incremented by ${
testCase.metric_count ?? 1
}.`
);
}
});
if (testCase.extra_login) {
await Services.logins.removeLogin(testCase.extra_login);
}
if (testCase.prefs) {
await SpecialPowers.popPrefEnv();
}
}
add_task(async function test_autofill_results() {
for (let tc of TEST_CASES) {
await verifyAutofillResults(tc);
}
});