<!doctype html> <html> <head> <meta charset='utf-8'> <title>Check SourceBuffer#abort() when the updating attribute is true</title> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> <div id="log"></div> <script> var contents = {'/media/white.webm': 'video/webm; codecs="vorbis,vp8"', '/media/white.mp4' : 'video/mp4'}; function GET(url, processBody) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.send(); xhr.onload = function(e) { if (xhr.status != 200) { alert("Unexpected status code " + xhr.status + " for " + url); return false; } processBody(new Uint8Array(xhr.response)); }; } //check the browser supports the MIME used in this test function isTypeSupported(mime) { if(!MediaSource.isTypeSupported(mime)) { this.step(function() { assert_unreached("Browser doesn't support the MIME used in this test: " + mime); }); this.done(); return false; } return true; } function mediaTest(file, mime) { async_test(function(t) { if(!isTypeSupported.bind(t)(mime)) { return; } GET(file, function(data) { var mediaSource = new MediaSource(); var num_updateend = 0; var events = []; mediaSource.addEventListener('sourceopen', t.step_func(function(e) { var sourceBuffer = mediaSource.addSourceBuffer(mime); assert_equals(sourceBuffer.updating, false); sourceBuffer.addEventListener('updatestart', t.step_func(function(e) { events.push('updatestart'); //abort when sourceBuffer#updating is true sourceBuffer.abort(); assert_equals(sourceBuffer.updating, false, 'Check updating value after calling abort.'); assert_equals(sourceBuffer.appendWindowStart, 0); assert_equals(sourceBuffer.appendWindowEnd, Number.POSITIVE_INFINITY); })); sourceBuffer.addEventListener('update', t.step_func(function(e) { assert_unreached("Can't touch this"); })); sourceBuffer.addEventListener('updateend', function(e) { events.push('updateend'); mediaSource.endOfStream(); }); sourceBuffer.addEventListener('abort', function(e) { events.push('abort'); }); sourceBuffer.addEventListener('error', t.step_func(function(e) { assert_unreached("Can't touch this"); })); sourceBuffer.appendBuffer(data); })); mediaSource.addEventListener('sourceended', t.step_func_done(function(e) { assert_array_equals(events, ['updatestart', 'abort', 'updateend'], 'Check the sequence of fired events.'); })); var video = document.createElement('video'); video.src = window.URL.createObjectURL(mediaSource); }); }, 'SourceBuffer#abort() (' + mime + ') : Check the algorithm when the updating attribute is true.'); } for(var file in contents) { mediaTest(file, contents[file]); } </script> </body> </html>