OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <style> |
| 3 * { |
| 4 padding: 0; |
| 5 margin: 0; |
| 6 } |
| 7 |
| 8 ::-webkit-scrollbar { |
| 9 display: none; |
| 10 } |
| 11 |
| 12 html, body { |
| 13 height: 400px; |
| 14 width: 400px; |
| 15 background: #eee; |
| 16 padding: 0; |
| 17 margin: 0; |
| 18 } |
| 19 |
| 20 div#child { |
| 21 position: absolute; |
| 22 top : 0; |
| 23 left: 400px; |
| 24 width: 400px; |
| 25 height: 10000px; |
| 26 background: #ddd; |
| 27 } |
| 28 |
| 29 </style> |
| 30 |
| 31 <body> |
| 32 <div id='child'></div> |
| 33 <div id='console'></div> |
| 34 </body> |
| 35 |
| 36 <script src="../../resources/js-test.js"></script> |
| 37 <script> |
| 38 jsTestIsAsync = true; |
| 39 setPrintTestResultsLazily(); |
| 40 description('Test that wheel and mouse events are dispatched to document ' + |
| 41 'and window even if they do not hit any element in the page.'); |
| 42 |
| 43 onload = function() { |
| 44 if (!window.eventSender) { |
| 45 testFailed('window.eventSender is required for this test.'); |
| 46 return; |
| 47 } |
| 48 |
| 49 window.receivers = new Map(); |
| 50 var eventTypes = ['wheel', 'click', 'mousedown', 'mouseup']; |
| 51 var eventTargets = [window, document, document.body, document.getElementById
('child')]; |
| 52 |
| 53 for (var eventType of eventTypes) { |
| 54 window.receivers[eventType] = []; |
| 55 for (var target of eventTargets) { |
| 56 target.addEventListener(eventType, registerEvent.bind(target)); |
| 57 } |
| 58 } |
| 59 |
| 60 debug('outside body, inside element'); // received by element, body, doc, wi
ndow |
| 61 generateEventsAndVerify(500, 500, [document.getElementById('child'), documen
t.body, document, window]); |
| 62 debug('inside body, outside element'); // received by body, doc, window |
| 63 generateEventsAndVerify(10, 10, [document.body, document, window]); |
| 64 debug('outside body, outside element, inside frame'); // received by doc, wi
ndow |
| 65 generateEventsAndVerify(10, 500, [document, window]); |
| 66 debug('outside body, outside element, outside frame'); // received by doc, w
indow |
| 67 generateEventsAndVerify(10, 2000, [document, window]); |
| 68 |
| 69 finishJSTest(); |
| 70 |
| 71 function registerEvent(e) { |
| 72 window.receivers[e.type].push(this); |
| 73 } |
| 74 |
| 75 function generateEventsAndVerify(x, y, expectedReceivers) { |
| 76 eventSender.mouseMoveTo(x, y); |
| 77 eventSender.mouseDown(); |
| 78 verifyReceivers('mousedown', expectedReceivers); |
| 79 |
| 80 eventSender.mouseUp(); |
| 81 verifyReceivers('mouseup', expectedReceivers); |
| 82 verifyReceivers('click', expectedReceivers); |
| 83 |
| 84 eventSender.mouseScrollBy(10, 10); |
| 85 verifyReceivers('wheel', expectedReceivers); |
| 86 } |
| 87 |
| 88 function verifyReceivers(eventType, expectedReceivers) { |
| 89 debug('eventType: ' + eventType); |
| 90 window.actualReceivers = window.receivers[eventType]; |
| 91 shouldBeEqualToString('objectsToString(actualReceivers)', objectsToStrin
g(expectedReceivers)); |
| 92 |
| 93 window.receivers[eventType] = []; |
| 94 } |
| 95 } |
| 96 |
| 97 function objectsToString(objects) { |
| 98 return String(objects.map(function(o) {return o.constructor.name;})); |
| 99 } |
| 100 |
| 101 </script> |
OLD | NEW |