<!DOCTYPE html>
<html>
<head>
    <style>
        .box {
            width: 20px;
            height: 20px;
            margin: 3px;
            display: inline-block;
            background-color: silver;
        }
        
        body.changed .box::before {
            content: '';
            display: block;
            width: 10px;
            height: 10px;
            animation: fade 0.1s;
        }
        
        @keyframes fade {
            from { background-color: red; }
            to   { background-color: green; }
        }
    </style>
    <script src="../resources/js-test-pre.js"></script>
    <script>
        window.jsTestIsAsync = true;
        
        const numElements = 10;
        let animationsStartedThisFrame = 0;

        function makeElement(container)
        {
            let div = document.createElement('div');
            div.className = 'box';
            container.appendChild(div);
            
            div.addEventListener('animationstart', (e) => {
                ++animationsStartedThisFrame;
            }, false);

            div.addEventListener('animationend', (e) => {
                startNextIterationSoon();
            }, false);
        }
        
        function checkStartedAnimationsCount()
        {
            shouldBe('animationsStartedThisFrame', 'numElements');
        }
        
        let nextIterationStarted = false;
        function startAnimationSet()
        {
            nextIterationStarted = false;
            animationsStartedThisFrame = 0;

            document.body.classList.add('changed');
            requestAnimationFrame(checkStartedAnimationsCount);
        }
        
        const numTrials = 10;
        let trialCount = 0;

        function startNextIterationSoon()
        {
            if (nextIterationStarted)
                return;

            nextIterationStarted = true;

            if (trialCount++ == numTrials) {
                finishJSTest();
                return;
            }

            document.body.classList.remove('changed');
            document.body.offsetWidth; // Hack.
            requestAnimationFrame(startAnimationSet);
        }
        
        function doTest()
        {
            description('Tests that animations on pseudo-elements do not eventually stop working.');

            let container = document.getElementById('container');
            for (let i = 0; i < numElements; ++i)
                makeElement(container);

            requestAnimationFrame(startNextIterationSoon);
        }
        
        window.addEventListener('load', doTest, false);
        var successfullyParsed = true;
    </script>
</head>
<body>
    <div id="container"></div>
<script src="../resources/js-test-post.js"></script>
</body>
</html>
