file_suppressed_events_top_modalstate.html (2410B)
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 utils = SpecialPowers.getDOMWindowUtils(window); 50 utils.enterModalState(); 51 const TOTAL = 100; 52 for (let i = 0; i < TOTAL; i++) { 53 synthesizeMouseAtCenter(innerDiv, { type: "mousemove" }, innerWin); 54 } 55 utils.leaveModalState(); 56 57 // Wait for click event to ensure we have received all mousemove events. 58 await waitForClickEvent(innerDiv, innerWin); 59 opener.info(`eventCount: ${eventCount}`); 60 opener.ok(eventCount < TOTAL, "event should be suspressed"); 61 62 // Test that event handling is not suppressed. 63 eventCount = 0; 64 for (let i = 0; i < TOTAL; i++) { 65 synthesizeMouseAtCenter(innerDiv, { type: "mousemove" }, innerWin); 66 } 67 68 // Wait for click event to ensure we have received all mousemove events. 69 await waitForClickEvent(innerDiv, innerWin); 70 opener.info(`eventCount: ${eventCount}`); 71 opener.is(eventCount, TOTAL, "event should not be suspressed"); 72 73 opener.postMessage("done", "*"); 74 }); 75 76 </script> 77 <iframe src="http://example.org/tests/dom/base/test/file_suppressed_events_middle.html"></iframe> 78 </body> 79 </html>