diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:44:51 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:44:51 +0000 |
commit | 9e3c08db40b8916968b9f30096c7be3f00ce9647 (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /layout/base/tests/test_refreshDriver_hasPendingTick.html | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'layout/base/tests/test_refreshDriver_hasPendingTick.html')
-rw-r--r-- | layout/base/tests/test_refreshDriver_hasPendingTick.html | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/layout/base/tests/test_refreshDriver_hasPendingTick.html b/layout/base/tests/test_refreshDriver_hasPendingTick.html new file mode 100644 index 0000000000..eb92c1fb92 --- /dev/null +++ b/layout/base/tests/test_refreshDriver_hasPendingTick.html @@ -0,0 +1,95 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=1756269 +--> +<head> + <meta charset="utf-8"> + <title>Test for Bug 1756269: the nsIDOMWindowUtils.refreshDriverHasPendingTick API</title> + <script src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> + <style> + @keyframes growWidth { + from { width: 20px; } + to { width: 30px; } + } + .animating { + animation: 1s growWidth infinite alternate; + } + #sometimesAnimated { + background: blue; + width: 10px; + height: 10px; + } + </style> +</head> +<body onload="run()"> +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1756269">Mozilla Bug 1756269</a> +<div id="display"> + <div id="sometimesAnimated"></div> +</div> +<pre id="test"> +<script> +"use strict"; +SimpleTest.waitForExplicitFinish(); +SimpleTest.requestFlakyTimeout("need to allow time to pass so that we can " + + "detect unwanted extra refresh driver ticks"); +const gUtils = SpecialPowers.getDOMWindowUtils(window); + +async function startAnimAndExpectTick() { + // Start an animation: + sometimesAnimated.classList.add("animating"); + + // double-rAF to flush pending paints: + await new Promise(r => requestAnimationFrame(r)); + await new Promise(r => requestAnimationFrame(r)); + + ok(gUtils.refreshDriverHasPendingTick, + "Expecting refresh driver to be ticking when animated content is present"); + + // clean up, i.e. remove animation: + sometimesAnimated.classList.remove("animating"); + + // double-rAF to flush pending paints: + await new Promise(r => requestAnimationFrame(r)); + await new Promise(r => requestAnimationFrame(r)); +} + +async function expectTicksToStop() { + let didStopTicking = false; + // Note: The maximum loop count here is an arbitrary large value, just to let + // us gracefully handle edge cases where multiple setTimeouts resolve before + // a pending refresh driver tick. Really, we just want to be sure the refresh + // driver *eventually* stops ticking, and we can do so gracefully by polling + // with some generous-but-finite number of checks here. + for (var i = 0; i < 100; i++) { + await new Promise(r => setTimeout(r, 8)); + if(!gUtils.refreshDriverHasPendingTick) { + didStopTicking = true; + break; + } + } + ok(didStopTicking, "refresh driver should have eventually stopped ticking"); +} + +async function run() { + // By default, the refresh driver ticks on its own for some period of time + // after pageload. Turn that off so we don't have to wait it out: + await SpecialPowers.pushPrefEnv({'set': + [['layout.keep_ticking_after_load_ms', 0]]}); + + // Start out with a double-rAF, to flush paints from pageload: + await new Promise(r => requestAnimationFrame(r)); + await new Promise(r => requestAnimationFrame(r)); + + await startAnimAndExpectTick(); + await expectTicksToStop(); + await startAnimAndExpectTick(); + await expectTicksToStop(); + + SimpleTest.finish(); +} +</script> +</pre> +</body> +</html> |