pointerevent_mouse-on-object.html (4624B)
1 <!DOCTYPE HTML> 2 <script type="text/javascript" src="/resources/testharness.js"></script> 3 <script type="text/javascript" src="/resources/testharnessreport.js"></script> 4 <script type="text/javascript" src="/resources/testdriver.js"></script> 5 <script type="text/javascript" src="/resources/testdriver-vendor.js"></script> 6 <script type="text/javascript" src="/resources/testdriver-actions.js"></script> 7 <script type="text/javascript" src="../pointerevent_support.js"></script> 8 9 <style> 10 #obj { 11 width: 50px; 12 height: 50px; 13 padding: 50px; 14 background-color: lightblue; 15 border:1px solid black; 16 } 17 div { 18 display: block; 19 } 20 </style> 21 22 <h1>Verifies that mouse activities on an object fire pointerevents. It expected to get pointerup when the pointerdown happened on the object for compatibility with flash objects.</h1> 23 24 25 <p> 26 To test that when clicking inside the blue rectangle all compat mouse events are correct: 27 <ul> 28 <li> Click once in the blue rectangle 29 <li> Click the Done button 30 </ul> 31 </p> 32 <p> 33 To test that when dragging mouse outside all compat mouse events are correct: 34 <ul> 35 <li> Press left mouse button in the blue rectangle 36 <li> Drag the mouse cursor out of the blue rectangle 37 <li> Release the left mouse button 38 <li> Click the Done button 39 </ul> 40 </p> 41 <!-- draggable is set to false because there is a difference between auto draggable value in different browsers --> 42 <object id="obj" draggable="false"></object> 43 <button id="done">Done</button> 44 <div id="log"></div> 45 <script> 46 var target = document.getElementById("obj"); 47 var done = document.getElementById("done"); 48 49 var rect = target.getBoundingClientRect(); 50 var done_clicked = 0; 51 var receivedEvents = []; 52 var previous_done_clicked = 0; 53 54 ["mousedown", "mouseup", "mousemove", "pointerdown", "pointerup", "pointermove"].forEach(function(eventName) { 55 target.addEventListener(eventName, function(event) { 56 // This will clear receivedEvents once another test starts 57 if(previous_done_clicked !== done_clicked){ 58 previous_done_clicked = done_clicked; 59 receivedEvents = []; 60 } 61 receivedEvents.push(event.type); 62 }); 63 }); 64 65 // Simple test to check that passive listeners can't prevent compatibility events. 66 target.addEventListener("pointerdown", function(event) { 67 event.preventDefault(); 68 }, 69 { passive: true, once: true }); 70 71 document.getElementById('done').addEventListener('click', (e) => done_clicked++); 72 73 // Need to prevent the default behaviour for firefox 74 target.addEventListener("dragstart", (e)=>e.preventDefault()); 75 76 if(window.promise_test){ 77 promise_test(async() => { 78 receivedEvents = []; 79 80 await new test_driver.Actions() 81 .pointerMove(Math.ceil(rect.left+5), Math.ceil(rect.top+5)) 82 .pointerDown() 83 .pointerUp() 84 .send() 85 .then(() => clickInTarget("mouse", done)); 86 await resolveWhen(() => done_clicked === 1); 87 88 assert_array_equals(receivedEvents.filter(isPointerEvent), ["pointermove", "pointerdown", "pointerup"], 89 "Click on object should result in the correct sequence of pointer events"); 90 assert_array_equals(receivedEvents.filter(isMouseEvent), ["mousemove", "mousedown", "mouseup"], 91 "Click on object should result in the correct sequence of mouse events"); 92 assert_true(arePointerEventsBeforeCompatMouseEvents(receivedEvents), 93 "Click on object should result in the correct sequence of events: " + receivedEvents); 94 }, "Normal click event sequence within object"); 95 96 promise_test(async() => { 97 receivedEvents = []; 98 99 await new test_driver.Actions() 100 .pointerMove(Math.ceil(rect.left+5), Math.ceil(rect.top+5)) 101 .pointerDown() 102 .pointerMove(Math.ceil(rect.left-5), Math.ceil(rect.top-5)) 103 .pointerUp() 104 .send() 105 .then(() => clickInTarget("mouse", done)); 106 await resolveWhen(() => done_clicked === 2); 107 108 assert_array_equals(receivedEvents.filter(isPointerEvent), ["pointermove", "pointerdown", "pointermove", "pointerup"], 109 "Drag from object should result in the correct sequence of pointer events"); 110 assert_array_equals(receivedEvents.filter(isMouseEvent), ["mousemove", "mousedown", "mousemove", "mouseup"], 111 "Drag from object should result in the correct sequence of mouse events"); 112 assert_true(arePointerEventsBeforeCompatMouseEvents(receivedEvents), 113 "Drag from object should result in the correct sequence of events: " + receivedEvents); 114 115 }, "Click and drag outside of object event sequence"); 116 } 117 </script>