<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="./resources/intersection-observer-test-utils.js"></script>
<script src="../resources/gc.js"></script>
<div id="root">
<div id="target"></div>
</div>
<script>
async_test(function(t) {
// Initialize observer and remove root in an inner function to avoid
// references to rootDiv remaining live on this function's stack frame
// (http://crbug.com/595672/).
function initializeObserverThenRemoveRootDiv() {
let rootDiv = document.getElementById("root");
let observer = new IntersectionObserver(c => {}, {root: rootDiv});
rootDiv.parentNode.removeChild(rootDiv);
return observer;
}
var target = document.getElementById("target");
var observer = initializeObserverThenRemoveRootDiv();
gc();
runTestCycle(step0, "IntersectionObserver.observe with deleted root.");
function step0() {
runTestCycle(step1, "IntersectionObserver.unobserve with deleted root.");
observer.observe(target);
}
function step1() {
runTestCycle(step2, "IntersectionObserver.disconnect with deleted root.");
observer.unobserve(target);
}
function step2() {
runTestCycle(step3, "IntersectionObserver.takeRecords with deleted root.");
observer.disconnect();
}
function step3() {
observer.takeRecords();
t.done();
}
});
</script>