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