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 @@ + + + + +
+
+ + diff --git a/layout/reftests/transform-3d/preserve3d-3a.html b/layout/reftests/transform-3d/preserve3d-3a.html new file mode 100644 index 000000000000..a28f814e9efa --- /dev/null +++ b/layout/reftests/transform-3d/preserve3d-3a.html @@ -0,0 +1,8 @@ + + + + +
+
+ + diff --git a/layout/reftests/transform-3d/reftest.list b/layout/reftests/transform-3d/reftest.list index 847cba5671c5..46573b043fa5 100644 --- a/layout/reftests/transform-3d/reftest.list +++ b/layout/reftests/transform-3d/reftest.list @@ -16,6 +16,7 @@ fails == preserve3d-1a.html preserve3d-1-ref.html == preserve3d-2b.html preserve3d-2-ref.html == preserve3d-2c.html preserve3d-2-ref.html == preserve3d-2d.html preserve3d-2-ref.html +== preserve3d-3a.html preserve3d-3-ref.html == scale3d-z.html scalez-1-ref.html == scale3d-all.html scale3d-1-ref.html == scale3d-xz.html scale3d-2-ref.html