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