test_submitevent_on_form.html (1874B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test submit event on form</title> 5 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 8 </head> 9 <body> 10 <form action="javascript:doDefault()" id="form"> 11 <input name="n1" value="v1"> 12 <input type="submit" value="Do Default Action"> 13 </form> 14 <pre id="test"> 15 <script type="application/javascript"> 16 SimpleTest.waitForExplicitFinish(); 17 SimpleTest.waitForFocus(runTests); 18 19 var defaultActionCount = 0; 20 21 function doDefault() 22 { 23 defaultActionCount++; 24 } 25 26 async function runTests() 27 { 28 const form = document.getElementById("form"); 29 let formDataInEvent = null; 30 31 // Test if submission from submit() is deferred. 32 await SpecialPowers.pushPrefEnv({ 33 set: [["dom.forms.submit.trusted_event_only", false]], 34 }); 35 36 form.addEventListener("submit", function(e) { 37 form.elements[0].value = "v1"; 38 form.submit(); 39 form.elements[0].value = "v2"; 40 }, { once: true }); 41 42 form.addEventListener('formdata', e => { 43 formDataInEvent = e.formData; 44 }); 45 46 form.dispatchEvent(new Event('submit')); 47 await new Promise(resolve => SimpleTest.executeSoon(resolve)); 48 49 is(defaultActionCount, 1, "should only submit once"); 50 is(formDataInEvent.get('n1'), 'v2', "submission from submit() should be deferred"); 51 52 // Test untrusted submit event shouldn't trigger form default action. 53 defaultActionCount = 0; 54 await SpecialPowers.pushPrefEnv({ 55 set: [["dom.forms.submit.trusted_event_only", true]], 56 }); 57 58 form.dispatchEvent(new Event('submit')); 59 setTimeout(() => { 60 is(defaultActionCount, 0, "untrusted submit event shouldn't trigger form default action"); 61 SimpleTest.finish(); 62 }); 63 } 64 </script> 65 </pre> 66 </body> 67 </html>