track-cues-add-new-track.html (2140B)
1 <!DOCTYPE html> 2 <title>Adding a new track with a cue during playback should fire events</title> 3 <script src="/common/media.js"></script> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <video> 7 </video> 8 <script> 9 async_test(t => { 10 const video = document.querySelector("video"); 11 let trackAdded = false; 12 let cue1Entered = false; 13 let cue1Exited = false; 14 let cue2Entered = false; 15 let cue2Exited = false; 16 17 // Test Case 1: Track added before video.play() 18 const track1 = video.addTextTrack("subtitles"); 19 let cue1 = new VTTCue(0.1, 0.3, "Cue1"); 20 cue1.onenter = t.step_func(() => { 21 cue1Entered = true; 22 }); 23 cue1.onexit = t.step_func(() => { 24 cue1Exited = true; 25 maybeDone(); 26 }); 27 track1.addCue(cue1); 28 29 video.ontimeupdate = t.step_func(() => { 30 // Test Case 2: Add a new track after video starts playing. 31 if (!trackAdded && video.currentTime > 0.1) { 32 trackAdded = true; 33 const track2 = video.addTextTrack("subtitles"); 34 let cue2 = new VTTCue(video.currentTime + 0.1, video.currentTime + 0.3, "Cue2"); 35 cue2.onenter = t.step_func(() => { 36 cue2Entered = true; 37 }); 38 cue2.onexit = t.step_func(() => { 39 cue2Exited = true; 40 maybeDone(); 41 }); 42 track2.addCue(cue2); 43 } 44 45 if (video.currentTime > 1.0) { 46 video.ontimeupdate = null; 47 // Fail the test if not all events have fired by now 48 assert_true(cue1Entered, "Cue1 should have entered"); 49 assert_true(cue1Exited, "Cue1 should have exited"); 50 assert_true(cue2Entered, "Cue2 should have entered"); 51 assert_true(cue2Exited, "Cue2 should have exited"); 52 t.done(); 53 } 54 }); 55 56 function maybeDone() { 57 if (cue1Entered && cue1Exited && cue2Entered && cue2Exited) { 58 video.ontimeupdate = null; 59 t.done(); 60 } 61 } 62 63 video.src = getVideoURI("/media/test"); 64 video.play(); 65 }); 66 </script>