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