Commit 2f502da3 authored by Morten Stenshorne's avatar Morten Stenshorne Committed by Commit Bot

[LayoutNG] Write correct inline LayoutBox offset back to legacy.

The block-offset needs to include the space consumed in previous
fragments, just like we already do for block-level children in
CopyChildFragmentPosition(), or position querying DOM APIs (such as
offsetTop) won't work correctly.

Bug: 829028
Change-Id: Idc0d06ae6daf06013308dfca1e11f70d1b0f7b23
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2445932Reviewed-by: default avatarIan Kilpatrick <ikilpatrick@chromium.org>
Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#813219}
parent 8bd433c8
...@@ -717,7 +717,7 @@ void NGBlockNode::FinishLayout( ...@@ -717,7 +717,7 @@ void NGBlockNode::FinishLayout(
Style().IsFlippedBlocksWritingMode()); Style().IsFlippedBlocksWritingMode());
block_flow->SetPaintFragment(break_token, &physical_fragment); block_flow->SetPaintFragment(break_token, &physical_fragment);
} else if (items) { } else if (items) {
CopyFragmentItemsToLayoutBox(physical_fragment, *items); CopyFragmentItemsToLayoutBox(physical_fragment, *items, break_token);
} }
} else { } else {
// We still need to clear paint fragments in case it had inline children, // We still need to clear paint fragments in case it had inline children,
...@@ -1204,7 +1204,7 @@ void NGBlockNode::PlaceChildrenInFlowThread( ...@@ -1204,7 +1204,7 @@ void NGBlockNode::PlaceChildrenInFlowThread(
// (but rather inside fragment items). Make sure that they get positioned, // (but rather inside fragment items). Make sure that they get positioned,
// too. // too.
if (const NGFragmentItems* items = column->Items()) if (const NGFragmentItems* items = column->Items())
CopyFragmentItemsToLayoutBox(*column, *items); CopyFragmentItemsToLayoutBox(*column, *items, previous_break_token);
previous_break_token = To<NGBlockBreakToken>(column->BreakToken()); previous_break_token = To<NGBlockBreakToken>(column->BreakToken());
} }
...@@ -1298,9 +1298,13 @@ void NGBlockNode::CopyFragmentDataToLayoutBoxForInlineChildren( ...@@ -1298,9 +1298,13 @@ void NGBlockNode::CopyFragmentDataToLayoutBoxForInlineChildren(
void NGBlockNode::CopyFragmentItemsToLayoutBox( void NGBlockNode::CopyFragmentItemsToLayoutBox(
const NGPhysicalBoxFragment& container, const NGPhysicalBoxFragment& container,
const NGFragmentItems& items) const { const NGFragmentItems& items,
const NGBlockBreakToken* previous_break_token) const {
DCHECK(RuntimeEnabledFeatures::LayoutNGFragmentItemEnabled()); DCHECK(RuntimeEnabledFeatures::LayoutNGFragmentItemEnabled());
LayoutUnit previously_consumed_block_size;
if (previous_break_token)
previously_consumed_block_size = previous_break_token->ConsumedBlockSize();
bool initial_container_is_flipped = Style().IsFlippedBlocksWritingMode(); bool initial_container_is_flipped = Style().IsFlippedBlocksWritingMode();
for (NGInlineCursor cursor(items); cursor; cursor.MoveToNext()) { for (NGInlineCursor cursor(items); cursor; cursor.MoveToNext()) {
if (const NGPhysicalBoxFragment* child = cursor.Current().BoxFragment()) { if (const NGPhysicalBoxFragment* child = cursor.Current().BoxFragment()) {
...@@ -1317,6 +1321,10 @@ void NGBlockNode::CopyFragmentItemsToLayoutBox( ...@@ -1317,6 +1321,10 @@ void NGBlockNode::CopyFragmentItemsToLayoutBox(
child->Size().width - child->Size().width -
maybe_flipped_offset.left; maybe_flipped_offset.left;
} }
if (container.Style().IsHorizontalWritingMode())
maybe_flipped_offset.top += previously_consumed_block_size;
else
maybe_flipped_offset.left += previously_consumed_block_size;
layout_box->SetLocationAndUpdateOverflowControlsIfNeeded( layout_box->SetLocationAndUpdateOverflowControlsIfNeeded(
maybe_flipped_offset.ToLayoutPoint()); maybe_flipped_offset.ToLayoutPoint());
if (UNLIKELY(layout_box->HasSelfPaintingLayer())) if (UNLIKELY(layout_box->HasSelfPaintingLayer()))
......
...@@ -206,8 +206,10 @@ class CORE_EXPORT NGBlockNode final : public NGLayoutInputNode { ...@@ -206,8 +206,10 @@ class CORE_EXPORT NGBlockNode final : public NGLayoutInputNode {
const NGConstraintSpace&, const NGConstraintSpace&,
const NGLayoutResult&, const NGLayoutResult&,
const NGBlockBreakToken* previous_break_token) const; const NGBlockBreakToken* previous_break_token) const;
void CopyFragmentItemsToLayoutBox(const NGPhysicalBoxFragment& container, void CopyFragmentItemsToLayoutBox(
const NGFragmentItems& items) const; const NGPhysicalBoxFragment& container,
const NGFragmentItems& items,
const NGBlockBreakToken* previous_break_token) const;
void CopyFragmentDataToLayoutBoxForInlineChildren( void CopyFragmentDataToLayoutBoxForInlineChildren(
const NGPhysicalContainerFragment& container, const NGPhysicalContainerFragment& container,
LayoutUnit initial_container_width, LayoutUnit initial_container_width,
......
...@@ -1018,7 +1018,6 @@ crbug.com/1079031 virtual/layout_ng_block_frag/external/wpt/css/css-break/block- ...@@ -1018,7 +1018,6 @@ crbug.com/1079031 virtual/layout_ng_block_frag/external/wpt/css/css-break/block-
crbug.com/1113911 virtual/layout_ng_block_frag/external/wpt/css/css-break/fieldset-001.html [ Failure ] crbug.com/1113911 virtual/layout_ng_block_frag/external/wpt/css/css-break/fieldset-001.html [ Failure ]
crbug.com/1066380 virtual/layout_ng_block_frag/external/wpt/css/css-break/widows-orphans-002.html [ Failure ] crbug.com/1066380 virtual/layout_ng_block_frag/external/wpt/css/css-break/widows-orphans-002.html [ Failure ]
crbug.com/1066380 virtual/layout_ng_block_frag/external/wpt/css/css-break/widows-orphans-004.html [ Failure ] crbug.com/1066380 virtual/layout_ng_block_frag/external/wpt/css/css-break/widows-orphans-004.html [ Failure ]
crbug.com/829028 virtual/layout_ng_block_frag/external/wpt/css/css-break/widows-orphans-005.html [ Failure ]
crbug.com/1079031 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/change-out-of-flow-type-and-remove-inner-multicol-crash.html [ Crash Failure ] crbug.com/1079031 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/change-out-of-flow-type-and-remove-inner-multicol-crash.html [ Crash Failure ]
crbug.com/1058792 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/composited-under-clip-under-multicol.html [ Failure Crash ] crbug.com/1058792 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/composited-under-clip-under-multicol.html [ Failure Crash ]
crbug.com/996655 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/going-out-of-flow-after-spanner.html [ Crash Failure Pass ] crbug.com/996655 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/going-out-of-flow-after-spanner.html [ Crash Failure Pass ]
...@@ -1052,7 +1051,6 @@ crbug.com/829028 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/mult ...@@ -1052,7 +1051,6 @@ crbug.com/829028 virtual/layout_ng_block_frag/external/wpt/css/css-multicol/mult
crbug.com/1079031 virtual/layout_ng_block_frag/fast/multicol/abspos-after-break-after.html [ Failure ] crbug.com/1079031 virtual/layout_ng_block_frag/fast/multicol/abspos-after-break-after.html [ Failure ]
crbug.com/1079031 virtual/layout_ng_block_frag/fast/multicol/abspos-new-width-rebalance.html [ Crash Failure ] crbug.com/1079031 virtual/layout_ng_block_frag/fast/multicol/abspos-new-width-rebalance.html [ Crash Failure ]
crbug.com/1066616 virtual/layout_ng_block_frag/fast/multicol/border-radius-clipped-layer-second-column.html [ Failure ] crbug.com/1066616 virtual/layout_ng_block_frag/fast/multicol/border-radius-clipped-layer-second-column.html [ Failure ]
crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/break-before-first-line-in-first-child.html [ Failure ]
crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/caret-range-anonymous-block.html [ Failure ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/caret-range-anonymous-block.html [ Failure ]
crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/caret-range-anonymous-block-rtl.html [ Failure ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/caret-range-anonymous-block-rtl.html [ Failure ]
crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/caret-range-outside-columns.html [ Failure ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/caret-range-outside-columns.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