<!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>