| Index: LayoutTests/fast/events/dispatch-mouse-events-to-window-always.html
|
| diff --git a/LayoutTests/fast/events/dispatch-mouse-events-to-window-always.html b/LayoutTests/fast/events/dispatch-mouse-events-to-window-always.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9f4b6ee719aa9207fce3318752e89f219a75f896
|
| --- /dev/null
|
| +++ b/LayoutTests/fast/events/dispatch-mouse-events-to-window-always.html
|
| @@ -0,0 +1,101 @@
|
| +<!DOCTYPE html>
|
| +<style>
|
| +* {
|
| + padding: 0;
|
| + margin: 0;
|
| +}
|
| +
|
| +::-webkit-scrollbar {
|
| + display: none;
|
| +}
|
| +
|
| +html, body {
|
| + height: 400px;
|
| + width: 400px;
|
| + background: #eee;
|
| + padding: 0;
|
| + margin: 0;
|
| +}
|
| +
|
| +div#child {
|
| + position: absolute;
|
| + top : 0;
|
| + left: 400px;
|
| + width: 400px;
|
| + height: 10000px;
|
| + background: #ddd;
|
| +}
|
| +
|
| +</style>
|
| +
|
| +<body>
|
| + <div id='child'></div>
|
| + <div id='console'></div>
|
| +</body>
|
| +
|
| +<script src="../../resources/js-test.js"></script>
|
| +<script>
|
| +jsTestIsAsync = true;
|
| +setPrintTestResultsLazily();
|
| +description('Test that wheel and mouse events are dispatched to document ' +
|
| + 'and window even if they do not hit any element in the page.');
|
| +
|
| +onload = function() {
|
| + if (!window.eventSender) {
|
| + testFailed('window.eventSender is required for this test.');
|
| + return;
|
| + }
|
| +
|
| + window.receivers = new Map();
|
| + var eventTypes = ['wheel', 'click', 'mousedown', 'mouseup'];
|
| + var eventTargets = [window, document, document.body, document.getElementById('child')];
|
| +
|
| + for (var eventType of eventTypes) {
|
| + window.receivers[eventType] = [];
|
| + for (var target of eventTargets) {
|
| + target.addEventListener(eventType, registerEvent.bind(target));
|
| + }
|
| + }
|
| +
|
| + debug('outside body, inside element'); // received by element, body, doc, window
|
| + generateEventsAndVerify(500, 500, [document.getElementById('child'), document.body, document, window]);
|
| + debug('inside body, outside element'); // received by body, doc, window
|
| + generateEventsAndVerify(10, 10, [document.body, document, window]);
|
| + debug('outside body, outside element, inside frame'); // received by doc, window
|
| + generateEventsAndVerify(10, 500, [document, window]);
|
| + debug('outside body, outside element, outside frame'); // received by doc, window
|
| + generateEventsAndVerify(10, 2000, [document, window]);
|
| +
|
| + finishJSTest();
|
| +
|
| + function registerEvent(e) {
|
| + window.receivers[e.type].push(this);
|
| + }
|
| +
|
| + function generateEventsAndVerify(x, y, expectedReceivers) {
|
| + eventSender.mouseMoveTo(x, y);
|
| + eventSender.mouseDown();
|
| + verifyReceivers('mousedown', expectedReceivers);
|
| +
|
| + eventSender.mouseUp();
|
| + verifyReceivers('mouseup', expectedReceivers);
|
| + verifyReceivers('click', expectedReceivers);
|
| +
|
| + eventSender.mouseScrollBy(10, 10);
|
| + verifyReceivers('wheel', expectedReceivers);
|
| + }
|
| +
|
| + function verifyReceivers(eventType, expectedReceivers) {
|
| + debug('eventType: ' + eventType);
|
| + window.actualReceivers = window.receivers[eventType];
|
| + shouldBeEqualToString('objectsToString(actualReceivers)', objectsToString(expectedReceivers));
|
| +
|
| + window.receivers[eventType] = [];
|
| + }
|
| +}
|
| +
|
| +function objectsToString(objects) {
|
| + return String(objects.map(function(o) {return o.constructor.name;}));
|
| +}
|
| +
|
| +</script>
|
|
|