blob: 0080d9562f0f2395c8515a91d7c4f0c53c4e47de [file] [log] [blame]
<!DOCTYPE html>
<!-- rAF throttling also is tested in fast/dom, but this test accounts for
out-of-process iframes which are only created in http tests. -->
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<style>
#frame {
position: absolute;
top: -1000px;
}
</style>
<iframe id="frame" sandbox="allow-scripts" src="http://localhost:8000/dom/resources/raf-throttling-frame.html"></iframe>
<script>
if (window.testRunner)
testRunner.dumpAsText();
let throttlingTest = async_test("Test requestAnimationFrame() throttling in out-of-view cross origin frames");
var frame = document.querySelector('#frame');
var state = 0;
var firstRafCount = 0;
frame.onload = () => {
// Check how many animation frames have been served to the frame after it has
// been given time to load.
requestAnimationFrame(() => {
setTimeout(() => {
// By the time this runs, the frame should be in a steady state.
var frame = document.querySelector('#frame');
frame.contentWindow.postMessage(null, '*');
}, 0)
});
};
window.addEventListener('message', (e) => {
if (state == 0) {
firstRafCount = e.data;
state = 1;
// We don't know how many frames will have been served before they became
// throttled, but the number shouldn't subsequently change.
requestAnimationFrame(() => {
setTimeout(() => {
var frame = document.querySelector('#frame');
frame.contentWindow.postMessage(null, '*');
}, 0)
});
} else {
let rafCount = e.data;
assert_equals(rafCount, firstRafCount, "requestAnimationFrame() callback count")
throttlingTest.done();
}
});
</script>