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