File: getAnimations.html

package info (click to toggle)
thunderbird 1%3A68.10.0-1~deb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 2,754,812 kB
  • sloc: cpp: 5,411,679; javascript: 4,161,772; ansic: 2,639,702; python: 763,064; java: 346,606; xml: 266,623; asm: 265,884; sh: 117,270; lisp: 41,340; makefile: 23,560; perl: 18,042; objc: 5,277; yacc: 1,778; ada: 1,681; pascal: 1,673; lex: 1,417; cs: 879; exp: 527; awk: 495; php: 436; ruby: 221; sed: 69; csh: 27
file content (119 lines) | stat: -rw-r--r-- 4,264 bytes parent folder | download | duplicates (2)
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<!DOCTYPE html>
<meta charset=utf-8>
<title>Document.getAnimations</title>
<link rel="help" href="https://drafts.csswg.org/web-animations/#dom-document-getanimations">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../../testcommon.js"></script>
<body>
<div id="log"></div>
<div id="target"></div>
<script>
'use strict';

const gKeyFrames = { 'marginLeft': ['100px', '200px'] };

test(t => {
  assert_equals(document.getAnimations().length, 0,
                'getAnimations returns an empty sequence for a document ' +
                'with no animations');
}, 'Test document.getAnimations for non-animated content');

test(t => {
  const div = createDiv(t);
  const anim1 = div.animate(gKeyFrames, 100 * MS_PER_SEC);
  const anim2 = div.animate(gKeyFrames, 100 * MS_PER_SEC);
  assert_equals(document.getAnimations().length, 2,
                'getAnimation returns running animations');

  anim1.finish();
  anim2.finish();
  assert_equals(document.getAnimations().length, 0,
                'getAnimation only returns running animations');
}, 'Test document.getAnimations for script-generated animations')

test(t => {
  const div = createDiv(t);
  const anim1 = div.animate(gKeyFrames, 100 * MS_PER_SEC);
  const anim2 = div.animate(gKeyFrames, 100 * MS_PER_SEC);
  assert_array_equals(document.getAnimations(),
                      [ anim1, anim2 ],
                      'getAnimations() returns running animations');
}, 'Test the order of document.getAnimations with script generated animations')

test(t => {
  // This element exists but is not a descendent of any document, so isn't
  // picked up by getAnimations.
  const div = document.createElement('div');
  const anim = div.animate(gKeyFrames, 100 * MS_PER_SEC);
  assert_equals(document.getAnimations().length, 0);

  // Now connect the div; it should appear in the list of animations.
  document.body.appendChild(div);
  t.add_cleanup(() => { div.remove(); });
  assert_equals(document.getAnimations().length, 1);
}, 'Test document.getAnimations for a disconnected node');

test(t => {
  const effect = new KeyframeEffect(null, gKeyFrames, 100 * MS_PER_SEC);
  const anim = new Animation(effect, document.timeline);
  anim.play();

  assert_equals(document.getAnimations().length, 0,
                'document.getAnimations() only returns animations targeting ' +
                'elements in this document');
}, 'Test document.getAnimations with null target');

promise_test(async t => {
  const iframe = document.createElement('iframe');

  const eventWatcher = new EventWatcher(t, iframe, ['load']);

  document.body.appendChild(iframe);
  t.add_cleanup(() => { document.body.removeChild(iframe); });

  await eventWatcher.wait_for('load');

  const div = createDiv(t, iframe.contentDocument)
  const effect = new KeyframeEffect(div, null, 100 * MS_PER_SEC);
  const anim = new Animation(effect, document.timeline);
  anim.play();

  // The animation's timeline is from the main document, but the effect's
  // target element is part of the iframe document and that is what matters
  // for getAnimations.
  assert_equals(document.getAnimations().length, 0);
  assert_equals(iframe.contentDocument.getAnimations().length, 1);
  anim.finish();
}, 'Test document.getAnimations for elements inside same-origin iframes');

promise_test(async t => {
  const div = createDiv(t);
  const watcher = EventWatcher(t, div, 'transitionrun');

  // Create a covering animation to prevent transitions from firing after
  // calling getAnimations().
  const coveringAnimation = new Animation(
    new KeyframeEffect(div, { opacity: [0, 1] }, 100 * MS_PER_SEC)
  );

  // Setup transition start point.
  div.style.transition = 'opacity 100s';
  getComputedStyle(div).opacity;

  // Update specified style but don't flush style.
  div.style.opacity = '0.5';

  // Fetch animations
  document.getAnimations();

  // Play the covering animation to ensure that only the call to
  // getAnimations() has a chance to trigger transitions.
  coveringAnimation.play();

  // If getAnimations() flushed style, we should get a transitionrun event.
  await watcher.wait_for('transitionrun');
}, 'Triggers a style change event');

</script>
</body>