<html>
    <head>
        <script src="media-file.js"></script>
        <script src="video-test.js"></script>
        <script>
            var playbackStarted = false;
            function start()
            {
                findMediaElement();
                video.src = findMediaFile("video", "content/test");

                testExpected("video.preload", "metadata");
                waitForEvent('loadedmetadata', onLoadedMetadata);
                failTestIn(2000);
            }
            function onLoadedMetadata()
            {
                testExpected("video.videoWidth", 320);
                testExpected("video.videoHeight", 240);
                endTest();
            }
        </script>
    </head>

    <body onload="start()">
        <video controls preload="metadata"></video>
        <p>Test that preload="metadata" results in the correct naturalSize.</p>
    </body>
</html>
