Skip to content

Commit

Permalink
[LayoutNG] Fix for DCHECK(NeedsLayout) for fixed
Browse files Browse the repository at this point in the history
All tests pass, and crashes no longer happen. I believe
that code will not longer crash, but there might be
futher instances of incorrect positioning.

Fix #1
LayoutDescendantCandidates did not sweep newly discovered
candidates. This was done
manually once inside NGOutOfFlowLayoutPart::Run, and
sweep was not performed for LayoutDescendantCandidates
found in Legacy. Fix is to make LayoutDescendantCandidates
perform sweep instead.

Fix #2
fix #1 exposed a bug where duplicate fragments were generated
for a single layout object. This happened when NG was generating
fragments not inside ContainingBlock. Fix one instance of this
inside NGOutOfFlowLayoutPart::IsContainingBlockForDescendant
by making sure that OOF with inline containers are only positioned
inside its ContainingBlock()

Fix #3
NGOutOfFlowLayoutPart::LayoutDescendant offset adjustment.
This one I am unsure about because I do not know exactly how
split inlines generate anonymous boxes.
if (container != container_builder_->GetLayoutObject() &&
               container->Parent()->IsAnonymousBlock())
It extends the previus special case of css_container
being anonymous. It seems that it should be somehow generalized
to if "anything in ancestor chain to ContainerBlock() is anonymous?"

Bug: 935805
Change-Id: I9f7ebbc7223f40fbbf6ba3739d9385bfd59e3641
  • Loading branch information
Aleks Totic authored and chromium-wpt-export-bot committed Mar 12, 2019
1 parent c7a85cb commit d9eb1dd
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions css/css-position/position-absolute-crash-chrome-003.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!DOCTYPE html>
<title>CSS Position Absolute: Chrome chrash</title>
<link rel="author" href="mailto:atotic@google.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=935805">
<meta name="assert" content="Nested abs/fixed/flex do not crash">
<style>
#flex {
display: flex;
}
.abs {
position: absolute;
}
#fixed {
position: fixed;
}
</style>
<div class="abs">
<div id="flex">
<div class="abs">
<div id="fixed"></div>
</div>
</div>
</div>
<script>
test(() => {
}, 'test passes if it does not crash');
</script>

0 comments on commit d9eb1dd

Please # to comment.