| 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 95d95708beb1699297998eb54c4eb55b97dd2459..81d9f77efa2d2fbc81b22864a9ea31b30382a8ea 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp
|
| @@ -1909,14 +1909,60 @@ EBreak LayoutBox::breakInside() const
|
| return BreakAuto;
|
| }
|
|
|
| -bool LayoutBox::hasForcedBreakBefore() const
|
| +// At a class A break point [1], the break value with the highest precedence wins. If the two values
|
| +// have the same precedence (e.g. "left" and "right"), the value specified on a latter object wins.
|
| +//
|
| +// [1] https://drafts.csswg.org/css-break/#possible-breaks
|
| +static inline int fragmentainerBreakPrecedence(EBreak breakValue)
|
| +{
|
| + // "auto" has the lowest priority.
|
| + // "avoid*" values win over "auto".
|
| + // "avoid-page" wins over "avoid-column".
|
| + // "avoid" wins over "avoid-page".
|
| + // Forced break values win over "avoid".
|
| + // Any forced page break value wins over "column" forced break.
|
| + // More specific break values (left, right, recto, verso) wins over generic "page" values.
|
| +
|
| + switch (breakValue) {
|
| + default:
|
| + ASSERT_NOT_REACHED();
|
| + // fall-through
|
| + case BreakAuto:
|
| + return 0;
|
| + case BreakAvoidColumn:
|
| + return 1;
|
| + case BreakAvoidPage:
|
| + return 2;
|
| + case BreakAvoid:
|
| + return 3;
|
| + case BreakColumn:
|
| + return 4;
|
| + case BreakPage:
|
| + return 5;
|
| + case BreakLeft:
|
| + case BreakRight:
|
| + case BreakRecto:
|
| + case BreakVerso:
|
| + return 6;
|
| + }
|
| +}
|
| +
|
| +EBreak LayoutBox::joinFragmentainerBreakValues(EBreak firstValue, EBreak secondValue)
|
| +{
|
| + if (fragmentainerBreakPrecedence(secondValue) >= fragmentainerBreakPrecedence(firstValue))
|
| + return secondValue;
|
| + return firstValue;
|
| +}
|
| +
|
| +EBreak LayoutBox::classABreakPointValue(EBreak previousBreakAfterValue) const
|
| {
|
| - return isForcedFragmentainerBreakValue(breakBefore());
|
| + ASSERT(isBreakBetweenControllable(previousBreakAfterValue));
|
| + return joinFragmentainerBreakValues(previousBreakAfterValue, breakBefore());
|
| }
|
|
|
| -bool LayoutBox::hasForcedBreakAfter() const
|
| +bool LayoutBox::needsForcedBreakBefore(EBreak previousBreakAfterValue) const
|
| {
|
| - return isForcedFragmentainerBreakValue(breakAfter());
|
| + return isForcedFragmentainerBreakValue(classABreakPointValue(previousBreakAfterValue));
|
| }
|
|
|
| LayoutRect LayoutBox::localOverflowRectForPaintInvalidation() const
|
|
|