Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /html/webappapis/timers/settimeout-detached-iframe.html - WPT Dashboard Interop Dashboard
<!doctype html>
<meta charset=utf-8>
<title>setTimeout() in a detached iframe's realm does not throw and the callback does not run</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id="content" style="display: none"></div>
<script>
function createIframe(detach) {
const iframe = document.createElement("iframe");
document.getElementById("content").appendChild(iframe);
const win = iframe.contentWindow;
if (detach) {
iframe.remove();
}
return win;
}
async_test(t => {
const attachedWin = createIframe(false);
const detachedWin = createIframe(true);
let attachedRan = false;
let detachedRan = false;
const attachedId = attachedWin.setTimeout(t.step_func(() => {
attachedRan = true;
}), 0);
assert_equals(typeof attachedId, "number",
"setTimeout in an attached realm returns a numeric timer id");
detachedWin.setTimeout(t.step_func(() => {
detachedRan = true;
}), 0);
t.step_timeout(() => {
t.step_timeout(t.step_func_done(() => {
assert_true(attachedRan, "the attached realm's timeout callback ran");
assert_false(detachedRan, "the detached realm's timeout callback did not run");
}), 0);
}, 0);
}, "setTimeout() on a detached iframe's window does not throw and its callback never runs");
</script>