test_cueless_webm_seek-2.html (3358B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=657791 5 --> 6 <head> 7 <title>Test for Bug 657791</title> 8 <script src="/tests/SimpleTest/SimpleTest.js"></script> 9 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 10 <script type="text/javascript" src="manifest.js"></script> 11 </head> 12 <body> 13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=657791">Mozilla Bug 657791</a> 14 15 <p id="display"></p> 16 <div id="content" style="display: none"> 17 18 </div> 19 <pre id="test"> 20 <script type="application/javascript"> 21 22 // Subset of seek tests for cueless WebMs. When random seeking (rather than just 23 // in buffered ranges) is implemented for WebM, these tests can be removed and 24 // the cueless WebM(s) references can be moved to the general test_seek test 25 // array. 26 // Test array is defined in manifest.js 27 28 var manager = new MediaTestManager; 29 30 // Exercise functionality as in test_seek-2 31 function testWebM2(e) { 32 var v = e.target; 33 v.removeEventListener('loadeddata', testWebM2); 34 35 var startPassed = false; 36 var endPassed = false; 37 var completed = false; 38 39 ok(v.buffered.length >= 1, "Should have a buffered range"); 40 var halfBuffered = v.buffered.end(0) / 2; 41 42 function start() { 43 if (completed) 44 return; 45 46 is(v.seekable.start(0), v.buffered.start(0), "Seekable start should be buffered start"); 47 is(v.seekable.end(0), v.buffered.end(0), "Seekable end should be buffered end"); 48 v.currentTime=halfBuffered; 49 v.play(); 50 } 51 52 function seekStarted() { 53 if (completed) 54 return; 55 56 startPassed = true; 57 } 58 59 function seekEnded() { 60 if (completed) 61 return; 62 63 endPassed = true; 64 } 65 66 function playbackEnded() { 67 if (completed) 68 return; 69 70 completed = true; 71 ok(startPassed, "send seeking event"); 72 ok(endPassed, "send seeked event"); 73 ok(v.ended, "Checking playback has ended"); 74 ok(Math.abs(v.currentTime - v.duration) <= 0.1, "Checking currentTime at end: " + v.currentTime); 75 removeNodeAndSource(v); 76 manager.finished(v._token); 77 } 78 79 v.addEventListener("ended", playbackEnded); 80 v.addEventListener("seeking", seekStarted); 81 v.addEventListener("seeked", seekEnded); 82 83 start(); 84 } 85 86 // Fetch the media resource using XHR so we can be sure the entire 87 // resource is loaded before we test buffered ranges. This ensures 88 // we have deterministic behaviour. 89 function fetch(url, fetched_callback) { 90 var xhr = new XMLHttpRequest(); 91 xhr.open("GET", url, true); 92 xhr.responseType = "blob"; 93 94 var loaded = function () { 95 if (xhr.status == 200 || xhr.status == 206) { 96 // Request fulfilled. Note sometimes we get 206... Presumably because either 97 // httpd.js or Necko cached the result. 98 fetched_callback(window.URL.createObjectURL(xhr.response)); 99 } else { 100 ok(false, "Fetch failed headers=" + xhr.getAllResponseHeaders()); 101 } 102 }; 103 104 xhr.addEventListener("load", loaded); 105 xhr.send(); 106 } 107 108 function startTest(test, token) { 109 var onfetched = function(uri) { 110 var v = document.createElement('video'); 111 v._token = token; 112 v.src = uri; 113 v.addEventListener("loadeddata", testWebM2); 114 document.body.appendChild(v); 115 } 116 manager.started(token); 117 fetch(test.name, onfetched); 118 } 119 120 SimpleTest.waitForExplicitFinish(); 121 manager.runTests(gCuelessWebMTests, startTest); 122 123 </script> 124 </pre> 125 </body> 126 </html>