<html>
<head>
    <style> video { zoom: 150%; border: 3px solid red; } </style>
    <script src=media-file.js></script>
    <script>
        if (window.internals)
            window.internals.settings.setMockScrollbarsEnabled(true);

        function init()
        {
            setSrcByTagName("video", findMediaFile("video", "content/test"));

            var totalCount = document.getElementsByTagName('video').length;
            var count = totalCount;
            document.addEventListener("canplaythrough", function () {
                if (!--count) {
                    if (window.testRunner)
                        setTimeout(function() { testRunner.notifyDone(); }, totalCount * 150);
                }
            }, true);

            if (window.testRunner) {
                testRunner.waitUntilDone();
                setTimeout(function() { 
                    document.body.appendChild(document.createTextNode('FAIL')); 
                    if (window.testRunner)
                        testRunner.notifyDone();
                }, 1500);
            }
        }
    </script>

</head>
<body onload="init();">
    <p>150% zoom, with width and height attributes </p>
    &nbsp;<video width=320 height=240></video><br>
    <p>150% zoom, without width and height attributes </p>
    &nbsp;<video></video><br>
</body>
</html>
