summaryrefslogtreecommitdiffstats
path: root/toolkit/components/passwordmgr/test/browser/browser_glean_pwmgr_form_autofill_result.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/passwordmgr/test/browser/browser_glean_pwmgr_form_autofill_result.js')
-rw-r--r--toolkit/components/passwordmgr/test/browser/browser_glean_pwmgr_form_autofill_result.js186
1 files changed, 186 insertions, 0 deletions
diff --git a/toolkit/components/passwordmgr/test/browser/browser_glean_pwmgr_form_autofill_result.js b/toolkit/components/passwordmgr/test/browser/browser_glean_pwmgr_form_autofill_result.js
new file mode 100644
index 0000000000..41ca5c85e9
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/browser/browser_glean_pwmgr_form_autofill_result.js
@@ -0,0 +1,186 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativ.orgmons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Testing every label of the labeled counter pwmgr.form_autofill_result (Glean metric)
+ */
+
+"use strict";
+
+const { AUTOFILL_RESULT } = ChromeUtils.importESModule(
+ "resource://gre/modules/LoginManagerChild.sys.mjs"
+);
+const gAutofillLabels = Object.values(AUTOFILL_RESULT);
+
+const gLogin = LoginTestUtils.testData.formLogin({
+ origin: "https://example.org",
+ formActionOrigin: "https://example.org/",
+ username: "username1",
+ password: "password1",
+});
+const gMultipleLogin = LoginTestUtils.testData.formLogin({
+ origin: "https://example.org",
+ formActionOrigin: "https://example.org/",
+ username: "username2",
+ password: "password2",
+});
+const gLoginInsecureAction = LoginTestUtils.testData.formLogin({
+ origin: "https://example.org",
+ // eslint-disable-next-line @microsoft/sdl/no-insecure-url
+ formActionOrigin: "http://example.org/",
+ username: "username3",
+ password: "password3",
+});
+
+const TEST_CASES = [
+ {
+ description: "Autofill result - filled",
+ autofill_result: "filled",
+ test_url: `https://example.org${DIRECTORY_PATH}form_basic_login.html`,
+ },
+ {
+ description: "Autofill result - no_password_field",
+ autofill_result: "no_password_field",
+ test_url: `https://example.org${DIRECTORY_PATH}form_multiple_passwords.html`,
+ },
+ {
+ description: "Autofill result - password_disabled_readonly",
+ autofill_result: "password_disabled_readonly",
+ test_url: `https://example.org${DIRECTORY_PATH}form_disabled_readonly_passwordField.html`,
+ form_processed_count: 2,
+ metric_count: 2,
+ },
+ {
+ description: "Autofill results no_logins_fit",
+ autofill_result: "no_logins_fit",
+ test_url: `https://example.org${DIRECTORY_PATH}form_basic_login_fields_with_max_length.html`,
+ metric_count: 2,
+ },
+ {
+ description: "Autofill results - no_saved_logins",
+ autofill_result: "no_saved_logins",
+ test_url: `https://example.com${DIRECTORY_PATH}form_basic_login.html`,
+ },
+ {
+ description: "Autofill results - existing_password",
+ autofill_result: "existing_password",
+ test_url: `https://example.org${DIRECTORY_PATH}form_basic_prefilled_password.html`,
+ },
+ {
+ description: "Autofill results - existing_username",
+ autofill_result: "existing_username",
+ test_url: `https://example.org${DIRECTORY_PATH}form_basic_prefilled_username.html`,
+ },
+ {
+ description: "Autofill results - multiple_logins",
+ autofill_result: "multiple_logins",
+ test_url: `https://example.org${DIRECTORY_PATH}form_basic_login.html`,
+ extra_login: gMultipleLogin,
+ },
+ {
+ description: "Autofill results - no_autofill_forms",
+ autofill_result: "no_autofill_forms",
+ test_url: `https://example.org${DIRECTORY_PATH}form_basic_login.html`,
+ prefs: [["signon.autofillForms", false]],
+ },
+ {
+ description: "Autofill results - autocomplete_off",
+ autofill_result: "autocomplete_off",
+ test_url: `https://example.org${DIRECTORY_PATH}form_basic_password_autocomplete_off.html`,
+ prefs: [["signon.autofillForms.autocompleteOff", false]],
+ },
+ {
+ description: "Autofill results - insecure",
+ autofill_result: "insecure",
+ test_url: `https://example.org${DIRECTORY_PATH}form_cross_origin_insecure_action.html`,
+ extra_login: gLoginInsecureAction,
+ },
+ {
+ description: "Autofill results - password_autocomplete_new_password",
+ autofill_result: "password_autocomplete_new_password",
+ test_url: `https://example.org${DIRECTORY_PATH}form_basic_password_autocomplete_new_password.html`,
+ },
+ {
+ description: "Autofill results - type_no_longer_password",
+ autofill_result: "type_no_longer_password",
+ test_url: `https://example.org${DIRECTORY_PATH}form_unmasked_password_after_pageload.html`,
+ },
+ {
+ description: "Autofill results - form_in_crossorigin_subframe",
+ autofill_result: "form_in_crossorigin_subframe",
+ test_url: `https://example.com${DIRECTORY_PATH}form_crossframe_no_outer_login_form.html`,
+ },
+ {
+ description: "Autofill result - filled_username_only_form",
+ autofill_result: "filled_username_only_form",
+ test_url: `https://example.org${DIRECTORY_PATH}form_username_only.html`,
+ },
+];
+
+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);
+ }
+});