Commit 938e32d0 authored by Morten Stenshorne's avatar Morten Stenshorne Committed by Commit Bot

[LayoutNG] Always perform fragment traversal if we can.

AppendSingleFragmentIgnoringPagination() is called when fragmentation
gets disabled because of transforms. This needs to be fixed; see
crbug.com/1058792 - in the meantime, let's at least traverse the
fragment tree, to avoid DCHECK failures. Note that things aren't going
to look or behave right if such nodes break into multiple fragments -
neither with nor without this fix.

Bug: 1146975
Change-Id: I7ded8d094185e69e39ce115b256661dee48f7e46
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2529099Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Reviewed-by: default avatarChris Harrelson <chrishtr@chromium.org>
Commit-Queue: Morten Stenshorne <mstensho@chromium.org>
Cr-Commit-Position: refs/heads/master@{#826684}
parent 2b11db0a
...@@ -1617,6 +1617,13 @@ void PaintLayer::AppendSingleFragmentIgnoringPagination( ...@@ -1617,6 +1617,13 @@ void PaintLayer::AppendSingleFragmentIgnoringPagination(
offset_from_root); offset_from_root);
fragment.root_fragment_data = &root_layer->GetLayoutObject().FirstFragment(); fragment.root_fragment_data = &root_layer->GetLayoutObject().FirstFragment();
fragment.fragment_data = &GetLayoutObject().FirstFragment(); fragment.fragment_data = &GetLayoutObject().FirstFragment();
if (GetLayoutObject().CanTraversePhysicalFragments()) {
// Make sure that we actually traverse the fragment tree, by providing a
// physical fragment. Otherwise we'd fall back to LayoutObject traversal.
if (const auto* layout_box = GetLayoutBox())
fragment.physical_fragment = layout_box->GetPhysicalFragment(0);
}
fragments.push_back(fragment); fragments.push_back(fragment);
} }
......
...@@ -995,6 +995,7 @@ virtual/layout_ng_block_frag/external/wpt/css/css-break/break-between-avoid-004. ...@@ -995,6 +995,7 @@ virtual/layout_ng_block_frag/external/wpt/css/css-break/break-between-avoid-004.
virtual/layout_ng_block_frag/external/wpt/css/css-break/fieldset-003.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/fieldset-003.html [ Pass ]
virtual/layout_ng_block_frag/external/wpt/css/css-break/fieldset-004.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/fieldset-004.html [ Pass ]
virtual/layout_ng_block_frag/external/wpt/css/css-break/forced-break-at-fragmentainer-start-000.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/forced-break-at-fragmentainer-start-000.html [ Pass ]
virtual/layout_ng_block_frag/external/wpt/css/css-multicol/hit-test-transformed-child.html [ Pass ]
virtual/layout_ng_block_frag/external/wpt/css/css-break/overflowed-block-with-no-room-after-000.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/overflowed-block-with-no-room-after-000.html [ Pass ]
virtual/layout_ng_block_frag/external/wpt/css/css-break/overflowed-block-with-no-room-after-001.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/overflowed-block-with-no-room-after-001.html [ Pass ]
virtual/layout_ng_block_frag/external/wpt/css/css-break/relpos-inline-hit-testing.html [ Pass ] virtual/layout_ng_block_frag/external/wpt/css/css-break/relpos-inline-hit-testing.html [ Pass ]
...@@ -3216,6 +3217,7 @@ crbug.com/967329 external/wpt/css/css-multicol/columnfill-auto-max-height-002.ht ...@@ -3216,6 +3217,7 @@ crbug.com/967329 external/wpt/css/css-multicol/columnfill-auto-max-height-002.ht
crbug.com/829028 external/wpt/css/css-multicol/baseline-001.html [ Failure ] crbug.com/829028 external/wpt/css/css-multicol/baseline-001.html [ Failure ]
crbug.com/829028 external/wpt/css/css-multicol/baseline-007.html [ Failure ] crbug.com/829028 external/wpt/css/css-multicol/baseline-007.html [ Failure ]
crbug.com/829028 external/wpt/css/css-multicol/baseline-008.html [ Failure ] crbug.com/829028 external/wpt/css/css-multicol/baseline-008.html [ Failure ]
crbug.com/829028 external/wpt/css/css-multicol/hit-test-transformed-child.html [ Failure ]
crbug.com/990240 external/wpt/css/css-multicol/multicol-breaking-000.html [ Failure ] crbug.com/990240 external/wpt/css/css-multicol/multicol-breaking-000.html [ Failure ]
crbug.com/990240 external/wpt/css/css-multicol/multicol-breaking-001.html [ Failure ] crbug.com/990240 external/wpt/css/css-multicol/multicol-breaking-001.html [ Failure ]
crbug.com/481431 external/wpt/css/css-multicol/multicol-breaking-004.html [ Failure ] crbug.com/481431 external/wpt/css/css-multicol/multicol-breaking-004.html [ Failure ]
......
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1146975">
<style>
body {
margin: 8px;
}
</style>
<div style="columns:2; column-fill:auto; height:100px;">
<div>
<div id="target" style="transform:translateX(100px) translateY(200px); width:50px; height:50px; background:blue;"></div>
</div>
</div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
test(()=> {
assert_equals(document.elementFromPoint(108, 208), target);
assert_equals(document.elementFromPoint(157, 208), target);
assert_equals(document.elementFromPoint(157, 257), target);
}, "inside");
test(()=> {
assert_not_equals(document.elementFromPoint(107, 208), target);
assert_not_equals(document.elementFromPoint(108, 207), target);
assert_not_equals(document.elementFromPoint(158, 257), target);
assert_not_equals(document.elementFromPoint(157, 258), target);
assert_not_equals(document.elementFromPoint(8, 8), target);
}, "outside");
</script>
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