summaryrefslogtreecommitdiffstats
path: root/toolkit/components/passwordmgr/test/mochitest/test_autocomplete_basic_form_related_realms.html
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/passwordmgr/test/mochitest/test_autocomplete_basic_form_related_realms.html')
-rw-r--r--toolkit/components/passwordmgr/test/mochitest/test_autocomplete_basic_form_related_realms.html112
1 files changed, 112 insertions, 0 deletions
diff --git a/toolkit/components/passwordmgr/test/mochitest/test_autocomplete_basic_form_related_realms.html b/toolkit/components/passwordmgr/test/mochitest/test_autocomplete_basic_form_related_realms.html
new file mode 100644
index 0000000000..1dcd8b116e
--- /dev/null
+++ b/toolkit/components/passwordmgr/test/mochitest/test_autocomplete_basic_form_related_realms.html
@@ -0,0 +1,112 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Test login autocomplete with related realms</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/EventUtils.js"></script>
+ <script type="text/javascript" src="../../../satchel/test/satchel_common.js"></script>
+ <script type="text/javascript" src="pwmgr_common.js"></script>
+ <link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<p id="display"></p>
+<div id="content"></div>
+<pre id="test">
+Login Manager test: related realms autocomplete
+
+<template id="form1-template">
+ <form id="form1" action="https://autocomplete:8888/formtest.js">
+ <input type="text" name="uname">
+ <input type="password" name="pword">
+ </form>
+</template>
+
+<script class="testbody" type="text/javascript">
+ const formTemplate = document.getElementById("form1-template");
+
+ add_setup(async () => {
+ await setStoredLoginsDuringTest(
+ // Simple related domain relationship where example.com and other-example.com are in the related domains list
+ ["https://other-example.com", "https://other-example.com", null, "relatedUser1", "relatedPass1", "uname", "pword"],
+
+ // Example.com and example.co.uk are related, so sub.example.co.uk should appear on example.com's autocomplete dropdown
+ // The intent is to cover the ebay.com/ebay.co.uk and all other country TLD cases
+ // where the sign in page is actually signin.ebay.com/signin.ebay.co.uk but credentials could have manually been entered
+ // for ebay.com/ebay.co.uk or automatically stored as signin.ebay.com/sigin.ebay.co.uk
+ ["https://sub.example.co.uk", "https://sub.example.co.uk", null, "subUser1", "subPass1", "uname", "pword"],
+ );
+ listenForUnexpectedPopupShown();
+ });
+
+ add_named_task("form is initially empty", async () => {
+ const form = setContentForTask(formTemplate);
+ const autofillResult = await formAutofillResult(form.id);
+ is(autofillResult, "no_saved_logins", "form has not been filled due to no saved logins");
+
+ // Make sure initial form is empty.
+ is(form.uname.value, "", "username is empty");
+ is(form.pword.value, "", "password is empty");
+ const popupState = await getPopupState();
+ is(popupState.open, false, "Check popup is initially closed");
+ });
+
+ add_named_task("form related domain menuitems", async () => {
+ const form = setContentForTask(formTemplate);
+ const autofillResult = await formAutofillResult(form.id);
+ is(autofillResult, "no_saved_logins", "form has not been filled due to no saved logins");
+
+ form.uname.focus();
+
+ const autocompleteItems = await popupByArrowDown();
+ const popupState = await getPopupState();
+
+ is(popupState.selectedIndex, -1, "Check no entires are selected upon opening");
+
+ const expectedMenuItems = ["relatedUser1", "subUser1"];
+ checkAutoCompleteResults(autocompleteItems, expectedMenuItems, window.location.host, "Check all menuitems are displayed correctly");
+
+ const acEvents = await getTelemetryEvents({ process: "parent", filterProps: TelemetryFilterPropsAC, clear: true });
+ is(acEvents.length, 1, "One autocomplete event");
+ checkACTelemetryEvent(acEvents[0], form.uname, {
+ "hadPrevious": "0",
+ "login": expectedMenuItems.length + "",
+ "loginsFooter": "1"
+ });
+ checkLoginForm(form.uname, "", form.pword, ""); // value shouldn't update just by opening
+
+ synthesizeKey("KEY_ArrowDown"); // first item
+ // value shouldn't update just by selecting
+ is(form.uname.value, "", "username is empty");
+ is(form.pword.value, "", "password is empty");
+
+ synthesizeKey("KEY_Enter");
+ const autofillResult2 = await formAutofillResult(form.id);
+ is(autofillResult2, "filled", "form has been filled");
+ is(form.pword.value, "relatedPass1", "password should match the login that was selected");
+ checkLoginForm(form.uname, "relatedUser1", form.pword, "relatedPass1");
+ is(form.uname.value, "relatedUser1", "username is set");
+ is(form.pword.value, "relatedPass1", "password is set");
+
+ form.uname.value = "";
+ form.pword.value = "";
+ form.uname.focus();
+
+ await popupByArrowDown();
+
+ synthesizeKey("KEY_ArrowDown"); // first item
+ synthesizeKey("KEY_ArrowDown"); // second item
+ // value shouldn't update just by selecting
+ is(form.uname.value, "", "username is empty");
+ is(form.pword.value, "", "password is empty");
+
+ synthesizeKey("KEY_Enter");
+ const autofillResult3 = await formAutofillResult(form.id);
+ is(autofillResult3, "filled", "form has been filled");
+ is(form.uname.value, "subUser1", "username is set");
+ is(form.pword.value, "subPass1", "password is set");
+ });
+</script>
+</pre>
+</body>
+</html>