blob: fd01a354c3d0d5754bfd75963dbfd65979fe6908 [file] [log] [blame]
<html>
<script>
// When both timeouts finish, the counter will be 2.
window.completionCounter = 0;
function test()
{
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
// Get the iframe's window.
var iframeWindow = window.frames["testIframe"];
// setTimeout with a callback specified as a JS closure.
// This one should run in the context of the main page.
iframeWindow.setTimeout(
function() {
document.getElementById("closureResult").innerText = (window == parent ? "PASS" : "FAIL");
completionCounter++;
}, 1);
// setTimeout with a JS string containing similar code.
// This one should run 'inside' iframe.
iframeWindow.setTimeout(
"parent.document.getElementById('stringResult').innerText = (window != parent ? 'PASS' : 'FAIL');" +
"parent.completionCounter++;"
, 1);
window.setInterval(checkResult, 10);
}
function checkResult() {
if (completionCounter < 2)
return;
if (window.testRunner)
testRunner.notifyDone();
}
</script>
<body onload="test()">
<p>Test verifies that a timeout callback is run in the proper execution context. 2 timeouts are set on a child iframe's window. 'Closure' callback should execute in the main page, 'string' callback should execute in the iframe. Test passes if you see 2 lines 'PASS' below.</p>
<div id=closureResult>FAIL</div>
<div id=stringResult>FAIL</div>
<iframe style="display:none" src="about:blank" id=testIframe></iframe>
</body>
</html>