<!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>
