summaryrefslogtreecommitdiffstats
path: root/toolkit/components/passwordmgr/test/browser/browser_autocomplete_disabled_readonly_passwordField.js
blob: f6e0a626784bab4f7ef8ad50c19a0e3cff4ee9d5 (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
const TEST_URL_PATH =
  "https://example.org" +
  DIRECTORY_PATH +
  "form_disabled_readonly_passwordField.html";
const FIRST_ITEM = 0;

/**
 * Add two logins to prevent autofilling, but the AutocompletePopup will be displayed
 */
add_setup(async () => {
  let login1 = LoginTestUtils.testData.formLogin({
    origin: "https://example.org",
    formActionOrigin: "https://example.org",
    username: "username1",
    password: "password1",
  });

  let login2 = LoginTestUtils.testData.formLogin({
    origin: "https://example.org",
    formActionOrigin: "https://example.org",
    username: "username2",
    password: "password2",
  });

  await Services.logins.addLogins([login1, login2]);
});

add_task(
  async function test_autocomplete_for_usernameField_with_disabled_passwordField() {
    await BrowserTestUtils.withNewTab(
      {
        gBrowser,
        url: TEST_URL_PATH,
      },
      async function (browser) {
        let popup = document.getElementById("PopupAutoComplete");

        Assert.ok(popup, "Got Popup");

        await openACPopup(
          popup,
          browser,
          "#login_form_disabled_password input[name=username]"
        );

        info("Popup opened");

        let promiseHidden = BrowserTestUtils.waitForEvent(popup, "popuphidden");
        popup.firstChild.getItemAtIndex(FIRST_ITEM).click();
        await promiseHidden;

        info("Popup closed");

        let [username, password] = await SpecialPowers.spawn(
          browser,
          [],
          async () => {
            let doc = content.document;
            let contentUsername = doc.querySelector(
              "#login_form_disabled_password input[name=username]"
            ).value;
            let contentPassword = doc.querySelector(
              "#login_form_disabled_password input[name=password]"
            ).value;
            return [contentUsername, contentPassword];
          }
        );
        Assert.equal(
          username,
          "username1",
          "Username was autocompleted with correct value."
        );
        Assert.equal(
          password,
          "",
          "Password was not autocompleted, because field is disabled."
        );
      }
    );
  }
);

add_task(
  async function test_autocomplete_for_usernameField_with_readonly_passwordField() {
    await BrowserTestUtils.withNewTab(
      {
        gBrowser,
        url: TEST_URL_PATH,
      },
      async function (browser) {
        let popup = document.getElementById("PopupAutoComplete");

        Assert.ok(popup, "Got Popup");

        await openACPopup(
          popup,
          browser,
          "#login_form_readonly_password input[name=username]"
        );

        info("Popup opened");

        let promiseHidden = BrowserTestUtils.waitForEvent(popup, "popuphidden");
        popup.firstChild.getItemAtIndex(FIRST_ITEM).click();
        await promiseHidden;

        info("Popup closed");

        let [username, password] = await SpecialPowers.spawn(
          browser,
          [],
          async () => {
            let doc = content.document;
            let contentUsername = doc.querySelector(
              "#login_form_readonly_password input[name=username]"
            ).value;
            info(contentUsername);
            let contentPassword = doc.querySelector(
              "#login_form_readonly_password input[name=password]"
            ).value;
            info(contentPassword);
            return [contentUsername, contentPassword];
          }
        );
        Assert.equal(
          username,
          "username1",
          "Username was autocompleted with correct value."
        );
        Assert.equal(
          password,
          "",
          "Password was not autocompleted, because field is readonly."
        );
      }
    );
  }
);