<!DOCTYPE html>
<title>Test that the document's load event is delayed until a video's meta data is available.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="media-file.js"></script>
<video id="video1"></video>
<video id="video2"></video>
<video id="video3"><source></source></video>
<script>
async_test(function(t) {
    assertVideoNoSrcNoLoad(document.getElementById("video1"));

    var video = document.getElementById("video2");
    video.src = findMediaFile("video", "content/test");
    assertVideoSrcNoLoad(video);

    var source = document.querySelector("source");
    source.src = findMediaFile("video", "content/test");
    assertVideoSrcNoLoad(document.getElementById("video3"));

    window.onload = t.step_func_done(function() {
        assertVideoNoSrcNoLoad(document.getElementById("video1"));
        assertVideoSrcLoad(document.getElementById("video2"));
        assertVideoSrcLoad(document.getElementById("video3"));
    });

    function assertVideoNoSrcNoLoad(video) {
        // Video should not load as there is no "src".
        assert_equals(video.networkState, HTMLMediaElement.NETWORK_EMPTY);
        assert_equals(video.readyState, HTMLMediaElement.HAVE_NOTHING);
    }

    function assertVideoSrcNoLoad(video) {
        // Video loading has just triggered.
        assert_equals(video.networkState, HTMLMediaElement.NETWORK_NO_SOURCE);
        assert_equals(video.readyState, HTMLMediaElement.HAVE_NOTHING);
    }

    function assertVideoSrcLoad(video) {
        // The Video should have loaded at least to HAVE_CURRENT_DATA
        assert_not_equals(video.networkState, HTMLMediaElement.NETWORK_NO_SOURCE);
        assert_greater_than_equal(video.networkState, HTMLMediaElement.NETWORK_IDLE);
        assert_greater_than_equal(video.readyState, HTMLMediaElement.HAVE_CURRENT_DATA);
    }
});
</script>