<!DOCTYPE html>
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
    <iframe src="script-tests/request-animation-frame-subframe.html" width="700" height="500"></iframe>
    <script type="text/javascript" charset="utf-8">
        description("Tests requestAnimationFrame in both an iframe and main frame");

        var callbackInvoked = false;
        var mainFrameCallbackInvoked = false;

        if (window.testRunner) {
            testRunner.dumpAsText();
            testRunner.waitUntilDone();
        }

        window.requestAnimationFrame(function() {
            mainFrameCallbackInvoked = true;
        });

        // Called from subframe.
        function doDisplay()
        {
            if (window.testRunner)
                testRunner.displayAndTrackRepaints();
        }

        function doCheckResult()
        {
            shouldBeTrue("callbackInvoked");
            shouldBeTrue("mainFrameCallbackInvoked");
        }

        function doTestDone()
        {
            isSuccessfullyParsed();
            if (window.testRunner)
                testRunner.notifyDone();
        }
    </script>
</body>
</html>
