<!DOCTYPE html>
<title>Makes sure that preloaded resources trigger the onload event</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/preload/resources/preload_helper.js"></script>
<script>
    var scriptLoaded = false;
    var styleLoaded = false;
    var imageLoaded = false;
    var fontLoaded = false;
    var videoLoaded = false;
    var audioLoaded = false;
    var trackLoaded = false;
    var gibberishLoaded = false;
    var gibberishErrored = false;
    var noTypeLoaded = false;
    var fetchLoaded = false;
</script>
<link rel=preload href="resources/dummy.js" as=script onload="scriptLoaded = true;">
<link rel=preload href="resources/dummy.css" as=style onload="styleLoaded = true;">
<link rel=preload href="resources/square.png" as=image onload="imageLoaded = true;">
<link rel=preload href="/fonts/CanvasTest.ttf" as=font crossorigin onload="fontLoaded = true;">
<link rel=preload href="resources/white.mp4" as=video onload="videoLoaded = true;">
<link rel=preload href="resources/sound_5.oga" as=audio onload="audioLoaded = true;">
<link rel=preload href="resources/foo.vtt" as=track onload="trackLoaded = true;">
<link rel=preload href="resources/dummy.xml?foo=bar" as=foobarxmlthing onload="gibberishLoaded = true;" onerror="gibberishErrored = true;">
<link rel=preload href="resources/dummy.xml?fetch" as=fetch onload="fetchLoaded = true;">
<link rel=preload href="resources/dummy.xml" onload="noTypeLoaded = true;">
<body>
<script>
    setup({explicit_done: true});

    var iterations = 0;

    function check_finished() {
        if (styleLoaded && scriptLoaded && imageLoaded && fontLoaded && videoLoaded && audioLoaded &&
            trackLoaded && !gibberishLoaded && !gibberishErrored && fetchLoaded && !noTypeLoaded) {
            done();
        }
        iterations++;
        if (iterations == 10) {
            // At least one is expected to fail, but this should give details to the exact failure(s).
            assert_true(styleLoaded, "style triggered load event");
            assert_true(scriptLoaded, "script triggered load event");
            assert_true(imageLoaded, "image triggered load event");
            assert_true(fontLoaded, "font triggered load event");
            assert_true(videoLoaded, "video triggered load event");
            assert_true(audioLoaded, "audio triggered load event");
            assert_true(trackLoaded, "track triggered load event");
            assert_false(gibberishLoaded, "gibberish as value triggered load event");
            assert_false(gibberishErrored, "gibberish as value triggered error event");
            assert_true(fetchLoaded, "fetch as value triggered load event");
            assert_false(noTypeLoaded, "empty as triggered load event");
            done();
        } else {
            step_timeout(check_finished, 500);
        }
    }

    window.addEventListener("load", function() {
        verifyPreloadAndRTSupport();
        step_timeout(check_finished, 500);
    });
</script>
</body>
