Chromium Code Reviews| 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 var isImplicitReleaseOutside = implicitReleaseOutside && | |
| 77 (currentPointerEvent.type == 'lostpointercaptu re'); | |
| 78 | |
| 79 if (!isImmediateRelease && !isDelayedCapture && !isImplicitReleaseOutside) | |
| 80 return false; | |
|
mustaq
2016/08/04 21:43:05
Can't it be simpler? Why not return false for all
Navid Zolghadr
2016/08/05 14:26:08
I cannot imagine a way to make it simpler. Note th
mustaq
2016/08/05 15:51:22
Does the following miss any cases?
For any curren
Navid Zolghadr
2016/08/05 17:08:03
I removed one of the cases as we discussed offline
| |
| 81 | |
| 82 for (var i = 0; i< pointereventProperties. length; i++) { | |
| 83 var property = pointereventProperties[i]; | |
| 84 if (lastPointerEvent[property] !== currentPointerEvent[property]) { | |
| 85 debug("Capture pointer event attributes are incorrect!"); | |
| 86 return true; | |
| 87 } | |
| 88 } | |
| 89 | |
| 90 debug("Capture pointer event attributes are correct!"); | |
| 91 return true | |
| 92 } | |
| 93 | |
| 44 function init() { | 94 function init() { |
| 45 var eventList = ["mouseenter", "mouseleave", "mouseover", "mouseout", "mousemo ve", "mousedown", "mouseup", | 95 var eventList = ["mouseenter", "mouseleave", "mouseover", "mouseout", "mousemo ve", "mousedown", "mouseup", |
| 46 "pointerenter", "pointerleave", "pointerover", "pointerout", "pointermove", "pointerdown", "pointerup", | 96 "pointerenter", "pointerleave", "pointerover", "pointerout", "pointermove", "pointerdown", "pointerup", |
| 47 "gotpointercapture", "lostpointercapture"]; | 97 "gotpointercapture", "lostpointercapture"]; |
| 48 | 98 |
| 49 document.addEventListener("lostpointercapture", function(event) { | 99 document.addEventListener("lostpointercapture", function(event) { |
| 50 if (event.eventPhase == Event.AT_TARGET) { | 100 if (event.eventPhase == Event.AT_TARGET) { |
| 51 debug("document received " + event.type); | 101 debug("document received " + event.type); |
| 102 lastPointerEvent = event; | |
| 52 } | 103 } |
| 53 }); | 104 }); |
| 54 ["grey", "green", "blue"].forEach(function(id) { | 105 ["grey", "green", "blue"].forEach(function(id) { |
| 55 var targetDiv = document.getElementById(id); | 106 var targetDiv = document.getElementById(id); |
| 56 eventList.forEach(function(eventName) { | 107 eventList.forEach(function(eventName) { |
| 57 targetDiv.addEventListener(eventName, function(event) { | 108 targetDiv.addEventListener(eventName, function(event) { |
| 58 if (event.eventPhase == Event.AT_TARGET) { | 109 if (event.eventPhase == Event.AT_TARGET) { |
| 59 debug(id + " received " + event.type); | 110 debug(id + " received " + event.type); |
| 60 if (id == "green" && event.type == "pointerdown") { | 111 if (id == "green" && event.type == "pointerdown") { |
| 61 debug(" **** Set Pointer Capture ***** "); | 112 debug(" **** Set Pointer Capture ***** "); |
| 62 targetDiv.setPointerCapture(event.pointerId); | 113 targetDiv.setPointerCapture(event.pointerId); |
| 63 } | 114 } |
| 64 if (id == "green" && event.type == "pointermove") { | 115 if (id == "green" && event.type == "pointermove") { |
| 65 if (explicitRelease && pointerMoveCount++ > 3) { | 116 if (explicitRelease && pointerMoveCount++ > 3) { |
| 66 debug(" **** Release Pointer Capture ***** "); | 117 debug(" **** Release Pointer Capture ***** "); |
| 67 targetDiv.releasePointerCapture(event.pointerId); | 118 targetDiv.releasePointerCapture(event.pointerId); |
| 68 explicitRelease = false; | 119 explicitRelease = false; |
| 69 } | 120 } |
| 70 if (removeElement && pointerMoveCount++ > 3) { | 121 if (removeElement && pointerMoveCount++ > 3) { |
| 71 debug(" **** Remove Element ***** "); | 122 debug(" **** Remove Element ***** "); |
| 72 targetDiv.parentNode.removeChild(targetDiv); | 123 targetDiv.parentNode.removeChild(targetDiv); |
| 73 removeElement = false; | 124 removeElement = false; |
| 74 } | 125 } |
| 75 } | 126 } |
| 127 if (checkPointerCaptureProperties(lastPointerEvent, event)) { | |
| 128 lastPointerEvent = null; | |
| 129 } else { | |
| 130 if (event.type.includes('pointer')) | |
| 131 lastPointerEvent = event; | |
| 132 } | |
| 76 } | 133 } |
| 77 }); | 134 }); |
| 78 }); | 135 }); |
| 79 }); | 136 }); |
| 80 } | 137 } |
| 81 | 138 |
| 82 function testScenario() { | 139 function testScenario() { |
| 83 debug(" **** Move to green box & mouse press & jiggle ***** "); | 140 debug(" **** Move to green box & mouse press & jiggle ***** "); |
| 84 eventSender.mouseMoveTo(x1, y1); | 141 eventSender.mouseMoveTo(x1, y1); |
| 85 eventSender.mouseDown(1); | 142 eventSender.mouseDown(1); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 removeElement = false; | 198 removeElement = false; |
| 142 } | 199 } |
| 143 | 200 |
| 144 init(); | 201 init(); |
| 145 if (window.eventSender) | 202 if (window.eventSender) |
| 146 runTests(); | 203 runTests(); |
| 147 else | 204 else |
| 148 debug("This test requires eventSender"); | 205 debug("This test requires eventSender"); |
| 149 | 206 |
| 150 </script> | 207 </script> |
| OLD | NEW |