blob: e41b2ec4f6582774d10057e96fc93482a450c0dd [file] [log] [blame]
<!DOCTYPE html>
<title>Test that multiple audio elements can play concurrently.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script>
async_test(function(t) {
// Number of concurrent audio elements to test.
// For larger values a longer media file is needed.
var maxPlayers = 2;
var audioElementCount = 0;
for (var i = 0; i < maxPlayers; i++) {
var audio = document.createElement("audio");
document.documentElement.appendChild(audio);
}
testAudioElement(0);
function testAudioElement(count) {
var audioElement = document.querySelectorAll("audio")[count];
audioElement.onerror = t.unreached_func();
audioElement.onplaying = t.step_func(function() {});
audioElement.oncanplaythrough = t.step_func(function(event) {
var currentAudio = event.target;
assert_equals(currentAudio.currentTime, 0, "audio element " + (audioElementCount + 1) + " at start of playback");
currentAudio.play();
});
audioElement.ontimeupdate = t.step_func(function(event) {
var currentAudio = event.target;
assert_greater_than(currentAudio.currentTime, 0, "audio element " + (audioElementCount + 1) + " during playback");
currentAudio.ontimeupdate = null;
if (++audioElementCount == maxPlayers) {
// All audio elements have been started playing.
// Make sure all of them are still playing.
for (var i = 0; i < maxPlayers; i++) {
currentAudio = document.getElementsByTagName('audio')[i];
assert_false(currentAudio.paused, "audio element " + (i + 1) + " during playback");
}
t.done();
} else {
// Start the next audio element.
testAudioElement(audioElementCount);
}
});
audioElement.src = "content/silence.oga";
}
});
</script>