<!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=666604 --> <head> <title>Test for Bug 666604</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=666604">Mozilla Bug 666604</a> <p id="display"></p> <div id="content" style="display: none"> </div> <a href="javascript:activationListener()" id="testlink">test</a> <pre id="test"> <script type="application/javascript"> /** Test for Bug 666604 **/ SimpleTest.waitForExplicitFinish(); function hitEventLoop(times, next) { if (times == 0) { next(); return; } SimpleTest.executeSoon(function() { hitEventLoop(times - 1, next); }); } var activationListener; function dispatchClick(target, ctrl) { var e = document.createEvent("MouseEvent"); e.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, ctrl, false, false, false, 0, null); target.dispatchEvent(e); } function dispatchReturn(target, ctrl) { var e = document.createEvent("KeyboardEvent"); e.initKeyEvent("keypress", true, true, window, ctrl, false, false, false, 13, 0); target.dispatchEvent(e); } function dispatchDOMActivate(target) { var e = document.createEvent("UIEvent"); e.initUIEvent("DOMActivate", true, true, window, 0); target.dispatchEvent(e); } var testlink = document.getElementById("testlink"); function test1() { activationListener = function() { ok(true, "Untrusted click should activate a link"); test2(); } dispatchClick(testlink, false); } function test2() { activationListener = function() { ok(true, "Untrusted return keypress should activate a link"); test3(); } dispatchReturn(testlink, false); } function test3() { activationListener = function() { ok(false, "Untrusted click+ctrl should not activate a link"); test4(); } dispatchClick(testlink, true); hitEventLoop(10, test4); } function test4() { activationListener = function() { ok(false, "Untrusted return keypress+ctrl should not activate a link"); test5(); } dispatchReturn(testlink, true); hitEventLoop(10, test5); } function test5() { activationListener = function() { ok(true, "click() should activate a link"); test6(); } testlink.click(); } function test6() { activationListener = function() { ok(true, "Untrusted DOMActivate should activate a link"); SpecialPowers.pushPrefEnv({"set":[["dom.disable_open_during_load", false]]}, test7); } dispatchDOMActivate(testlink); } function test7() { testlink.href = "javascript:opener.activationListener(); window.close();"; testlink.target = "_blank"; activationListener = function() { ok(true, "Click() should activate a link"); SpecialPowers.pushPrefEnv({"set":[["dom.disable_open_during_load", true]]}, test8); } testlink.click(); } function test8() { testlink.href = "javascript:opener.activationListener(); window.close();"; testlink.target = "_blank"; activationListener = function() { ok(false, "Click() should not activate a link"); } testlink.click(); SimpleTest.executeSoon(SimpleTest.finish); } addLoadEvent(test1); </script> </pre> </body> </html>