Commit 76c20976 authored by Ana SollanoKim's avatar Ana SollanoKim Committed by Chromium LUCI CQ

Reland "[GridNG] Computation of static offsets edges and grid area for

out of flow items"

This is a reland of f08bc1d7

Original change:
https://chromium-review.googlesource.com/c/chromium/src/+/2567573

Revert of the original change:
https://chromium-review.googlesource.com/c/chromium/src/+/2613550

Marked:
virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned
-items-gaps-001.html
virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned
-items-gaps-rtl-001.html
virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned
-items-within-grid-implicit-track-001.html
virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-
axis-alignment-positioned-items-[012-016].html
virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-
axis-alignment-positioned-items-[012-016].html
virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-
alignment-positioned-items-with-margin-border-padding-[011-016].html
as failing in all builders.

Original change's description:
> [GridNG] Computation of static offsets edges and grid area for out of
> flow items
>
> 1. Function ResolveOutOfFlowItemGridLines: The column and row span of
> the grid area for the out of flow item is obtained through
> GridPositionResolver, and the grid lines of the out of flow item are
> computed.
>
> 2. Refactor of CacheItemSetIndices: For in flow items, computation of
> the set indices remains the same. To compute the indices for out of flow
> items we take into account the following:
>   a. If both the start and end line of the out of flow item are not
>   'auto', then the indices are computed as if they were in flow items.
>   b. If either is 'auto', then its value is kNotFound.
>   c. If either is attempting to create a new line in the grid, then they
>   are treated as 'auto'.
>
> 3. Helper method ComputeOffsetAndSize: the computation of the offset and
> size of each item was generalized to include the cases where either or
> both of the set indices are auto in out of flow items. Additionally,
> inline and block edges are computed.
>
> Bug: 1045599
> Change-Id: I15b680d1866cdb81b42d626bcd6948ae1b7132ca
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2567573
> Commit-Queue: Ana Sollano Kim <ansollan@microsoft.com>
> Reviewed-by: Ian Kilpatrick <ikilpatrick@chromium.org>
> Reviewed-by: Kurt Catti-Schmidt <kschmi@microsoft.com>
> Reviewed-by: Stephen Chenney <schenney@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#840701}

Bug: 1045599
Change-Id: Ie2fee60c6717740fc70f5b0d285919b47f521bed
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2616242
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#842065}
parent 6bfc721c
...@@ -62,11 +62,11 @@ scoped_refptr<const NGLayoutResult> NGGridLayoutAlgorithm::Layout() { ...@@ -62,11 +62,11 @@ scoped_refptr<const NGLayoutResult> NGGridLayoutAlgorithm::Layout() {
ComputeUsedTrackSizes(&algorithm_row_track_collection, &grid_items, ComputeUsedTrackSizes(&algorithm_row_track_collection, &grid_items,
&reordered_item_indices); &reordered_item_indices);
// Place items. // Place grid and out of flow items.
LayoutUnit intrinsic_block_size; LayoutUnit intrinsic_block_size;
PlaceGridItems(grid_items, out_of_flow_items, PlaceItems(grid_items, algorithm_column_track_collection,
algorithm_column_track_collection, algorithm_row_track_collection, &out_of_flow_items,
algorithm_row_track_collection, &intrinsic_block_size); &intrinsic_block_size);
intrinsic_block_size = intrinsic_block_size =
ClampIntrinsicBlockSize(ConstraintSpace(), Node(), ClampIntrinsicBlockSize(ConstraintSpace(), Node(),
...@@ -191,7 +191,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::StartLine( ...@@ -191,7 +191,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::StartLine(
const GridSpan& span = (track_direction == kForColumns) const GridSpan& span = (track_direction == kForColumns)
? resolved_position.columns ? resolved_position.columns
: resolved_position.rows; : resolved_position.rows;
DCHECK(span.IsTranslatedDefinite());
return span.StartLine(); return span.StartLine();
} }
...@@ -200,7 +199,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::EndLine( ...@@ -200,7 +199,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::EndLine(
const GridSpan& span = (track_direction == kForColumns) const GridSpan& span = (track_direction == kForColumns)
? resolved_position.columns ? resolved_position.columns
: resolved_position.rows; : resolved_position.rows;
DCHECK(span.IsTranslatedDefinite());
return span.EndLine(); return span.EndLine();
} }
...@@ -209,7 +207,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::SpanSize( ...@@ -209,7 +207,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::SpanSize(
const GridSpan& span = (track_direction == kForColumns) const GridSpan& span = (track_direction == kForColumns)
? resolved_position.columns ? resolved_position.columns
: resolved_position.rows; : resolved_position.rows;
DCHECK(span.IsTranslatedDefinite());
return span.IntegerSpan(); return span.IntegerSpan();
} }
...@@ -332,7 +329,7 @@ void NGGridLayoutAlgorithm::ConstructAndAppendGridItems( ...@@ -332,7 +329,7 @@ void NGGridLayoutAlgorithm::ConstructAndAppendGridItems(
GridItemData grid_item = MeasureGridItem(child); GridItemData grid_item = MeasureGridItem(child);
// If |out_of_flow_items| is provided, store out-of-flow items separately, // If |out_of_flow_items| is provided, store out-of-flow items separately,
// as they do not contribute to track sizing or auto-placement. // as they do not contribute to track sizing or auto-placement.
if (!child.IsOutOfFlowPositioned()) if (grid_item.item_type == ItemType::kInGridFlow)
grid_items->emplace_back(grid_item); grid_items->emplace_back(grid_item);
else if (out_of_flow_items) else if (out_of_flow_items)
out_of_flow_items->emplace_back(grid_item); out_of_flow_items->emplace_back(grid_item);
...@@ -496,6 +493,9 @@ NGGridLayoutAlgorithm::GridItemData NGGridLayoutAlgorithm::MeasureGridItem( ...@@ -496,6 +493,9 @@ NGGridLayoutAlgorithm::GridItemData NGGridLayoutAlgorithm::MeasureGridItem(
MinMaxSizesType::kContent), MinMaxSizesType::kContent),
&constraint_space) &constraint_space)
.sizes; .sizes;
grid_item.item_type = node.IsOutOfFlowPositioned() ? ItemType::kOutOfFlow
: ItemType::kInGridFlow;
return grid_item; return grid_item;
} }
...@@ -596,25 +596,56 @@ void NGGridLayoutAlgorithm::EnsureTrackCoverageForGridItems( ...@@ -596,25 +596,56 @@ void NGGridLayoutAlgorithm::EnsureTrackCoverageForGridItems(
void NGGridLayoutAlgorithm::CacheItemSetIndices( void NGGridLayoutAlgorithm::CacheItemSetIndices(
const NGGridLayoutAlgorithmTrackCollection& track_collection, const NGGridLayoutAlgorithmTrackCollection& track_collection,
Vector<GridItemData>* grid_items) const { Vector<GridItemData>* items) const {
DCHECK(grid_items); DCHECK(items);
const GridTrackSizingDirection track_direction = track_collection.Direction(); const GridTrackSizingDirection track_direction = track_collection.Direction();
for (GridItemData& item : *items) {
wtf_size_t start_line, end_line;
if (item.item_type == ItemType::kInGridFlow) {
start_line = item.StartLine(track_direction);
end_line = item.EndLine(track_direction) - 1;
DCHECK_NE(start_line, kNotFound);
DCHECK_NE(end_line, kNotFound);
} else {
ResolveOutOfFlowItemGridLines(item, track_collection, &start_line,
&end_line);
}
for (GridItemData& item : *grid_items) { // We only calculate the indexes if:
wtf_size_t first_spanned_range = track_collection.RangeIndexFromTrackNumber( // 1. The item is in flow (it is a grid item) or
item.StartLine(track_direction)); // 2. The item is out of flow, but the line was not defined as 'auto' and
wtf_size_t last_spanned_range = track_collection.RangeIndexFromTrackNumber( // the line is within the bounds of the grid, since an out of flow item
item.EndLine(track_direction) - 1); // cannot create grid lines.
// TODO(ansollan): The start line of an out of flow item can be the last
DCHECK_LE(first_spanned_range, last_spanned_range); // line of the grid. If that is the case, begin_set_index has to be
wtf_size_t begin_set_index = // computed as end_set_index. Similarly, if an end line is the first line
// of the grid, end_set_index has to be computed as begin_set_index.
wtf_size_t begin_set_index = kNotFound;
wtf_size_t end_set_index = kNotFound;
if (start_line != kNotFound) {
wtf_size_t first_spanned_range =
track_collection.RangeIndexFromTrackNumber(start_line);
begin_set_index =
track_collection.RangeStartingSetIndex(first_spanned_range); track_collection.RangeStartingSetIndex(first_spanned_range);
wtf_size_t end_set_index = }
if (end_line != kNotFound) {
wtf_size_t last_spanned_range =
track_collection.RangeIndexFromTrackNumber(end_line);
end_set_index =
track_collection.RangeStartingSetIndex(last_spanned_range) + track_collection.RangeStartingSetIndex(last_spanned_range) +
track_collection.RangeSetCount(last_spanned_range); track_collection.RangeSetCount(last_spanned_range);
}
DCHECK_LE(begin_set_index, end_set_index); #if DCHECK_IS_ON()
if (begin_set_index != kNotFound && end_set_index != kNotFound) {
DCHECK_LE(end_set_index, track_collection.SetCount()); DCHECK_LE(end_set_index, track_collection.SetCount());
DCHECK_LT(begin_set_index, end_set_index);
} else if (begin_set_index != kNotFound) {
DCHECK_LT(begin_set_index, track_collection.SetCount());
} else if (end_set_index != kNotFound) {
DCHECK_LE(end_set_index, track_collection.SetCount());
}
#endif
if (track_direction == kForColumns) { if (track_direction == kForColumns) {
item.columns_begin_set_index = begin_set_index; item.columns_begin_set_index = begin_set_index;
...@@ -626,6 +657,44 @@ void NGGridLayoutAlgorithm::CacheItemSetIndices( ...@@ -626,6 +657,44 @@ void NGGridLayoutAlgorithm::CacheItemSetIndices(
} }
} }
// TODO(ansollan): Move ResolveOutOfFlowItemGridLines to NGGridPlacement and
// pass |automatic_repetitions| and |explicit_start| variables.
void NGGridLayoutAlgorithm::ResolveOutOfFlowItemGridLines(
const GridItemData& out_of_flow_item,
const NGGridLayoutAlgorithmTrackCollection& track_collection,
wtf_size_t* start_line,
wtf_size_t* end_line) const {
DCHECK(start_line);
DCHECK(end_line);
const ComputedStyle& out_of_flow_item_style = out_of_flow_item.node.Style();
const GridTrackSizingDirection track_direction = track_collection.Direction();
GridSpan span = GridPositionsResolver::ResolveGridPositionsFromStyle(
Style(), out_of_flow_item_style, track_direction, 0);
if (span.IsIndefinite()) {
*start_line = kNotFound;
*end_line = kNotFound;
return;
} else if (span.UntranslatedStartLine() > -1) {
// TODO(ansollan): Handle out of flow positioned items with negative
// indexes.
span.Translate(0);
}
*start_line = span.StartLine();
*end_line = span.EndLine() - 1;
if (!track_collection.IsTrackWithinBounds(*start_line) ||
(track_direction == kForColumns
? out_of_flow_item_style.GridColumnStart().IsAuto()
: out_of_flow_item_style.GridRowStart().IsAuto()))
*start_line = kNotFound;
if (!track_collection.IsTrackWithinBounds(*end_line) ||
(track_direction == kForColumns
? out_of_flow_item_style.GridColumnEnd().IsAuto()
: out_of_flow_item_style.GridRowEnd().IsAuto()))
*end_line = kNotFound;
}
void NGGridLayoutAlgorithm::CacheGridItemsTrackSpanProperties( void NGGridLayoutAlgorithm::CacheGridItemsTrackSpanProperties(
const NGGridLayoutAlgorithmTrackCollection& track_collection, const NGGridLayoutAlgorithmTrackCollection& track_collection,
Vector<GridItemData>* grid_items, Vector<GridItemData>* grid_items,
...@@ -1178,11 +1247,11 @@ void NGGridLayoutAlgorithm::ResolveIntrinsicTrackSizes( ...@@ -1178,11 +1247,11 @@ void NGGridLayoutAlgorithm::ResolveIntrinsicTrackSizes(
// by span) all items that do span a track with a flexible sizing function. // by span) all items that do span a track with a flexible sizing function.
} }
void NGGridLayoutAlgorithm::PlaceGridItems( void NGGridLayoutAlgorithm::PlaceItems(
const Vector<GridItemData>& grid_items, const Vector<GridItemData>& grid_items,
const Vector<GridItemData>& out_of_flow_items, const NGGridLayoutAlgorithmTrackCollection& column_track_collection,
NGGridLayoutAlgorithmTrackCollection& column_track_collection, const NGGridLayoutAlgorithmTrackCollection& row_track_collection,
NGGridLayoutAlgorithmTrackCollection& row_track_collection, Vector<GridItemData>* out_of_flow_items,
LayoutUnit* intrinsic_block_size) { LayoutUnit* intrinsic_block_size) {
DCHECK(intrinsic_block_size); DCHECK(intrinsic_block_size);
LayoutUnit column_grid_gap = LayoutUnit column_grid_gap =
...@@ -1208,42 +1277,50 @@ void NGGridLayoutAlgorithm::PlaceGridItems( ...@@ -1208,42 +1277,50 @@ void NGGridLayoutAlgorithm::PlaceGridItems(
row_set_offsets = ComputeSetOffsets(row_track_collection, row_grid_gap); row_set_offsets = ComputeSetOffsets(row_track_collection, row_grid_gap);
} }
for (const GridItemData& grid_item : grid_items) { PlaceGridItems(grid_items, column_set_offsets, row_set_offsets,
wtf_size_t column_start_index = grid_item.columns_begin_set_index; *intrinsic_block_size, column_grid_gap, row_grid_gap);
wtf_size_t column_end_index = grid_item.columns_end_set_index;
wtf_size_t row_start_index = grid_item.rows_begin_set_index; PlaceOutOfFlowItems(column_set_offsets, row_set_offsets,
wtf_size_t row_end_index = grid_item.rows_end_set_index; column_track_collection, row_track_collection,
*intrinsic_block_size, column_grid_gap, row_grid_gap,
DCHECK_LT(column_start_index, column_end_index); out_of_flow_items);
DCHECK_LT(row_start_index, row_end_index); }
DCHECK_LT(column_end_index, column_set_offsets.size());
DCHECK_LT(row_end_index, row_set_offsets.size()); LayoutUnit NGGridLayoutAlgorithm::GridGap(
GridTrackSizingDirection track_direction,
LogicalOffset offset = {column_set_offsets[column_start_index], LayoutUnit available_size) const {
row_set_offsets[row_start_index]}; const base::Optional<Length>& gap =
track_direction == kForColumns ? Style().ColumnGap() : Style().RowGap();
// Inline and block sizes can be deduced from the delta between the inline
// offset and the cumulated offset at the given item's end indices. The
// cumulated offset's calculation includes the grid gap between and after
// the spanned tracks. The latter is not needed, so it is subtracted.
LogicalSize size = {
column_set_offsets[column_end_index] - offset.inline_offset -
column_grid_gap,
row_set_offsets[row_end_index] - offset.block_offset - row_grid_gap};
DCHECK_GE(size.inline_size, 0);
DCHECK_GE(size.block_size, 0);
PlaceGridItem(grid_item, offset, size);
}
for (const GridItemData& out_of_flow_item : out_of_flow_items) { // TODO(ansollan): Update behavior based on outcome of working group
// TODO(ansollan): Look up offsets based on specified row/column for // discussions. See https://github.com/w3c/csswg-drafts/issues/5566.
// absolutely-positioned items, as described in if (!gap || IsRowGridGapUnresolvable(available_size))
// https://drafts.csswg.org/css-grid-1/#abspos, and pass the correct static return LayoutUnit();
// positioned offset in. return MinimumValueForLength(*gap, available_size);
container_builder_.AddOutOfFlowChildCandidate(out_of_flow_item.node, }
LogicalOffset());
Vector<LayoutUnit> NGGridLayoutAlgorithm::ComputeSetOffsets(
const NGGridLayoutAlgorithmTrackCollection& track_collection,
LayoutUnit grid_gap) const {
LayoutUnit set_offset = track_collection.IsForColumns()
? BorderScrollbarPadding().inline_start
: BorderScrollbarPadding().block_start;
Vector<LayoutUnit> set_offsets = {set_offset};
set_offsets.ReserveCapacity(track_collection.SetCount() + 1);
for (auto set_iterator = track_collection.GetSetIterator();
!set_iterator.IsAtEnd(); set_iterator.MoveToNextSet()) {
const auto& set = set_iterator.CurrentSet();
set_offset += set.BaseSize() + set.TrackCount() * grid_gap;
set_offsets.push_back(set_offset);
} }
return set_offsets;
}
bool NGGridLayoutAlgorithm::IsRowGridGapUnresolvable(
LayoutUnit available_size) const {
const base::Optional<Length>& row_gap = Style().RowGap();
return row_gap && row_gap->IsPercentOrCalc() &&
available_size == kIndefiniteSize;
} }
namespace { namespace {
...@@ -1269,11 +1346,61 @@ LayoutUnit AlignmentOffset(LayoutUnit container_size, ...@@ -1269,11 +1346,61 @@ LayoutUnit AlignmentOffset(LayoutUnit container_size,
return LayoutUnit(); return LayoutUnit();
} }
void AlignmentOffsetForOutOfFlow(
const AxisEdge inline_axis_edge,
const AxisEdge block_axis_edge,
const LogicalSize container_size,
NGLogicalStaticPosition::InlineEdge* inline_edge,
NGLogicalStaticPosition::BlockEdge* block_edge,
LogicalOffset* offset) {
using InlineEdge = NGLogicalStaticPosition::InlineEdge;
using BlockEdge = NGLogicalStaticPosition::BlockEdge;
switch (inline_axis_edge) {
case AxisEdge::kStart:
*inline_edge = InlineEdge::kInlineStart;
break;
case AxisEdge::kCenter:
*inline_edge = InlineEdge::kInlineCenter;
offset->inline_offset += container_size.inline_size / 2;
break;
default:
*inline_edge = InlineEdge::kInlineEnd;
offset->inline_offset += container_size.inline_size;
break;
}
switch (block_axis_edge) {
case AxisEdge::kStart:
*block_edge = BlockEdge::kBlockStart;
break;
case AxisEdge::kCenter:
*block_edge = BlockEdge::kBlockCenter;
offset->block_offset += container_size.block_size / 2;
break;
default:
*block_edge = BlockEdge::kBlockEnd;
offset->block_offset += container_size.block_size;
break;
}
}
} // namespace } // namespace
void NGGridLayoutAlgorithm::PlaceGridItem(const GridItemData& grid_item, void NGGridLayoutAlgorithm::PlaceGridItems(
LogicalOffset offset, const Vector<GridItemData>& grid_items,
LogicalSize size) { const Vector<LayoutUnit>& column_set_offsets,
const Vector<LayoutUnit>& row_set_offsets,
LayoutUnit intrinsic_block_size,
LayoutUnit column_grid_gap,
LayoutUnit row_grid_gap) {
for (const GridItemData& grid_item : grid_items) {
LogicalOffset offset;
LogicalSize size;
ComputeOffsetAndSize(grid_item, column_set_offsets, column_grid_gap,
&offset.inline_offset, &size.inline_size);
ComputeOffsetAndSize(grid_item, row_set_offsets, row_grid_gap,
&offset.block_offset, &size.block_size, kForRows,
intrinsic_block_size);
const auto& item_style = grid_item.node.Style(); const auto& item_style = grid_item.node.Style();
NGConstraintSpaceBuilder builder(ConstraintSpace(), NGConstraintSpaceBuilder builder(ConstraintSpace(),
item_style.GetWritingDirection(), item_style.GetWritingDirection(),
...@@ -1293,52 +1420,108 @@ void NGGridLayoutAlgorithm::PlaceGridItem(const GridItemData& grid_item, ...@@ -1293,52 +1420,108 @@ void NGGridLayoutAlgorithm::PlaceGridItem(const GridItemData& grid_item,
// Apply the grid-item's alignment (if any). // Apply the grid-item's alignment (if any).
NGFragment fragment(ConstraintSpace().GetWritingDirection(), NGFragment fragment(ConstraintSpace().GetWritingDirection(),
physical_fragment); physical_fragment);
offset += LogicalOffset( offset +=
AlignmentOffset(size.inline_size, fragment.InlineSize(), LogicalOffset(AlignmentOffset(size.inline_size, fragment.InlineSize(),
grid_item.margins.inline_start, grid_item.margins.inline_start,
grid_item.margins.inline_end, grid_item.margins.inline_end,
grid_item.inline_axis_alignment), grid_item.inline_axis_alignment),
AlignmentOffset( AlignmentOffset(size.block_size, fragment.BlockSize(),
size.block_size, fragment.BlockSize(), grid_item.margins.block_start, grid_item.margins.block_start,
grid_item.margins.block_end, grid_item.block_axis_alignment)); grid_item.margins.block_end,
grid_item.block_axis_alignment));
container_builder_.AddChild(physical_fragment, offset); container_builder_.AddChild(physical_fragment, offset);
}
} }
LayoutUnit NGGridLayoutAlgorithm::GridGap( void NGGridLayoutAlgorithm::PlaceOutOfFlowItems(
GridTrackSizingDirection track_direction, const Vector<LayoutUnit>& column_set_offsets,
LayoutUnit available_size) const { const Vector<LayoutUnit>& row_set_offsets,
const base::Optional<Length>& gap = const NGGridLayoutAlgorithmTrackCollection& column_track_collection,
track_direction == kForColumns ? Style().ColumnGap() : Style().RowGap(); const NGGridLayoutAlgorithmTrackCollection& row_track_collection,
LayoutUnit intrinsic_block_size,
// TODO(ansollan): Update behavior based on outcome of working group LayoutUnit column_grid_gap,
// discussions. See https://github.com/w3c/csswg-drafts/issues/5566. LayoutUnit row_grid_gap,
if (!gap || IsRowGridGapUnresolvable(available_size)) Vector<GridItemData>* out_of_flow_items) {
return LayoutUnit(); // Cache set indices for out of flow items.
return MinimumValueForLength(*gap, available_size); CacheItemSetIndices(column_track_collection, out_of_flow_items);
} CacheItemSetIndices(row_track_collection, out_of_flow_items);
Vector<LayoutUnit> NGGridLayoutAlgorithm::ComputeSetOffsets( for (const GridItemData& out_of_flow_item : *out_of_flow_items) {
const NGGridLayoutAlgorithmTrackCollection& track_collection, LogicalRect containing_block_rect;
LayoutUnit grid_gap) const { ComputeOffsetAndSize(out_of_flow_item, column_set_offsets, column_grid_gap,
LayoutUnit set_offset = track_collection.IsForColumns() &containing_block_rect.offset.inline_offset,
? BorderScrollbarPadding().inline_start &containing_block_rect.size.inline_size);
: BorderScrollbarPadding().block_start; ComputeOffsetAndSize(out_of_flow_item, row_set_offsets, row_grid_gap,
Vector<LayoutUnit> set_offsets = {set_offset}; &containing_block_rect.offset.block_offset,
set_offsets.ReserveCapacity(track_collection.SetCount() + 1); &containing_block_rect.size.block_size, kForRows,
for (auto set_iterator = track_collection.GetSetIterator(); intrinsic_block_size);
!set_iterator.IsAtEnd(); set_iterator.MoveToNextSet()) { NGLogicalStaticPosition::InlineEdge inline_edge;
const auto& set = set_iterator.CurrentSet(); NGLogicalStaticPosition::BlockEdge block_edge;
set_offset += set.BaseSize() + set.TrackCount() * grid_gap; LogicalOffset child_offset = containing_block_rect.offset;
set_offsets.push_back(set_offset); AlignmentOffsetForOutOfFlow(out_of_flow_item.inline_axis_alignment,
out_of_flow_item.block_axis_alignment,
containing_block_rect.size, &inline_edge,
&block_edge, &child_offset);
container_builder_.AddOutOfFlowChildCandidate(
out_of_flow_item.node, child_offset, inline_edge, block_edge,
/* needs_block_offset_adjustment */ false, containing_block_rect);
} }
return set_offsets;
} }
bool NGGridLayoutAlgorithm::IsRowGridGapUnresolvable( void NGGridLayoutAlgorithm::ComputeOffsetAndSize(
LayoutUnit available_size) const { const GridItemData& item,
const base::Optional<Length>& row_gap = Style().RowGap(); const Vector<LayoutUnit>& set_offsets,
return row_gap && row_gap->IsPercentOrCalc() && LayoutUnit grid_gap,
available_size == kIndefiniteSize; LayoutUnit* start_offset,
LayoutUnit* size,
GridTrackSizingDirection track_direction,
LayoutUnit intrinsic_block_size) const {
wtf_size_t start_index, end_index;
LayoutUnit border;
// The default padding box value of the |size| will only be used in out of
// flow items in which both the start line and end line are defined as 'auto'.
if (track_direction == kForColumns) {
start_index = item.columns_begin_set_index;
end_index = item.columns_end_set_index;
border = container_builder_.Borders().inline_start;
*size =
border_box_size_.inline_size - container_builder_.Borders().InlineSum();
} else {
start_index = item.rows_begin_set_index;
end_index = item.rows_end_set_index;
border = container_builder_.Borders().block_start;
*size = border_box_size_.block_size == kIndefiniteSize
? intrinsic_block_size
: border_box_size_.block_size;
*size -= container_builder_.Borders().BlockSum();
}
*start_offset = border;
LayoutUnit end_offset = border;
// If the start line is defined, the size is calculated by subtracting the
// offset at start index. Additionally, the start border is removed from the
// cumulated offset because it was already accounted for in the previous value
// of the size.
if (start_index != kNotFound) {
*start_offset = set_offsets[start_index];
*size -= (*start_offset - end_offset);
}
// If the end line is defined, the offset (which can be the offset at the
// start index or the start border) and the added grid gap after the spanned
// tracks are subtracted from the offset at the end index.
if (end_index != kNotFound) {
end_offset = set_offsets[end_index];
*size = end_offset - *start_offset - grid_gap;
}
if (start_index != kNotFound && end_index != kNotFound) {
DCHECK_LT(start_index, end_index);
DCHECK_LT(end_index, set_offsets.size());
DCHECK_GE(*size, 0);
} else {
// Only out of flow items can have an undefined ('auto') value for the start
// and/or end indices.
DCHECK_EQ(item.item_type, ItemType::kOutOfFlow);
}
} }
} // namespace blink } // namespace blink
...@@ -23,6 +23,7 @@ class CORE_EXPORT NGGridLayoutAlgorithm ...@@ -23,6 +23,7 @@ class CORE_EXPORT NGGridLayoutAlgorithm
public: public:
enum class AutoPlacementType { kNotNeeded, kMajor, kMinor, kBoth }; enum class AutoPlacementType { kNotNeeded, kMajor, kMinor, kBoth };
enum class AxisEdge { kStart, kCenter, kEnd, kBaseline }; enum class AxisEdge { kStart, kCenter, kEnd, kBaseline };
enum class ItemType { kInGridFlow, kOutOfFlow };
// This enum corresponds to each step used to accommodate grid items across // This enum corresponds to each step used to accommodate grid items across
// intrinsic tracks according to their min and max track sizing functions, as // intrinsic tracks according to their min and max track sizing functions, as
...@@ -75,6 +76,8 @@ class CORE_EXPORT NGGridLayoutAlgorithm ...@@ -75,6 +76,8 @@ class CORE_EXPORT NGGridLayoutAlgorithm
AxisEdge inline_axis_alignment; AxisEdge inline_axis_alignment;
AxisEdge block_axis_alignment; AxisEdge block_axis_alignment;
ItemType item_type;
bool is_inline_axis_stretched; bool is_inline_axis_stretched;
bool is_block_axis_stretched; bool is_block_axis_stretched;
...@@ -177,7 +180,13 @@ class CORE_EXPORT NGGridLayoutAlgorithm ...@@ -177,7 +180,13 @@ class CORE_EXPORT NGGridLayoutAlgorithm
// collection's |sets_| with an index in the range [begin, end). // collection's |sets_| with an index in the range [begin, end).
void CacheItemSetIndices( void CacheItemSetIndices(
const NGGridLayoutAlgorithmTrackCollection& track_collection, const NGGridLayoutAlgorithmTrackCollection& track_collection,
Vector<GridItemData>* grid_items) const; Vector<GridItemData>* items) const;
// Helper function to resolve start and end lines of out of flow items.
void ResolveOutOfFlowItemGridLines(
const GridItemData& out_of_flow_item,
const NGGridLayoutAlgorithmTrackCollection& track_collection,
wtf_size_t* start_line,
wtf_size_t* end_line) const;
// For every grid item, caches properties of the track sizing functions it // For every grid item, caches properties of the track sizing functions it
// spans (i.e. whether an item spans intrinsic or flexible tracks). // spans (i.e. whether an item spans intrinsic or flexible tracks).
void CacheGridItemsTrackSpanProperties( void CacheGridItemsTrackSpanProperties(
...@@ -211,18 +220,13 @@ class CORE_EXPORT NGGridLayoutAlgorithm ...@@ -211,18 +220,13 @@ class CORE_EXPORT NGGridLayoutAlgorithm
NGGridSetVector* sets_to_grow_beyond_limit); NGGridSetVector* sets_to_grow_beyond_limit);
// Lays out and computes inline and block offsets for grid items. // Lays out and computes inline and block offsets for grid items.
void PlaceGridItems( void PlaceItems(
const Vector<GridItemData>& grid_items, const Vector<GridItemData>& grid_items,
const Vector<GridItemData>& out_of_flow_items, const NGGridLayoutAlgorithmTrackCollection& column_track_collection,
NGGridLayoutAlgorithmTrackCollection& column_track_collection, const NGGridLayoutAlgorithmTrackCollection& row_track_collection,
NGGridLayoutAlgorithmTrackCollection& row_track_collection, Vector<GridItemData>* out_of_flow_items,
LayoutUnit* intrinsic_block_size); LayoutUnit* intrinsic_block_size);
// Lays out |grid_item| based on the offsets and sizes provided.
void PlaceGridItem(const GridItemData& grid_item,
LogicalOffset offset,
LogicalSize size);
// Gets the row or column gap of the grid. // Gets the row or column gap of the grid.
LayoutUnit GridGap(GridTrackSizingDirection track_direction, LayoutUnit GridGap(GridTrackSizingDirection track_direction,
LayoutUnit available_size = kIndefiniteSize) const; LayoutUnit available_size = kIndefiniteSize) const;
...@@ -236,6 +240,43 @@ class CORE_EXPORT NGGridLayoutAlgorithm ...@@ -236,6 +240,43 @@ class CORE_EXPORT NGGridLayoutAlgorithm
// available size. // available size.
bool IsRowGridGapUnresolvable(LayoutUnit available_size) const; bool IsRowGridGapUnresolvable(LayoutUnit available_size) const;
// Layout the |grid_items| based on the offsets provided.
void PlaceGridItems(const Vector<GridItemData>& grid_items,
const Vector<LayoutUnit>& column_set_offsets,
const Vector<LayoutUnit>& row_set_offsets,
LayoutUnit intrinsic_block_size,
LayoutUnit column_grid_gap,
LayoutUnit row_grid_gap);
// Computes the static position, grid area and its offset of out of flow
// elements in the grid.
void PlaceOutOfFlowItems(
const Vector<LayoutUnit>& column_set_offsets,
const Vector<LayoutUnit>& row_set_offsets,
const NGGridLayoutAlgorithmTrackCollection& column_track_collection,
const NGGridLayoutAlgorithmTrackCollection& row_track_collection,
LayoutUnit intrinsic_block_size,
LayoutUnit column_grid_gap,
LayoutUnit row_grid_gap,
Vector<GridItemData>* out_of_flow_items);
// Helper method that computes the offset and size of an item.
void ComputeOffsetAndSize(
const GridItemData& item,
const Vector<LayoutUnit>& set_offsets,
LayoutUnit grid_gap,
LayoutUnit* start_offset,
LayoutUnit* size,
GridTrackSizingDirection track_direction = kForColumns,
const LayoutUnit intrinsic_block_size = LayoutUnit()) const;
// Determines the position of the out of flow item's container.
void DeterminePositionOfOutOfFlowContainer(
Vector<GridItemData>* out_of_flow_items,
const GridTrackSizingDirection track_direction) const;
GridTrackSizingDirection AutoFlowDirection() const;
LogicalSize border_box_size_; LogicalSize border_box_size_;
LogicalSize child_percentage_size_; LogicalSize child_percentage_size_;
}; };
......
...@@ -1594,13 +1594,8 @@ TEST_F(NGGridLayoutAlgorithmTest, AutoSizedGridWithPercentageGap) { ...@@ -1594,13 +1594,8 @@ TEST_F(NGGridLayoutAlgorithmTest, AutoSizedGridWithPercentageGap) {
if (!RuntimeEnabledFeatures::LayoutNGGridEnabled()) if (!RuntimeEnabledFeatures::LayoutNGGridEnabled())
return; return;
LoadAhem();
SetBodyInnerHTML(R"HTML( SetBodyInnerHTML(R"HTML(
<style> <style>
body {
font: 10px/1 Ahem;
}
#grid { #grid {
display: grid; display: grid;
width: auto; width: auto;
...@@ -1707,76 +1702,99 @@ TEST_F(NGGridLayoutAlgorithmTest, ItemsSizeWithGap) { ...@@ -1707,76 +1702,99 @@ TEST_F(NGGridLayoutAlgorithmTest, ItemsSizeWithGap) {
EXPECT_EQ(expectation, dump); EXPECT_EQ(expectation, dump);
} }
TEST_F(NGGridLayoutAlgorithmTest, OutOfFlowGridItems) { TEST_F(NGGridLayoutAlgorithmTest, PositionedOutOfFlowItems) {
if (!RuntimeEnabledFeatures::LayoutNGGridEnabled()) if (!RuntimeEnabledFeatures::LayoutNGGridEnabled())
return; return;
LoadAhem();
SetBodyInnerHTML(R"HTML( SetBodyInnerHTML(R"HTML(
<style> <style>
body {
font: 10px/1 Ahem;
}
#grid { #grid {
display: grid; display: grid;
width: 100px; grid: 100px 100px 100px / 100px 100px 100px;
height: 300px; width: 300px;
grid-auto-columns: 100px; height: auto;
grid-auto-rows: 100px; background-color: gray;
padding: 5px;
border: 5px solid black;
position: relative; position: relative;
} }
.grid_item { .absolute {
width: 100px; position: absolute;
height: 100px; width: 50px;
background-color: gray; height: 50px;
} }
#cell2 { .item {
position: absolute; background-color: gainsboro;
left: 25%;
top: 10%;
width: 100px;
height: 100px;
background-color: blue;
} }
#cell4 { #firstItem {
position: absolute; background: magenta;
top: 150px; grid-column-start: 2;
left: 25px; grid-column-end: 3;
width: 100%; grid-row-start: 2;
height: 35%; grid-row-end: 3;
background-color: yellow; align-self: center;
justify-self: end;
}
#secondItem {
background: cyan;
grid-column-start: auto;
grid-column-end: 2;
grid-row-start: 3;
grid-row-end: auto;
bottom: 30px;
} }
#thirdItem {
background: yellow;
left: 200px;
}
#fourthItem {
background: lime;
grid-column-start: 5;
grid-column-end: 6;
}
</style> </style>
<div id="wrapper"> <div id="wrapper">
<div id="grid"> <div id="grid">
<div class="grid_item" style="background: orange;">1</div> <div class="absolute" id="firstItem"></div>
<div id="cell2">2</div> <div class="absolute" id="secondItem"></div>
<div class="grid_item" style="background: green;">3</div> <div class="absolute" id="thirdItem"></div>
<div id="cell4">4</div> <div class="absolute" id="fourthItem"></div>
<div class="grid_item" style="background: blueviolet;">5</div> <div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div> </div>
</div> </div>
)HTML"); )HTML");
String dump = DumpFragmentTree(GetElementById("wrapper")); String dump = DumpFragmentTree(GetElementById("wrapper"));
String expectation = R"DUMP(.:: LayoutNG Physical Fragment Tree ::. String expectation = R"DUMP(.:: LayoutNG Physical Fragment Tree ::.
offset:unplaced size:1000x300 offset:unplaced size:1000x320
offset:0,0 size:100x300 offset:0,0 size:320x320
offset:0,0 size:100x100 offset:10,10 size:100x100
offset:0,0 size:10x10 offset:110,10 size:100x100
offset:0,100 size:100x100 offset:210,10 size:100x100
offset:0,0 size:10x10 offset:10,110 size:100x100
offset:0,200 size:100x100 offset:110,110 size:100x100
offset:0,0 size:10x10 offset:210,110 size:100x100
offset:25,30 size:100x100 offset:10,210 size:100x100
offset:0,0 size:10x10 offset:110,210 size:100x100
offset:25,150 size:100x105 offset:210,210 size:100x100
offset:0,0 size:10x10 offset:160,135 size:50x50
offset:5,235 size:50x50
offset:205,5 size:50x50
offset:5,5 size:50x50
)DUMP"; )DUMP";
EXPECT_EQ(expectation, dump); EXPECT_EQ(expectation, dump);
} }
......
...@@ -11,6 +11,14 @@ namespace blink { ...@@ -11,6 +11,14 @@ namespace blink {
constexpr wtf_size_t NGGridTrackCollectionBase::kInvalidRangeIndex; constexpr wtf_size_t NGGridTrackCollectionBase::kInvalidRangeIndex;
bool NGGridTrackCollectionBase::IsTrackWithinBounds(
wtf_size_t track_number) const {
DCHECK_NE(track_number, kInvalidRangeIndex);
wtf_size_t last_range_index = RangeCount() - 1;
return track_number <
RangeTrackNumber(last_range_index) + RangeTrackCount(last_range_index);
}
wtf_size_t NGGridTrackCollectionBase::RangeIndexFromTrackNumber( wtf_size_t NGGridTrackCollectionBase::RangeIndexFromTrackNumber(
wtf_size_t track_number) const { wtf_size_t track_number) const {
wtf_size_t upper = RangeCount(); wtf_size_t upper = RangeCount();
...@@ -19,9 +27,7 @@ wtf_size_t NGGridTrackCollectionBase::RangeIndexFromTrackNumber( ...@@ -19,9 +27,7 @@ wtf_size_t NGGridTrackCollectionBase::RangeIndexFromTrackNumber(
// We can't look for a range in a collection with no ranges. // We can't look for a range in a collection with no ranges.
DCHECK_NE(upper, 0u); DCHECK_NE(upper, 0u);
// We don't expect a |track_number| outside of the bounds of the collection. // We don't expect a |track_number| outside of the bounds of the collection.
DCHECK_NE(track_number, kInvalidRangeIndex); DCHECK(IsTrackWithinBounds(track_number));
DCHECK_LT(track_number,
RangeTrackNumber(upper - 1u) + RangeTrackCount(upper - 1u));
// Do a binary search on the tracks. // Do a binary search on the tracks.
wtf_size_t range = upper - lower; wtf_size_t range = upper - lower;
......
...@@ -49,6 +49,8 @@ class CORE_EXPORT NGGridTrackCollectionBase { ...@@ -49,6 +49,8 @@ class CORE_EXPORT NGGridTrackCollectionBase {
wtf_size_t range_track_count_; wtf_size_t range_track_count_;
}; };
bool IsTrackWithinBounds(wtf_size_t track_number) const;
// Gets the range index for the range that contains the given track number. // Gets the range index for the range that contains the given track number.
wtf_size_t RangeIndexFromTrackNumber(wtf_size_t track_number) const; wtf_size_t RangeIndexFromTrackNumber(wtf_size_t track_number) const;
......
...@@ -183,7 +183,7 @@ void NGContainerFragmentBuilder::AddOutOfFlowChildCandidate( ...@@ -183,7 +183,7 @@ void NGContainerFragmentBuilder::AddOutOfFlowChildCandidate(
oof_positioned_candidates_.emplace_back( oof_positioned_candidates_.emplace_back(
child, NGLogicalStaticPosition{child_offset, inline_edge, block_edge}, child, NGLogicalStaticPosition{child_offset, inline_edge, block_edge},
/* inline_container */ nullptr, needs_block_offset_adjustment, /* inline_container */ nullptr, needs_block_offset_adjustment,
/*containing_block_offset */ LogicalOffset(), /* containing_block_offset */ LogicalOffset(),
/* containing_block_fragment */ nullptr, containing_block_rect); /* containing_block_fragment */ nullptr, containing_block_rect);
} }
......
...@@ -3314,16 +3314,21 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/gri ...@@ -3314,16 +3314,21 @@ 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/replaced-alignment-with-aspect-ratio-001.html [ Pass ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-001.html [ Pass ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-002.html [ Pass ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-002.html [ Pass ]
# Tests that pass with layout-ng-grid enabled but fail in legacy grid:
virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-003.html [ Pass ]
virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-8.html [ Pass ]
virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-9.html [ Pass ]
virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-item-no-aspect-ratio-stretch-10.html [ Pass ]
virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-001.tentative.html [ Pass ]
virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/replaced-alignment-with-aspect-ratio-002.tentative.html [ Pass ]
### Tests failing with LayoutNGGrid enabled: ### Tests failing with LayoutNGGrid enabled:
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-definite-sizes-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-containing-block-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-003.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/descendant-static-position-004.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-paint-positioned-children-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-paint-positioned-children-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-children-writing-modes-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-item-dynamic-change-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-item-dynamic-change-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-002.html [ Failure ]
...@@ -3332,20 +3337,14 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-p ...@@ -3332,20 +3337,14 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-p
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-005.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-005.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-006.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-006.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-007.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-and-autofit-tracks-007.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-background-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-background-rtl-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-content-alignment-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-content-alignment-rtl-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-001.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-002-rtl.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html [ Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-padding-001.html [ Crash ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-line-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-padding-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-unknown-named-grid-line-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-within-grid-implicit-track-001.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-sizing-positioned-items-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-003.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-003.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-004.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-004.html [ Failure ]
...@@ -3361,23 +3360,6 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthog ...@@ -3361,23 +3360,6 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthog
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-014.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-014.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-015.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-015.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-016.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-descendants-016.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-003.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-004.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-005.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-006.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-007.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-008.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-009.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-010.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-011.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-012.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-013.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-014.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-015.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-016.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/orthogonal-positioned-grid-items-017.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-003.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-003.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-004.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-004.html [ Failure ]
...@@ -3393,24 +3375,6 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positi ...@@ -3393,24 +3375,6 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positi
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-014.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-014.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-015.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-015.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-016.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-descendants-016.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-003.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-004.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-005.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-006.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-007.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-008.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-009.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-010.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-011.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-012.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-013.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-014.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-015.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-016.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-017.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/positioned-grid-items-sizing-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-baseline-vertical.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-baseline-vertical.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-baseline.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-baseline.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-align-content-distribution-vertical-lr.html [ Failure ]
...@@ -3435,22 +3399,11 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/gri ...@@ -3435,22 +3399,11 @@ 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-baseline-align-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-align-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-align-cycles-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-align-cycles-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-justify-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-baseline-justify-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-003.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-004.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-005.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-006.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-007.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-008.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-009.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-010.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-011.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-012.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-013.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-014.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-015.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-016.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-017.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-column-axis-self-baseline-synthesized-002.html [ Failure ]
...@@ -3530,56 +3483,27 @@ crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/gri ...@@ -3530,56 +3483,27 @@ 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-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-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-7.html [ Failure ]
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-012.html [ Crash 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-013.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-003.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-004.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-005.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-006.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-007.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-008.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-009.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-010.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-011.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-012.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-013.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-014.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-015.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-016.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-alignment-positioned-items-017.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-003.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-004.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-005.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-row-axis-self-baseline-synthesized-005.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-001.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-002.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-003.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-004.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-005.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-006.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-007.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-008.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-009.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-010.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-011.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-non-static-positioned-items-012.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-001.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-003.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-004.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-005.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html [ Crash Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-006.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-007.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-008.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-009.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-010.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-011.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-012.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-013.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-014.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-015.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-positioned-items-with-margin-border-padding-016.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-009.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-009.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-010.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-010.html [ Failure ]
crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-011.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/alignment/grid-self-alignment-stretch-011.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