mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-27 18:17:22 +02:00
Treat structurally equivalent invalidation plans as equal even when their descendant or sibling rules were accumulated in a different order. This lets :has() invalidation merge more of the repeated descendant-only payloads that still showed up after the earlier structural dedup. Add a :has() invalidation counter test that exercises equivalent selector permutations so this shape stays covered.
29 lines
951 B
HTML
29 lines
951 B
HTML
<!DOCTYPE html>
|
|
<script src="../include.js"></script>
|
|
<script src="_helpers.js"></script>
|
|
<style>
|
|
.anchor:has(:is(.outer-a, .outer-b) :is(.inner-a, .inner-b) .leaf) { color: red; }
|
|
.anchor:has(:is(.outer-b, .outer-a) :is(.inner-b, .inner-a) .leaf) { color: red; }
|
|
.anchor:has(:is(.outer-a, .outer-b) :is(.inner-b, .inner-a) .leaf) { color: red; }
|
|
.anchor:has(:is(.outer-b, .outer-a) :is(.inner-a, .inner-b) .leaf) { color: red; }
|
|
</style>
|
|
<div class="anchor" id="anchor">
|
|
<div class="outer-a" id="outer">
|
|
<div class="inner-b" id="inner">
|
|
<span id="target">leaf</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
test(() => {
|
|
let anchor = document.getElementById("anchor");
|
|
let target = document.getElementById("target");
|
|
|
|
settleAndReset(anchor);
|
|
|
|
target.classList.add("leaf");
|
|
getComputedStyle(anchor).color;
|
|
printCounters("after add .leaf");
|
|
});
|
|
</script>
|