<!DOCTYPE html><!-- webkit-test-runner [ enableIntersectionObserver=true ] -->
<head>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="../resources/gc.js"></script>
<body>

<div id="target" style="width: 100px; height: 100px; background-color: green"></div>

<script>
    function observerShouldBeRemoved()
    {
        return new Promise(function(resolve) {
            handle = setInterval(function() {
                gc();
                if (internals && internals.numberOfIntersectionObservers(document) == 0) {
                    clearInterval(handle);
                    resolve();
                }
            }, 10);
        });
    }

    async_test(function(t) {
        let observer = new IntersectionObserver(function(entries) {
            if (entries[0].isIntersecting) {
                entries[0].target.remove();
                observerShouldBeRemoved().then(function() {
                    t.done();
                });
            }
        });
        observer.observe(document.getElementById("target"));
        assert_equals(internals.numberOfIntersectionObservers(document), 1);
    }, "IntersectionObserver doesn't keep unreachable target alive");
</script>
</body>
</html>
