Skip to content

Commit

Permalink
Bug 1557365 [wpt PR 16859] - [LayoutNG] Only reset a legacy cached re…
Browse files Browse the repository at this point in the history
…sult if OOF-positioned., a=testonly

Automatic update from web-platform-tests
[LayoutNG] Only reset a legacy cached result if OOF-positioned.

We had an issue with our simplified layout algorithm + relayout boundary
roots.

For this to trigger we needed a (legacy) layout object to be marked for
simplified layout which was also a relayout boundary root.

During LocalFrameView::PerformLayout, LayoutBox::UpdateLayout would run
on the legacy LayoutBox, and during LayoutBox::UpdateAfterLayout, this
would clear the LayoutBox::cached_layout_result_.

During another relayout boundary layout, we'd trigger simplified layout
for an NG node. This expects that there is always a cached layout
result associated with a box.
However this now wasn't the case, as the child had previously cleared
it, within LayoutBox::UpdateAfterLayout.

The guard inside LayoutBox::UpdateAfterLayout was designed to protect
against OOF-positioned nodes changing their layout parent, this
modifies that check do only clear the layout result of OOF-positioned
legacy layout objects.

Bug: 	963387, 963433, 963620
Change-Id: Ice1202bdb939689e26e24a8690a52e7d7e82ecbc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1614082
Reviewed-by: Aleks Totic <[email protected]>
Commit-Queue: Ian Kilpatrick <[email protected]>
Cr-Commit-Position: refs/heads/master@{#660166}

--

wp5At-commits: c40cd30b2d4d686325f3b00403c1c3d0314219e3
wpt-pr: 16859
  • Loading branch information
bfgeek authored and jgraham committed Jun 19, 2019
1 parent 2c8cc22 commit 5054d1a
Showing 1 changed file with 22 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html class='reftest-wait'>
<link rel="match" href="../reference/ref-filled-green-100px-square-only.html">
<link rel="help" href="https://www.w3.org/TR/css-position-3/" />
<meta name="assert" content="This test checks that a dynamic change in constraints does not crash the renderer."/>
<script src="/common/reftest-wait.js"></script>
<p>Test passes if there is a filled green square.</p>
<div style="display: flex; width: 100px; height: 100px; overflow: hidden; position: relative;"> <!-- relayout boundary -->
<div style="position: relative;">
<div style="display: flex; position: relative; width: 100px; height: 50px; overflow: hidden;"> <!-- relayout boundary -->
<div id="target1" style="position: absolute; width: 10px; height: 50px; background: green;"></div>
</div>
<div id="target2" style="position: absolute; width: 10px; height: 50px; background: green;"></div>
</div>
</div>
<script>
document.body.offsetTop;
target2.style.width = '100px';
target1.style.width = '100px';
document.body.offsetTop;
takeScreenshot();
</script>

0 comments on commit 5054d1a

Please sign in to comment.