test_trackelementevent.html (2270B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for Bug 882677 - Implement the 'sourcing out of band text tracks' algorithm</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script type="text/javascript" src="manifest.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 8 </head> 9 <body> 10 <video id="v" src="seek.webm" preload="auto"> 11 <script type="text/javascript"> 12 /** 13 * This test is used to ensure that we can load resource from vtt files correctly 14 * and will dispatch `error` event for invalid vtt files. 15 */ 16 var video = document.getElementById("v"); 17 18 async function runTest() { 19 let tracks = createTextTrackElements(); 20 appendTracksToVideo(tracks); 21 await waitUntilsTrackLoadedOrGetError(tracks); 22 SimpleTest.finish() 23 } 24 25 SimpleTest.waitForExplicitFinish(); 26 onload = runTest; 27 28 /** 29 * The following are test helper functions. 30 */ 31 function createTextTrackElements() { 32 // Only first track has valid vtt resource, other tracks should get the error 33 // event because of invalid vtt resources. 34 let trackOne = document.createElement("track"); 35 trackOne.src = "basic.vtt"; 36 trackOne.kind = "subtitles"; 37 trackOne.expectedLoaded = true; 38 39 let trackTwo = document.createElement("track"); 40 trackTwo.src = "bad-signature.vtt"; 41 trackTwo.kind = "captions"; 42 trackTwo.expectedLoaded = false; 43 44 let trackThree = document.createElement("track"); 45 trackThree.src = "bad.vtt"; 46 trackThree.kind = "chapters"; 47 trackThree.expectedLoaded = false; 48 49 return [trackOne, trackTwo, trackThree]; 50 } 51 52 function appendTracksToVideo(tracks) { 53 for (let track of tracks) { 54 video.appendChild(track); 55 } 56 } 57 58 async function waitUntilsTrackLoadedOrGetError(tracks) { 59 let promises = []; 60 for (let track of tracks) { 61 // explictly enable those track in order to start loading. 62 track.track.mode = "hidden"; 63 if (track.expectedLoaded) { 64 info(`adding 'load' event to wait list.`); 65 promises.push(once(track, "load")); 66 } else { 67 info(`adding 'error' event to wait list.`); 68 promises.push(once(track, "error")); 69 } 70 } 71 info(`wait until tracks finish loading or get error.`); 72 await Promise.all(promises); 73 ok(true, "all tracks finish loading or get error."); 74 } 75 </script> 76 </body> 77 </html>