Fri, 16 Jan 2015 04:50:19 +0100
Replace accessor implementation with direct member state manipulation, by
request https://trac.torproject.org/projects/tor/ticket/9701#comment:32
1 <!DOCTYPE HTML>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id=467972
5 -->
6 <head>
7 <title>Test for Bug 467972</title>
8 <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
10 <script type="text/javascript" src="manifest.js"></script>
11 </head>
12 <body>
13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=467972">Mozilla Bug 467972</a>
15 <p id="display"></p>
16 <div id="content" style="display: none">
18 </div>
19 <pre id="test">
20 <script type="application/javascript">
22 // Test for Bug 467972. Tests that when we play to end, seek to 0, and play again, that we don't
23 // send/receive multiple loadeddata and loadedmetadata events.
25 var manager = new MediaTestManager;
27 function seekStarted(evt) {
28 var v = evt.target;
29 v._gotSeekStarted = true;
30 }
32 function seekEnded(evt) {
33 var v = evt.target;
34 v._gotSeekEnded = true;
35 v.play();
36 }
38 function loadedData(evt) {
39 var v = evt.target;
40 v._loadedDataCount++;
41 ok(v._loadedDataCount <= 1, "No more than 1 onloadeddata event for " + v._name);
42 }
44 function loadedMetaData(evt) {
45 var v = evt.target;
46 v._loadedMetaDataCount++;
47 ok(v._loadedMetaDataCount <= 1, "No more than 1 onloadedmetadata event for " + v._name);
48 checkMetadata(v._name, v, v._test);
49 v.play();
50 }
52 function playing(evt) {
53 evt.target._playingCount++;
54 }
56 function removeNodeAndListener(n) {
57 n.removeEventListener("loadedmetadata", loadedMetaData, false);
58 n.removeEventListener("ended", playbackEnded, false);
59 n.removeEventListener("playing", playing, false);
60 n.removeEventListener("loadeddata", loadedData, false);
61 n.removeEventListener("seeking", seekStarted, false);
62 n.removeEventListener("seeked", seekEnded, false);
63 removeNodeAndSource(n);
64 }
66 function playbackEnded(evt) {
67 var v = evt.target;
68 v._endCount++;
69 ok(v.currentTime >= v.duration-0.1 && v.currentTime <= v.duration + 0.1,
70 "CurrentTime (" + v.currentTime + ") should be around " + v.duration
71 + " for " + v._name);
72 if (!v._playedOnce) {
73 v.currentTime = 0;
74 ok(v.seeking, "seeking should be true for " + v._name);
75 ok(!v.ended, "ended shouldn't be true once seeking has begun for " + v._name);
76 v._playedOnce = true;
77 } else {
78 ok(v._gotSeekEnded, "Should have received seekended for " + v._name);
79 ok(v._gotSeekStarted, "Should have received seekstarted for " + v._name);
80 is(v._loadedDataCount, 1, "Should have 1 onloadeddata event for " + v._name);
81 is(v._loadedMetaDataCount, 1, "Should have 1 onloadedmetadata event for " + v._name);
82 is(v._endCount, 2, "Should have received two ended events for " + v._name);
83 ok(v._playingCount > 0, "Should have at least one playing event for " + v._name);
84 v._finished = true;
85 removeNodeAndListener(v);
86 manager.finished(v.token);
87 }
88 }
90 function startTest(test, token) {
91 var v = document.createElement('video');
92 v.preload = "auto";
93 v.token = token;
94 manager.started(token);
95 v.src = test.name;
96 v._name = test.name;
97 v._playedOnce = false;
98 v._gotSeekEnded = false;
99 v._gotSeekStarted = false;
100 v._loadedDataCount = 0;
101 v._loadedMetaDataCount = 0;
102 v._playingCount = 0;
103 v._endCount = 0;
104 v._test = test;
105 v._finished = false;
106 v.addEventListener("loadedmetadata", loadedMetaData, false);
107 v.addEventListener("ended", playbackEnded, false);
108 v.addEventListener("playing", playing, false);
109 v.addEventListener("loadeddata", loadedData, false);
110 v.addEventListener("seeking", seekStarted, false);
111 v.addEventListener("seeked", seekEnded, false);
112 document.body.appendChild(v);
113 }
115 manager.runTests(gSmallTests, startTest);
117 </script>
118 </pre>
119 </body>
120 </html>