file_suppressed_events_top_xhr.html (2442B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test event suppression</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script src="/tests/SimpleTest/EventUtils.js"></script> 7 <script src="/tests/SimpleTest/paint_listener.js"></script> 8 <script src="/tests/gfx/layers/apz/test/mochitest/apz_test_utils.js"></script> 9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 10 </head> 11 <body> 12 <div>Top</div> 13 <script type="application/javascript"> 14 15 function waitForMessage(aMsg, aCallback) { 16 window.addEventListener("message", function handler(e) { 17 if (e.data != aMsg) { 18 return; 19 } 20 21 info(`received: ${e.data}`); 22 window.removeEventListener("message", handler); 23 if (aCallback) { 24 aCallback(e); 25 } 26 }); 27 } 28 29 function waitForClickEvent(aElement, aWindow) { 30 return new Promise((aResolve) => { 31 aElement.addEventListener("click", aResolve, { once: true }); 32 synthesizeMouseAtCenter(aElement, { type: "mousedown" }, aWindow); 33 synthesizeMouseAtCenter(aElement, { type: "mouseup" }, aWindow); 34 }); 35 } 36 37 waitForMessage("ready", async function(e) { 38 await waitUntilApzStable(); 39 40 let innerWin = e.source; 41 let innerDiv = innerWin.document.querySelector("div"); 42 43 let eventCount = 0; 44 innerDiv.addEventListener("mousemove", function() { 45 eventCount++; 46 }); 47 48 // Test that event handling is suppressed. 49 let xhr = new XMLHttpRequest(); 50 opener.info("xhr open"); 51 xhr.open('GET', 'slow.sjs', false); 52 53 const TOTAL = 100; 54 for (let i = 0; i < TOTAL; i++) { 55 synthesizeMouseAtCenter(innerDiv, { type: "mousemove" }, innerWin); 56 } 57 xhr.send(); 58 opener.info(`xhr done`); 59 60 // Wait for click event to ensure we have received all mousemove events. 61 await waitForClickEvent(innerDiv, innerWin); 62 opener.info(`eventCount: ${eventCount}`); 63 opener.ok(eventCount < TOTAL, "event should be suspressed"); 64 65 // Test that event handling is not suppressed. 66 eventCount = 0; 67 for (let i = 0; i < TOTAL; i++) { 68 synthesizeMouseAtCenter(innerDiv, { type: "mousemove" }, innerWin); 69 } 70 71 // Wait for click event to ensure we have received all mousemove events. 72 await waitForClickEvent(innerDiv, innerWin); 73 opener.info(`eventCount: ${eventCount}`); 74 opener.is(eventCount, TOTAL, "event should not be suspressed"); 75 76 opener.postMessage("done", "*"); 77 }); 78 79 </script> 80 <iframe src="http://example.org/tests/dom/base/test/file_suppressed_events_middle.html"></iframe> 81 </body> 82 </html>