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 var rect = element.getBoundingClientRect(); | 43 |
44 eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height /
2); | 44 var absoluteTop = 0; |
| 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); |
45 eventSender.mouseDown(); | 54 eventSender.mouseDown(); |
46 eventSender.mouseUp(); | 55 eventSender.mouseUp(); |
47 eventSender.mouseMoveTo(0, 0); | 56 eventSender.mouseMoveTo(0, 0); |
48 } | 57 } |
49 | 58 |
50 if (window.testRunner) | 59 if (window.testRunner) |
51 testRunner.dumpAsText(); | 60 testRunner.dumpAsText(); |
52 | 61 |
53 dialog.showModal(); | 62 dialog.showModal(); |
54 | 63 |
55 inertDivHandledEvent = false; | |
56 inertDiv = document.getElementById('inert-div'); | 64 inertDiv = document.getElementById('inert-div'); |
| 65 inertDiv.firedOn = false; |
57 eventFiredOnInertNode = function(event) { | 66 eventFiredOnInertNode = function(event) { |
58 inertDivHandledEvent = true; | 67 inertDiv.firedOn = true; |
59 inertDiv.style.backgroundColor = 'red'; | 68 inertDiv.style.backgroundColor = 'red'; |
60 }; | 69 }; |
61 | 70 |
62 events = ['mousedown', 'mouseup', 'click', 'mousemove', 'mouseover', 'mouseout'
]; | 71 events = ['mousedown', 'mouseup', 'click', 'mousemove', 'mouseover', 'mouseout'
]; |
63 dialogDiv = document.getElementById('dialog-div'); | 72 dialogDiv = document.getElementById('dialog-div'); |
64 handledEvents = {}; | 73 dialogDiv.firedOnEvents = {}; |
65 handledEvents.dialogDiv = {}; | |
66 eventFiredOnDialog = function(event) { | 74 eventFiredOnDialog = function(event) { |
67 handledEvents.dialogDiv[event.type] = true; | 75 dialogDiv.firedOnEvents[event.type] = true; |
68 if (Object.keys(handledEvents.dialogDiv).length == events.length) | 76 if (Object.keys(dialogDiv.firedOnEvents).length == events.length) |
69 dialogDiv.style.backgroundColor = 'green'; | 77 dialogDiv.style.backgroundColor = 'green'; |
70 }; | 78 }; |
71 | 79 |
72 handledEvents.document = {}; | 80 body = document.body; |
73 expectedEventCountForDocument = events.length - 1; // document won't get 'mouseo
ut' | 81 body.firedOnEvents = {}; |
74 eventFiredOnDocument = function(event) { | 82 eventFiredOnBody = function(event) { |
75 handledEvents.document[event.type] = true; | 83 body.firedOnEvents[event.type] = true; |
76 if (Object.keys(handledEvents.document).length == document.expectedEventCoun
t && !inertDivHandledEvent) | 84 if (Object.keys(body.firedOnEvents).length == events.length && !inertDiv.fir
edOn) |
77 inertDiv.style.backgroundColor = 'green'; | 85 inertDiv.style.backgroundColor = 'green'; |
78 }; | 86 }; |
79 | 87 |
80 for (var i = 0; i < events.length; ++i) { | 88 for (var i = 0; i < events.length; ++i) { |
81 inertDiv.addEventListener(events[i], eventFiredOnInertNode); | 89 inertDiv.addEventListener(events[i], eventFiredOnInertNode); |
82 dialogDiv.addEventListener(events[i], eventFiredOnDialog); | 90 dialogDiv.addEventListener(events[i], eventFiredOnDialog); |
83 document.addEventListener(events[i], eventFiredOnDocument); | 91 document.body.addEventListener(events[i], eventFiredOnBody); |
84 } | 92 } |
85 | 93 |
86 debug('Clicking on inert box'); | 94 debug('Clicking on inert box'); |
87 clickOn(inertDiv); | 95 clickOn(inertDiv); |
88 shouldBeFalse('inertDivHandledEvent'); | 96 shouldBeFalse('inertDiv.firedOn'); |
89 shouldBe('Object.keys(handledEvents.document).length', 'expectedEventCountForDoc
ument'); | 97 shouldBe('Object.keys(body.firedOnEvents).length', 'events.length'); |
90 | 98 |
91 debug('Clicking on non-inert box'); | 99 debug('Clicking on non-inert box'); |
92 clickOn(dialogDiv); | 100 clickOn(dialogDiv); |
93 shouldBeFalse('inertDivHandledEvent'); | 101 shouldBeFalse('inertDiv.firedOn'); |
94 shouldBe('Object.keys(handledEvents.dialogDiv).length', 'events.length'); | 102 shouldBe('Object.keys(dialogDiv.firedOnEvents).length', 'events.length'); |
95 </script> | 103 </script> |
96 </body> | 104 </body> |
97 </html> | 105 </html> |
OLD | NEW |