helper_fission_transforms.html (3029B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Test to ensure events get untransformed properly for OOP iframes</title> 6 <script src="/tests/SimpleTest/SimpleTest.js"></script> 7 <script src="/tests/SimpleTest/paint_listener.js"></script> 8 <script src="helper_fission_utils.js"></script> 9 <script src="apz_test_utils.js"></script> 10 <script src="apz_test_native_event_utils.js"></script> 11 <script> 12 13 async function test() { 14 const iframe = document.querySelector("iframe"); 15 await setupCrossOriginIFrame(iframe, "helper_fission_plain.html"); 16 17 let readyPromise = new Promise(resolve => { 18 window.addEventListener("message", event => { 19 if (event.data === "listenerready") { 20 resolve(); 21 } 22 }); 23 }); 24 25 let result = await SpecialPowers.spawn(iframe, [], async () => { 26 content.document.addEventListener("click", (e) => { 27 let data = JSON.stringify({ 28 type: "clicked", 29 coords: { 30 offsetX: e.clientX, 31 offsetY: e.clientY 32 } 33 }); 34 content.window.parent.postMessage(data, "*"); 35 }); 36 37 content.window.parent.postMessage("listenerready", "*"); 38 39 return true; 40 }); 41 ok(result, "Successfully installed event listener in OOP iframe"); 42 43 await readyPromise; 44 45 let childMessagePromise = new Promise(resolve => { 46 window.addEventListener("message", event => { 47 48 let data = JSON.parse(event.data); 49 if ("type" in data && data.type == "clicked") { 50 let coordinates = { 51 offsetX: data.coords.offsetX, 52 offsetY: data.coords.offsetY 53 }; 54 resolve(coordinates); 55 } 56 }); 57 }); 58 59 await synthesizeNativeMouseEventWithAPZ( 60 { type: "click", target: document.body, offsetX: 400, offsetY: 400 }, 61 () => dump("Finished synthesizing click, waiting for OOPIF message...\n") 62 ); 63 64 let clickCoordsInChild = await childMessagePromise; 65 66 let expected_coord = 200 / Math.sqrt(2); // because the iframe is rotated 45 deg 67 ok(Math.abs(clickCoordsInChild.offsetX - expected_coord) < 3, 68 `x-coord ${clickCoordsInChild.offsetX} landed near expected value ${expected_coord}`); 69 ok(Math.abs(clickCoordsInChild.offsetY - expected_coord) < 3, 70 `y-coord ${clickCoordsInChild.offsetY} landed near expected value ${expected_coord}`); 71 } 72 73 waitUntilApzStable() 74 .then(test) 75 .then(subtestDone, subtestFailed); 76 77 </script> 78 <style> 79 body, 80 html { 81 margin: 0; 82 } 83 84 div { 85 transform-origin: top left; 86 transform: translateX(400px) scale(2) rotate(45deg) translate(-50px, -50px); 87 width: 500px; 88 } 89 90 iframe { 91 width: 400px; 92 height: 300px; 93 position: absolute; 94 top: 50px; 95 left: 50px; 96 border: solid 1px black; 97 } 98 </style> 99 </head> 100 <body> 101 <div><iframe id="testframe"></iframe></div> 102 </body> 103 </html>