| Index: Source/core/rendering/RenderBlock.cpp
|
| diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp
|
| index 87606d2b3ced0230b4814927fa407f8a5d07e80c..77be983db216b5e8817599492583f745e41d043c 100644
|
| --- a/Source/core/rendering/RenderBlock.cpp
|
| +++ b/Source/core/rendering/RenderBlock.cpp
|
| @@ -1663,7 +1663,7 @@ bool RenderBlock::simplifiedLayout()
|
| // are statically positioned and thus need to move with their absolute ancestors.
|
| bool canContainFixedPosObjects = canContainFixedPositionObjects();
|
| if (posChildNeedsLayout() || canContainFixedPosObjects)
|
| - layoutPositionedObjects(false, !posChildNeedsLayout() && canContainFixedPosObjects);
|
| + layoutPositionedObjects(false, !posChildNeedsLayout() && canContainFixedPosObjects ? LayoutOnlyFixedPositionedObjects : DefaultLayout);
|
|
|
| // Recompute our overflow information.
|
| // FIXME: We could do better here by computing a temporary overflow object from layoutPositionedObjects and only
|
| @@ -1731,7 +1731,7 @@ LayoutUnit RenderBlock::marginIntrinsicLogicalWidthForChild(RenderBox* child) co
|
| return margin;
|
| }
|
|
|
| -void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPositionObjectsOnly)
|
| +void RenderBlock::layoutPositionedObjects(bool relayoutChildren, PositionedLayoutBehavior info)
|
| {
|
| TrackedRendererListHashSet* positionedDescendants = positionedObjects();
|
| if (!positionedDescendants)
|
| @@ -1750,7 +1750,7 @@ void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPosit
|
| // if this is a fixed position element, mark it for layout if it has an abspos ancestor and needs to move with that ancestor, i.e.
|
| // it has static position.
|
| markFixedPositionObjectForLayoutIfNeeded(r, layoutScope);
|
| - if (fixedPositionObjectsOnly) {
|
| + if (info == LayoutOnlyFixedPositionedObjects) {
|
| r->layoutIfNeeded();
|
| continue;
|
| }
|
| @@ -1786,6 +1786,11 @@ void RenderBlock::layoutPositionedObjects(bool relayoutChildren, bool fixedPosit
|
| oldLogicalTop = logicalTopForChild(r);
|
| }
|
|
|
| + // FIXME: We should be able to do a r->setNeedsPositionedMovementLayout() here instead of a full layout. Need
|
| + // to investigate why it does not trigger the correct invalidations in that case. crbug.com/350756
|
| + if (info == ForcedLayoutAfterContainingBlockMoved)
|
| + r->setNeedsLayout();
|
| +
|
| r->layoutIfNeeded();
|
|
|
| // Lay out again if our estimate was wrong.
|
|
|