diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /testing/web-platform/tests/common/worklet-reftest.js | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.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 'testing/web-platform/tests/common/worklet-reftest.js')
-rw-r--r-- | testing/web-platform/tests/common/worklet-reftest.js | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/testing/web-platform/tests/common/worklet-reftest.js b/testing/web-platform/tests/common/worklet-reftest.js new file mode 100644 index 0000000000..e05d4ee801 --- /dev/null +++ b/testing/web-platform/tests/common/worklet-reftest.js @@ -0,0 +1,50 @@ +/** + * Imports code into a worklet. E.g. + * + * importWorklet(CSS.paintWorklet, {url: 'script.js'}); + * importWorklet(CSS.paintWorklet, '(javascript string)'); + * + * @param {Worklet} worklet + * @param {(Object|string)} code + */ +function importWorklet(worklet, code) { + let url; + if (typeof code === 'object') { + url = code.url; + } else { + const blob = new Blob([code], {type: 'text/javascript'}); + url = URL.createObjectURL(blob); + } + + return worklet.addModule(url); +} + +/** @private */ +async function animationFrames(frames) { + for (let i = 0; i < frames; i++) + await new Promise(requestAnimationFrame); +} + +/** @private */ +async function workletPainted() { + await animationFrames(2); +} + +/** + * To make sure that we take the snapshot at the right time, we do double + * requestAnimationFrame. In the second frame, we take a screenshot, that makes + * sure that we already have a full frame. + * + * @param {Worklet} worklet + * @param {(Object|string)} code + */ +async function importWorkletAndTerminateTestAfterAsyncPaint(worklet, code) { + if (typeof worklet === 'undefined') { + takeScreenshot(); + return; + } + + await importWorklet(worklet, code); + await workletPainted(); + takeScreenshot(); +} |