ladybird/Tests/LibWeb/Text/input/HTML/track-selection-after-forget.html
Zaggy1024 d36647427e LibWeb: Always set media track enabled state
...and avoid telling the media element about it unless the track is
actually associated. The media element should set its state later when
it queries the status upon metadata parsing.
2026-05-27 19:47:22 -05:00

49 lines
2.3 KiB
HTML

<!DOCTYPE html>
<video id="video"></video>
<script src="../include.js"></script>
<script>
asyncTest(async done => {
const video = document.getElementById("video");
try {
await new Promise((resolve, reject) => {
video.addEventListener("loadedmetadata", resolve, { once: true });
video.addEventListener("error", () => reject(new Error("load failed")), { once: true });
video.src = "../../../Assets/test-webm.webm";
});
println("video metadata loaded");
const videoTrackList = video.videoTracks;
const audioTrackList = video.audioTracks;
videoTrackList.addEventListener("change", () => println("videoTracks change event fired"));
videoTrackList.addEventListener("removetrack", () => println("videoTracks removetrack event fired"));
audioTrackList.addEventListener("change", () => println("audioTracks change event fired"));
audioTrackList.addEventListener("removetrack", () => println("audioTracks removetrack event fired"));
const orphanedVideoTrack = videoTrackList[0];
const orphanedAudioTrack = audioTrackList[0];
println(`captured video track (selected=${orphanedVideoTrack.selected}) and audio track (enabled=${orphanedAudioTrack.enabled})`);
video.removeAttribute("src");
video.load();
await new Promise(resolve => setTimeout(resolve, 0));
println(`reset video src (videoTracks.length is now ${videoTrackList.length})`);
orphanedVideoTrack.selected = false;
println(`orphaned video track selected=false (now ${orphanedVideoTrack.selected})`);
orphanedVideoTrack.selected = true;
println(`orphaned video track selected=true (now ${orphanedVideoTrack.selected})`);
orphanedAudioTrack.enabled = false;
println(`orphaned audio track enabled=false (now ${orphanedAudioTrack.enabled})`);
orphanedAudioTrack.enabled = true;
println(`orphaned audio track enabled=true (now ${orphanedAudioTrack.enabled})`);
await new Promise(resolve => setTimeout(resolve, 0));
done();
} catch (e) {
println(`error: ${e}`);
done();
}
});
</script>