<!DOCTYPE HTML> <html> <head> <title>Test bug 529119</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> <script class="testbody" type="text/javascript"> SimpleTest.waitForExplicitFinish(); SimpleTest.requestFlakyTimeout("untriaged"); var workingURL = "http://mochi.test:8888/tests/docshell/test/bug529119-window.html"; var faultyURL = "http://some-nonexistent-domain-27489274c892748217cn2384.com/"; var w = null; var phase = 0; var isWindowLoaded = false; function pollForPage(expectErrorPage, f, w) { // Start with polling after a delay, we might mistakenly take the current page // as an expected one. window.setTimeout(function() { var iterationsLeft = 200; var int = window.setInterval(function() { iterationsLeft--; var haveErrorPage = false; try { var title = w.document.title; } catch (ex) { haveErrorPage = true; } if (iterationsLeft == 0 || expectErrorPage == haveErrorPage) { window.clearInterval(int); f(iterationsLeft > 0); } }, 100); }, 1000); } function windowLoaded() { // The code under here should only be run once // The test popup window workingURL was already opened if (isWindowLoaded) return; isWindowLoaded = true; /* 2. We have successfully loaded a page, now go to a faulty URL */ // XXX The test fails when we change the location synchronously window.setTimeout(function() { w.location.href = faultyURL; }, 0); pollForPage(true, function(succeeded) { ok(succeeded, "Waiting for error page succeeded"); /* 3. now, while we are on the error page, navigate back */ try { SpecialPowers.wrap(w).back(); } catch(ex) { ok(false, "w.back() threw " + ex); } pollForPage(false, function(succeeded) { ok(succeeded, "Waiting for original page succeeded"); /* 4-finish, check we are back at the original page */ isnot(SpecialPowers.wrap(w).location.href, faultyURL, "Is on an error page"); is(SpecialPowers.wrap(w).location.href, workingURL, "Is not on the previous page"); w.close(); SimpleTest.finish(); }, w); }, w); } function startTest() { /* 1. load a URL that leads to an error page */ w = window.open(workingURL); } </script> </head> <body onload="startTest();"> </body> </html>