Commit 356b0964 authored by Morten Stenshorne's avatar Morten Stenshorne Committed by Commit Bot

[LayoutNG] Detect breaks that occur at the exact start of blocks.

Such breaks used to go unnoticed and cause misery and assorted unpleasantries.
Upgraded test expectations. Added a unit test.

As long as we haven't both got an in-flow child that broke AND exceeded
available fragmentainer space, we need to continue and lay out its siblings. A
block of zero height at a fragmentainer boundary actually belongs in the former
fragmentainer, not the latter. A consequence of this change is that even
non-zero height blocks that start at a fragmentainer boundary gets a
zero-height fragment in the former fragmentainer, before it continues in the
next fragmentainer. We may want to avoid this, but I'm not sure what's more
correct yet (or if it matters at all).

Cq-Include-Trybots: master.tryserver.chromium.linux:linux_layout_tests_layout_ng
Change-Id: I50e862d8c0dc787a47b799e2e639e5ca7ba57158
Reviewed-on: https://chromium-review.googlesource.com/663141
Commit-Queue: Morten Stenshorne <mstensho@opera.com>
Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#501588}
parent a92266e9
......@@ -9359,7 +9359,6 @@ crbug.com/591099 fast/mediastream/getusermedia.html [ Failure Pass ]
crbug.com/591099 fast/mediastream/no-interface-object.html [ Failure Pass ]
crbug.com/591099 fast/multicol/5-levels-of-nesting-crash.html [ Failure Pass ]
crbug.com/591099 fast/multicol/abspos-after-break-after.html [ Failure ]
crbug.com/591099 fast/multicol/abspos-in-overflow-hidden-in-2nd-column.html [ Failure ]
crbug.com/591099 fast/multicol/abspos-new-width-rebalance.html [ Failure ]
crbug.com/591099 fast/multicol/auto-height-forced-break-complex-margin-collapsing.html [ Failure ]
crbug.com/591099 fast/multicol/balance-break-inside-avoid.html [ Failure ]
......@@ -9399,10 +9398,8 @@ crbug.com/757767 fast/multicol/caret-range-outside-columns.html [ Failure Timeou
crbug.com/591099 fast/multicol/change-height.html [ Failure ]
crbug.com/591099 fast/multicol/client-rect-after-spanner.html [ Failure Timeout ]
crbug.com/591099 fast/multicol/client-rect-nested.html [ Failure Timeout ]
crbug.com/591099 fast/multicol/client-rect-trailing-column.html [ Failure ]
crbug.com/591099 fast/multicol/client-rects-crossing-boundaries-nested.html [ Failure ]
crbug.com/591099 fast/multicol/client-rects-crossing-boundaries.html [ Failure ]
crbug.com/591099 fast/multicol/client-rects-empty-element-boundary.html [ Failure ]
crbug.com/591099 fast/multicol/client-rects-rtl.html [ Failure ]
crbug.com/591099 fast/multicol/client-rects-sole-empty-block.html [ Failure ]
crbug.com/591099 fast/multicol/client-rects.html [ Failure ]
......@@ -9414,9 +9411,6 @@ crbug.com/591099 fast/multicol/columns-shorthand-parsing-2.html [ Failure Pass ]
crbug.com/591099 fast/multicol/columns-shorthand-parsing.html [ Failure ]
crbug.com/591099 fast/multicol/composited-inner-multicol.html [ Failure ]
crbug.com/591099 fast/multicol/composited-layer-multiple-fragments-translated.html [ Failure ]
crbug.com/591099 fast/multicol/composited-layer-multiple-fragments.html [ Failure ]
crbug.com/591099 fast/multicol/composited-layer-nested.html [ Failure ]
crbug.com/591099 fast/multicol/composited-layer-single-fragment.html [ Failure ]
crbug.com/591099 fast/multicol/composited-layer.html [ Failure ]
crbug.com/591099 fast/multicol/composited-opacity-2nd-and-3rd-column.html [ Failure ]
crbug.com/591099 fast/multicol/composited-relpos-clipped.html [ Failure ]
......@@ -9435,7 +9429,6 @@ crbug.com/757767 fast/multicol/doubly-nested-with-insane-child-height-crash.html
crbug.com/591099 fast/multicol/doubly-nested-with-top-padding-crossing-row-boundaries.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/abspos-becomes-spanner.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/abspos-multicol-with-spanner-becomes-spanner.html [ Failure Timeout ]
crbug.com/591099 fast/multicol/dynamic/add-will-change-transform.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/block-becomes-spanner.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/block-with-abspos-video-becomes-multicol-crash.html [ Failure Pass ]
crbug.com/591099 fast/multicol/dynamic/block-with-spanner-and-inline-and-table-column.html [ Failure Pass ]
......@@ -9454,9 +9447,7 @@ crbug.com/591099 fast/multicol/dynamic/insert-block-into-content.html [ Failure
crbug.com/591099 fast/multicol/dynamic/insert-block-into-inline-beside-ex-spanner-table-column.html [ Failure Pass ]
crbug.com/591099 fast/multicol/dynamic/insert-spanner-after-abspos-subtree-crash.html [ Failure Pass ]
crbug.com/591099 fast/multicol/dynamic/insert-spanner-after-content.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/insert-spanner-after-inner-multicol-crash.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/insert-spanner-after-spanner-before-content.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/insert-spanner-after-spanner-with-inner-multicol-with-spanner-crash.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/insert-spanner-before-content.html [ Failure ]
crbug.com/591099 fast/multicol/dynamic/insert-spanner-between-out-of-flow-crash.html [ Failure Pass ]
crbug.com/591099 fast/multicol/dynamic/insert-spanner-into-content.html [ Failure ]
......@@ -9566,7 +9557,6 @@ crbug.com/591099 fast/multicol/input-type-number.html [ Failure ]
crbug.com/591099 fast/multicol/insane-column-gap.html [ Failure Pass ]
crbug.com/591099 fast/multicol/layers-in-multicol.html [ Failure ]
crbug.com/591099 fast/multicol/layers-split-across-columns.html [ Failure ]
crbug.com/591099 fast/multicol/less-than-one-pixel-tall-layer-at-column-top.html [ Failure ]
crbug.com/591099 fast/multicol/line-in-next-row-in-fourth-inner-multicol.html [ Failure ]
crbug.com/591099 fast/multicol/line-pushed-down-by-float.html [ Failure ]
crbug.com/591099 fast/multicol/line-too-tall-for-second-outer-row.html [ Failure ]
......@@ -9574,9 +9564,7 @@ crbug.com/591099 fast/multicol/many-lines-overflow-in-single-row-inner.html [ Fa
crbug.com/591099 fast/multicol/margin-bottom-and-break-after.html [ Failure Pass ]
crbug.com/591099 fast/multicol/margin-collapse.html [ Failure ]
crbug.com/591099 fast/multicol/min-height-greater-than-content.html [ Failure Timeout ]
crbug.com/591099 fast/multicol/min-height-greater-than-height.html [ Failure ]
crbug.com/591099 fast/multicol/min-height-less-than-content.html [ Failure Pass Timeout ]
crbug.com/591099 fast/multicol/min-height-less-than-height.html [ Failure ]
crbug.com/591099 fast/multicol/min-height-much-greater-than-content.html [ Failure ]
crbug.com/591099 fast/multicol/mixed-opacity-fixed-test.html [ Failure ]
crbug.com/591099 fast/multicol/mixed-opacity-test.html [ Failure ]
......@@ -9634,7 +9622,6 @@ crbug.com/591099 fast/multicol/newmulticol/breaks-2-columns-3-no-balancing.html
crbug.com/591099 fast/multicol/newmulticol/breaks-2-columns-3.html [ Failure ]
crbug.com/591099 fast/multicol/newmulticol/breaks-3-columns-3.html [ Failure Timeout ]
crbug.com/591099 fast/multicol/newmulticol/clipping-top-overflow.html [ Failure ]
crbug.com/591099 fast/multicol/newmulticol/clipping.html [ Failure ]
crbug.com/591099 fast/multicol/newmulticol/fixed-height-fill-balance-2.html [ Failure ]
crbug.com/591099 fast/multicol/newmulticol/fixed-height-fill-balance.html [ Failure ]
crbug.com/591099 fast/multicol/newmulticol/hide-box-vertical-lr.html [ Failure ]
......@@ -9661,7 +9648,6 @@ crbug.com/591099 fast/multicol/out-of-flow/offset-properties.html [ Failure ]
crbug.com/591099 fast/multicol/outlines-at-column-boundaries.html [ Failure ]
crbug.com/591099 fast/multicol/overflow-across-columns.html [ Failure ]
crbug.com/591099 fast/multicol/overflow-content.html [ Failure Pass ]
crbug.com/591099 fast/multicol/overflow-into-columngap.html [ Failure ]
crbug.com/591099 fast/multicol/overflow-unsplittable.html [ Failure Timeout ]
crbug.com/591099 fast/multicol/overflowing-columns-large-gaps.html [ Failure ]
crbug.com/591099 fast/multicol/paged-becomes-multicol-auto-height.html [ Failure ]
......@@ -9861,7 +9847,6 @@ crbug.com/591099 fast/multicol/very-wide-rtl-crash.html [ Failure Pass ]
crbug.com/591099 fast/multicol/widows-and-orphans.html [ Failure ]
crbug.com/591099 fast/multicol/widows.html [ Failure ]
crbug.com/591099 fast/multicol/widows2.html [ Failure ]
crbug.com/591099 fast/multicol/zero-height-with-children.html [ Failure ]
crbug.com/591099 fast/multicol/zeroColumnCount.html [ Failure Pass Timeout ]
crbug.com/591099 fast/overflow/001.html [ Failure ]
crbug.com/591099 fast/overflow/002.html [ Failure ]
......@@ -11105,7 +11090,6 @@ crbug.com/591099 fragmentation/fragmented-rowspan.html [ Failure ]
crbug.com/591099 fragmentation/fragmented-table-cell.html [ Failure ]
crbug.com/591099 fragmentation/fragmented-table-with-fixed-height.html [ Failure ]
crbug.com/591099 fragmentation/image-block-as-first-child.html [ Failure ]
crbug.com/591099 fragmentation/margin-top-at-top-of-fragmentainer.html [ Failure ]
crbug.com/591099 fragmentation/multi-line-cells-paginated.html [ Failure ]
crbug.com/591099 fragmentation/multi-line-cells.html [ Failure ]
crbug.com/591099 fragmentation/overflow-crossing-boundary.html [ Failure ]
......@@ -319,10 +319,10 @@ RefPtr<NGLayoutResult> NGBlockLayoutAlgorithm::Layout() {
container_builder_.SwapUnpositionedFloats(&unpositioned_floats_);
return container_builder_.Abort(NGLayoutResult::kBfcOffsetResolved);
}
if (container_builder_.DidBreak() &&
IsOutOfSpace(ConstraintSpace(), content_size_))
break;
}
if (IsOutOfSpace(ConstraintSpace(), content_size_))
break;
}
NGMarginStrut end_margin_strut = previous_inflow_position.margin_strut;
......
......@@ -479,5 +479,37 @@ TEST_F(NGColumnLayoutAlgorithmTest, BlockWithTopMarginInThreeColumns) {
EXPECT_EQ(expectation, dump);
}
TEST_F(NGColumnLayoutAlgorithmTest, BlockStartAtColumnBoundary) {
SetBodyInnerHTML(R"HTML(
<style>
#parent {
columns: 3;
column-fill: auto;
column-gap: 10px;
width: 320px;
height: 100px;
}
</style>
<div id="container">
<div id="parent">
<div style="width:50px; height:100px;"></div>
<div style="width:60px; height:100px;"></div>
</div>
</div>
)HTML");
String dump = DumpFragmentTree(GetElementById("container"));
String expectation = R"DUMP(.:: LayoutNG Physical Fragment Tree ::.
offset:unplaced size:1000x100
offset:0,0 size:320x100
offset:0,0 size:100x100
offset:0,0 size:50x100
offset:0,100 size:60x0
offset:110,0 size:100x100
offset:0,0 size:60x100
)DUMP";
EXPECT_EQ(expectation, dump);
}
} // anonymous namespace
} // namespace blink
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment