<!DOCTYPE html>
<html>
<head>
<style>
#testDiv {
    transition: transform 30s linear, color 2s, left 4s linear, top 4s linear;
    position: absolute;
}
</style>
</head>
<body>
<script src="../../resources/js-test.js"></script>
<div id="testDiv">TEST</div>
<script>
description("Tests that CSS animations that are created while the page is hidden are properly resumed when the page becomes visible.");
jsTestIsAsync = true;

function registerAnimation()
{
    testDiv.style.transform = "rotate(170deg) scale(0.2781941414347284)";
}

function checkTransformAndFinishTest()
{
    shouldBecomeEqual("window.getComputedStyle(testDiv).transform != pausedTransform", "true", finishJSTest);
}

onload = function() {
    debug("Suspend animations");
    internals.suspendAnimations();

    setTimeout(function() {
        registerAnimation("170");
        setTimeout(function() {
            shouldBeTrue("internals.animationsAreSuspended()");
            shouldBe("internals.numberOfActiveAnimations()", "0");

            pausedTransform = window.getComputedStyle(testDiv).transform;

            // Change style to make sure it does not make the animation active.
            testDiv.style.backgroundColor = "green";
            testDiv.offsetLeft;

            shouldBeTrue("internals.animationsAreSuspended()");
            shouldBe("internals.numberOfActiveAnimations()", "0");

            setTimeout(function() {
                shouldBe("window.getComputedStyle(testDiv).transform", "pausedTransform");

                debug("Resume animations");
                internals.resumeAnimations();
                shouldBecomeEqual("internals.numberOfActiveAnimations()", "1", checkTransformAndFinishTest);
            }, 50);
        }, 500);
    }, 0);
}
</script>
</body>
</html>
