| 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 5fbf5297154be2d5a76a7906402f87f0535bce1a..b30e1616ce0df0824d3faa1fcc16b1708d203423 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
|
| @@ -980,6 +980,7 @@ void LayoutBlockFlow::adjustLinePositionForPagination(RootInlineBox& lineBox, La
|
| return;
|
| }
|
|
|
| + LayoutUnit strutToPropagate;
|
| if (remainingLogicalHeight == pageLogicalHeight) {
|
| // We're at the very top of a page or column.
|
| if (lineBox != firstRootBox())
|
| @@ -988,10 +989,8 @@ void LayoutBlockFlow::adjustLinePositionForPagination(RootInlineBox& lineBox, La
|
| // case it's a float) margin, we may want to set a strut on the block, so that everything
|
| // ends up in the next column or page. Setting a strut on the block is also important when
|
| // it comes to satisfying orphan requirements.
|
| - if (shouldSetStrutOnBlock(*this, lineBox, logicalOffset, lineIndex, pageLogicalHeight)) {
|
| - LayoutUnit strut = logicalOffset + marginBeforeIfFloating();
|
| - setPaginationStrutPropagatedFromChild(strut);
|
| - }
|
| + if (shouldSetStrutOnBlock(*this, lineBox, logicalOffset, lineIndex, pageLogicalHeight))
|
| + strutToPropagate = logicalOffset + marginBeforeIfFloating();
|
| } else if (lineBox == firstRootBox() && allowsPaginationStrut()) {
|
| // This is the first line in the block. The block may still start in the previous column or
|
| // page, and if that's the case, attempt to pull it over to where this line is, so that we
|
| @@ -1003,10 +1002,18 @@ void LayoutBlockFlow::adjustLinePositionForPagination(RootInlineBox& lineBox, La
|
| // room for the top border, padding and (if it's a float) margin and the line in one
|
| // column or page.
|
| if (totalLogicalOffset + lineHeight <= pageLogicalHeight)
|
| - setPaginationStrutPropagatedFromChild(strut);
|
| + strutToPropagate = strut;
|
| }
|
| }
|
|
|
| + // If we found that some preceding content (lines, border and padding) belongs together with
|
| + // this line, we should pull the entire block with us to the fragmentainer we're currently
|
| + // in. We need to avoid this when the block precedes the first fragmentainer, though. We
|
| + // shouldn't fragment content there, but rather let it appear in the overflow area before the
|
| + // first fragmentainer.
|
| + if (strutToPropagate && offsetFromLogicalTopOfFirstPage() > LayoutUnit())
|
| + setPaginationStrutPropagatedFromChild(strutToPropagate);
|
| +
|
| paginatedContentWasLaidOut(logicalOffset + lineHeight);
|
| }
|
|
|
|
|