haikuwebkit/LayoutTests/pointerevents/ios/enter-leave-order.html

66 lines
1.4 KiB
HTML
Raw Permalink Normal View History

The "mouseenter" and "pointerenter" events are fired from the bottom up https://bugs.webkit.org/show_bug.cgi?id=198036 <rdar://problem/50940350> Patch by Antoine Quint <graouts@apple.com> on 2019-06-04 Reviewed by Darin Adler. Source/WebCore: Ensure "mouseenter" and "pointerenter" events are dispatched from the bottom up to match the UI Events spec at https://w3c.github.io/uievents/#events-mouseevent-event-order. We also fix the issue where "pointerevent" and "pointerleave" events were dispatched as bubbling events on iOS which is not correct and was caught by the new iOS test. Tests: pointerevents/ios/enter-leave-order.html pointerevents/mouse/enter-leave-order.html * dom/ios/PointerEventIOS.cpp: (WebCore::typeCanBubble): (WebCore::PointerEvent::PointerEvent): * page/EventHandler.cpp: (WebCore::EventHandler::updateMouseEventTargetNode): * page/PointerCaptureController.cpp: (WebCore::PointerCaptureController::dispatchEventForTouchAtIndex): LayoutTests: * fast/events/mouseenter-mouseleave-capture-expected.txt: * fast/events/mouseenter-mouseleave-expected.txt: * fast/events/mouseenterleave-on-subframe-expected.txt: * fast/events/shadow-event-path-expected.txt: * fast/shadow-dom/mouseenter-mouseleave-across-shadow-boundary-expected.txt: * fast/shadow-dom/mouseenter-mouseleave-inside-shadow-tree-expected.txt: * fast/shadow-dom/mouseenter-mouseleave-on-slot-parent-expected.txt: * platform/mac-wk1/TestExpectations: * platform/mac-wk2/fast/events/shadow-event-path-expected.txt: * platform/mac/fast/events/shadow-event-path-2-expected.txt: * pointerevents/ios/enter-leave-order-expected.txt: Added. * pointerevents/ios/enter-leave-order.html: Added. * pointerevents/mouse/enter-leave-order-expected.txt: Added. * pointerevents/mouse/enter-leave-order.html: Added. Canonical link: https://commits.webkit.org/212522@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@246061 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2019-06-04 14:34:11 +00:00
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
div.test-container {
position: absolute;
left: 0px;
top: 0px;
width: 100px;
height: 100px;
}
#top {
left: 50px;
top: 50px;
}
</style>
</head>
<body>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../utils.js"></script>
<script>
'use strict';
const events = [];
function logEvent(event)
{
events.push(`${event.type}@${event.target.id}`);
}
function makeDiv(id)
{
const div = document.createElement("div");
div.addEventListener("pointerenter", logEvent);
div.addEventListener("pointerleave", logEvent);
div.className = "test-container";
div.id = id;
return div;
}
document.body.appendChild(makeDiv("top")).appendChild(makeDiv("middle")).appendChild(makeDiv("bottom"));
async_test(test => {
const tapped = ui.tap({ x: 100, y: 100 }).then(() => {
assert_array_equals(events, [
"pointerenter@top",
"pointerenter@middle",
"pointerenter@bottom",
"pointerleave@bottom",
"pointerleave@middle",
"pointerleave@top"
]);
test.done();
});
}, `Testing that "pointerenter" events are dispatched from top to bottom and "pointerleave" events are dispatched bottom to top.`);
</script>
</body>
</html>