<!DOCTYPE html>
<html>
<head>
<style>
#div {
    height: 100px;
    width: 100px;
    background: red;
}
</style>
<script src="../../resources/js-test.js"></script>
</head>
<body>
<div id="div"></div>
<dialog id="dialog"></dialog>
<script>
description('Test for bug 110952. Ensure that non-modal dialogs do not block mouse events. To test manually, click the red box. The test succeeds if the red box turns green.');

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);
}

if (window.testRunner)
    testRunner.dumpAsText();

dialog = document.getElementById('dialog');
dialog.show();

div = document.getElementById('div');
div.firedOn = false;
div.addEventListener('click', function(event) {
    div.firedOn = true;
    div.style.backgroundColor = 'green';
});

clickOn(div);

shouldBeTrue('div.firedOn');
</script>
</body>
</html>
