The comments in RenderLayer.cpp indicate that RenderLayer::convertToLayerCoords() is never used to map between transformed layers. This seems to not actually be the case - in particular adding the assertion: ASSERT(!parentLayer->hasTransform()); at http://trac.webkit.org/browser/trunk/WebCore/rendering/RenderLayer.cpp#L1081 trips on lots of tests. Some of the tests that trip this are: fast/repaint/block-selection-gap-in-composited-layer.html fast/repaint/reflection-repaint-test.html fast/repaint/subtree-layoutstate-transform.html fast/repaint/transform-absolute-child.html fast/repaint/transform-repaint-descendants.html fast/transforms/overflow-with-transform.html fast/transforms/transform-positioned-ancestor.html fast/transforms/transformed-focused-text-input.html fast/transforms/transforms-with-opacity.html I don't know if the assertion is incorrect, the comments are incorrect, or the code is wrong.
The following HTML snippet is sufficient to cause an assertion failure: <!DOCTYPE html> <div style="-webkit-transform: rotate(0deg);"> <div style="position:absolute">.</div> </div> The callstack is: FrameView::layout() RenderLayer::updateLayerPositions() RenderLayer::updateLayerPositions() RenderLayer::updateLayerPositions() RenderLayer::updateLayerPositions() RenderLayer::convertToLayerCoords() At a glance, I don't see any code that checks for transforms before calling convertToLayerCoords().
Created attachment 54306 [details] Testcase