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() {
ComputeUsedTrackSizes(&algorithm_row_track_collection, &grid_items,
&reordered_item_indices);
// Place items.
// Place grid and out of flow items.
LayoutUnit intrinsic_block_size;
PlaceGridItems(grid_items, out_of_flow_items,
algorithm_column_track_collection,
algorithm_row_track_collection, &intrinsic_block_size);
PlaceItems(grid_items, algorithm_column_track_collection,
algorithm_row_track_collection, &out_of_flow_items,
&intrinsic_block_size);
intrinsic_block_size =
ClampIntrinsicBlockSize(ConstraintSpace(), Node(),
......@@ -191,7 +191,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::StartLine(
const GridSpan& span = (track_direction == kForColumns)
? resolved_position.columns
: resolved_position.rows;
DCHECK(span.IsTranslatedDefinite());
return span.StartLine();
}
......@@ -200,7 +199,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::EndLine(
const GridSpan& span = (track_direction == kForColumns)
? resolved_position.columns
: resolved_position.rows;
DCHECK(span.IsTranslatedDefinite());
return span.EndLine();
}
......@@ -209,7 +207,6 @@ wtf_size_t NGGridLayoutAlgorithm::GridItemData::SpanSize(
const GridSpan& span = (track_direction == kForColumns)
? resolved_position.columns
: resolved_position.rows;
DCHECK(span.IsTranslatedDefinite());
return span.IntegerSpan();
}
......@@ -332,7 +329,7 @@ void NGGridLayoutAlgorithm::ConstructAndAppendGridItems(
GridItemData grid_item = MeasureGridItem(child);
// If |out_of_flow_items| is provided, store out-of-flow items separately,
// 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);
else if (out_of_flow_items)
out_of_flow_items->emplace_back(grid_item);
......@@ -496,6 +493,9 @@ NGGridLayoutAlgorithm::GridItemData NGGridLayoutAlgorithm::MeasureGridItem(
MinMaxSizesType::kContent),
&constraint_space)
.sizes;
grid_item.item_type = node.IsOutOfFlowPositioned() ? ItemType::kOutOfFlow
: ItemType::kInGridFlow;
return grid_item;
}
......@@ -596,25 +596,56 @@ void NGGridLayoutAlgorithm::EnsureTrackCoverageForGridItems(
void NGGridLayoutAlgorithm::CacheItemSetIndices(
const NGGridLayoutAlgorithmTrackCollection& track_collection,
Vector<GridItemData>* grid_items) const {
DCHECK(grid_items);
Vector<GridItemData>* items) const {
DCHECK(items);
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) {
wtf_size_t first_spanned_range = track_collection.RangeIndexFromTrackNumber(
item.StartLine(track_direction));
wtf_size_t last_spanned_range = track_collection.RangeIndexFromTrackNumber(
item.EndLine(track_direction) - 1);
DCHECK_LE(first_spanned_range, last_spanned_range);
wtf_size_t begin_set_index =
// We only calculate the indexes if:
// 1. The item is in flow (it is a grid item) or
// 2. The item is out of flow, but the line was not defined as 'auto' and
// the line is within the bounds of the grid, since an out of flow item
// cannot create grid lines.
// TODO(ansollan): The start line of an out of flow item can be the last
// line of the grid. If that is the case, begin_set_index has to be
// 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);
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.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_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) {
item.columns_begin_set_index = begin_set_index;
......@@ -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(
const NGGridLayoutAlgorithmTrackCollection& track_collection,
Vector<GridItemData>* grid_items,
......@@ -1178,11 +1247,11 @@ void NGGridLayoutAlgorithm::ResolveIntrinsicTrackSizes(
// 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>& out_of_flow_items,
NGGridLayoutAlgorithmTrackCollection& column_track_collection,
NGGridLayoutAlgorithmTrackCollection& row_track_collection,
const NGGridLayoutAlgorithmTrackCollection& column_track_collection,
const NGGridLayoutAlgorithmTrackCollection& row_track_collection,
Vector<GridItemData>* out_of_flow_items,
LayoutUnit* intrinsic_block_size) {
DCHECK(intrinsic_block_size);
LayoutUnit column_grid_gap =
......@@ -1208,42 +1277,50 @@ void NGGridLayoutAlgorithm::PlaceGridItems(
row_set_offsets = ComputeSetOffsets(row_track_collection, row_grid_gap);
}
for (const GridItemData& grid_item : grid_items) {
wtf_size_t column_start_index = grid_item.columns_begin_set_index;
wtf_size_t column_end_index = grid_item.columns_end_set_index;
wtf_size_t row_start_index = grid_item.rows_begin_set_index;
wtf_size_t row_end_index = grid_item.rows_end_set_index;
DCHECK_LT(column_start_index, column_end_index);
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());
LogicalOffset offset = {column_set_offsets[column_start_index],
row_set_offsets[row_start_index]};
// 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);
}
PlaceGridItems(grid_items, column_set_offsets, row_set_offsets,
*intrinsic_block_size, column_grid_gap, row_grid_gap);
PlaceOutOfFlowItems(column_set_offsets, row_set_offsets,
column_track_collection, row_track_collection,
*intrinsic_block_size, column_grid_gap, row_grid_gap,
out_of_flow_items);
}
LayoutUnit NGGridLayoutAlgorithm::GridGap(
GridTrackSizingDirection track_direction,
LayoutUnit available_size) const {
const base::Optional<Length>& gap =
track_direction == kForColumns ? Style().ColumnGap() : Style().RowGap();
for (const GridItemData& out_of_flow_item : out_of_flow_items) {
// TODO(ansollan): Look up offsets based on specified row/column for
// absolutely-positioned items, as described in
// https://drafts.csswg.org/css-grid-1/#abspos, and pass the correct static
// positioned offset in.
container_builder_.AddOutOfFlowChildCandidate(out_of_flow_item.node,
LogicalOffset());
// TODO(ansollan): Update behavior based on outcome of working group
// discussions. See https://github.com/w3c/csswg-drafts/issues/5566.
if (!gap || IsRowGridGapUnresolvable(available_size))
return LayoutUnit();
return MinimumValueForLength(*gap, available_size);
}
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 {
......@@ -1269,11 +1346,61 @@ LayoutUnit AlignmentOffset(LayoutUnit container_size,
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
void NGGridLayoutAlgorithm::PlaceGridItem(const GridItemData& grid_item,
LogicalOffset offset,
LogicalSize size) {
void NGGridLayoutAlgorithm::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) {
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();
NGConstraintSpaceBuilder builder(ConstraintSpace(),
item_style.GetWritingDirection(),
......@@ -1293,52 +1420,108 @@ void NGGridLayoutAlgorithm::PlaceGridItem(const GridItemData& grid_item,
// Apply the grid-item's alignment (if any).
NGFragment fragment(ConstraintSpace().GetWritingDirection(),
physical_fragment);
offset += LogicalOffset(
AlignmentOffset(size.inline_size, fragment.InlineSize(),
offset +=
LogicalOffset(AlignmentOffset(size.inline_size, fragment.InlineSize(),
grid_item.margins.inline_start,
grid_item.margins.inline_end,
grid_item.inline_axis_alignment),
AlignmentOffset(
size.block_size, fragment.BlockSize(), grid_item.margins.block_start,
grid_item.margins.block_end, grid_item.block_axis_alignment));
AlignmentOffset(size.block_size, fragment.BlockSize(),
grid_item.margins.block_start,
grid_item.margins.block_end,
grid_item.block_axis_alignment));
container_builder_.AddChild(physical_fragment, offset);
}
}
LayoutUnit NGGridLayoutAlgorithm::GridGap(
GridTrackSizingDirection track_direction,
LayoutUnit available_size) const {
const base::Optional<Length>& gap =
track_direction == kForColumns ? Style().ColumnGap() : Style().RowGap();
// TODO(ansollan): Update behavior based on outcome of working group
// discussions. See https://github.com/w3c/csswg-drafts/issues/5566.
if (!gap || IsRowGridGapUnresolvable(available_size))
return LayoutUnit();
return MinimumValueForLength(*gap, available_size);
}
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);
void NGGridLayoutAlgorithm::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) {
// Cache set indices for out of flow items.
CacheItemSetIndices(column_track_collection, out_of_flow_items);
CacheItemSetIndices(row_track_collection, out_of_flow_items);
for (const GridItemData& out_of_flow_item : *out_of_flow_items) {
LogicalRect containing_block_rect;
ComputeOffsetAndSize(out_of_flow_item, column_set_offsets, column_grid_gap,
&containing_block_rect.offset.inline_offset,
&containing_block_rect.size.inline_size);
ComputeOffsetAndSize(out_of_flow_item, row_set_offsets, row_grid_gap,
&containing_block_rect.offset.block_offset,
&containing_block_rect.size.block_size, kForRows,
intrinsic_block_size);
NGLogicalStaticPosition::InlineEdge inline_edge;
NGLogicalStaticPosition::BlockEdge block_edge;
LogicalOffset child_offset = containing_block_rect.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(
LayoutUnit available_size) const {
const base::Optional<Length>& row_gap = Style().RowGap();
return row_gap && row_gap->IsPercentOrCalc() &&
available_size == kIndefiniteSize;
void NGGridLayoutAlgorithm::ComputeOffsetAndSize(
const GridItemData& item,
const Vector<LayoutUnit>& set_offsets,
LayoutUnit grid_gap,
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
......@@ -23,6 +23,7 @@ class CORE_EXPORT NGGridLayoutAlgorithm
public:
enum class AutoPlacementType { kNotNeeded, kMajor, kMinor, kBoth };
enum class AxisEdge { kStart, kCenter, kEnd, kBaseline };
enum class ItemType { kInGridFlow, kOutOfFlow };
// This enum corresponds to each step used to accommodate grid items across
// intrinsic tracks according to their min and max track sizing functions, as
......@@ -75,6 +76,8 @@ class CORE_EXPORT NGGridLayoutAlgorithm
AxisEdge inline_axis_alignment;
AxisEdge block_axis_alignment;
ItemType item_type;
bool is_inline_axis_stretched;
bool is_block_axis_stretched;
......@@ -177,7 +180,13 @@ class CORE_EXPORT NGGridLayoutAlgorithm
// collection's |sets_| with an index in the range [begin, end).
void CacheItemSetIndices(
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
// spans (i.e. whether an item spans intrinsic or flexible tracks).
void CacheGridItemsTrackSpanProperties(
......@@ -211,18 +220,13 @@ class CORE_EXPORT NGGridLayoutAlgorithm
NGGridSetVector* sets_to_grow_beyond_limit);
// Lays out and computes inline and block offsets for grid items.
void PlaceGridItems(
void PlaceItems(
const Vector<GridItemData>& grid_items,
const Vector<GridItemData>& out_of_flow_items,
NGGridLayoutAlgorithmTrackCollection& column_track_collection,
NGGridLayoutAlgorithmTrackCollection& row_track_collection,
const NGGridLayoutAlgorithmTrackCollection& column_track_collection,
const NGGridLayoutAlgorithmTrackCollection& row_track_collection,
Vector<GridItemData>* out_of_flow_items,
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.
LayoutUnit GridGap(GridTrackSizingDirection track_direction,
LayoutUnit available_size = kIndefiniteSize) const;
......@@ -236,6 +240,43 @@ class CORE_EXPORT NGGridLayoutAlgorithm
// available size.
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 child_percentage_size_;
};
......
......@@ -1594,13 +1594,8 @@ TEST_F(NGGridLayoutAlgorithmTest, AutoSizedGridWithPercentageGap) {
if (!RuntimeEnabledFeatures::LayoutNGGridEnabled())
return;
LoadAhem();
SetBodyInnerHTML(R"HTML(
<style>
body {
font: 10px/1 Ahem;
}
#grid {
display: grid;
width: auto;
......@@ -1707,76 +1702,99 @@ TEST_F(NGGridLayoutAlgorithmTest, ItemsSizeWithGap) {
EXPECT_EQ(expectation, dump);
}
TEST_F(NGGridLayoutAlgorithmTest, OutOfFlowGridItems) {
TEST_F(NGGridLayoutAlgorithmTest, PositionedOutOfFlowItems) {
if (!RuntimeEnabledFeatures::LayoutNGGridEnabled())
return;
LoadAhem();
SetBodyInnerHTML(R"HTML(
<style>
body {
font: 10px/1 Ahem;
}
#grid {
display: grid;
width: 100px;
height: 300px;
grid-auto-columns: 100px;
grid-auto-rows: 100px;
grid: 100px 100px 100px / 100px 100px 100px;
width: 300px;
height: auto;
background-color: gray;
padding: 5px;
border: 5px solid black;
position: relative;
}
.grid_item {
width: 100px;
height: 100px;
background-color: gray;
.absolute {
position: absolute;
width: 50px;
height: 50px;
}
#cell2 {
position: absolute;
left: 25%;
top: 10%;
width: 100px;
height: 100px;
background-color: blue;
.item {
background-color: gainsboro;
}
#cell4 {
position: absolute;
top: 150px;
left: 25px;
width: 100%;
height: 35%;
background-color: yellow;
#firstItem {
background: magenta;
grid-column-start: 2;
grid-column-end: 3;
grid-row-start: 2;
grid-row-end: 3;
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>
<div id="wrapper">
<div id="grid">
<div class="grid_item" style="background: orange;">1</div>
<div id="cell2">2</div>
<div class="grid_item" style="background: green;">3</div>
<div id="cell4">4</div>
<div class="grid_item" style="background: blueviolet;">5</div>
<div class="absolute" id="firstItem"></div>
<div class="absolute" id="secondItem"></div>
<div class="absolute" id="thirdItem"></div>
<div class="absolute" id="fourthItem"></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>
)HTML");
String dump = DumpFragmentTree(GetElementById("wrapper"));
String expectation = R"DUMP(.:: LayoutNG Physical Fragment Tree ::.
offset:unplaced size:1000x300
offset:0,0 size:100x300
offset:0,0 size:100x100
offset:0,0 size:10x10
offset:0,100 size:100x100
offset:0,0 size:10x10
offset:0,200 size:100x100
offset:0,0 size:10x10
offset:25,30 size:100x100
offset:0,0 size:10x10
offset:25,150 size:100x105
offset:0,0 size:10x10
offset:unplaced size:1000x320
offset:0,0 size:320x320
offset:10,10 size:100x100
offset:110,10 size:100x100
offset:210,10 size:100x100
offset:10,110 size:100x100
offset:110,110 size:100x100
offset:210,110 size:100x100
offset:10,210 size:100x100
offset:110,210 size:100x100
offset:210,210 size:100x100
offset:160,135 size:50x50
offset:5,235 size:50x50
offset:205,5 size:50x50
offset:5,5 size:50x50
)DUMP";
EXPECT_EQ(expectation, dump);
}
......
......@@ -11,6 +11,14 @@ namespace blink {
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 track_number) const {
wtf_size_t upper = RangeCount();
......@@ -19,9 +27,7 @@ wtf_size_t NGGridTrackCollectionBase::RangeIndexFromTrackNumber(
// We can't look for a range in a collection with no ranges.
DCHECK_NE(upper, 0u);
// We don't expect a |track_number| outside of the bounds of the collection.
DCHECK_NE(track_number, kInvalidRangeIndex);
DCHECK_LT(track_number,
RangeTrackNumber(upper - 1u) + RangeTrackCount(upper - 1u));
DCHECK(IsTrackWithinBounds(track_number));
// Do a binary search on the tracks.
wtf_size_t range = upper - lower;
......
......@@ -49,6 +49,8 @@ class CORE_EXPORT NGGridTrackCollectionBase {
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.
wtf_size_t RangeIndexFromTrackNumber(wtf_size_t track_number) const;
......
......@@ -183,7 +183,7 @@ void NGContainerFragmentBuilder::AddOutOfFlowChildCandidate(
oof_positioned_candidates_.emplace_back(
child, NGLogicalStaticPosition{child_offset, inline_edge, block_edge},
/* inline_container */ nullptr, needs_block_offset_adjustment,
/*containing_block_offset */ LogicalOffset(),
/* containing_block_offset */ LogicalOffset(),
/* 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
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 ]
# 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:
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-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-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-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-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 ]
......@@ -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-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-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-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-002-rtl.html [ 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-gaps-rtl-001.html [ Failure ]
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-gaps-001.html [ Crash 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-implicit-grid-001.html [ Crash ]
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-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-sizing-positioned-items-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/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-004.html [ Failure ]
......@@ -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-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-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-003.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
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-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.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
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-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-002.html [ 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-004.html [ 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-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-012.html [ Crash 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-014.html [ Crash 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-016.html [ Crash 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-002.html [ Failure ]
......@@ -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-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-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 ]
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-005.html [ 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-012.html [ Crash 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-014.html [ Crash 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-016.html [ Crash 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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-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-016.html [ Crash 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-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