Index: LayoutTests/fast/css/getComputedStyle/computed-style-recalc.html |
diff --git a/LayoutTests/fast/css/getComputedStyle/computed-style-recalc.html b/LayoutTests/fast/css/getComputedStyle/computed-style-recalc.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1c4acf95dc85c692192b9752a251efa8ac270276 |
--- /dev/null |
+++ b/LayoutTests/fast/css/getComputedStyle/computed-style-recalc.html |
@@ -0,0 +1,64 @@ |
+<!DOCTYPE html> |
+<script src="../../../resources/js-test.js"></script> |
+<style> |
+.a + .b { color: green; } |
+.c + .d { color: green; } |
+.e { color: green; } |
+</style> |
+<div id="t1"> |
+ <div></div> |
+ <div class="b"></div> |
+</div> |
+<div id="t2"> |
+ <div> |
+ <div></div> |
+ <div class="d"></div> |
+ </div> |
+ <div> |
+ <div class="e"></div> |
+ </div> |
+</div> |
+<div id="t3"> |
+ <div> |
+ <div></div> |
+ <div class="d"></div> |
+ </div> |
+ <div> |
+ <div class="a"></div> |
+ <div class="b"></div> |
+ </div> |
+</div> |
+<script> |
+description("Check that getComputedStyle causes a style recalc when necessary, and only when necessary."); |
+ |
+var green = "rgb(0, 128, 0)"; |
+ |
+// Check that sibling recalc for .b is performed before computed style is returned. |
+ |
+document.body.offsetTop; |
+document.body.querySelector("#t1 > div").className = "a"; |
+shouldBe("getComputedStyle(document.body.querySelector('#t1 .b')).color", "green", true); |
+if (window.internals) |
+ shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "0"); |
+ |
+// No style invalidation or recalc scheduled for an ascendant of .e, and no affected-by-adjacent |
+// bits set on any ascendants, hence we don't need to do a recalc even if a style invalidation |
+// is scheduled for the .c change with adjacent implications. |
+ |
+document.body.offsetTop; |
+document.body.querySelector("#t2 > div > div").className = "c"; |
+shouldBe("getComputedStyle(document.body.querySelector('#t2 .e')).color", "green", true); |
+if (window.internals) |
+ shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "2"); |
+ |
+// No style invalidation or recalc scheduled for an ascendant of .b, and even if affected-by-adjacent |
+// bits are set on the ascendant (because of a+b), it doesn't matter since that ascendant does |
+// not have any children that needs style recalc or invalidation. |
+ |
+document.body.offsetTop; |
+document.body.querySelector("#t3 > div > div").className = "c"; |
+shouldBe("getComputedStyle(document.body.querySelector('#t3 .b')).color", "green", true); |
+if (window.internals) |
+ shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "2"); |
+ |
+</script> |