<!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.display();
        }

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

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