OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <style> | 4 <style> |
5 #inert-div { | 5 #inert-div { |
6 height: 100px; | 6 height: 100px; |
7 width: 100px; | 7 width: 100px; |
8 background: blue; | 8 background: blue; |
9 } | 9 } |
10 | 10 |
(...skipping 22 matching lines...) Expand all Loading... |
33 description('Test for bug 110952. Ensure that mouse events are not ' + | 33 description('Test for bug 110952. Ensure that mouse events are not ' + |
34 'dispatched to an inert node. To test manually, move the mouse ' + | 34 'dispatched to an inert node. To test manually, move the mouse ' + |
35 'to the blue box, click, and then move the mouse outside. Then ' + | 35 'to the blue box, click, and then move the mouse outside. Then ' + |
36 'repeat for the red box. The test succeeds if both boxes turn ' + | 36 'repeat for the red box. The test succeeds if both boxes turn ' + |
37 'green.'); | 37 'green.'); |
38 | 38 |
39 function clickOn(element) | 39 function clickOn(element) |
40 { | 40 { |
41 if (!window.eventSender) | 41 if (!window.eventSender) |
42 return; | 42 return; |
43 | 43 var rect = element.getBoundingClientRect(); |
44 var absoluteTop = 0; | 44 eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height /
2); |
45 var absoluteLeft = 0; | |
46 for (var parentNode = element; parentNode; parentNode = parentNode.offsetPar
ent) { | |
47 absoluteLeft += parentNode.offsetLeft; | |
48 absoluteTop += parentNode.offsetTop; | |
49 } | |
50 | |
51 var x = absoluteLeft + element.offsetWidth / 2; | |
52 var y = absoluteTop + element.offsetHeight / 2; | |
53 eventSender.mouseMoveTo(x, y); | |
54 eventSender.mouseDown(); | 45 eventSender.mouseDown(); |
55 eventSender.mouseUp(); | 46 eventSender.mouseUp(); |
56 eventSender.mouseMoveTo(0, 0); | 47 eventSender.mouseMoveTo(0, 0); |
57 } | 48 } |
58 | 49 |
59 if (window.testRunner) | 50 if (window.testRunner) |
60 testRunner.dumpAsText(); | 51 testRunner.dumpAsText(); |
61 | 52 |
62 dialog.showModal(); | 53 dialog.showModal(); |
63 | 54 |
| 55 inertDivHandledEvent = false; |
64 inertDiv = document.getElementById('inert-div'); | 56 inertDiv = document.getElementById('inert-div'); |
65 inertDiv.firedOn = false; | |
66 eventFiredOnInertNode = function(event) { | 57 eventFiredOnInertNode = function(event) { |
67 inertDiv.firedOn = true; | 58 inertDivHandledEvent = true; |
68 inertDiv.style.backgroundColor = 'red'; | 59 inertDiv.style.backgroundColor = 'red'; |
69 }; | 60 }; |
70 | 61 |
71 events = ['mousedown', 'mouseup', 'click', 'mousemove', 'mouseover', 'mouseout'
]; | 62 events = ['mousedown', 'mouseup', 'click', 'mousemove', 'mouseover', 'mouseout'
]; |
72 dialogDiv = document.getElementById('dialog-div'); | 63 dialogDiv = document.getElementById('dialog-div'); |
73 dialogDiv.firedOnEvents = {}; | 64 handledEvents = {}; |
| 65 handledEvents.dialogDiv = {}; |
74 eventFiredOnDialog = function(event) { | 66 eventFiredOnDialog = function(event) { |
75 dialogDiv.firedOnEvents[event.type] = true; | 67 handledEvents.dialogDiv[event.type] = true; |
76 if (Object.keys(dialogDiv.firedOnEvents).length == events.length) | 68 if (Object.keys(handledEvents.dialogDiv).length == events.length) |
77 dialogDiv.style.backgroundColor = 'green'; | 69 dialogDiv.style.backgroundColor = 'green'; |
78 }; | 70 }; |
79 | 71 |
80 body = document.body; | 72 handledEvents.document = {}; |
81 body.firedOnEvents = {}; | 73 expectedEventCountForDocument = events.length - 1; // document won't get 'mouseo
ut' |
82 eventFiredOnBody = function(event) { | 74 eventFiredOnDocument = function(event) { |
83 body.firedOnEvents[event.type] = true; | 75 handledEvents.document[event.type] = true; |
84 if (Object.keys(body.firedOnEvents).length == events.length && !inertDiv.fir
edOn) | 76 if (Object.keys(handledEvents.document).length == document.expectedEventCoun
t && !inertDivHandledEvent) |
85 inertDiv.style.backgroundColor = 'green'; | 77 inertDiv.style.backgroundColor = 'green'; |
86 }; | 78 }; |
87 | 79 |
88 for (var i = 0; i < events.length; ++i) { | 80 for (var i = 0; i < events.length; ++i) { |
89 inertDiv.addEventListener(events[i], eventFiredOnInertNode); | 81 inertDiv.addEventListener(events[i], eventFiredOnInertNode); |
90 dialogDiv.addEventListener(events[i], eventFiredOnDialog); | 82 dialogDiv.addEventListener(events[i], eventFiredOnDialog); |
91 document.body.addEventListener(events[i], eventFiredOnBody); | 83 document.addEventListener(events[i], eventFiredOnDocument); |
92 } | 84 } |
93 | 85 |
94 debug('Clicking on inert box'); | 86 debug('Clicking on inert box'); |
95 clickOn(inertDiv); | 87 clickOn(inertDiv); |
96 shouldBeFalse('inertDiv.firedOn'); | 88 shouldBeFalse('inertDivHandledEvent'); |
97 shouldBe('Object.keys(body.firedOnEvents).length', 'events.length'); | 89 shouldBe('Object.keys(handledEvents.document).length', 'expectedEventCountForDoc
ument'); |
98 | 90 |
99 debug('Clicking on non-inert box'); | 91 debug('Clicking on non-inert box'); |
100 clickOn(dialogDiv); | 92 clickOn(dialogDiv); |
101 shouldBeFalse('inertDiv.firedOn'); | 93 shouldBeFalse('inertDivHandledEvent'); |
102 shouldBe('Object.keys(dialogDiv.firedOnEvents).length', 'events.length'); | 94 shouldBe('Object.keys(handledEvents.dialogDiv).length', 'events.length'); |
103 </script> | 95 </script> |
104 </body> | 96 </body> |
105 </html> | 97 </html> |
OLD | NEW |