| <!DOCTYPE html> |
| |
| <html> |
| <head> |
| <style> |
| .container { |
| height: 460px; |
| width: 120px; |
| overflow: hidden; |
| position: relative; |
| left: 50px; |
| z-index: 0; /* create stacking context */ |
| border: 1px solid black; |
| background-color: white; |
| } |
| |
| .box { |
| position: relative; |
| width: 100px; |
| height: 100px; |
| margin: 10px; |
| background-color: blue; |
| } |
| |
| .force-layer { |
| -webkit-transform: translateZ(1px); |
| } |
| |
| .yellow { |
| background-color: yellow; |
| } |
| |
| .gray { |
| background-color: gray; |
| } |
| |
| .animating1 { |
| -webkit-animation: translate1 2s linear infinite alternate; |
| } |
| |
| .animating2 { |
| -webkit-animation: translate2 2s linear infinite alternate; |
| } |
| |
| @-webkit-keyframes translate1 { |
| from { -webkit-transform: translate(0px, -110px); } |
| to { -webkit-transform: translate(0px, 590px); } |
| } |
| |
| @-webkit-keyframes translate2 { |
| from { -webkit-transform: translate(0px, -220px); } |
| to { -webkit-transform: translate(0px, 110px); } |
| } |
| </style> |
| <script> |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| function queueBoxForAnimation(elementId, animationClass, callback) { |
| var box = document.getElementById(elementId); |
| if (callback) |
| box.addEventListener('webkitAnimationStart', callback, false); |
| box.classList.add(animationClass); |
| } |
| |
| function runTest() |
| { |
| queueBoxForAnimation("to-animate1", "animating1"); |
| queueBoxForAnimation("to-animate2", "animating2", animationStarted); |
| } |
| |
| function animationStarted() |
| { |
| if (window.testRunner) { |
| var layersElement = document.getElementById('layers'); |
| // Make sure we don't include the #layers element in the tree. The text size |
| // might differ between platforms. |
| layersElement.style.display = "none"; |
| layersElement.innerText = window.internals.layerTreeAsText(document); |
| layersElement.style.display = "block"; |
| testRunner.notifyDone(); |
| } |
| } |
| window.addEventListener('load', runTest, false); |
| </script> |
| </head> |
| <body> |
| <!-- The test checks that composited layers are created when needed to display elements in front of animated layers. |
| There are two animations going at the same time. The second animation is inside a clipping |
| container (white background with black border). The first animation should display behind the clipping container. |
| For both animations, the following should be true: |
| 1. Yellow box should display in front of the blue box. |
| 2. Gray boxes should display behind the blue box. |
| --> |
| <!-- This div will not get a layer --> |
| <div class="box gray"></div> |
| <div id="to-animate1" class="box"></div> |
| <div class="container"> |
| <!-- This div will be forced to get a layer --> |
| <div class="box gray force-layer"></div> |
| <!-- This div will not get a layer --> |
| <div class="box gray"></div> |
| <div id="to-animate2" class="box"></div> |
| <!-- This div will get a layer --> |
| <div class="box yellow"></div> |
| </div> |
| <!-- This div will also get a layer --> |
| <div class="box yellow"></div> |
| <pre id="layers">Layer tree goes here in DRT</pre> |
| </body> |
| </html> |