1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/layout/base/tests/bug968148_inner.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,295 @@ 1.4 +<!DOCTYPE HTML> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id=968148 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug 968148</title> 1.11 + <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.12 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 1.13 + <style> 1.14 + .test { 1.15 + width: 20px; 1.16 + height: 20px; 1.17 + border: 1px solid black; 1.18 + -moz-user-select: none; 1.19 + } 1.20 + </style> 1.21 +</head> 1.22 +<body> 1.23 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=968148">Mozilla Bug 968148</a> 1.24 +<p id="display"></p> 1.25 +<div id="content" style="display: none"> 1.26 +</div> 1.27 +<pre id="test"> 1.28 +<script type="application/javascript"> 1.29 + 1.30 +/** 1.31 + * Test for Bug 968148, test orignally copied from test_bug582771.html. 1.32 + * Mouse functionality converted to pointer and all steps duplicated in order to run them in parallel for two different pointer Id's 1.33 +**/ 1.34 + 1.35 +function ok(condition, msg) { 1.36 + parent.ok(condition, msg); 1.37 +} 1.38 + 1.39 +function is(a, b, msg) { 1.40 + parent.is(a, b, msg); 1.41 +} 1.42 + 1.43 +var test1d1; 1.44 +var test1d2; 1.45 +var test2d1; 1.46 +var test2d2; 1.47 +var test1d1pointermovecount = 0; 1.48 +var test1d2pointermovecount = 0; 1.49 +var test2d1pointermovecount = 0; 1.50 +var test2d2pointermovecount = 0; 1.51 + 1.52 +var test1d1pointerlostcapture = 0; 1.53 +var test1d2pointerlostcapture = 0; 1.54 +var test2d1pointerlostcapture = 0; 1.55 +var test2d2pointerlostcapture = 0; 1.56 +var test1d1pointergotcapture = 0; 1.57 +var test1d2pointergotcapture = 0; 1.58 +var test2d1pointergotcapture = 0; 1.59 +var test2d2pointergotcapture = 0; 1.60 +var test1PointerId = 1; 1.61 +var test2PointerId = 2; 1.62 + 1.63 +function sendPointerMove(el, id) { 1.64 + var rect = el.getBoundingClientRect(); 1.65 + var utils = SpecialPowers.getDOMWindowUtils(window); 1.66 + utils.sendPointerEvent('pointermove', rect.left + 5, rect.top + 5, 0, 0, 0, false, 0, SpecialPowers.Ci.nsIDOMMouseEvent.MOZ_SOURCE_TOUCH, id); 1.67 +} 1.68 + 1.69 +function sendPointerDown(el, id) { 1.70 + var rect = el.getBoundingClientRect(); 1.71 + var utils = SpecialPowers.getDOMWindowUtils(window); 1.72 + utils.sendPointerEvent('pointerdown', rect.left + 5, rect.top + 5, 0, 1, 0, false, 0, SpecialPowers.Ci.nsIDOMMouseEvent.MOZ_SOURCE_TOUCH, id); 1.73 +} 1.74 + 1.75 +function sendPointerUp(el, id) { 1.76 + var rect = el.getBoundingClientRect(); 1.77 + var utils = SpecialPowers.getDOMWindowUtils(window); 1.78 + utils.sendPointerEvent('pointerup', rect.left + 5, rect.top + 5, 0, 1, 0, false, 0, SpecialPowers.Ci.nsIDOMMouseEvent.MOZ_SOURCE_TOUCH, id); 1.79 +} 1.80 + 1.81 +function log(s) { 1.82 + document.getElementById("l").textContent += s + "\n"; 1.83 +} 1.84 + 1.85 +function test1d2Listener(e) { 1.86 + log(e.type + ", " + e.target.id); 1.87 + is(e.target, test1d2, "test1d2 should have got pointermove."); 1.88 + ++test1d2pointermovecount; 1.89 +} 1.90 + 1.91 +function test2d2Listener(e) { 1.92 + log(e.type + ", " + e.target.id); 1.93 + is(e.target, test2d2, "test2d2 should have got pointermove."); 1.94 + ++test2d2pointermovecount; 1.95 +} 1.96 + 1.97 +function test1d1DownListener(e) { 1.98 + log(e.type + ", " + e.target.id); 1.99 + test1d1.setPointerCapture(e.pointerId); 1.100 +} 1.101 + 1.102 +function test1d1MoveListener(e) { 1.103 + log(e.type + ", " + e.target.id); 1.104 + test1d2.setPointerCapture(e.pointerId); 1.105 +} 1.106 + 1.107 +function test2d1DownListener(e) { 1.108 + log(e.type + ", " + e.target.id); 1.109 + test2d1.setPointerCapture(e.pointerId); 1.110 +} 1.111 + 1.112 +function test2d1MoveListener(e) { 1.113 + log(e.type + ", " + e.target.id); 1.114 + test2d2.setPointerCapture(e.pointerId); 1.115 +} 1.116 + 1.117 +function test1d1PointerGotCapture(e) { 1.118 + log(e.type + ", " + e.target.id); 1.119 + ++test1d1pointergotcapture; 1.120 +} 1.121 + 1.122 +function test1d1PointerLostCapture(e) { 1.123 + log(e.type + ", " + e.target.id); 1.124 + ++test1d1pointerlostcapture; 1.125 +} 1.126 + 1.127 +function test2d1PointerGotCapture(e) { 1.128 + log(e.type + ", " + e.target.id); 1.129 + ++test2d1pointergotcapture; 1.130 +} 1.131 + 1.132 +function test2d1PointerLostCapture(e) { 1.133 + log(e.type + ", " + e.target.id); 1.134 + ++test2d1pointerlostcapture; 1.135 +} 1.136 + 1.137 +function test1d2PointerGotCapture(e) { 1.138 + log(e.type + ", " + e.target.id); 1.139 + ++test1d2pointergotcapture; 1.140 +} 1.141 + 1.142 +function test1d2PointerLostCapture(e) { 1.143 + log(e.type + ", " + e.target.id); 1.144 + ++test1d2pointerlostcapture; 1.145 +} 1.146 + 1.147 +function test2d2PointerGotCapture(e) { 1.148 + log(e.type + ", " + e.target.id); 1.149 + ++test2d2pointergotcapture; 1.150 +} 1.151 + 1.152 +function test2d2PointerLostCapture(e) { 1.153 + log(e.type + ", " + e.target.id); 1.154 + ++test2d2pointerlostcapture; 1.155 +} 1.156 + 1.157 +function test1d1PointerMoveListener(e) { 1.158 + log(e.type + ", " + e.target.id); 1.159 + ++test1d1pointermovecount; 1.160 +} 1.161 + 1.162 +function test2d1PointerMoveListener(e) { 1.163 + log(e.type + ", " + e.target.id); 1.164 + ++test2d1pointermovecount; 1.165 +} 1.166 + 1.167 +function runTests() { 1.168 + test1d1 = document.getElementById("test1d1"); 1.169 + test1d2 = document.getElementById("test1d2"); 1.170 + test2d1 = document.getElementById("test2d1"); 1.171 + test2d2 = document.getElementById("test2d2"); 1.172 + 1.173 + test1d2.addEventListener("pointermove", test1d2Listener, true); 1.174 + test2d2.addEventListener("pointermove", test2d2Listener, true); 1.175 + 1.176 + test1d1.addEventListener("gotpointercapture", test1d1PointerGotCapture, true); 1.177 + test1d1.addEventListener("lostpointercapture", test1d1PointerLostCapture, true); 1.178 + 1.179 + test2d1.addEventListener("gotpointercapture", test2d1PointerGotCapture, true); 1.180 + test2d1.addEventListener("lostpointercapture", test2d1PointerLostCapture, true); 1.181 + 1.182 + test1d2.addEventListener("gotpointercapture", test1d2PointerGotCapture, true); 1.183 + test1d2.addEventListener("lostpointercapture", test1d2PointerLostCapture, true); 1.184 + 1.185 + test2d2.addEventListener("gotpointercapture", test2d2PointerGotCapture, true); 1.186 + test2d2.addEventListener("lostpointercapture", test2d2PointerLostCapture, true); 1.187 + 1.188 + document.body.offsetLeft; 1.189 + sendPointerMove(test1d2, test1PointerId); 1.190 + sendPointerMove(test2d2, test2PointerId); 1.191 + is(test1d2pointermovecount, 1, "Should have got pointermove"); 1.192 + is(test2d2pointermovecount, 1, "Should have got pointermove"); 1.193 + 1.194 + // This shouldn't enable capturing, since we're not in a right kind of 1.195 + // event listener. 1.196 + sendPointerDown(test1d1, test1PointerId); 1.197 + sendPointerDown(test2d1, test2PointerId); 1.198 + 1.199 + sendPointerMove(test1d2, test1PointerId); 1.200 + sendPointerMove(test2d2, test2PointerId); 1.201 + 1.202 + sendPointerUp(test1d1, test1PointerId); 1.203 + sendPointerUp(test2d1, test2PointerId); 1.204 + 1.205 + is(test1d2pointermovecount, 2, "Should have got pointermove"); 1.206 + is(test2d2pointermovecount, 2, "Should have got pointermove"); 1.207 + 1.208 + test1d1.addEventListener("pointerdown", test1d1DownListener, true); 1.209 + test1d1.addEventListener("pointermove", test1d1PointerMoveListener, true); 1.210 + test2d1.addEventListener("pointerdown", test2d1DownListener, true); 1.211 + test2d1.addEventListener("pointermove", test2d1PointerMoveListener, true); 1.212 + 1.213 + sendPointerDown(test1d1, test1PointerId); 1.214 + sendPointerDown(test2d1, test2PointerId); 1.215 + sendPointerMove(test1d2, test1PointerId); 1.216 + sendPointerMove(test2d2, test2PointerId); 1.217 + is(test1d2pointermovecount, 2, "Shouldn't have got pointermove"); 1.218 + is(test1d1pointermovecount, 1, "Should have got pointermove"); 1.219 + is(test1d1pointergotcapture, 1, "Should have got pointergotcapture"); 1.220 + 1.221 + is(test2d2pointermovecount, 2, "Shouldn't have got pointermove"); 1.222 + is(test2d1pointermovecount, 1, "Should have got pointermove"); 1.223 + is(test2d1pointergotcapture, 1, "Should have got pointergotcapture"); 1.224 + 1.225 + sendPointerUp(test1d1, test1PointerId); 1.226 + sendPointerUp(test2d1, test2PointerId); 1.227 + test1d1.removeEventListener("pointerdown", test1d1DownListener, true); 1.228 + test1d1.removeEventListener("pointermove", test1d1PointerMoveListener, true); 1.229 + test2d1.removeEventListener("pointerdown", test2d1DownListener, true); 1.230 + test2d1.removeEventListener("pointermove", test2d1PointerMoveListener, true); 1.231 + 1.232 + // Nothing should be capturing the event. 1.233 + sendPointerMove(test1d2, test1PointerId); 1.234 + sendPointerMove(test2d2, test2PointerId); 1.235 + 1.236 + is(test1d2pointermovecount, 3, "Should have got pointermove"); 1.237 + is(test1d1pointerlostcapture, 1, "Should have got pointerlostcapture"); 1.238 + is(test2d2pointermovecount, 3, "Should have got pointermove"); 1.239 + is(test2d1pointerlostcapture, 1, "Should have got pointerlostcapture"); 1.240 + 1.241 + test1d1.addEventListener("pointermove", test1d1MoveListener, true); 1.242 + test2d1.addEventListener("pointermove", test2d1MoveListener, true); 1.243 + 1.244 + sendPointerDown(test1d1, test1PointerId); 1.245 + sendPointerDown(test2d1, test2PointerId); 1.246 + 1.247 + sendPointerMove(test1d1, test1PointerId); // This should call setPointerCapture to test1d2! 1.248 + sendPointerMove(test2d1, test2PointerId); // This should call setPointerCapture to test2d2! 1.249 + 1.250 + test1d1.removeEventListener("pointermove", test1d1MoveListener, true); 1.251 + test1d1.addEventListener("pointermove", test1d1PointerMoveListener, true); 1.252 + 1.253 + test2d1.removeEventListener("pointermove", test2d1MoveListener, true); 1.254 + test2d1.addEventListener("pointermove", test2d1PointerMoveListener, true); 1.255 + 1.256 + sendPointerMove(test1d1, test1PointerId); // This should send pointer event to test1d2. 1.257 + sendPointerMove(test2d1, test2PointerId); // This should send pointer event to test2d2. 1.258 + 1.259 + is(test1d1pointermovecount, 1, "Shouldn't have got pointermove"); 1.260 + is(test1d2pointermovecount, 4, "Should have got pointermove"); 1.261 + is(test1d2pointergotcapture, 1, "Should have got pointergotcapture"); 1.262 + 1.263 + is(test2d1pointermovecount, 1, "Shouldn't have got pointermove"); 1.264 + is(test2d2pointermovecount, 4, "Should have got pointermove"); 1.265 + is(test2d2pointergotcapture, 1, "Should have got pointergotcapture"); 1.266 + 1.267 + sendPointerUp(test1d1, test1PointerId); 1.268 + sendPointerUp(test2d1, test2PointerId); 1.269 + 1.270 + finishTest(); 1.271 +} 1.272 + 1.273 +function finishTest() { 1.274 + // Let window.onerror have a chance to fire 1.275 + setTimeout(function() { 1.276 + setTimeout(function() { 1.277 + window.parent.postMessage("SimpleTest.finish();", "*"); 1.278 + }, 0); 1.279 + }, 0); 1.280 +} 1.281 + 1.282 +window.onload = function () { 1.283 + SpecialPowers.pushPrefEnv({ 1.284 + "set": [ 1.285 + ["dom.w3c_pointer_events.enabled", true], 1.286 + ] 1.287 + }, runTests); 1.288 +} 1.289 + 1.290 +SimpleTest.waitForExplicitFinish(); 1.291 + 1.292 +</script> 1.293 +</pre> 1.294 +<div class="test" id="test1d1"> </div><br><div class="test" id="test1d2"> </div> 1.295 +<div class="test" id="test2d1"> </div><br><div class="test" id="test2d2"> </div> 1.296 +<pre id="l"></pre> 1.297 +</body> 1.298 +</html>