test_seamless_looping_seek_current_time.html (2083B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Seamless looping current time after seek</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 7 <script type="text/javascript" src="manifest.js"></script> 8 </head> 9 <script type="application/javascript"> 10 11 /** 12 * This test is used to ensure that the playback position won't be reset to ZERO 13 * incorrectly when performing seek on a looping media. 14 */ 15 add_task(async function testSeekVideoOnlyPlayback() { 16 info(`create and play a media which contains only video track`); 17 let video = createLoopingMedia("video", "gizmo-noaudio.webm"); 18 await video.play(); 19 await assertSeekingForwardShouldIncreaseCurrentTime(video); 20 removeNodeAndSource(video); 21 }); 22 23 add_task(async function testSeekAudioOnlyPlayback() { 24 info(`create and play a media which contains only audio track`); 25 let audio = createLoopingMedia("audio", "flac-s24.flac"); 26 await audio.play(); 27 await assertSeekingForwardShouldIncreaseCurrentTime(audio); 28 removeNodeAndSource(audio); 29 }); 30 31 add_task(async function testSeekBothTracksPlayback() { 32 info(`create and play a media which contains both tracks`); 33 let video = createLoopingMedia("video", "gizmo.mp4"); 34 await video.play(); 35 await assertSeekingForwardShouldIncreaseCurrentTime(video); 36 removeNodeAndSource(video); 37 }); 38 39 // Following are helper functions 40 function createLoopingMedia(type, src) { 41 let media = document.createElement(type); 42 media.loop = true; 43 media.src = src; 44 document.body.appendChild(media); 45 return media; 46 } 47 48 async function assertSeekingForwardShouldIncreaseCurrentTime(media) { 49 const currentTimeBeforeSeek = media.currentTime; 50 const target = media.duration / 2; 51 media.currentTime = target; 52 await once(media, "seeked"); 53 const currentTimeAfterSeek = media.currentTime; 54 ok(currentTimeAfterSeek > currentTimeBeforeSeek, 55 `media current time should keep going forward (target=${target}, ` + 56 `currentTime=${currentTimeBeforeSeek} -> ${currentTimeAfterSeek})`); 57 } 58 59 </script> 60 <body> 61 </body> 62 </html>