<html class="reftest-wait">
<title>Scroll timeline with Web Animation and transition from display:none to display:block</title>
<link rel="help" href="https://drafts.csswg.org/scroll-animations/">
<meta name="assert" content="Scroll timeline should properly handle going from display:none to display:block">
<link rel="match" href="animation-ref.html">

<script src="/web-animations/testcommon.js"></script>
<script src="/common/reftest-wait.js"></script>

<style>
  #box {
    width: 100px;
    height: 100px;
    background-color: green;
  }

  #covered {
    width: 100px;
    height: 100px;
    background-color: red;
  }

  #scroller {
    overflow: auto;
    height: 100px;
    width: 100px;
    will-change: transform; /* force compositing */
  }

  .removed {
    display: none;
  }

  #contents {
    height: 1000px;
    width: 100%;
  }
</style>

<div id="box"></div>
<div id="covered"></div>
<div id="scroller">
  <div id="contents"></div>
</div>

<script>
  const box = document.getElementById('box');
  const effect = new KeyframeEffect(box,
    [
    { transform: 'translateY(0)', opacity: 1 },
    { transform: 'translateY(200px)', opacity: 0 }
    ], {
      duration: 1000,
    }
  );

  const scroller = document.getElementById('scroller');
  scroller.classList.add('removed');
  const timeline = new ScrollTimeline({ scrollSource: scroller, timeRange: 1000, orientation: 'block' });
  const animation = new Animation(effect, timeline);
  animation.play();

  waitForAnimationFrames(2).then(_ => {
    scroller.classList.remove('removed');
    animation.ready.then(() => {
      const maxScroll = scroller.scrollHeight - scroller.clientHeight;
      scroller.scrollTop = 0.5 * maxScroll;

      waitForAnimationFrames(2).then(_ => {
        takeScreenshot();
      });
    });
  });
</script>
