<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Test for bug 25282 (bug 12885 with a repaint container)</title>
    <style type="text/css">
        div.wrapper {
          height: 420px;
          width: 120px;
          margin: 20px;
          -webkit-transform: translateZ(0);
        }
        div.outer { position: absolute; }
        div.wide { width: 100px; height: 50px; }
        div.narrow { width: 50px; }
        div.tall { width: 50px; height: 100px; }
        div.short { height: 50px; width: 50px; }
        #main-content { float: left; width: 100px; height: 80px; }
        #target3 { display: none; clear: both; height: 20px; background: green; }
    </style>
    <script>
        if (window.testRunner)
          testRunner.waitUntilDone();

        function repaintTest()
        {
            document.getElementById('target1').style.width = '';
            document.getElementById('target2').style.height = '';
            document.getElementById('target3').style.display = '';
            if (window.testRunner)
              testRunner.notifyDone();
        }
        function runRepaintTest()
        {
            setTimeout(repaintTest, 0);
        }
    </script>
</head>
<body onload="runRepaintTest();">
  
  <div class="wrapper">
    <div class="outer" style="border: medium solid green; top: 8px; height: 100px;">
        <div class="narrow" id="target1" style="width: auto;">
            <div class="wide"></div>
        </div>
    </div>

    <div class="outer" style="border: medium solid green; top: 158px; width: 100px;">
        <div class="short" id="target2" style="height: auto;">
            <div class="tall"></div>
        </div>
    </div>

    <div class="outer" style="top: 308px;">
        <div style="background: green;">
            <div style="position: relative;">
                <div id="main-content">
                </div>
            </div>
            <div id="target3" style="display: block;"></div>
        </div>
    </div>
  </div>
</body>
</html>
