Bug 1776680 [wpt PR 34603] - [@container] Test invalidation of font-relative units...
[gecko.git] / dom / events / test / test_event_screenXY_in_cross_origin_iframe.html
blob4cd0dfd358648563329f34ec25b390288954a2b8
1 <!DOCTYPE html>
2 <meta charset="utf-8">
3 <title></title>
4 <script src="/tests/SimpleTest/SimpleTest.js"></script>
5 <script src="/tests/SimpleTest/EventUtils.js"></script>
6 <script src="/tests/SimpleTest/paint_listener.js"></script>
7 <script src="/tests/gfx/layers/apz/test/mochitest/apz_test_utils.js"></script>
8 <script src="/tests/gfx/layers/apz/test/mochitest/apz_test_native_event_utils.js"></script>
9 <iframe width=100></iframe>
10 <iframe width=100></iframe>
11 <script>
12 function getScreenPosition(aElement, aOffsetX, aOffsetY) {
13 const rect = aElement.getBoundingClientRect();
14 const x = aOffsetX + window.mozInnerScreenX + rect.left;
15 const y = aOffsetY + window.mozInnerScreenY + rect.top;
16 const scale = window.devicePixelRatio;
17 return [Math.round(x * scale), Math.round(y * scale)];
20 function waitForMessage(aMsg, aOrigin) {
21 return new Promise(resolve => {
22 window.addEventListener("message", function listener(event) {
23 if (event.data == "ready" && event.origin == aOrigin) {
24 window.removeEventListener("message", listener);
25 resolve();
27 });
28 });
31 add_task(async () => {
32 await SimpleTest.promiseFocus();
34 const iframes = document.querySelectorAll("iframe");
35 iframes[0].src = "file_event_screenXY.html";
36 await waitForMessage("ready", location.origin);
38 iframes[1].src = "https://example.com/tests/dom/events/test/file_event_screenXY.html";
39 await waitForMessage("ready", "https://example.com");
41 // Wait for APZ state stable so that mouse event handling APZ works properly
42 // in out-of-process iframes.
43 await promiseApzFlushedRepaints();
45 const promiseForSameOrigin = new Promise(resolve => {
46 window.addEventListener("message", event => {
47 is(event.origin, location.origin, "origin should be the same as parent");
48 resolve(event.data);
49 }, { once: true });
50 });
52 // NOTE: synthesizeMouseAtCenter doesn't work for OOP iframes (bug 1528935),
53 // so we use promiseNativeMouseEvent instead.
54 const [expectedScreenXInSameOrigin, expectedScreenYInSameOrigin] =
55 getScreenPosition(iframes[0], 10, 10);
56 await promiseNativeMouseEvent({
57 type: "click",
58 target: iframes[0],
59 screenX: expectedScreenXInSameOrigin,
60 screenY: expectedScreenYInSameOrigin,
61 scale: "inScreenPixels",
62 });
64 const eventInSameOrigin = await promiseForSameOrigin;
65 is(eventInSameOrigin.screenX, expectedScreenXInSameOrigin,
66 "event.screenX should be the same");
67 is(eventInSameOrigin.screenY, expectedScreenYInSameOrigin,
68 "event.screenY should be the same");
70 const [expectedScreenXInCrossOrigin, expectedScreenYInCrossOrigin] =
71 getScreenPosition(iframes[1], 10, 10);
72 await promiseNativeMouseEvent({
73 type: "click",
74 target: iframes[0],
75 screenX: expectedScreenXInCrossOrigin,
76 screenY: expectedScreenYInCrossOrigin,
77 scale: "inScreenPixels",
78 });
80 const promiseForCrossOrigin = new Promise(resolve => {
81 window.addEventListener("message", event => {
82 is(event.origin, "https://example.com", "origin should be example.com");
83 resolve(event.data);
84 }, { once: true });
85 });
87 const eventInCrossOrigin = await promiseForCrossOrigin;
88 is(eventInCrossOrigin.screenX, expectedScreenXInCrossOrigin,
89 "even.screenX should be the same");
90 is(eventInCrossOrigin.screenY, expectedScreenYInCrossOrigin,
91 "even.screenY should be the same");
93 is(eventInSameOrigin.screenY, eventInCrossOrigin.screenY,
94 "event.screenY in both iframes should be the same");
95 // Sanity checks to make sure client{X,Y} are the same.
96 is(eventInSameOrigin.clientX, eventInCrossOrigin.clientX,
97 "event.clientX in both iframes should be the same");
98 is(eventInSameOrigin.clientY, eventInCrossOrigin.clientY,
99 "event.clientY in both iframes should be the same");
101 </script>