<!DOCTYPE html>
<meta charset="utf-8">
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="resources/callback-function-detached-frame-common.js"></script>

<body>

<div id="intersectionObserverTestRoot" hidden></div>

<script>
const IFRAME_SRC = "resources/callback-function-detached-frame-intersection-observer-iframe.html";

promise_test(async t => {
    const iframe = await createIframe(t, IFRAME_SRC);
    const intersectionObserver = iframe.contentWindow.createIntersectionObserver();

    await sleep(100);
    assert_equals(intersectionObserver.callbackInvocations, 0);
    scheduleObservedIntersection();

    await sleep(100);
    assert_equals(intersectionObserver.callbackInvocations, 1);
}, "Callback function, originated in an <iframe>, is invoked if <iframe> is connected");

promise_test(async t => {
    const iframe = await createIframe(t, IFRAME_SRC);
    const intersectionObserver = iframe.contentWindow.createIntersectionObserver(Function);

    await sleep(100);
    assert_equals(intersectionObserver.callbackInvocations, 0);

    iframe.remove();
    assert_equals(iframe.contentWindow, null);

    scheduleObservedIntersection();

    await sleep(100);
    assert_equals(intersectionObserver.callbackInvocations, 1);
}, "Callback function, originated in an <iframe> via main window's Function constructor, is invoked even if <iframe> is disconnected");

promise_test(async t => {
    const iframe = await createIframe(t, IFRAME_SRC);
    const intersectionObserver = iframe.contentWindow.createIntersectionObserver();

    await sleep(100);
    assert_equals(intersectionObserver.callbackInvocations, 0);

    iframe.remove();
    assert_equals(iframe.contentWindow, null);

    scheduleObservedIntersection();

    await sleep(100);
    assert_equals(intersectionObserver.callbackInvocations, 0);
}, "Callback function, originated in an <iframe>, is not invoked if <iframe> is disconnected");

function scheduleObservedIntersection() {
    intersectionObserverTestRoot.hidden = !intersectionObserverTestRoot.hidden;
}
</script>
