| <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 name=testIframe></iframe> |
| </body> |
| </html> |