diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /dom/events/test/pointerevents/test_bug1420589_2.html | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/events/test/pointerevents/test_bug1420589_2.html')
-rw-r--r-- | dom/events/test/pointerevents/test_bug1420589_2.html | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/dom/events/test/pointerevents/test_bug1420589_2.html b/dom/events/test/pointerevents/test_bug1420589_2.html new file mode 100644 index 0000000000..9a8eff762a --- /dev/null +++ b/dom/events/test/pointerevents/test_bug1420589_2.html @@ -0,0 +1,120 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1420589 +--> +<head> + <meta charset="utf-8"> + <title>Test for Bug 1420589</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <script src="/tests/SimpleTest/EventUtils.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> +</head> +<body> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1420589">Mozilla Bug 1420589</a> +<p id="display"></p> +<div id="div1" style="width: 50px; height: 50px; background: green"></div> +<iframe id="iframe1" src="./bug_1420589_iframe1.html"> +</iframe> +<script type="text/javascript"> +/* + Test for Bug 1420589. This test synthesizes touch events with two points. One + hits the div element on the document and the other hits the iframe element. + + We dispatch all touch events to the same document. If we find any target that + is not in the same document of the existed target, we try to find the ancestor + document of the new target which is in the same as the existing target and + dispatch touch events to it. We check the points of the touch event in reverse + order. That means we only dispatch touch events to the document which contains + the div element in this test and expect the div element and iframe element + receive touch events. + + We dispatch pointer events to the hit targets even when there aren't in the + same document. This test expects that pointer events are dispatched to the div + element and the iframe document. +*/ +SimpleTest.waitForExplicitFinish(); + +var rx = 1; +var ry = 1; +var angle = 0; +var force = 1; +var modifiers = 0; +var test1PointerId = 1; +var test2PointerId = 2; + +function withoutImplicitlyPointerCaptureForTouch() { + let expectedEvents = [ + // messages from the document of iframe1 + "iframe1 pointerdown", + "iframe1 pointermove", + "iframe1 pointerup", + + // messages from the parent document + "iframe touchstart", + "iframe touchmove", + "iframe touchend", + "div1 pointerdown", + "div1 pointermove", + "div1 pointerup", + "div1 touchstart", + "div1 touchmove", + "div1 touchend", + ]; + + window.addEventListener('message',function(e) { + ok(expectedEvents.includes(e.data), " don't expect " + e.data); + expectedEvents = expectedEvents.filter(item => item !== e.data); + if (e.data == "div1 touchend") { + ok(expectedEvents.length == 0, " expect " + expectedEvents); + SimpleTest.finish(); + } + }) + + let iframe1 = document.getElementById('iframe1'); + let div1 = document.getElementById('div1'); + + let events = ["touchstart", "touchmove", "touchend", "pointerdown", "pointermove", "pointerup"]; + events.forEach((event) => { + div1.addEventListener(event, (e) => { + postMessage("div1 " + e.type, "*"); + }, { once: true }); + iframe1.addEventListener(event, (e) => { + postMessage("iframe " + e.type, "*"); + }, { once: true }); + }); + + let rect1 = iframe1.getBoundingClientRect(); + let rect2 = div1.getBoundingClientRect(); + + let left1 = rect1.left + 5; + let left2 = rect2.left + 5; + + let top1 = rect1.top + 5; + let top2 = rect2.top + 5; + + var utils = SpecialPowers.getDOMWindowUtils(window); + utils.sendTouchEvent('touchstart', [test1PointerId, test2PointerId], + [left1, left2], [top1, top2], [rx, rx], [ry, ry], + [angle, angle], [force, force], modifiers); + + // Move the touch pointers so that we dispatch all of them to content. + left1++; + left2++; + utils.sendTouchEvent('touchmove', [test1PointerId, test2PointerId], + [left1, left2], [top1, top2], [rx, rx], [ry, ry], + [angle, angle], [force, force], modifiers); + utils.sendTouchEvent('touchend', [test1PointerId, test2PointerId], + [left1, left2], [top1, top2], [rx, rx], [ry, ry], + [angle, angle], [force, force], modifiers); +} + +SimpleTest.waitForFocus(() => { + SpecialPowers.pushPrefEnv({"set": [["dom.w3c_pointer_events.enabled", true], + ["dom.w3c_pointer_events.implicit_capture", false]]}, + withoutImplicitlyPointerCaptureForTouch); +}); + +</script> +</body> +</html> |