<!-- webkit-test-runner [ ModernMediaControlsEnabled=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>
