input-events-arrow-key-on-number-input-delete-document.html (1288B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="/resources/testdriver.js"></script> 7 <script src="/resources/testdriver-vendor.js"></script> 8 </head> 9 <body> 10 <iframe id="iframe"></iframe> 11 <script> 12 const frame = document.getElementById("iframe"); 13 14 function loadIframe(doc) { 15 return new Promise((resolve) => { 16 frame.addEventListener("load", resolve); 17 frame.srcdoc = doc; 18 }); 19 } 20 21 promise_test(async function() { 22 await loadIframe("<input type='number'>"); 23 const inputElement = frame.contentDocument.querySelector("input"); 24 25 let events = []; 26 27 inputElement.addEventListener("beforeinput", () => { 28 events.push("beforeinput"); 29 frame.remove(); 30 }); 31 inputElement.addEventListener("input", () => { 32 events.push("input"); 33 }); 34 inputElement.addEventListener("change", () => { 35 events.push("change"); 36 }); 37 38 inputElement.focus(); 39 40 await test_driver.send_keys(inputElement, "\uE013"); 41 42 assert_array_equals(events, ['beforeinput']); 43 assert_false(document.body.contains(frame)); 44 }, "Number input should not crash and not fire subsequent events when event handler removes document"); 45 </script> 46 </body> 47 </html>