| <!DOCTYPE html> |
| <html> |
| <head> |
| <!-- This test case reproduces a bug that is hopefully solved by https://bugs.webkit.org/show_bug.cgi?id=80641 |
| |
| In the bug, a div element begins as non-composited, and the repaintRect had a |
| correct non-zero offset because it paints into an ancestor container. Later, the |
| layer becomes composited (in this case, because the layer is moved to overlap |
| another composited layer). Because the layer is now composited, the repaintRect |
| should have been recomputed - in particular, the offset of the repaintRect should |
| become zero because it is now its own repaint container. |
| |
| Therefore, after the layer became composited, it was using the wrong repaint rect, |
| which caused things not to repaint properly. |
| --> |
| |
| <style type="text/css"> |
| .composited { |
| -webkit-transform: translatez(0); |
| border: 2px solid black; |
| } |
| |
| .box { |
| width: 200px; |
| height: 200px; |
| } |
| |
| #scrolldiv { |
| position: absolute; |
| width: 100px; |
| height: 100px; |
| left: 250px; |
| top: 50px; |
| overflow-x: hidden; |
| overflow-y: scroll; |
| } |
| |
| .shouldNotBeSeen { |
| background-color: red; |
| } |
| |
| .shouldBeSeen { |
| background-color: green; |
| } |
| </style> |
| |
| </head> |
| |
| <script src="../../fast/repaint/resources/repaint.js"></script> |
| |
| <script> |
| if (window.testRunner) { |
| testRunner.dumpAsText(true); |
| testRunner.waitUntilDone(); |
| } |
| |
| function changeDivPosition() { |
| document.getElementById("scrolldiv").style.left="50px"; |
| } |
| |
| function repaintTest() { |
| // Changing the position will cause the scrolldiv to become composited becuase it overlaps another compostied element. |
| changeDivPosition(); |
| |
| // Force DumpRenderTree to do a layout and repaint here, this is where the repaintRect |
| // goes wrong because it does not get updated for a newly composited element. |
| if (window.testRunner) |
| testRunner.displayAndTrackRepaints(); |
| |
| window.setTimeout(function() { |
| // Scrolling a little will demonstrate whether the repaint rect is correct or not. |
| document.getElementById('scrolldiv').scrollTop = 500; |
| testRunner.notifyDone(); |
| }, 0); |
| } |
| |
| </script> |
| |
| <body onload="runRepaintTest()"> |
| <div class="composited box"></div> |
| <div id="scrolldiv"> |
| <div class="shouldNotBeSeen box"></div> |
| <div class="shouldBeSeen box"></div> |
| </div> |
| </body> |
| |
| </html> |