<!doctype html>
<html>
<head>
  <meta charset='utf-8'>
  <title>SourceBuffer#abort() for already removed buffer from parent media source</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="log"></div>

<script>
var mimes = ['video/webm; codecs="vorbis,vp8"', 'video/mp4'];

//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(mime) {
    async_test(function(t) {
        if(!isTypeSupported.bind(t)(mime)) {
            return;
        }
        var mediaSource = new MediaSource();
        mediaSource.addEventListener('sourceopen', t.step_func_done(function(e) {
            var sourceBuffer = mediaSource.addSourceBuffer(mime);
            mediaSource.removeSourceBuffer(sourceBuffer);
            assert_throws({name: 'InvalidStateError'},
                          function() {
                              sourceBuffer.abort();
                          },
                          'SourceBuffer#abort() after removing the SourceBuffer object');
        }), false);
        var video = document.createElement('video');
        video.src = window.URL.createObjectURL(mediaSource);
    }, 'SourceBuffer#abort (' + mime + ') : ' +
       'if this object has been removed from the sourceBuffers attribute of the parent media source, ' +
       'then throw an INVALID_STATE_ERR exception and abort these steps.');
}
mimes.forEach(function(mime) {
    mediaTest(mime);
});
</script>
</body>
</html>
