test_cueless_webm_seek-3.html (3305B)
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-3 31 function testWebM3(e) { 32 var v = e.target; 33 v.removeEventListener('loadeddata', testWebM3); 34 35 var completed = false; 36 var gotTimeupdate = false; 37 38 ok(v.buffered.length >= 1, "Should have a buffered range"); 39 var halfBuffered = v.buffered.end(0) / 2; 40 41 function start() { 42 if (completed) 43 return; 44 45 is(v.seekable.start(0), v.buffered.start(0), "Seekable start should be buffered start"); 46 is(v.seekable.end(0), v.buffered.end(0), "Seekable end should be buffered end"); 47 v.currentTime=halfBuffered; 48 } 49 50 function timeupdate() { 51 gotTimeupdate = true; 52 v.removeEventListener("timeupdate", timeupdate); 53 } 54 55 function seekStarted() { 56 if (completed) 57 return; 58 59 v.addEventListener("timeupdate", timeupdate); 60 } 61 62 function seekEnded() { 63 if (completed) 64 return; 65 66 var t = v.currentTime; 67 ok(Math.abs(t - halfBuffered) <= 0.1, "Video currentTime should be around " + halfBuffered + ": " + t); 68 ok(gotTimeupdate, "Should have got timeupdate between seeking and seekended"); 69 completed = true; 70 removeNodeAndSource(v); 71 manager.finished(v._token); 72 } 73 74 v.addEventListener("seeking", seekStarted); 75 v.addEventListener("seeked", seekEnded); 76 77 start() 78 } 79 80 // Fetch the media resource using XHR so we can be sure the entire 81 // resource is loaded before we test buffered ranges. This ensures 82 // we have deterministic behaviour. 83 function fetch(url, fetched_callback) { 84 var xhr = new XMLHttpRequest(); 85 xhr.open("GET", url, true); 86 xhr.responseType = "blob"; 87 88 var loaded = function () { 89 if (xhr.status == 200 || xhr.status == 206) { 90 // Request fulfilled. Note sometimes we get 206... Presumably because either 91 // httpd.js or Necko cached the result. 92 fetched_callback(window.URL.createObjectURL(xhr.response)); 93 } else { 94 ok(false, "Fetch failed headers=" + xhr.getAllResponseHeaders()); 95 } 96 }; 97 98 xhr.addEventListener("load", loaded); 99 xhr.send(); 100 } 101 102 function startTest(test, token) { 103 var onfetched = function(uri) { 104 var v = document.createElement('video'); 105 v._token = token; 106 v.src = uri; 107 v.addEventListener("loadeddata", testWebM3); 108 document.body.appendChild(v); 109 } 110 manager.started(token); 111 fetch(test.name, onfetched); 112 } 113 114 SimpleTest.waitForExplicitFinish(); 115 manager.runTests(gCuelessWebMTests, startTest); 116 117 </script> 118 </pre> 119 </body> 120 </html>