<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- webkit-test-runner [ experimental:WebAnimationsCSSIntegrationEnabled=false ] -->

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Opacity between absolutes</title>
  <style type="text/css" media="screen">
    .container {
      position: relative;
      height: 200px;
      width: 200px;
      border: 1px solid black;
      -webkit-transform: translateZ(0);
      -webkit-transform-style: preserve-3d;
    }

    .fader {
      height: 50px;
      width: 50px;
      margin: 20px;
      border: 1px solid black;
      -webkit-transition: opacity 100s;
    }
    
    .container:hover .fader {
      opacity: 0.5;
    }

    .inner {
      position: absolute;
      left: 100px;
      top: 100px;
      height: 80px;
      width: 80px;
      background-color: gray;
    }
    
    .inner:hover {
      background-color: orange;
    }
  </style>
  <script type="text/javascript" charset="utf-8">
    if (window.testRunner)
      testRunner.waitUntilDone();

    function runTest()
    {
      // Kick off an opacity fade to make .fader into a compositing layer
      var container = document.querySelectorAll('.fader')[0];
      container.style.opacity = 0.99;
      window.setTimeout(function() {
        // Now test redraw on .inner
        var inner = document.querySelectorAll('.inner')[0];
        inner.style.backgroundColor = 'green';
        if (window.testRunner)
          testRunner.notifyDone();
      }, 0);
    }

    window.addEventListener('load', runTest, false)
  </script>
</head>
<body>
<p>This test should not assert, and you should see a fully green square.</p>
<div class="container">
  <div class="fader">
    <div class="inner">
    </div>
  </div>
</div>

</body>
</html>
