blob: 93d5892f0965386b4b7f86798aef9cc57a9f2c8f [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src=video-test.js></script>
<script src=media-file.js></script>
<script>
var canPlayThroughCount = 0;
function onCanPlayThrough() {
if (++canPlayThroughCount == document.getElementsByTagName('video').length + document.getElementsByTagName('audio').length) {
endTest();
return;
}
}
function onError(e) {
var type = e.target.type;
if (!type) {
var src = e.target.src;
var semicolon;
if ((src.substr(0,5) == "data:") && ((semicolon = src.substr(5).indexOf(';')) > 0))
type = src.substr(5).substr(0, semicolon);
if (!type) {
failTest("Couldn't find type");
return;
}
}
if (e.target.tagName == 'SOURCE' && !e.target.parentNode.canPlayType(type)) {
// Expected error; ignore.
return;
}
var id = (e.target.tagName == 'SOURCE' ? e.target.parentNode.id : e.target.id);
failTest("tag: " + e.target.tagName + ", id: " + id + ", src: " + e.target.src);
}
function createSourceOfType(type)
{
const source = document.createElement('source');
source.type = `video/${type}`;
source.src = dataURL(type);
return source;
}
function setup()
{
let video = document.getElementById('v3');
video.appendChild(createSourceOfType('mp4'));
video.appendChild(createSourceOfType('ogg'));
video = document.getElementById('v4');
video.appendChild(createSourceOfType('mp4'));
video.appendChild(createSourceOfType('ogg'));
}
</script>
</head>
<body onload="setup()">
Test that fallback among codecs is done correctly regardless of their order.
<!-- This could be made far more general, testing all permutations of
(audio|video)Codecs and so on, but in reality we only have these 4
test files, so simply enumerating them manually and testing they
all hit canplaythrough is good enough. Someday when many more
files are present, consider generalizing this.
-->
<video id='v1' controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
<source onerror='onError(event)' type="video/mp4" src="content/test.mp4"/>
<source onerror='onError(event)' type="video/ogg" src="content/test.ogv"/>
</video>
<video id='v2' controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
<source onerror='onError(event)' type="video/ogg" src="content/test.ogv"/>
<source onerror='onError(event)' type="video/mp4" src="content/test.mp4"/>
</video>
<audio id='a1' controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
<source onerror='onError(event)' type="audio/wav" src="content/test.wav"/>
<source onerror='onError(event)' type="audio/ogg" src="content/test.oga"/>
</audio>
<audio id='a2' controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
<source onerror='onError(event)' type="audio/ogg" src="content/test.oga"/>
<source onerror='onError(event)' type="audio/wav" src="content/test.wav"/>
</audio>
<video id="v3" controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
</video>
<video id="v4" controls oncanplaythrough='onCanPlayThrough()' onerror='onError(event)'>
</video>
</body>
</html>