diff options
Diffstat (limited to 'toolkit/components/satchel/test/test_password_autocomplete.html')
-rw-r--r-- | toolkit/components/satchel/test/test_password_autocomplete.html | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/toolkit/components/satchel/test/test_password_autocomplete.html b/toolkit/components/satchel/test/test_password_autocomplete.html new file mode 100644 index 000000000..82781ae35 --- /dev/null +++ b/toolkit/components/satchel/test/test_password_autocomplete.html @@ -0,0 +1,107 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Test for form history on type=password</title> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="/tests/SimpleTest/SpawnTask.js"></script> + <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script> + <script type="text/javascript" src="satchel_common.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> + Test for form history on type=password + (based on test_bug_511615.html) +<p id="display"></p> + +<!-- we presumably can't hide the content for this test. --> +<div id="content"> + <datalist id="datalist1"> + <option>value10</option> + <option>value11</option> + <option>value12</option> + </datalist> + <form id="form1" onsubmit="return false;"> + <!-- Don't set the type to password until rememberSignons is false since we + want to test when rememberSignons is false. --> + <input type="to-be-password" name="field1" list="datalist1"> + <button type="submit">Submit</button> + </form> +</div> + +<pre id="test"> +<script class="testbody" type="text/javascript"> +/* import-globals-from satchel_common.js */ + +var resolvePopupShownListener; +registerPopupShownListener(() => resolvePopupShownListener()); + +function waitForNextPopup() { + return new Promise(resolve => { resolvePopupShownListener = resolve; }); +} + +/** + * Indicates the time to wait before checking that the state of the autocomplete + * popup, including whether it is open, has not changed in response to events. + * + * Manual testing on a fast machine revealed that 80ms was still unreliable, + * while 100ms detected a simulated failure reliably. Unfortunately, this means + * that to take into account slower machines we should use a larger value. + * + * Note that if a machine takes more than this time to show the popup, this + * would not cause a failure, conversely the machine would not be able to detect + * whether the test should have failed. In other words, this use of timeouts is + * never expected to cause intermittent failures with test automation. + */ +const POPUP_RESPONSE_WAIT_TIME_MS = 200; + +SimpleTest.requestFlakyTimeout("Must ensure that an event does not happen."); + +/** + * Checks that the popup does not open in response to the given function. + */ +function expectPopupDoesNotOpen(triggerFn) { + let popupShown = waitForNextPopup(); + triggerFn(); + return Promise.race([ + popupShown.then(() => Promise.reject("Popup opened unexpectedly.")), + new Promise(resolve => setTimeout(resolve, POPUP_RESPONSE_WAIT_TIME_MS)), + ]); +} + +add_task(function* test_initialize() { + yield SpecialPowers.pushPrefEnv({"set": [["signon.rememberSignons", false]]}); + + // Now that rememberSignons is false, create the password field + $_(1, "field1").type = "password"; + + yield new Promise(resolve => updateFormHistory([ + { op : "remove" }, + { op : "add", fieldname : "field1", value : "value1" }, + { op : "add", fieldname : "field1", value : "value2" }, + { op : "add", fieldname : "field1", value : "value3" }, + { op : "add", fieldname : "field1", value : "value4" }, + { op : "add", fieldname : "field1", value : "value5" }, + { op : "add", fieldname : "field1", value : "value6" }, + { op : "add", fieldname : "field1", value : "value7" }, + { op : "add", fieldname : "field1", value : "value8" }, + { op : "add", fieldname : "field1", value : "value9" }, + ], resolve)); +}); + +add_task(function* test_insecure_focusWarning() { + // The form is insecure so should show the warning even if password manager is disabled. + let input = $_(1, "field1"); + let shownPromise = waitForNextPopup(); + input.focus(); + yield shownPromise; + + ok(getMenuEntries()[0].includes("Logins entered here could be compromised"), + "Check warning is first") + + // Close the popup + input.blur(); +}); +</script> +</pre> +</body> +</html> |