Commit 68d28f80 authored by Jacques Newman's avatar Jacques Newman Committed by Commit Bot

[GridNG] Auto placement for densely packed grid items

This change adds implementation and testing to place grid
items in a densely packed grid.

Bug: 1045599
Change-Id: I7640fc12e7cc1c1f284848eb01ca949d6a041261
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2493828
Commit-Queue: Jacques Newman <janewman@microsoft.com>
Reviewed-by: default avatarKurt Catti-Schmidt <kschmi@microsoft.com>
Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarChristian Biesinger <cbiesinger@chromium.org>
Cr-Commit-Position: refs/heads/master@{#820929}
parent dd8d447d
......@@ -122,8 +122,7 @@ NGGridLayoutAlgorithm::RowTrackCollection() const {
NGGridLayoutAlgorithm::GridItemData::GridItemData(const NGBlockNode node)
: node(node) {}
NGGridLayoutAlgorithm::AutoPlacementType
NGGridLayoutAlgorithm::GridItemData::AutoPlacement(
AutoPlacementType NGGridLayoutAlgorithm::GridItemData::AutoPlacement(
GridTrackSizingDirection flow_direction) const {
bool is_major_indefinite = Span(flow_direction).IsIndefinite();
bool is_minor_indefinite =
......@@ -131,13 +130,13 @@ NGGridLayoutAlgorithm::GridItemData::AutoPlacement(
.IsIndefinite();
if (is_minor_indefinite && is_major_indefinite)
return NGGridLayoutAlgorithm::AutoPlacementType::kBoth;
return AutoPlacementType::kBoth;
else if (is_minor_indefinite)
return NGGridLayoutAlgorithm::AutoPlacementType::kMinor;
return AutoPlacementType::kMinor;
else if (is_major_indefinite)
return NGGridLayoutAlgorithm::AutoPlacementType::kMajor;
return AutoPlacementType::kMajor;
return NGGridLayoutAlgorithm::AutoPlacementType::kNotNeeded;
return AutoPlacementType::kNotNeeded;
}
wtf_size_t NGGridLayoutAlgorithm::GridItemData::StartLine(
......
......@@ -25,14 +25,13 @@ enum class NGGridItemContributionType {
kForMaxContentMaximums
};
enum class AutoPlacementType { kNotNeeded, kMajor, kMinor, kBoth };
class CORE_EXPORT NGGridLayoutAlgorithm
: public NGLayoutAlgorithm<NGBlockNode,
NGBoxFragmentBuilder,
NGBlockBreakToken> {
public:
// TODO(janewman): Move this enum out of |NGGridLayoutAlgorithm| to be
// consistent with |NGGridItemContributionType|.
enum class AutoPlacementType { kNotNeeded, kMajor, kMinor, kBoth };
struct GridItemData {
explicit GridItemData(const NGBlockNode node);
......
......@@ -20,12 +20,12 @@ namespace {
EXPECT_EQ(expected_count, iterator.RepeatCount()); \
EXPECT_EQ(expected_start + expected_count - 1, iterator.RangeTrackEnd()); \
EXPECT_TRUE(iterator.IsRangeCollapsed());
#define EXPECT_GRID_AREA(area, expected_row_start, expected_row_end, \
expected_column_start, expected_column_end) \
EXPECT_EQ(area.rows.StartLine(), expected_row_start); \
EXPECT_EQ(area.rows.EndLine(), expected_row_end); \
EXPECT_EQ(area.columns.StartLine(), expected_column_start); \
EXPECT_EQ(area.columns.EndLine(), expected_column_end);
#define EXPECT_GRID_AREA(area, expected_column_start, expected_column_end, \
expected_row_start, expected_row_end) \
EXPECT_EQ(area.columns.StartLine(), expected_column_start); \
EXPECT_EQ(area.columns.EndLine(), expected_column_end); \
EXPECT_EQ(area.rows.StartLine(), expected_row_start); \
EXPECT_EQ(area.rows.EndLine(), expected_row_end);
} // namespace
class NGGridLayoutAlgorithmTest
: public NGBaseLayoutAlgorithmTest,
......@@ -810,11 +810,168 @@ TEST_F(NGGridLayoutAlgorithmTest, NGGridLayoutAlgorithmAutoGridPositions) {
ASSERT_EQ(grid_positions.size(), 4U);
EXPECT_GRID_AREA(grid_positions[0], 1U, 2U, 1U, 2U);
EXPECT_GRID_AREA(grid_positions[1], 0U, 1U, 1U, 2U);
EXPECT_GRID_AREA(grid_positions[2], 1U, 2U, 0U, 1U);
EXPECT_GRID_AREA(grid_positions[1], 1U, 2U, 0U, 1U);
EXPECT_GRID_AREA(grid_positions[2], 0U, 1U, 1U, 2U);
EXPECT_GRID_AREA(grid_positions[3], 0U, 1U, 0U, 1U);
}
TEST_F(NGGridLayoutAlgorithmTest, NGGridLayoutAlgorithmAutoDense) {
if (!RuntimeEnabledFeatures::LayoutNGGridEnabled())
return;
SetBodyInnerHTML(R"HTML(
<style>
#grid {
display: grid;
grid-auto-flow: dense;
grid-template-columns: repeat(10, 40px);
grid-template-rows: repeat(10, 40px);
}
.item {
display: block;
font: 40px/1 Ahem;
border: 2px solid black;
width: 100%;
height: 100%;
}
.auto-one {
border: 2px solid red;
}
.auto-both {
border: 2px solid blue;
}
.a {
grid-column: 1 / 3;
grid-row: 1 / 3;
}
.b {
grid-column: 4 / 8;
grid-row: 1 / 4;
}
.c {
grid-column: 9 / 11;
grid-row: 1 / 2;
}
.d {
grid-column: 1 / 3;
grid-row: 4 / 6;
}
.e {
grid-column: 4 / 6;
grid-row: 4 / 5;
}
.f {
grid-column: 7 / 10;
grid-row: 5 / 6;
}
.g {
grid-column: 6 / 7;
grid-row: 8 / 9;
}
.h {
grid-column: 6 / 8;
grid-row-end: span 2;
}
.i {
grid-row: 4 / 5;
grid-column-end: span 2;
}
.j {
grid-column: 6 / 7;
}
.u {
grid-column-end: span 5;
grid-row-end: span 5;
}
.v {
grid-row-end: span 9;
}
.w {
grid-column-end: span 2;
grid-row-end: span 3;
}
.x {
grid-row-end: span 5;
}
</style>
<div id="wrapper">
<div id="grid">
<div class="item a">a</div>
<div class="item b">b</div>
<div class="item c">c</div>
<div class="item d">d</div>
<div class="item e">e</div>
<div class="item f">f</div>
<div class="item g">g</div>
<div class="auto-one item h">h</div>
<div class="auto-one item i">i</div>
<div class="auto-one item j">j</div>
<div class="auto-both item u">u</div>
<div class="auto-both item v">v</div>
<div class="auto-both item w">w</div>
<div class="auto-both item x">x</div>
<div class="auto-both item y">y</div>
<div class="auto-both item z">z</div>
</div>
</div>
)HTML");
NGBlockNode node(ToLayoutBox(GetLayoutObjectByElementId("grid")));
NGConstraintSpace space = ConstructBlockLayoutTestConstraintSpace(
WritingMode::kHorizontalTb, TextDirection::kLtr,
LogicalSize(LayoutUnit(500), LayoutUnit(500)), false, true);
NGFragmentGeometry fragment_geometry =
CalculateInitialFragmentGeometry(space, node);
NGGridLayoutAlgorithm algorithm({node, fragment_geometry, space});
EXPECT_EQ(GridItemCount(algorithm), 0U);
algorithm.Layout();
EXPECT_EQ(GridItemCount(algorithm), 16U);
Vector<GridArea> grid_positions = GridItemGridAreas(algorithm);
ASSERT_EQ(grid_positions.size(), 16U);
// Expected placements:
// 0 1 2 3 4 5 6 7 8 9
// 0 a a x b b b b y c c
// 1 a a x b b b b w w v
// 2 z * x b b b b w w v
// 3 d d x e e i i w w v
// 4 d d x * * j f f f v
// 5 u u u u u h h * * v
// 6 u u u u u h h * * v
// 7 u u u u u g * * * v
// 8 u u u u u * * * * v
// 9 u u u u u * * * * v
// Fixed positions: a-g
EXPECT_GRID_AREA(grid_positions[0], 0U, 2U, 0U, 2U);
EXPECT_GRID_AREA(grid_positions[1], 3U, 7U, 0U, 3U);
EXPECT_GRID_AREA(grid_positions[2], 8U, 10U, 0U, 1U);
EXPECT_GRID_AREA(grid_positions[3], 0U, 2U, 3U, 5U);
EXPECT_GRID_AREA(grid_positions[4], 3U, 5U, 3U, 4U);
EXPECT_GRID_AREA(grid_positions[5], 6U, 9U, 4U, 5U);
EXPECT_GRID_AREA(grid_positions[6], 5U, 6U, 7U, 8U);
// Fixed on single axis positions: h-j
EXPECT_GRID_AREA(grid_positions[7], 5U, 7U, 5U, 7U);
EXPECT_GRID_AREA(grid_positions[8], 5U, 7U, 3U, 4U);
EXPECT_GRID_AREA(grid_positions[9], 5U, 6U, 4U, 5U);
// Auto on both axis: u-z
EXPECT_GRID_AREA(grid_positions[10], 0U, 5U, 5U, 10U);
EXPECT_GRID_AREA(grid_positions[11], 9U, 10U, 1U, 10U);
EXPECT_GRID_AREA(grid_positions[12], 7U, 9U, 1U, 4U);
EXPECT_GRID_AREA(grid_positions[13], 2U, 3U, 0U, 5U);
EXPECT_GRID_AREA(grid_positions[14], 7U, 8U, 0U, 1U);
EXPECT_GRID_AREA(grid_positions[15], 0U, 1U, 2U, 3U);
}
TEST_F(NGGridLayoutAlgorithmTest, NGGridLayoutAlgorithmGridPositions) {
if (!RuntimeEnabledFeatures::LayoutNGGridEnabled())
return;
......
......@@ -58,19 +58,12 @@ void NGGridPlacement::RunAutoPlacementAlgorithm() {
for (NGGridLayoutAlgorithm::GridItemData* grid_item :
items_not_locked_to_major_axis_) {
DCHECK(grid_item);
switch (packing_behavior_) {
case PackingBehavior::kSparse:
if (grid_item->AutoPlacement(major_direction_) ==
NGGridLayoutAlgorithm::AutoPlacementType::kMajor) {
PlaceAutoMajorAxisGridItem(*grid_item);
} else if (grid_item->AutoPlacement(major_direction_) ==
NGGridLayoutAlgorithm::AutoPlacementType::kBoth) {
PlaceAutoBothAxisGridItem(*grid_item);
}
break;
case PackingBehavior::kDense:
// TODO(janewman): implement auto placement for dense packing.
break;
const AutoPlacementType item_placement_type =
grid_item->AutoPlacement(major_direction_);
if (item_placement_type == AutoPlacementType::kMajor) {
PlaceAutoMajorAxisGridItem(*grid_item);
} else if (item_placement_type == AutoPlacementType::kBoth) {
PlaceAutoBothAxisGridItem(*grid_item);
}
}
}
......@@ -101,59 +94,59 @@ void NGGridPlacement::PlaceGridItemsLockedToMajorAxis() {
// auto-placed item's position inserted on that track. This is needed to
// implement "sparse" packing for items locked to a given track.
// See https://drafts.csswg.org/css-grid/#auto-placement-algo
HashMap<wtf_size_t, wtf_size_t> minor_axis_cursors;
HashMap<wtf_size_t, wtf_size_t> minor_cursors;
for (NGGridLayoutAlgorithm::GridItemData* grid_item :
items_locked_to_major_axis_) {
DCHECK(grid_item);
DCHECK_EQ(grid_item->AutoPlacement(major_direction_),
NGGridLayoutAlgorithm::AutoPlacementType::kMinor);
switch (packing_behavior_) {
case PackingBehavior::kSparse: {
wtf_size_t minor_axis_start;
if (minor_axis_cursors.Contains(grid_item->StartLine(major_direction_) +
1)) {
minor_axis_start =
minor_axis_cursors.at(grid_item->StartLine(major_direction_) + 1);
} else {
minor_axis_start = ExplicitStart(minor_direction_);
}
wtf_size_t minor_span_size =
GridPositionsResolver::SpanSizeForAutoPlacedItem(
grid_item->node.Style(), minor_direction_);
while (DoesItemOverlap(grid_item->StartLine(major_direction_),
grid_item->EndLine(major_direction_),
minor_axis_start,
minor_axis_start + minor_span_size)) {
minor_axis_start++;
}
wtf_size_t minor_axis_end = minor_axis_start + minor_span_size;
minor_axis_cursors.Set(grid_item->StartLine(major_direction_) + 1,
minor_axis_start);
minor_max_end_line_ =
std::max<wtf_size_t>(minor_max_end_line_, minor_axis_end);
AutoPlacementType::kMinor);
wtf_size_t minor_start;
if (packing_behavior_ == PackingBehavior::kSparse &&
minor_cursors.Contains(grid_item->StartLine(major_direction_) + 1)) {
minor_start =
minor_cursors.at(grid_item->StartLine(major_direction_) + 1);
} else {
minor_start = ExplicitStart(minor_direction_);
}
wtf_size_t minor_span_size =
GridPositionsResolver::SpanSizeForAutoPlacedItem(
grid_item->node.Style(), minor_direction_);
while (DoesItemOverlap(grid_item->StartLine(major_direction_),
grid_item->EndLine(major_direction_), minor_start,
minor_start + minor_span_size)) {
minor_start++;
}
wtf_size_t minor_end = minor_start + minor_span_size;
if (packing_behavior_ == PackingBehavior::kSparse) {
minor_cursors.Set(grid_item->StartLine(major_direction_) + 1,
minor_start);
}
minor_max_end_line_ = std::max<wtf_size_t>(minor_max_end_line_, minor_end);
// Update placement and ensure track coverage.
UpdatePlacementAndEnsureTrackCoverage(
GridSpan::TranslatedDefiniteGridSpan(minor_axis_start,
minor_axis_end),
minor_direction_, *grid_item);
} break;
case PackingBehavior::kDense:
// TODO(janewman): implement auto placement for dense packing.
break;
// Update placement and ensure track coverage.
UpdatePlacementAndEnsureTrackCoverage(
GridSpan::TranslatedDefiniteGridSpan(minor_start, minor_end),
minor_direction_, *grid_item);
}
}
}
void NGGridPlacement::PlaceAutoMajorAxisGridItem(
NGGridLayoutAlgorithm::GridItemData& grid_item) {
wtf_size_t major_span_size = GridPositionsResolver::SpanSizeForAutoPlacedItem(
grid_item.node.Style(), major_direction_);
// Set the minor position of the cursor to the grid item’s minor starting
// line. If this is less than the previous column position of the cursor,
// increment the major position by 1.
if (grid_item.StartLine(minor_direction_) < placement_cursor_minor) {
placement_cursor_major++;
switch (packing_behavior_) {
case PackingBehavior::kSparse:
// Set the minor position of the cursor to the grid item’s minor starting
// line. If this is less than the previous column position of the cursor,
// increment the major position by 1.
if (grid_item.StartLine(minor_direction_) < placement_cursor_minor) {
placement_cursor_major++;
}
break;
case PackingBehavior::kDense:
placement_cursor_major = ExplicitStart(major_direction_);
break;
}
placement_cursor_minor = grid_item.StartLine(minor_direction_);
......@@ -175,6 +168,12 @@ void NGGridPlacement::PlaceAutoMajorAxisGridItem(
void NGGridPlacement::PlaceAutoBothAxisGridItem(
NGGridLayoutAlgorithm::GridItemData& grid_item) {
if (packing_behavior_ == PackingBehavior::kDense) {
// Set the cursor’s major and minor positions to start-most row and column
// lines in the implicit grid.
placement_cursor_major = ExplicitStart(major_direction_);
placement_cursor_minor = ExplicitStart(minor_direction_);
}
wtf_size_t major_span_size = GridPositionsResolver::SpanSizeForAutoPlacedItem(
grid_item.node.Style(), major_direction_);
wtf_size_t minor_span_size = GridPositionsResolver::SpanSizeForAutoPlacedItem(
......
......@@ -3646,8 +3646,6 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/gri
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-5.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-6.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-7.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-8.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-9.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html [ Failure ]
......@@ -3817,8 +3815,6 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definiti
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-intrinsic-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-max-size-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-add-item-with-positioned-items-crash.html [ Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-add-positioned-block-item-after-inline-item-crash.html [ Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-min-max-size-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-min-size-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/grid-definition/grid-auto-repeat-min-size-002.html [ Failure ]
......@@ -4049,7 +4045,6 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/parsing/grid-template-rows-computed.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-auto-placement-implicit-tracks-001.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-container-change-grid-tracks-recompute-child-positions-001.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-container-change-named-grid-recompute-child-positions-001.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-layout-grid-span.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-layout-lines-shorthands.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/placement/grid-layout-lines.html [ Failure ]
......@@ -4073,7 +4068,6 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-resolution.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-update.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-resolution.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-update.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-repeat-huge-grid.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-columns-rows-get-set-multiple.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-columns-rows-get-set.html [ Failure Crash ]
......@@ -4093,9 +4087,6 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-addition
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-addition-track-breadth-update.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-margins-and-stretch.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-margins-must-respect-specified-margins.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-placement-automatic-span.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-placement-definite-span.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-placement-fixed-row-column.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-auto-sized-align-justify-margin-border-padding.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-border-overflow-paint.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-change-alignment-from-stretch.html [ Failure ]
......@@ -4106,7 +4097,6 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-named-gr
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-indexes.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-integer-explicit-grid-resolution.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-position-resolution.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-order-auto-flow-resolution.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-order-paint-order.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-overflow-paint.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-overflow.html [ Failure ]
......@@ -4134,7 +4124,6 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-conte
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content-vertical-rl.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-justify-content.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-only-abspos-item-computed-style-crash.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-painting-respect-dom-order.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-painting-rtl.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-percent-track-margin-border-padding.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-percent-track-scrollbar.html [ Failure ]
......@@ -4173,8 +4162,6 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/mozilla/grid-repea
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-areas-dynamic-with-media-query.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-line-get-set.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-lines-computed-style-implicit-tracks.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-lines-with-named-grid-areas-dynamic-get-set.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/named-grid-lines-with-named-grid-areas-resolution.html [ Failure Crash ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/negative-growth-share-as-infinity-crash.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/non-grid-columns-rows-get-set.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/painting-item-marginbox-overflowing-grid-area.html [ Failure ]
......
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