helper_fission_event_region_override.html (3107B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width,initial-scale=1"> 6 <title>Ensure the event region override flags work properly</title> 7 <script src="/tests/SimpleTest/SimpleTest.js"></script> 8 <script src="/tests/SimpleTest/paint_listener.js"></script> 9 <script src="helper_fission_utils.js"></script> 10 <script src="apz_test_utils.js"></script> 11 <script src="apz_test_native_event_utils.js"></script> 12 <script> 13 14 function getEventPromise(eventName) { 15 let eventPromise = new Promise(resolve => { 16 const listener = event => { 17 if (event.data === eventName) { 18 dump(`Event Promise, received event: ${event.data}\n`); 19 window.removeEventListener("message", listener); 20 resolve(); 21 } 22 } 23 window.addEventListener("message", listener); 24 }); 25 return eventPromise; 26 } 27 28 async function setupIframeListeners(iframe) { 29 let listenersReady = getEventPromise("listenersReady"); 30 SpecialPowers.spawn(iframe, [], () => { 31 const { promise, resolve } = Promise.withResolvers(); 32 content.window.addEventListener("wheel", () => { 33 Assert.ok(false, "Iframe: We should not receive a wheel event"); 34 resolve(); 35 }, { once: true }); 36 37 content.window.addEventListener("scroll", () => { 38 Assert.ok(false, "Iframe: We should not receive a scoll event"); 39 resolve(); 40 }, { once: true }); 41 42 content.window.parent.postMessage("listenersReady", "*"); 43 return promise; 44 }); 45 await listenersReady; 46 } 47 48 async function test() { 49 let iframe = document.getElementById("testframe"); 50 await setupCrossOriginIFrame(iframe, "helper_fission_plain.html"); 51 await setupIframeListeners(iframe); 52 await synthesizeNativeWheel(iframe, 10, 10, 0, -50); 53 54 // Advance a bunch of frames. The only goal here is to ensure enough time 55 // passes so that if the OOPIF does scroll, we find out about it via the 56 // OOPIF:Scrolled messaging. 57 // If we don't wait long enough we might end up finishing the test before 58 // that scroll message gets received here, and so we might wrongly pass the 59 // test. 60 await SpecialPowers.promiseTimeout(0); 61 var utils = SpecialPowers.getDOMWindowUtils(window); 62 for (var i = 0; i < 5; i++) { 63 utils.advanceTimeAndRefresh(16); 64 } 65 utils.restoreNormalRefresh(); 66 await promiseOnlyApzControllerFlushed(); 67 } 68 69 window.onload = async () => { 70 await SpecialPowers.spawnChrome([], async () => { 71 this.browsingContext.topChromeWindow.addEventListener( 72 "wheel", 73 e => e.preventDefault(), 74 { once: true, passive: false } 75 ); 76 return new Promise(resolve => resolve()); 77 }); 78 await SpecialPowers.executeAfterFlushingMessageQueue(); 79 waitUntilApzStable() 80 .then(test) 81 .then(subtestDone, subtestFailed); 82 }; 83 84 </script> 85 </head> 86 <body> 87 <iframe id="testframe"></iframe> 88 </body> 89 </html>