| <!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| dialog { |
| width: 50px; |
| } |
| </style> |
| <script src="../../resources/js-test.js"></script> |
| </head> |
| <body> |
| <a id="a" href="javascript:void(0)">Click me</a> |
| <button id="button">Click me</button> |
| <div id="div" style="background-color: blue; width: 50px; height: 50px">Click meeee</div> |
| <span id="span">Click me</span> |
| <div id="dialog-parent" style="width: 50px; height: 50px"> |
| <span id="dialog-sibling">Click meeee</span> |
| <dialog></dialog> |
| </div> |
| <script> |
| function clickOn(element) |
| { |
| if (!window.eventSender) |
| return; |
| |
| var absoluteTop = 0; |
| var absoluteLeft = 0; |
| for (var parentNode = element; parentNode; parentNode = parentNode.offsetParent) { |
| absoluteLeft += parentNode.offsetLeft; |
| absoluteTop += parentNode.offsetTop; |
| } |
| |
| var x = absoluteLeft + element.offsetWidth / 2; |
| var y = absoluteTop + element.offsetHeight / 2; |
| eventSender.mouseMoveTo(x, y); |
| eventSender.mouseDown(); |
| eventSender.mouseUp(); |
| eventSender.mouseMoveTo(0, 0); |
| } |
| |
| function eventFiredOnInertElement(e) { |
| e.target.style.background = 'red'; |
| inertElementFiredOn = true; |
| } |
| |
| description('Tests that inert inlines do not receive mouse events. ' + |
| 'To test manually, click on all the "Click me"s. The test ' + |
| 'fails if you see red.'); |
| inertElements = ['a', 'button', 'div', 'span'] |
| inertElements.forEach(function(id) { |
| element = document.getElementById(id); |
| element.addEventListener('click', eventFiredOnInertElement); |
| element.addEventListener('mousemove', eventFiredOnInertElement); |
| }); |
| |
| document.addEventListener('click', function(e) { |
| document.firedOn = true; |
| }); |
| |
| document.getElementById('dialog-parent').addEventListener('click', function(e) { |
| e.target.firedOn = true; |
| }); |
| |
| document.querySelector('dialog').showModal(); |
| inertElements.forEach(function(id) { |
| expectedTarget = document; |
| if (id == 'dialog-sibling') |
| expectedTarget = document.getElementById('dialog-parent') |
| element = document.getElementById(id); |
| inertElementFiredOn = false; |
| expectedTarget.firedOn = false; |
| debug('clicking on ' + id); |
| clickOn(element); |
| shouldBeFalse('inertElementFiredOn'); |
| shouldBeTrue('expectedTarget.firedOn'); |
| }); |
| </script> |
| </body> |
| </html> |