Index: third_party/WebKit/Source/core/layout/LayoutBox.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
index 6a19f033836de0391ee12d806643160be5dda3eb..94b51258271c2c39a8d04ecc08a3f12afe701964 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp |
@@ -2026,13 +2026,20 @@ EBreak LayoutBox::joinFragmentainerBreakValues(EBreak firstValue, EBreak secondV |
EBreak LayoutBox::classABreakPointValue(EBreak previousBreakAfterValue) const |
{ |
+ // First assert that we're at a class A break point. |
ASSERT(isBreakBetweenControllable(previousBreakAfterValue)); |
+ |
return joinFragmentainerBreakValues(previousBreakAfterValue, breakBefore()); |
} |
bool LayoutBox::needsForcedBreakBefore(EBreak previousBreakAfterValue) const |
{ |
- return isForcedFragmentainerBreakValue(classABreakPointValue(previousBreakAfterValue)); |
+ // Forced break values are only honored when specified on in-flow objects, but floats and |
+ // out-of-flow positioned objects may be affected by a break-after value of the previous |
+ // in-flow object, even though we're not at a class A break point. |
+ EBreak breakValue = isFloatingOrOutOfFlowPositioned() |
+ ? previousBreakAfterValue : classABreakPointValue(previousBreakAfterValue); |
+ return isForcedFragmentainerBreakValue(breakValue); |
} |
bool LayoutBox::paintedOutputOfObjectHasNoEffect() const |