<html>
<head>
    <script type="text/javascript">
    function test()
    {
        if (window.internals)
            internals.settings.setFrameFlattening("FullyEnabled")
        // Force synchronous layout.
        document.body.offsetHeight;
    }
    </script>
</head>
<frameset border=0 rows="100,400" cols="300,300" onload="test()">
    <frame src="data:text/html,
        <style>body { background-color: green; }</style>
        <p>
            Test for frameset flattening. The flattening only works inside the DRT.
        </p>
        <p>
            This frame should be 300px wide, 200px tall and not be scrollable (have scrollbars).
        </p>
        <div style='position: absolute; width: 300px; height: 200px; left: 0; top: 0px;'></div>
    ">
    </frame>
    <frame src="data:text/html,
        <style>body { background-color: red; }</style>
        <p>
            This frame should be 300px wide, 200px tall and not be scrollable (have scrollbars).
        </p>
        <div style='position: absolute; width: 300px; height: 50px; left: 0; top: 0px;'></div>
    ">
    </frame>
    <frame src="data:text/html,
        <style>body { background-color: yellow; }</style>
        <p>
            This frame should be 600px wide, 600px tall and not be scrollable (have scrollbars).
        </p>
        <div style='position: absolute; width: 600px; height: 600px; left: 0; top: 0px;'></div>
    ">
    </frame>
    <frame src="data:text/html,
        <style>body { background-color: blue; }</style>
        <p>
            This frame should be 600px wide, 600px tall and not be scrollable (have scrollbars).
        </p>
        <div style='position: absolute; width: 600px; height: 600px; left: 0; top: 0px;'></div>
    ">
    </frame>
</frameset>
</html>
