summaryrefslogtreecommitdiffstats
path: root/toolkit/components/passwordmgr/test/browser/browser_focus_before_first_DOMContentLoaded.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/passwordmgr/test/browser/browser_focus_before_first_DOMContentLoaded.js')
-rw-r--r--toolkit/components/passwordmgr/test/browser/browser_focus_before_first_DOMContentLoaded.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/toolkit/components/passwordmgr/test/browser/browser_focus_before_first_DOMContentLoaded.js b/toolkit/components/passwordmgr/test/browser/browser_focus_before_first_DOMContentLoaded.js
new file mode 100644
index 0000000000..783f8ea3d8
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/browser/browser_focus_before_first_DOMContentLoaded.js
@@ -0,0 +1,103 @@
+/**
+ * Test that autocomplete is properly attached to a username field which gets
+ * focused before DOMContentLoaded in a new browser and process.
+ */
+
+"use strict";
+
+add_setup(async () => {
+ let nsLoginInfo = Components.Constructor(
+ "@mozilla.org/login-manager/loginInfo;1",
+ Ci.nsILoginInfo,
+ "init"
+ );
+ Assert.ok(nsLoginInfo != null, "nsLoginInfo constructor");
+
+ info("Adding two logins to get autocomplete instead of autofill");
+ let login1 = new nsLoginInfo(
+ "https://example.com",
+ "https://autocomplete:8888",
+ null,
+ "tempuser1",
+ "temppass1"
+ );
+
+ let login2 = new nsLoginInfo(
+ "https://example.com",
+ "https://autocomplete:8888",
+ null,
+ "testuser2",
+ "testpass2"
+ );
+
+ await Services.logins.addLogins([login1, login2]);
+});
+
+add_task(async function test_autocompleteFromUsername() {
+ let autocompletePopup = document.getElementById("PopupAutoComplete");
+ let autocompletePopupShown = BrowserTestUtils.waitForEvent(
+ autocompletePopup,
+ "popupshown"
+ );
+
+ const URL = `https://example.com${DIRECTORY_PATH}file_focus_before_DOMContentLoaded.sjs`;
+
+ let newTab = await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ opening: URL,
+ forceNewProcess: true,
+ });
+
+ await SpecialPowers.spawn(
+ newTab.linkedBrowser,
+ [],
+ function checkInitialValues() {
+ let doc = content.document;
+ let uname = doc.querySelector("#uname");
+ let pword = doc.querySelector("#pword");
+
+ Assert.ok(uname, "Username field found");
+ Assert.ok(pword, "Password field found");
+
+ Assert.equal(
+ doc.activeElement,
+ uname,
+ "#uname element should be focused"
+ );
+ Assert.equal(uname.value, "", "Checking username is empty");
+ Assert.equal(pword.value, "", "Checking password is empty");
+ }
+ );
+
+ await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, newTab.linkedBrowser);
+ await autocompletePopupShown;
+
+ let richlistbox = autocompletePopup.richlistbox;
+ Assert.equal(
+ richlistbox.localName,
+ "richlistbox",
+ "The richlistbox should be the first anonymous node"
+ );
+ for (let i = 0; i < autocompletePopup.view.matchCount; i++) {
+ if (
+ richlistbox.selectedItem &&
+ richlistbox.selectedItem.textContent.includes("tempuser1")
+ ) {
+ break;
+ }
+ await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, newTab.linkedBrowser);
+ }
+
+ await BrowserTestUtils.synthesizeKey("VK_RETURN", {}, newTab.linkedBrowser);
+
+ await SpecialPowers.spawn(newTab.linkedBrowser, [], function checkFill() {
+ let doc = content.document;
+ let uname = doc.querySelector("#uname");
+ let pword = doc.querySelector("#pword");
+
+ Assert.equal(uname.value, "tempuser1", "Checking username is filled");
+ Assert.equal(pword.value, "temppass1", "Checking password is filled");
+ });
+
+ BrowserTestUtils.removeTab(newTab);
+});