summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/mozilla/tests/svg/smil-sampling.html
blob: 8eecb635957fe1bae0c0d961a8b67a237f376a29 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!doctype html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<svg width="100" height="100">
  <rect width="100" height="100" fill="blue">
    <animate attributeName="fill" from="brown" to="red" dur="1000s"/>
  </rect>
</svg>
<script>
function isSampling() {
  return SpecialPowers.wrap(window).windowUtils.refreshDriverHasPendingTick;
}
function tick() {
  return new Promise(r => {
    requestAnimationFrame(() => requestAnimationFrame(r));
  });
}

// See comment in layout/base/tests/test_bug1756118.html about why the timeouts
// etc.
async function expectTicksToStop() {
  for (let i = 0; i < 100; i++) {
    await new Promise(r => setTimeout(r, 8));
    if(!isSampling()) {
      break;
    }
  }
  assert_false(isSampling(), "refresh driver should have eventually stopped ticking");
}

promise_test(async function(t) {
  await tick();
  assert_true(isSampling(), "Animation should be running");
  let svg = document.querySelector("svg");
  svg.remove();
  await tick();
  await expectTicksToStop();

  document.body.appendChild(svg);
  await tick();
  assert_true(isSampling(), "Animation should be running again");
});
</script>