| <!DOCTYPE html> | |
| <title>Worklet animation can animate effects from different frames</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="common.js"></script> | |
| <div id="box"></div> | |
| <script id="simple_animate" type="text/worklet"> | |
| registerAnimator("test_animator", class { | |
| animate(currentTime, effect) { | |
| let effects = effect.getChildren(); | |
| effects[0].localTime = 500; | |
| effects[1].localTime = 750; | |
| } | |
| }); | |
| </script> | |
| <script> | |
| promise_test(async t => { | |
| await runInAnimationWorklet(document.getElementById('simple_animate').textContent); | |
| const effect = new KeyframeEffect(box, [{ opacity: 0 }], { duration: 1000 }); | |
| let iframe = document.createElement('iframe'); | |
| iframe.src = 'resources/iframe.html'; | |
| document.body.appendChild(iframe); | |
| await waitForAnimationFrameWithCondition(_ => { | |
| return iframe.contentDocument.getElementById('iframe_box') != null; | |
| }); | |
| let iframe_box = iframe.contentDocument.getElementById('iframe_box'); | |
| let iframe_effect = new KeyframeEffect( | |
| iframe_box, [{ opacity: 0 }], { duration: 1000 } | |
| ); | |
| const animation = new WorkletAnimation('test_animator', [effect, iframe_effect]); | |
| animation.play(); | |
| await waitForNotNullLocalTime(animation); | |
| assert_equals(getComputedStyle(box).opacity, '0.5'); | |
| assert_equals(getComputedStyle(iframe_box).opacity, '0.25'); | |
| iframe.remove(); | |
| animation.cancel(); | |
| }, "Effects from different documents can be animated within one worklet animation"); | |
| </script> |