1 <html> 2 <body onload="RunTest();"> 3 <div id="player_container"></div> 4 </body> 5 6 <script type="text/javascript"> 7 // <audio> or <video> player element. 8 var player; 9 10 // Listen for |event| from |element|, set document.title = |event| upon event. 11 function InstallTitleEventHandler(element, event) { 12 element.addEventListener(event, function(e) { 13 document.title = event.toUpperCase(); 14 }, false); 15 } 16 17 function Failed() { 18 document.title = 'FAILED'; 19 return false; 20 } 21 22 function SeekTestStep(e) { 23 player.removeEventListener('ended', SeekTestStep, false); 24 25 // Test completes on the next ended event. 26 InstallTitleEventHandler(player, 'ended'); 27 28 player.currentTime = 0.9 * player.duration; 29 player.play(); 30 } 31 32 function SeekTestTimeoutSetup() { 33 if (player.currentTime < 2) 34 return; 35 36 player.removeEventListener('timeupdate', SeekTestTimeoutSetup, false); 37 SeekTestStep(); 38 } 39 40 // Uses URL query parameters to create an audio or video element using a given 41 // source. URL must be of the form "player.html?[tag]=[media_url]". Plays the 42 // media and waits for X seconds of playback or the ended event, at which point 43 // the test seeks near the end of the file and resumes playback. Test completes 44 // when the second ended event occurs or an error event occurs at any time. 45 function RunTest() { 46 var url_parts = window.location.href.split('?'); 47 if (url_parts.length != 2) 48 return Failed(); 49 50 var query_parts = url_parts[1].split('='); 51 if (query_parts.length != 2) 52 return Failed(); 53 54 var tag = query_parts[0]; 55 var media_url = query_parts[1]; 56 if (tag != 'audio' && tag != 'video') 57 return Failed(); 58 59 // Create player and insert into DOM. 60 player = document.createElement(tag); 61 player.controls = true; 62 document.getElementById('player_container').appendChild(player); 63 64 player.addEventListener('loadedmetadata', function(e) { 65 document.title = '' + player.videoWidth + ' ' + player.videoHeight; 66 }); 67 68 // Transition to the seek test after X seconds of playback or when the ended 69 // event occurs, whichever happens first. 70 player.addEventListener('ended', SeekTestStep, false); 71 player.addEventListener('timeupdate', SeekTestTimeoutSetup, false); 72 73 // Ensure we percolate up any error events. 74 InstallTitleEventHandler(player, 'error'); 75 76 // Starts the player. 77 player.src = media_url; 78 player.play(); 79 } 80 </script> 81 </html> 82