| OLD | NEW |
| 1 <!DOCTYPE HTML> | 1 <!DOCTYPE HTML> |
| 2 <script src="../../../resources/js-test.js"></script> | 2 <script src="../../../resources/js-test.js"></script> |
| 3 <style> | 3 <style> |
| 4 div.box { | 4 div.box { |
| 5 margin: 5px; | 5 margin: 5px; |
| 6 padding: 20px; | 6 padding: 20px; |
| 7 float: left; | 7 float: left; |
| 8 } | 8 } |
| 9 #grey { | 9 #grey { |
| 10 width: 50px; | 10 width: 50px; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 var y1 = rect.top + 5; | 34 var y1 = rect.top + 5; |
| 35 | 35 |
| 36 var rect = document.getElementById("grey").getBoundingClientRect(); | 36 var rect = document.getElementById("grey").getBoundingClientRect(); |
| 37 var x2 = rect.left + 5; | 37 var x2 = rect.left + 5; |
| 38 var y2 = rect.top + 5; | 38 var y2 = rect.top + 5; |
| 39 | 39 |
| 40 var rect = document.getElementById("blue").getBoundingClientRect(); | 40 var rect = document.getElementById("blue").getBoundingClientRect(); |
| 41 var x3 = rect.left + 5; | 41 var x3 = rect.left + 5; |
| 42 var y3 = rect.top + 5; | 42 var y3 = rect.top + 5; |
| 43 | 43 |
| 44 var lastPointerEvent = null; |
| 45 var pointereventProperties = [ |
| 46 "clientX", |
| 47 "clientY", |
| 48 "layerX", |
| 49 "layerY", |
| 50 "movementX", |
| 51 "movementY", |
| 52 "offsetX", |
| 53 "offsetY", |
| 54 "pageX", |
| 55 "pageY", |
| 56 "screenX", |
| 57 "screenY", |
| 58 "x", |
| 59 "y", |
| 60 "button", |
| 61 "buttons", |
| 62 "pressure", |
| 63 "tiltX", |
| 64 "tiltY", |
| 65 "width", |
| 66 "height" |
| 67 ]; |
| 68 |
| 69 function checkPointerCaptureProperties(lastPointerEvent, currentPointerEvent) { |
| 70 if (lastPointerEvent == null) |
| 71 return false; |
| 72 |
| 73 var isImmediateRelease = (lastPointerEvent.type == 'pointerup') && |
| 74 (currentPointerEvent.type == 'lostpointercapture'); |
| 75 var isDelayedCapture = lastPointerEvent.type.includes('pointercapture'); |
| 76 |
| 77 if (!isImmediateRelease && !isDelayedCapture) |
| 78 return false; |
| 79 |
| 80 for (var i = 0; i< pointereventProperties. length; i++) { |
| 81 var property = pointereventProperties[i]; |
| 82 if (lastPointerEvent[property] !== currentPointerEvent[property]) { |
| 83 debug("Capture pointer event attributes are incorrect!"); |
| 84 return true; |
| 85 } |
| 86 } |
| 87 |
| 88 debug("Capture pointer event attributes are correct!"); |
| 89 return true |
| 90 } |
| 91 |
| 44 function init() { | 92 function init() { |
| 45 var eventList = ["mouseenter", "mouseleave", "mouseover", "mouseout", "mousemo
ve", "mousedown", "mouseup", | 93 var eventList = ["mouseenter", "mouseleave", "mouseover", "mouseout", "mousemo
ve", "mousedown", "mouseup", |
| 46 "pointerenter", "pointerleave", "pointerover", "pointerout",
"pointermove", "pointerdown", "pointerup", | 94 "pointerenter", "pointerleave", "pointerover", "pointerout",
"pointermove", "pointerdown", "pointerup", |
| 47 "gotpointercapture", "lostpointercapture"]; | 95 "gotpointercapture", "lostpointercapture"]; |
| 48 | 96 |
| 49 document.addEventListener("lostpointercapture", function(event) { | 97 document.addEventListener("lostpointercapture", function(event) { |
| 50 if (event.eventPhase == Event.AT_TARGET) { | 98 if (event.eventPhase == Event.AT_TARGET) { |
| 51 debug("document received " + event.type); | 99 debug("document received " + event.type); |
| 100 lastPointerEvent = event; |
| 52 } | 101 } |
| 53 }); | 102 }); |
| 54 ["grey", "green", "blue"].forEach(function(id) { | 103 ["grey", "green", "blue"].forEach(function(id) { |
| 55 var targetDiv = document.getElementById(id); | 104 var targetDiv = document.getElementById(id); |
| 56 eventList.forEach(function(eventName) { | 105 eventList.forEach(function(eventName) { |
| 57 targetDiv.addEventListener(eventName, function(event) { | 106 targetDiv.addEventListener(eventName, function(event) { |
| 58 if (event.eventPhase == Event.AT_TARGET) { | 107 if (event.eventPhase == Event.AT_TARGET) { |
| 59 debug(id + " received " + event.type); | 108 debug(id + " received " + event.type); |
| 60 if (id == "green" && event.type == "pointerdown") { | 109 if (id == "green" && event.type == "pointerdown") { |
| 61 debug(" **** Set Pointer Capture ***** "); | 110 debug(" **** Set Pointer Capture ***** "); |
| 62 targetDiv.setPointerCapture(event.pointerId); | 111 targetDiv.setPointerCapture(event.pointerId); |
| 63 } | 112 } |
| 64 if (id == "green" && event.type == "pointermove") { | 113 if (id == "green" && event.type == "pointermove") { |
| 65 if (explicitRelease && pointerMoveCount++ > 3) { | 114 if (explicitRelease && pointerMoveCount++ > 3) { |
| 66 debug(" **** Release Pointer Capture ***** "); | 115 debug(" **** Release Pointer Capture ***** "); |
| 67 targetDiv.releasePointerCapture(event.pointerId); | 116 targetDiv.releasePointerCapture(event.pointerId); |
| 68 explicitRelease = false; | 117 explicitRelease = false; |
| 69 } | 118 } |
| 70 if (removeElement && pointerMoveCount++ > 3) { | 119 if (removeElement && pointerMoveCount++ > 3) { |
| 71 debug(" **** Remove Element ***** "); | 120 debug(" **** Remove Element ***** "); |
| 72 targetDiv.parentNode.removeChild(targetDiv); | 121 targetDiv.parentNode.removeChild(targetDiv); |
| 73 removeElement = false; | 122 removeElement = false; |
| 74 } | 123 } |
| 75 } | 124 } |
| 125 if (checkPointerCaptureProperties(lastPointerEvent, event)) { |
| 126 lastPointerEvent = null; |
| 127 } else { |
| 128 if (event.type.includes('pointer')) |
| 129 lastPointerEvent = event; |
| 130 } |
| 76 } | 131 } |
| 77 }); | 132 }); |
| 78 }); | 133 }); |
| 79 }); | 134 }); |
| 80 } | 135 } |
| 81 | 136 |
| 82 function testScenario() { | 137 function testScenario() { |
| 83 debug(" **** Move to green box & mouse press & jiggle ***** "); | 138 debug(" **** Move to green box & mouse press & jiggle ***** "); |
| 84 eventSender.mouseMoveTo(x1, y1); | 139 eventSender.mouseMoveTo(x1, y1); |
| 85 eventSender.mouseDown(1); | 140 eventSender.mouseDown(1); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 removeElement = false; | 196 removeElement = false; |
| 142 } | 197 } |
| 143 | 198 |
| 144 init(); | 199 init(); |
| 145 if (window.eventSender) | 200 if (window.eventSender) |
| 146 runTests(); | 201 runTests(); |
| 147 else | 202 else |
| 148 debug("This test requires eventSender"); | 203 debug("This test requires eventSender"); |
| 149 | 204 |
| 150 </script> | 205 </script> |
| OLD | NEW |