test_bug369306.html (3581B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=369306 5 --> 6 <head> 7 <title>Test for Bug 369306</title> 8 <script src="/tests/SimpleTest/SimpleTest.js"></script> 9 <script src="/tests/SimpleTest/EventUtils.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 11 </head> 12 <body> 13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=369306">Mozilla Bug 369306</a> 14 <p id="display"></p> 15 <div id='content'> 16 </div> 17 <pre id="test"> 18 <script type="application/javascript"> 19 20 /** Test for Bug 369306 */ 21 22 var originatingWindow = self; 23 24 function focusShouldNotChange(aAction, nextTest) 25 { 26 var w = window.open('about:blank', '', 'foo'); 27 var fail = false; 28 29 SimpleTest.waitForFocus(function () { 30 function failHandler() { fail = true; } 31 32 originatingWindow.addEventListener("focus", failHandler); 33 w.addEventListener("blur", failHandler); 34 35 aAction(w); 36 37 SimpleTest.executeSoon(function () { 38 originatingWindow.removeEventListener("focus", failHandler); 39 w.removeEventListener("blur", failHandler); 40 41 ok(!fail, "The focus should not have been changed!"); 42 43 // Cleaning and running next test. 44 w.close(); 45 SimpleTest.waitForFocus(nextTest, originatingWindow); 46 }); 47 }, w, true); 48 } 49 50 function focusShouldNotChange2(aURL, nextTest) 51 { 52 var w = window.open(aURL, '', 'foo'); 53 var fail = false; 54 55 SimpleTest.waitForFocus(function () { 56 function failHandler() { fail = true; } 57 58 originatingWindow.addEventListener("focus", failHandler); 59 w.addEventListener("blur", failHandler); 60 61 /** 62 * NOTE: This setTimeout can cause a random green. 63 * onload handler + executeSoon doesn't work too so we have to use setTimeout. 64 * The check may be call before w script being executed but that would make 65 * this check green even if it should be orange. 66 */ 67 setTimeout(function () { 68 originatingWindow.removeEventListener("focus", failHandler); 69 w.removeEventListener("blur", failHandler); 70 71 ok(!fail, "The focus should not have been changed with URL=" + aURL); 72 73 // Cleaning and running next test. 74 w.close(); 75 SimpleTest.waitForFocus(nextTest, originatingWindow); 76 }, 1000); 77 }, w); 78 } 79 80 function test1() 81 { 82 focusShouldNotChange(function (aW) { aW.blur(); }, test2); 83 } 84 85 function test2() 86 { 87 focusShouldNotChange(function () { originatingWindow.focus(); }, test3); 88 } 89 90 function test3() 91 { 92 focusShouldNotChange2("test1_bug369306.html", test4); 93 } 94 95 function test4() 96 { 97 focusShouldNotChange2("test2_bug369306.html", test5); 98 } 99 100 function test5() 101 { 102 var w = window.open('about:blank', '', 'foo'); 103 104 SimpleTest.waitForFocus(function () { 105 SimpleTest.waitForFocus(function () { 106 SimpleTest.waitForFocus(function () { 107 ok(true, "The last opened window should be able to get focus"); 108 w.close(); 109 SimpleTest.executeSoon(SimpleTest.finish); 110 }, w, true); 111 112 w.focus(); 113 }, originatingWindow); 114 115 SimpleTest.executeSoon(function() { 116 // We have to focus back the originating window but we can't do that with 117 // .focus() or .blur() anymore. 118 SpecialPowers.focus(window); 119 }); 120 }, w, true); 121 } 122 123 SimpleTest.waitForExplicitFinish(); 124 SimpleTest.requestFlakyTimeout("untriaged"); 125 126 function startTest() { 127 // dom.disable_window_flip has to be set to true for this test. 128 SpecialPowers.pushPrefEnv({"set": [["dom.disable_window_flip", true]]}, test1); 129 } 130 131 // startTest is going to call the next tests. 132 SimpleTest.waitForFocus(startTest); 133 134 </script> 135 </pre> 136 </body> 137 </html>