<!DOCTYPE html><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->
<html>
<head>
    <style>
        .box {
            width: 100px;
            height: 100px;
            margin: 20px;
            background-color: blue;
            transition: opacity 10ms;
        }
        
        .no-transition {
            transition: none !important;
            opacity: 1 !important;
        }
        
        .transitioning {
            opacity: 0.1;
        }
        
        .composited {
            transform: translateZ(0);
        }
    </style>
    <script src="../../../resources/ui-helper.js"></script>
    <script>
        if (window.testRunner)
            testRunner.waitUntilDone();

        window.addEventListener('load', async () => {
            target.classList.add('transitioning');
            document.body.offsetWidth;
            target.classList.add('no-transition');
            
            await UIHelper.ensurePresentationUpdate();

            if (window.testRunner)
                testRunner.notifyDone();
        }, false);
    </script>
</head>
<body>
    <p>This box should end up with opacity 1</p>
    <div id="target" class="composited box"></div>
</body>
</html>
