mousemove_prevent_default_action.html (3011B)
1 <!doctype html> 2 <meta charset=utf-8> 3 <title>mousemove event: preventDefault()</title> 4 <link rel="author" title="Mirko Brodesser" href="mailto:mbrodesser@mozilla.com"> 5 <link rel="help" href="https://github.com/w3c/uievents/issues/278"> 6 <script src=/resources/testharness.js></script> 7 <script src=/resources/testharnessreport.js></script> 8 <script src=/resources/testdriver.js></script> 9 <script src=/resources/testdriver-actions.js></script> 10 <script src=/resources/testdriver-vendor.js></script> 11 <script src=resources/utils.js></script> 12 13 <body> 14 <div id="a">div a</div> 15 <div id="b">div b</div> 16 <div id="c" draggable="true">div c</div> 17 </body> 18 19 <script> 20 'use strict'; 21 22 let event_log = []; 23 24 function logEvents(e) { 25 event_log.push(e.type); 26 } 27 28 function initialize(test) { 29 // Deliberately avoiding mouseup here because the last selectionchange 30 // may be fired before or after the mouseup. 31 addTestScopedListener(document, "mousedown", logEvents, test); 32 addTestScopedListener(document, "mousemove", e => e.preventDefault(), test); 33 event_log = []; 34 } 35 36 promise_test(async test => { 37 initialize(test); 38 addTestScopedListener(document, "selectionchange", logEvents, test); 39 40 const a = document.getElementById("a"); 41 const b = document.getElementById("b"); 42 43 let mouseup_promise = getEvent("mouseup", document); 44 45 await new test_driver.Actions() 46 .pointerMove(0, 0, {origin: a}) 47 .pointerDown() 48 .addTick() 49 .addTick() 50 .pointerMove(0, 0, {origin: b}) 51 .addTick() 52 .addTick() 53 .pointerUp() 54 .send(); 55 56 await mouseup_promise; 57 58 const expected_events = ["mousedown", "selectionchange", "selectionchange"]; 59 60 assert_equals(event_log.toString(), expected_events.toString(), 61 "received events"); 62 }, "selectionchange event firing when mousemove event is prevented"); 63 64 promise_test(async test => { 65 initialize(test); 66 addTestScopedListener(document, 'dragstart', (event) => { 67 // For this test, it is enough to see the dragstart event. The event is 68 // cancelled here to suppress the actual drag operation because Blink's 69 // implementation of test_driver doesn't seem to be able to dispatch any 70 // event once the dragging is active. 71 event.preventDefault(); 72 logEvents(event); 73 }, test); 74 75 const b = document.getElementById("b"); 76 const c = document.getElementById("c"); 77 78 const mouseup_promise = getEvent('mouseup', document); 79 80 await new test_driver.Actions() 81 .pointerMove(0, 0, {origin: c}) 82 .pointerDown() 83 .addTick() 84 .addTick() 85 .pointerMove(0, 0, {origin: b}) 86 .addTick() 87 .addTick() 88 .pointerUp() 89 .send(); 90 91 await mouseup_promise; 92 93 const expected_events = ["mousedown", "dragstart"]; 94 95 assert_equals(event_log.toString(), expected_events.toString(), 96 "received events"); 97 }, "dragstart event firing when mousemove event is prevented"); 98 </script>