diff options
Diffstat (limited to 'testing/web-platform/tests/animation-worklet/animation-worklet-inside-iframe.https.html')
-rw-r--r-- | testing/web-platform/tests/animation-worklet/animation-worklet-inside-iframe.https.html | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/testing/web-platform/tests/animation-worklet/animation-worklet-inside-iframe.https.html b/testing/web-platform/tests/animation-worklet/animation-worklet-inside-iframe.https.html new file mode 100644 index 0000000000..415f394401 --- /dev/null +++ b/testing/web-platform/tests/animation-worklet/animation-worklet-inside-iframe.https.html @@ -0,0 +1,61 @@ +<!DOCTYPE html> +<title>Test that AnimationWorklet inside frames with different origin causes new global scopes</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="common.js"></script> + +<style> +.redbox { + width: 100px; + height: 100px; + background-color: #ff0000; +} +</style> + +<div id="target" class="redbox"></div> + +<script id="main_worklet" type="text/worklet"> +registerAnimator("duplicate_animator", class { + animate(currentTime, effect) { + effect.localTime = 500; + } +}); +</script> + +<script> +async_test(t => { + // Wait for iframe to load and start its animations. + window.onmessage = function(msg) { + window.requestAnimationFrame( _ => { + run_test(msg.data); + }); + }; + + // Create and load the iframe to avoid racy cases. + var iframe = document.createElement('iframe'); + iframe.src = 'resources/animator-iframe.html'; + document.body.appendChild(iframe); + + function run_test(data) { + runInAnimationWorklet( + document.getElementById('main_worklet').textContent + ).then(_ => { + // Create an animation for duplicate animator. + const target = document.getElementById('target'); + const animation = new WorkletAnimation('duplicate_animator', new KeyframeEffect(target, [{ opacity: 0 }], { duration: 1000 })); + animation.play(); + + assert_equals(data, '0.4'); + + // wait until local times are synced back to the main thread. + waitForAnimationFrameWithCondition(_ => { + return getComputedStyle(target).opacity != '1'; + }).then(t.step_func_done(() => { + assert_equals(getComputedStyle(target).opacity, '0.5'); + })); + }); + } +}, 'Both main frame and iframe should update the opacity of their target'); +</script> |