1<!DOCTYPE html>
2<html>
3<head>
4<style>
5#inert-div {
6 height: 100px;
7 width: 100px;
8 background: green;
9}
10
11#dialog-div {
12 height: 100px;
13 width: 100px;
14 background: red;
15}
16</style>
17<script src="../../js/resources/js-test-pre.js"></script>
18<script>
19if (window.internals)
20 internals.settings.setDialogElementEnabled(true);
21</script>
22</head>
23<body>
24<div id="inert-div"></div>
25<dialog id="dialog">
26 <div id="dialog-div"></div>
27</dialog>
28<script>
29description('Test for bug 110952. Ensure that mouse events are not dispatched to an inert node. To test manually, move the mouse to the green box, click, and then move the mouse outside. Then repeat for the red box. The test succeeds if green box remains green and the red box turns green.');
30
31function clickOn(element)
32{
33 if (!window.eventSender)
34 return;
35
36 var absoluteTop = 0;
37 var absoluteLeft = 0;
38 for (var parentNode = element; parentNode; parentNode = parentNode.offsetParent) {
39 absoluteLeft += parentNode.offsetLeft;
40 absoluteTop += parentNode.offsetTop;
41 }
42
43 var x = absoluteLeft + element.offsetWidth / 2;
44 var y = absoluteTop + element.offsetHeight / 2;
45 eventSender.mouseMoveTo(x, y);
46 eventSender.mouseDown();
47 eventSender.mouseUp();
48 eventSender.mouseMoveTo(0, 0);
49}
50
51if (window.testRunner)
52 testRunner.dumpAsText();
53
54dialog.showModal();
55
56inertDiv = document.getElementById('inert-div');
57dialogDiv = document.getElementById('dialog-div');
58inertDiv.firedOn = false;
59eventFiredOnInertNode = function(event) {
60 inertDiv.firedOn = true;
61 inertDiv.style.backgroundColor = 'red';
62}
63
64events = ['mousedown', 'mouseup', 'click', 'mousemove', 'mouseover', 'mouseout'];
65dialogDiv.firedOnEvents = {};
66eventFiredOnDialog = function(event) {
67 dialogDiv.firedOnEvents[event.type] = true;
68 if (Object.keys(dialogDiv.firedOnEvents).length == events.length)
69 dialogDiv.style.backgroundColor = 'green';
70}
71
72for (var i = 0; i < events.length; ++i) {
73 inertDiv.addEventListener(events[i], eventFiredOnInertNode);
74 dialogDiv.addEventListener(events[i], eventFiredOnDialog);
75}
76
77clickOn(inertDiv);
78clickOn(dialogDiv);
79
80shouldBeFalse('inertDiv.firedOn');
81shouldBe('Object.keys(dialogDiv.firedOnEvents).length', 'events.length');
82</script>
83<script src="../../js/resources/js-test-post.js"></script>
84</body>
85</html>