Index: third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp |
index cb24181eb5e898624e4af9336fe065fd549b2118..7e6fdb4f294712cb5e131e1a462442d7a1dc7fd6 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp |
@@ -403,9 +403,21 @@ void LayoutBlockFlow::layoutBlock(bool relayoutChildren) { |
// Multiple passes might be required for column based layout. |
// The number of passes could be as high as the number of columns. |
- bool done = false; |
- while (!done) |
- done = layoutBlockFlow(relayoutChildren, layoutScope); |
+ LayoutMultiColumnFlowThread* flowThread = multiColumnFlowThread(); |
+ do { |
+ layoutBlockFlow(relayoutChildren, layoutScope); |
+ |
+ if (flowThread && flowThread->columnHeightsChanged()) { |
+ setChildNeedsLayout(MarkOnlyThis); |
+ continue; |
+ } |
+ |
+ if (shouldBreakAtLineToAvoidWidow()) { |
+ setEverHadLayout(); |
+ continue; |
+ } |
+ break; |
+ } while (true); |
updateLayerTransformAfterLayout(); |
@@ -462,7 +474,7 @@ void LayoutBlockFlow::resetLayout() { |
} |
DISABLE_CFI_PERF |
-inline bool LayoutBlockFlow::layoutBlockFlow(bool relayoutChildren, |
+inline void LayoutBlockFlow::layoutBlockFlow(bool relayoutChildren, |
SubtreeLayoutScope& layoutScope) { |
LayoutUnit oldLeft = logicalLeft(); |
bool logicalWidthChanged = updateLogicalWidthAndColumnWidth(); |
@@ -503,7 +515,8 @@ inline bool LayoutBlockFlow::layoutBlockFlow(bool relayoutChildren, |
// potential infinite loop, run layout again with auto scrollbars frozen in |
// their current state. |
PaintLayerScrollableArea::FreezeScrollbarsScope freezeScrollbars; |
- return layoutBlockFlow(relayoutChildren, layoutScope); |
+ layoutBlockFlow(relayoutChildren, layoutScope); |
szager1
2016/12/01 17:43:24
Please add:
DCHECK(preferredLogicalWidthsWereDirt
mstensho (USE GERRIT)
2016/12/01 18:11:47
We can be pretty sure that !preferredLogicalWidths
mstensho (USE GERRIT)
2016/12/01 19:15:34
Hmm... scrollbars/overflow-auto-infinite-loop.html
szager1
2016/12/01 20:30:12
There's a reason why I added preferredLogicalWidth
mstensho (USE GERRIT)
2016/12/01 20:36:10
But we only get here if preferredLogicalWidthsBeca
|
+ return; |
} |
// Expand our intrinsic height to encompass floats. |
@@ -511,18 +524,6 @@ inline bool LayoutBlockFlow::layoutBlockFlow(bool relayoutChildren, |
createsNewFormattingContext()) |
setLogicalHeight(lowestFloatLogicalBottom() + afterEdge); |
- if (LayoutMultiColumnFlowThread* flowThread = multiColumnFlowThread()) { |
- if (flowThread->columnHeightsChanged()) { |
- setChildNeedsLayout(MarkOnlyThis); |
- return false; |
- } |
- } |
- |
- if (shouldBreakAtLineToAvoidWidow()) { |
- setEverHadLayout(); |
- return false; |
- } |
- |
// Remember the automatic logical height we got from laying out the children. |
LayoutUnit unconstrainedHeight = logicalHeight(); |
LayoutUnit unconstrainedClientAfterEdge = clientLogicalBottom(); |
@@ -546,7 +547,6 @@ inline bool LayoutBlockFlow::layoutBlockFlow(bool relayoutChildren, |
computeOverflow(unconstrainedClientAfterEdge); |
m_descendantsWithFloatsMarkedForLayout = false; |
- return true; |
} |
void LayoutBlockFlow::addOverhangingFloatsFromChildren( |