| 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 |