chromium/third_party/blink/web_tests/media/video-src-change.html

<!DOCTYPE html>
<title>Test that an invalid "src" fires an error event and changing "src" to a valid one triggers media load.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<video></video>
<script>
// 1. Test that an invalid src attribute fires an error when the file fails to load.
// 2. Test that changing src attribute triggers load after a load fails.
// 3. Test that changing src triggers load once a file is known to be valid.
async_test(function(t) {
    var mediaFile;
    var loadedCount = 0;
    var video = document.querySelector("video");

    video.onloadedmetadata = t.step_func(function() {
        var url = video.currentSrc;
        assert_equals(url.substr(url.lastIndexOf("/media/")+7), mediaFile);
        assert_false(isNaN(video.duration));

        if (++loadedCount == 2) {
            t.done();
            return;
        }

        mediaFile = "content/counting.ogv";
        video.src = mediaFile;
    });

    video.onerror = t.step_func(function() {
        assert_equals(loadedCount, 0);
        var url = video.currentSrc;
        assert_equals(url.substr(url.lastIndexOf("/media/")+7), "bogus");
        assert_equals(video.networkState, HTMLMediaElement.NETWORK_NO_SOURCE);
        assert_equals(video.error.code, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);
        mediaFile = "content/test.ogv";
        video.src = mediaFile;
    });

    mediaFile = "bogus";
    video.src = mediaFile;
});
</script>