| Index: third_party/WebKit/LayoutTests/fast/dom/Window/timeout-callback-scope.html
|
| diff --git a/third_party/WebKit/LayoutTests/fast/dom/Window/timeout-callback-scope.html b/third_party/WebKit/LayoutTests/fast/dom/Window/timeout-callback-scope.html
|
| index c33aba8afe9b8d6f401ebc413abba08aa8d22221..be0da7702193dce571a62582e8b4f29fd225bf72 100644
|
| --- a/third_party/WebKit/LayoutTests/fast/dom/Window/timeout-callback-scope.html
|
| +++ b/third_party/WebKit/LayoutTests/fast/dom/Window/timeout-callback-scope.html
|
| @@ -1,6 +1,5 @@
|
| <html>
|
| <script>
|
| -
|
| // When both timeouts finish, the counter will be 2.
|
| window.completionCounter = 0;
|
| function test()
|
| @@ -9,34 +8,49 @@ function test()
|
| testRunner.dumpAsText();
|
| testRunner.waitUntilDone();
|
| }
|
| +
|
| // Get the iframe's window.
|
| + var mainWindow = 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");
|
| + function() {
|
| + document.getElementById("closureResult").innerText = (window == mainWindow ? "PASS" : "FAIL");
|
| completionCounter++;
|
| - }, 1);
|
| + }, 0);
|
| +
|
| // setTimeout with a JS string containing similar code.
|
| // This one should run 'inside' iframe.
|
| - iframeWindow.setTimeout(
|
| + mainWindow.setTimeout.call(
|
| + iframeWindow,
|
| "parent.document.getElementById('stringResult').innerText = (window != parent ? 'PASS' : 'FAIL');" +
|
| - "parent.completionCounter++;"
|
| - , 1);
|
| + "parent.completionCounter++;",
|
| + 0);
|
| +
|
| + // The callback this value must be the context object.
|
| + iframeWindow.setTimeout.call(window, function() {
|
| + document.getElementById("contextResult").innerText = (this == mainWindow ? "PASS" : "FAIL");
|
| + completionCounter++;
|
| + }, 0);
|
| +
|
| window.setInterval(checkResult, 10);
|
| }
|
| function checkResult() {
|
| - if (completionCounter < 2)
|
| + if (completionCounter < 3)
|
| 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" name=testIframe></iframe>
|
| +<p>Test verifies that a timeout callback is run in the proper execution context. 3 timeouts are set on a child iframe's window. Test passes if you see 3 lines 'PASS' below. See also:
|
| +<a href="https://html.spec.whatwg.org/multipage/webappapis.html#timer-initialisation-steps">https://html.spec.whatwg.org/multipage/webappapis.html#timer-initialisation-steps</a></p>
|
| +
|
| +<div><span id="closureResult">FAIL: Test didn't run.</span> -- function argument: if the argument is a function, then the callback function must run in the relevant realm for that function object.</div>
|
| +<div><span id="stringResult">FAIL: Test didn't run.</span> -- string argument: if the argument is a string, then it must be compiled in the relevant realm for the context object, hence must run in the relevant realm for the context object.</div>
|
| +<div><span id="contextResult">FAIL: Test didn't run.</span> -- callback this value: the callback this value must be the context object.</div>
|
| +<iframe style="display:none" src="about:blank" name="testIframe"></iframe>
|
| </body>
|
| </html>
|
|
|