<!-- webkit-test-runner [ enableModernMediaControls=false ] -->
<html>
    <head>
        <style>
            audio { background-color: blue; } 
        </style>
        <script src=media-file.js></script>
        <script>
            function test()
            {
                setSrcByTagName("audio", findMediaFile("audio", "content/test"));

                if (window.testRunner) {
                    testRunner.waitUntilDone();
                    setTimeout(function() { 
                        document.body.appendChild(document.createTextNode('FAIL')); 
                        if (window.testRunner)
                                testRunner.notifyDone();
                    } , 8000);
                }
                var count = document.getElementsByTagName('audio').length;
                document.addEventListener("canplaythrough", function () {
                    if (!--count) {
                        document.body.offsetLeft;
                        if (window.testRunner)
                            testRunner.notifyDone();
                    }
                }, true);
            }
        </script>
    </head>
    <body onload="test()">
        <p>Test controls placement. </p>
        <audio controls></audio><br><br>
        <audio controls style="width: 320px;"></audio><br><br>
        <audio controls style="position: absolute; width: 320px; height: 100px;"></audio><br>
    </body>
</html>
