2 <title>Test media source replacement
</title>
5 <p>Test that media keeps playing when the source element is replaced.
</p>
7 <script src=video-test.js
></script>
8 <script src=media-file.js
></script>
9 <script src=../resources/gc.js
></script>
11 var timeupdateEventCount
= 0;
13 var sourceReplaced
= false;
15 function swapAudio() {
16 v
= document
.getElementsByTagName('audio')[0];
17 v
.removeChild(v
.childNodes
[0]);
18 var s
= document
.createElement('source');
19 s
.src
= findMediaFile("audio", "content/test");
23 function errorListener(event
)
25 logResult(false, "Caught 'error' event, audio.error.code = " + this.error
.code
);
29 function canplaythroughListener(event
)
31 consoleWrite("EVENT(canplaythrough)");
33 testExpected("testElement.currentTime", 0);
37 function playingListener(event
)
39 consoleWrite("EVENT(playing)");
42 function timeupdateListener(event
)
44 ++timeupdateEventCount
;
46 if (timeupdateEventCount
-skippedCount
== 1) {
47 // If the media play has started it should continue even if
48 // source was replaced. Wait for two timeupdate events to
49 // make sure the same source keeps playing.
51 if (skippedCount
>= 1 || this.currentTime
> 0) {
53 testExpected("testElement.currentTime", 0, '>');
55 // The time is not 0 as expected. Make sure same
56 // source keeps playing by waiting for one more event.
60 } else if (timeupdateEventCount
-skippedCount
>= 2) {
61 // We wait 2 timeupdate events so we are sure the media engine
62 // is playing the media, and make sure time is advancing.
64 testExpected("testElement.currentTime", 0, '>');
65 if (!sourceReplaced
) {
66 consoleWrite("Replacing the media's source element:");
67 sourceReplaced
= true;
68 timeupdateEventCount
= 0;
70 // The ports are not consistent in regards to whether
71 // the canplaythrough and playing events are triggered
72 // a second time, so stop listening for them. This was
73 // done to help the cr-linux test pass, and does not
74 // necessarily indicate a problem.
75 this.removeEventListener('playing', playingListener
);
76 this.removeEventListener('canplaythrough', canplaythroughListener
);
79 this.removeEventListener('timeupdate', timeupdateListener
);
86 function testAudioElement(count
)
88 timeupdateEventCount
= 0;
90 var audioElement
= document
.getElementsByTagName('audio')[count
];
91 //audioElement.removeChild(audioElement.childNodes[0]);
92 audioElement
.addEventListener('error', errorListener
);
93 audioElement
.addEventListener('canplaythrough', canplaythroughListener
);
94 audioElement
.addEventListener('timeupdate', timeupdateListener
);
95 audioElement
.addEventListener('playing', playingListener
);
97 var s
= document
.createElement('source');
98 s
.src
= findMediaFile("audio", "content/silence");
99 audioElement
.appendChild(s
);
103 document
.write("<audio controls></audio>");