<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=545268 --> <head> <title>Test for Bug 545268</title> <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=545268">Mozilla Bug 545268</a> <p id="display"> </p> <div id="content" style="display: none"> </div> <pre id="test"> <script type="application/javascript"> /** Test for Bug 545268 Like the test for bug 493251, but we test that suppressing events in a parent window stops the events from reaching the child window. */ var win; var subwin; var mouseDown = 0; var mouseUp = 0; var mouseClick = 0; var keyDown = 0; var keyPress = 0; var keyUp = 0; function dispatchKeyEvent(type) { var utils = SpecialPowers.getDOMWindowUtils(subwin); utils.sendKeyEvent(type, SpecialPowers.Ci.nsIDOMKeyEvent.DOM_VK_A, 0, 0); } function doTest() { var utils = SpecialPowers.getDOMWindowUtils(win); var f = win.document.getElementById("f"); subwin = f.contentWindow; subwin.document.getElementsByTagName("input")[0].focus(); subwin.addEventListener("keydown", function(e) { ++keyDown; }, true); subwin.addEventListener("keypress", function(e) { ++keyPress; }, true); subwin.addEventListener("keyup", function(e) { ++keyUp; }, true); subwin.addEventListener("mousedown", function(e) { ++mouseDown; }, true); subwin.addEventListener("mouseup", function(e) { ++mouseUp; }, true); subwin.addEventListener("click", function(e) { ++mouseClick; }, true); dispatchKeyEvent("keydown"); dispatchKeyEvent("keypress"); dispatchKeyEvent("keyup"); is(keyDown, 1, "Wrong number events (1)"); is(keyPress, 1, "Wrong number events (2)"); is(keyUp, 1, "Wrong number events (3)"); // Test that suppressing events on the parent window prevents key // events in the subdocument window utils.suppressEventHandling(true); dispatchKeyEvent("keydown"); dispatchKeyEvent("keypress"); dispatchKeyEvent("keyup"); is(keyDown, 1, "Wrong number events (4)"); is(keyPress, 1, "Wrong number events (5)"); is(keyUp, 1, "Wrong number events (6)"); utils.suppressEventHandling(false); is(keyDown, 1, "Wrong number events (7)"); is(keyPress, 1, "Wrong number events (8)"); is(keyUp, 1, "Wrong number events (9)"); setTimeout(continueTest1, 0); } function continueTest1() { var utils = SpecialPowers.getDOMWindowUtils(win); dispatchKeyEvent("keydown"); utils.suppressEventHandling(true); dispatchKeyEvent("keypress"); dispatchKeyEvent("keyup"); is(keyDown, 2, "Wrong number events (10)"); is(keyPress, 1, "Wrong number events (11)"); is(keyUp, 1, "Wrong number events (12)"); utils.suppressEventHandling(false); setTimeout(continueTest2, 0); } function continueTest2() { var utils = SpecialPowers.getDOMWindowUtils(win); is(keyDown, 2, "Wrong number events (13)"); is(keyPress, 2, "Wrong number events (14)"); is(keyUp, 2, "Wrong number events (15)"); utils.sendMouseEvent("mousedown", 5, 5, 0, 1, 0); utils.sendMouseEvent("mouseup", 5, 5, 0, 1, 0); is(mouseDown, 1, "Wrong number events (16)"); is(mouseUp, 1, "Wrong number events (17)"); is(mouseClick, 1, "Wrong number events (18)"); utils.suppressEventHandling(true); utils.sendMouseEvent("mousedown", 5, 5, 0, 1, 0); utils.sendMouseEvent("mouseup", 5, 5, 0, 1, 0); utils.suppressEventHandling(false); is(mouseDown, 1, "Wrong number events (19)"); is(mouseUp, 1, "Wrong number events (20)"); is(mouseClick, 1, "Wrong number events (21)"); setTimeout(continueTest3, 0); } function continueTest3() { var utils = SpecialPowers.getDOMWindowUtils(win); utils.sendMouseEvent("mousedown", 5, 5, 0, 1, 0); utils.suppressEventHandling(true); utils.sendMouseEvent("mouseup", 5, 5, 0, 1, 0); utils.suppressEventHandling(false); setTimeout(continueTest4, 1000); } function continueTest4() { is(mouseDown, 2, "Wrong number events (19)"); is(mouseUp, 2, "Wrong number events (20)"); is(mouseClick, 2, "Wrong number events (21)"); win.close(); SimpleTest.finish(); } SimpleTest.waitForExplicitFinish(); SimpleTest.requestFlakyTimeout("untriaged"); win = window.open("data:text/html,<iframe id='f' style='position:absolute; border:none; width:100%; height:100%; left:0; top:0' src='data:text/html,<input>'>", "" , ""); win.onload = doTest; </script> </pre> </body> </html>