summaryrefslogtreecommitdiffstats
path: root/toolkit/components/passwordmgr/test/browser/browser_openPasswordManager.js
blob: 0bb50f81c8adf0cb04cc30b1e372a72bff00a20d (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
const { sinon } = ChromeUtils.importESModule(
  "resource://testing-common/Sinon.sys.mjs"
);

add_task(async function test_noFilter() {
  let openingFunc = () =>
    LoginHelper.openPasswordManager(window, { entryPoint: "mainmenu" });
  let passwordManager = await openPasswordManager(openingFunc);

  Assert.ok(passwordManager, "Login dialog was opened");
  await passwordManager.close();
  await TestUtils.waitForCondition(() => {
    return Services.wm.getMostRecentWindow("Toolkit:PasswordManager") === null;
  }, "Waiting for the password manager dialog to close");
});

add_task(async function test_filter() {
  // Greek IDN for example.test
  let domain = "παράδειγμα.δοκιμή";
  let openingFunc = () =>
    LoginHelper.openPasswordManager(window, {
      filterString: domain,
      entryPoint: "mainmenu",
    });
  let passwordManager = await openPasswordManager(openingFunc, true);
  Assert.equal(
    passwordManager.filterValue,
    domain,
    "search string to filter logins should match expectation"
  );
  await passwordManager.close();
  await TestUtils.waitForCondition(() => {
    return Services.wm.getMostRecentWindow("Toolkit:PasswordManager") === null;
  }, "Waiting for the password manager dialog to close");
});

add_task(async function test_management_noFilter() {
  let tabOpenPromise = BrowserTestUtils.waitForNewTab(gBrowser, "about:logins");
  LoginHelper.openPasswordManager(window, { entryPoint: "mainmenu" });
  let tab = await tabOpenPromise;
  Assert.ok(tab, "Got the new tab");
  BrowserTestUtils.removeTab(tab);
});

add_task(async function test_management_filter() {
  let tabOpenPromise = BrowserTestUtils.waitForNewTab(
    gBrowser,
    "about:logins?filter=%CF%80%CE%B1%CF%81%CE%AC%CE%B4%CE%B5%CE%B9%CE%B3%CE%BC%CE%B1.%CE%B4%CE%BF%CE%BA%CE%B9%CE%BC%CE%AE"
  );
  // Greek IDN for example.test
  LoginHelper.openPasswordManager(window, {
    filterString: "παράδειγμα.δοκιμή",
    entryPoint: "mainmenu",
  });
  let tab = await tabOpenPromise;
  Assert.ok(tab, "Got the new tab with a domain filter");
  BrowserTestUtils.removeTab(tab);
});

add_task(
  async function test_url_when_opening_password_manager_without_a_filterString() {
    sinon.spy(window, "openTrustedLinkIn");
    const openingFunc = () =>
      LoginHelper.openPasswordManager(window, {
        filterString: "",
        entryPoint: "mainmenu",
      });
    const passwordManager = await openPasswordManager(openingFunc);

    const url = window.openTrustedLinkIn.lastCall.args[0];

    Assert.ok(
      !url.includes("filter"),
      "LoginHelper.openPasswordManager call without a filterString navigated to a URL with a filter query param"
    );
    Assert.equal(
      0,
      url.split("").filter(char => char === "&").length,
      "LoginHelper.openPasswordManager call without a filterString navigated to a URL with an &"
    );
    Assert.equal(
      url,
      "about:logins?entryPoint=mainmenu",
      "LoginHelper.openPasswordManager call without a filterString navigated to an unexpected URL"
    );

    Assert.ok(passwordManager, "Login dialog was opened");
    await passwordManager.close();
    window.openTrustedLinkIn.restore();
  }
);

add_task(
  async function test_url_when_opening_password_manager_with_a_filterString() {
    sinon.spy(window, "openTrustedLinkIn");
    const openingFunc = () =>
      LoginHelper.openPasswordManager(window, {
        filterString: "testFilter",
        entryPoint: "mainmenu",
      });
    const passwordManager = await openPasswordManager(openingFunc);

    const url = window.openTrustedLinkIn.lastCall.args[0];

    Assert.ok(
      url.includes("filter"),
      "LoginHelper.openPasswordManager call with a filterString navigated to a URL without a filter query param"
    );
    Assert.equal(
      1,
      url.split("").filter(char => char === "&").length,
      "LoginHelper.openPasswordManager call with a filterString navigated to a URL without the correct number of '&'s"
    );
    Assert.equal(
      url,
      "about:logins?filter=testFilter&entryPoint=mainmenu",
      "LoginHelper.openPasswordManager call with a filterString navigated to an unexpected URL"
    );

    Assert.ok(passwordManager, "Login dialog was opened");
    await passwordManager.close();
    window.openTrustedLinkIn.restore();
  }
);

add_task(
  async function test_url_when_opening_password_manager_without_filterString_or_entryPoint() {
    sinon.spy(window, "openTrustedLinkIn");
    const openingFunc = () =>
      LoginHelper.openPasswordManager(window, {
        filterString: "",
        entryPoint: "",
      });
    const passwordManager = await openPasswordManager(openingFunc);

    const url = window.openTrustedLinkIn.lastCall.args[0];

    Assert.ok(
      !url.includes("filter"),
      "LoginHelper.openPasswordManager call without a filterString navigated to a URL with a filter query param"
    );
    Assert.ok(
      !url.includes("entryPoint"),
      "LoginHelper.openPasswordManager call without an entryPoint navigated to a URL with an entryPoint query param"
    );
    Assert.equal(
      0,
      url.split("").filter(char => char === "&").length,
      "LoginHelper.openPasswordManager call without query params navigated to a URL that included at least one '&'"
    );
    Assert.equal(
      url,
      "about:logins",
      "LoginHelper.openPasswordManager call without a filterString or entryPoint navigated to an unexpected URL"
    );

    Assert.ok(passwordManager, "Login dialog was opened");
    await passwordManager.close();
    window.openTrustedLinkIn.restore();
  }
);