gecko-dev/testing/web-platform/tests/css/css-position/position-absolute-in-inline-001.html
Aleks Totic 26b1fa9c35 Bug 1535875 [wpt PR 15794] - [LayoutNG] Fix for DCHECK(NeedsLayout) for fixed, a=testonly
Automatic update from web-platform-tests
[LayoutNG] Fix for DCHECK(NeedsLayout) for fixed

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.

Bug: 935805
Change-Id: I9f7ebbc7223f40fbbf6ba3739d9385bfd59e3641
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1517093
Commit-Queue: Aleks Totic <atotic@chromium.org>
Reviewed-by: Morten Stenshorne <mstensho@chromium.org>
Reviewed-by: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#641628}

--

wpt-commits: c748846db4d54c5b1c93659d9458698871a98eea
wpt-pr: 15794
2019-04-24 11:18:14 +01:00

25 lines
1 KiB
HTML

<!doctype html>
<html>
<head>
<title>Absolute inside inline container location should be correct</title>
<link rel="author" href="mailto:atotic@chromium.org">
<link rel="help" href="https://www.w3.org/TR/css-position-3/#def-cb">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<!-- There should be a green square below -->
<body style="margin:0">
<span id="container" style="position:relative;">
<div style="width:100px; height:100px; background:red;"></div>
<div id="target" style="position:absolute; left:0; top:0; width:100px; height:100px; background:green;"></div>
</span>
<script>
test(_ => {
let bounds = document.querySelector("#target").getBoundingClientRect();
let container_bounds = document.querySelector("#container").getBoundingClientRect();
assert_equals(bounds.x, container_bounds.x);
assert_equals(bounds.y, container_bounds.y);
}, "absolute inside inline container location should be correct.");
</script>
</body>
</html>