blob: 6ff9e017e459bfbdb44582e5525d939a9daf0cf1 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<style>
pre, #log {
position: absolute;
top: 0;
left: 200px;
}
</style>
<iframe src="http://localhost:8080/intersection-observer/resources/subframe-occlusion-tracking.html"></iframe>
<script>
if (self.internals) {
internals.DisableIntersectionObserverThrottleDelay();
}
async_test(t => {
let iframe = document.querySelector("iframe");
if (self.internals && !internals.isSiteIsolated(iframe)) {
t.done();
return;
}
let checkTracking = (expected => {
if (self.internals) {
t.step(() => {
assert_equals(internals.isTrackingOcclusionForIFrame(iframe), expected);
});
}
});
let detachAndCheck = (() => {
iframe.remove();
requestAnimationFrame(() => {
setTimeout(() => {
checkTracking(false);
t.done();
});
});
});
checkTracking(false);
let count = 0;
addEventListener("message", event => {
requestAnimationFrame(() => {
checkTracking(event.data.expected);
if (count++ > 3 && event.data.expected) {
detachAndCheck();
} else {
iframe.contentWindow.postMessage("", "*");
}
});
});
iframe.addEventListener("load", t.step_func(() => {
checkTracking(false);
requestAnimationFrame(() => {
iframe.contentWindow.postMessage("", "*")
checkTracking(false);
});
}));
}, "Test that an OOP iframe only gets occlusion information from its parent if the iframe has an IntersectionObserver that needs it.");
</script>