<!DOCTYPE html>

<html>
<head>
    <style>
        .box {
            height: 100px;
            width: 100px;
            margin: 10px 20px;
            background-color: blue;
            box-shadow: 0 0 10px black;
        }
        
        embed {
            margin: 20px;
        }
        
    </style>
    <script src="resources/wheel-handler-region-helper.js"></script>
    <script>
        if (window.testRunner)
            testRunner.waitUntilDone();

        if (window.internals) {
            internals.setTopContentInset(60);
            internals.setHeaderHeight(23);
        }

        function doTest()
        {
            if (window.internals)
                internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks();

            // Scroll to test the mapping from document to view coords.
            document.scrollingElement.scrollTop = 197;
            dumpRegion();
            if (window.testRunner)
                testRunner.notifyDone();
        }

        window.addEventListener('load', doTest);
    </script>
</head>
<body>

<p>Wheel event rect for plug-in:</p>
<embed id="plugin" type="application/x-webkit-test-netscape" drawingmodel="coreanimation"></embed>
<pre id="output"></pre>

</body>
</html>
