ladybird/Tests/LibWeb/Text/input/HTML/HTMLMediaElement-load-during-error.html

63 lines
1.8 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html>
<script src="../include.js"></script>
<script src="HTMLMediaElement-include.js"></script>
<video id="video" src="nonexistent-video.webm"></video>
<script>
// The video must exist before DOMContentLoaded can fire, so that the load event is
// delayed. Therefore, we must attach handlers to the events and cache all the events
// outside the async test.
const video = document.getElementById("video");
function logEvent(name) {
let entry = `${name}: ${formatReadyStateExpectation(video, name)}`;
if (name === "durationchange")
entry += ` duration=${video.duration}`;
println(entry);
}
for (const name of [
"loadstart", "abort", "error", "emptied",
"loadedmetadata", "loadeddata", "canplay",
"canplaythrough", "durationchange", "ended",
]) {
video.addEventListener(name, () => logEvent(name));
}
video.addEventListener("error", () => {
println("error handler: setting good src");
video.src = "../../../Assets/test-webm.webm";
println("error handler: src setter returned");
});
let documentLoaded = false;
let videoLoaded = false;
let videoCanPlayThrough = false;
let triggerCompletion = null;
function checkCompletion() {
if (documentLoaded && videoLoaded && videoCanPlayThrough)
triggerCompletion();
}
window.addEventListener("load", () => {
println("document loaded");
documentLoaded = true;
checkCompletion();
});
video.addEventListener("loadeddata", () => {
videoLoaded = true;
checkCompletion();
});
video.addEventListener("canplaythrough", () => {
videoCanPlayThrough = true;
checkCompletion();
});
asyncTest(done => {
triggerCompletion = done;
checkCompletion();
});
</script>