diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index dec6ab3fc65d..7356eaaa61e4 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -6627,12 +6627,11 @@ nsIFrame::FinishAndStoreOverflow(nsOverflowAreas& aOverflowAreas, */ nsRect newBounds(nsPoint(0, 0), aNewSize); // Transform affects both overflow areas. - if (!Preserves3DChildren()) { - NS_FOR_FRAME_OVERFLOW_TYPES(otype) { - nsRect& o = aOverflowAreas.Overflow(otype); - o = nsDisplayTransform::TransformRect(o, this, nsPoint(0, 0), &newBounds); - } - } else { + NS_FOR_FRAME_OVERFLOW_TYPES(otype) { + nsRect& o = aOverflowAreas.Overflow(otype); + o = nsDisplayTransform::TransformRect(o, this, nsPoint(0, 0), &newBounds); + } + if (Preserves3DChildren()) { ComputePreserve3DChildrenOverflow(aOverflowAreas, newBounds); } } @@ -6785,8 +6784,8 @@ nsIFrame::ComputePreserve3DChildrenOverflow(nsOverflowAreas& aOverflowAreas, con } } - aOverflowAreas.Overflow(eVisualOverflow) = childVisual; - aOverflowAreas.Overflow(eScrollableOverflow) = childScrollable; + aOverflowAreas.Overflow(eVisualOverflow) = aOverflowAreas.Overflow(eVisualOverflow).Union(childVisual); + aOverflowAreas.Overflow(eScrollableOverflow) = aOverflowAreas.Overflow(eScrollableOverflow).Union(childScrollable); } void diff --git a/layout/reftests/transform-3d/preserve3d-3-ref.html b/layout/reftests/transform-3d/preserve3d-3-ref.html new file mode 100644 index 000000000000..2590d9df3132 --- /dev/null +++ b/layout/reftests/transform-3d/preserve3d-3-ref.html @@ -0,0 +1,8 @@ + +
+ + +