summaryrefslogtreecommitdiffstats
path: root/toolkit/components/passwordmgr/test/browser/browser_autocomplete_footer.js
blob: 6660daec99b2a74265d2bd9c4f6d9c2bbf92ad55 (plain)
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
"use strict";

const TEST_ORIGIN = "https://example.com";
const BASIC_FORM_PAGE_PATH = DIRECTORY_PATH + "form_basic.html";

function loginList() {
  return [
    LoginTestUtils.testData.formLogin({
      origin: "https://example.com",
      formActionOrigin: "https://example.com",
      username: "username",
      password: "password",
    }),
    LoginTestUtils.testData.formLogin({
      origin: "https://example.com",
      formActionOrigin: "https://example.com",
      username: "username2",
      password: "password2",
    }),
  ];
}

/**
 * Initialize logins and set prefs needed for the test.
 */
add_task(async function test_initialize() {
  Services.prefs.setBoolPref("signon.showAutoCompleteFooter", true);
  registerCleanupFunction(() => {
    Services.prefs.clearUserPref("signon.showAutoCompleteFooter");
  });

  await Services.logins.addLogins(loginList());
});

add_task(async function test_autocomplete_footer_onclick() {
  let url = TEST_ORIGIN + BASIC_FORM_PAGE_PATH;
  await BrowserTestUtils.withNewTab(
    {
      gBrowser,
      url,
    },
    async function footer_onclick(browser) {
      let popup = document.getElementById("PopupAutoComplete");
      Assert.ok(popup, "Got popup");

      await openACPopup(popup, browser, "#form-basic-username");

      let footer = popup.querySelector(`[originaltype="loginsFooter"]`);
      Assert.ok(footer, "Got footer richlistitem");

      await TestUtils.waitForCondition(() => {
        return !EventUtils.isHidden(footer);
      }, "Waiting for footer to become visible");

      let openingFunc = () => EventUtils.synthesizeMouseAtCenter(footer, {});
      let passwordManager = await openPasswordManager(openingFunc, false);

      info("Password Manager was opened");

      Assert.ok(
        !passwordManager.filterValue,
        "Search string should not be set to filter logins"
      );

      // open_management
      await LoginTestUtils.telemetry.waitForEventCount(1);

      // Check event telemetry recorded when opening management UI
      TelemetryTestUtils.assertEvents(
        [["pwmgr", "open_management", "autocomplete"]],
        { category: "pwmgr", method: "open_management" },
        { clear: true, process: "content" }
      );

      await passwordManager.close();
      await closePopup(popup);
    }
  );
});

add_task(async function test_autocomplete_footer_keydown() {
  let url = TEST_ORIGIN + BASIC_FORM_PAGE_PATH;
  await BrowserTestUtils.withNewTab(
    {
      gBrowser,
      url,
    },
    async function footer_enter_keydown(browser) {
      let popup = document.getElementById("PopupAutoComplete");
      Assert.ok(popup, "Got popup");

      await openACPopup(popup, browser, "#form-basic-username");

      let footer = popup.querySelector(`[originaltype="loginsFooter"]`);
      Assert.ok(footer, "Got footer richlistitem");

      await TestUtils.waitForCondition(() => {
        return !EventUtils.isHidden(footer);
      }, "Waiting for footer to become visible");

      await EventUtils.synthesizeKey("KEY_ArrowDown");
      await EventUtils.synthesizeKey("KEY_ArrowDown");
      await EventUtils.synthesizeKey("KEY_ArrowDown");
      let openingFunc = () => EventUtils.synthesizeKey("KEY_Enter");

      let passwordManager = await openPasswordManager(openingFunc, false);
      info("Login dialog was opened");

      Assert.ok(
        !passwordManager.filterValue,
        "Search string should not be set to filter logins"
      );

      // Check event telemetry recorded when opening management UI
      TelemetryTestUtils.assertEvents(
        [["pwmgr", "open_management", "autocomplete"]],
        { category: "pwmgr", method: "open_management" },
        { clear: true, process: "content" }
      );

      await passwordManager.close();
      await closePopup(popup);
    }
  );
});