cancel-mousedown-in-subframe.html (2461B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="/resources/testdriver.js"></script> 5 <script src="/resources/testdriver-vendor.js"></script> 6 <script src="/resources/testdriver-actions.js"></script> 7 <script src="resources/utils.js"></script> 8 <body> 9 <div> 10 Dragging the mouse from child frame to parent frame causes both <code>mousedown</code> and 11 <code>mouseup</code> events being dispatched to child frame, regardless of whether the 12 <code>mousedown</code> event is canceled or not. 13 </div> 14 <iframe id="child_frame" width="300px" height="40px" 15 src="resources/mouse-event-reporter-subframe.html"> 16 </iframe> 17 </body> 18 <script> 19 "use strict" 20 let topframe_loaded = getEvent("load", window); 21 let subframe_loaded = getMessageData("load", frames[0]); 22 23 let top_frame_mousedown; 24 let top_frame_mouseup; 25 26 promise_setup(async () => { 27 await topframe_loaded; 28 await subframe_loaded; 29 30 window.addEventListener("mousedown", e => top_frame_mousedown = true); 31 window.addEventListener("mouseup", e => top_frame_mouseup = true); 32 }); 33 34 [false, true].forEach(cancel_mousedown => { 35 let mousedown_msg = cancel_mousedown ? "canceled" : "not-canceled"; 36 37 promise_test(async () => { 38 top_frame_mousedown = false; 39 top_frame_mouseup = false; 40 41 sendMessage(frames[0], "cancel-mousedown", cancel_mousedown); 42 43 const mousedown_promise = getMessageData("mousedown", frames[0]); 44 const mouseup_promise = getMessageData("mouseup", frames[0]); 45 46 const child_frame = document.getElementById("child_frame"); 47 const actions_promise = new test_driver.Actions() 48 .pointerMove(5, 5, {origin: child_frame}) 49 .pointerDown() 50 .pointerMove(5, 5, {origin: document.body}) 51 .pointerUp() 52 .send(); 53 54 await actions_promise; 55 56 let mousedown_message = await mousedown_promise; 57 let mouseup_message = await mouseup_promise; 58 59 assert_equals(mousedown_message.param, mousedown_msg, "Child frame canceled mousedown?"); 60 assert_false(top_frame_mousedown, "Top frame received mousedown?"); 61 assert_false(top_frame_mouseup, "Top frame received mouseup?"); 62 }, "Child frame receives mousedown/mouseup when mousedown is " + mousedown_msg); 63 }); 64 </script>