diff options
Diffstat (limited to 'testing/web-platform/tests/uievents/mouse/cancel-mousedown-in-subframe.html')
-rw-r--r-- | testing/web-platform/tests/uievents/mouse/cancel-mousedown-in-subframe.html | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/testing/web-platform/tests/uievents/mouse/cancel-mousedown-in-subframe.html b/testing/web-platform/tests/uievents/mouse/cancel-mousedown-in-subframe.html new file mode 100644 index 0000000000..0735037735 --- /dev/null +++ b/testing/web-platform/tests/uievents/mouse/cancel-mousedown-in-subframe.html @@ -0,0 +1,64 @@ +<!DOCTYPE html> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/resources/testdriver.js"></script> +<script src="/resources/testdriver-vendor.js"></script> +<script src="/resources/testdriver-actions.js"></script> +<script src="resources/utils.js"></script> +<body> + <div> + Dragging the mouse from child frame to parent frame causes both <code>mousedown</code> and + <code>mouseup</code> events being dispatched to child frame, regardless of whether the + <code>mousedown</code> event is canceled or not. + </div> + <iframe id="child_frame" width="300px" height="40px" + src="resources/mouse-event-reporter-subframe.html"> + </iframe> +</body> +<script> + "use strict" + let topframe_loaded = getEvent("load", window); + let subframe_loaded = getMessageData("load", frames[0]); + + let top_frame_mousedown; + let top_frame_mouseup; + + promise_setup(async () => { + await topframe_loaded; + await subframe_loaded; + + window.addEventListener("mousedown", e => top_frame_mousedown = true); + window.addEventListener("mouseup", e => top_frame_mouseup = true); + }); + + [false, true].forEach(cancel_mousedown => { + let mousedown_msg = cancel_mousedown ? "canceled" : "not-canceled"; + + promise_test(async () => { + top_frame_mousedown = false; + top_frame_mouseup = false; + + sendMessage(frames[0], "cancel-mousedown", cancel_mousedown); + + const mousedown_promise = getMessageData("mousedown", frames[0]); + const mouseup_promise = getMessageData("mouseup", frames[0]); + + const child_frame = document.getElementById("child_frame"); + const actions_promise = new test_driver.Actions() + .pointerMove(5, 5, {origin: child_frame}) + .pointerDown() + .pointerMove(5, 5, {origin: document.body}) + .pointerUp() + .send(); + + await actions_promise; + + let mousedown_message = await mousedown_promise; + let mouseup_message = await mouseup_promise; + + assert_equals(mousedown_message.param, mousedown_msg, "Child frame canceled mousedown?"); + assert_false(top_frame_mousedown, "Top frame received mousedown?"); + assert_false(top_frame_mouseup, "Top frame received mouseup?"); + }, "Child frame receives mousedown/mouseup when mousedown is " + mousedown_msg); + }); +</script> |