Index: third_party/WebKit/LayoutTests/fast/css/invalidation/independent-inheritance-fast-path-multiple-properties.html |
diff --git a/third_party/WebKit/LayoutTests/fast/css/invalidation/independent-inheritance-fast-path-multiple-properties.html b/third_party/WebKit/LayoutTests/fast/css/invalidation/independent-inheritance-fast-path-multiple-properties.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..114c102afc1e21922e868628c937bf847610de1f |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/fast/css/invalidation/independent-inheritance-fast-path-multiple-properties.html |
@@ -0,0 +1,95 @@ |
+<!DOCTYPE html> |
+<script src="../../../resources/testharness.js"></script> |
+<script src="../../../resources/testharnessreport.js"></script> |
+<style> |
+#c { |
+ pointer-events: all; |
+} |
+#e { |
+ visibility: collapse; |
+} |
+</style> |
+ |
+<!-- The property is set on this outermost element. --> |
+<div id="a"> |
+ <!-- Tests that the property is propagated through an element that inherits it --> |
+ <div id="b"> |
+ <!-- Tests that the property stops propagating through an element that doesn't inherit it --> |
+ <div id="c"> |
+ <!-- The property is also set on this inner element, which inherited it from its parent, and should now propagate down to #e and #f --> |
+ <div id="d"> |
+ <!-- The property is also set on this inner element, which inherited it from its parent but now sets it itself, and should now propagate to #f --> |
+ <div id="e"> |
+ <!-- Tests that the above properties resolve correctly and this inherits the value from #f --> |
+ <div id="f"> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+ </div> |
+</div> |
+<script> |
+test(function(t) |
+{ |
+ if (!window.internals) |
+ assert_unreached('This test requires window.internals.'); |
+ |
+ a.offsetTop; // Force recalc. |
+ assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 0); |
+ |
+ assert_equals(getComputedStyle(a).pointerEvents, "auto"); |
+ assert_equals(getComputedStyle(b).pointerEvents, "auto"); |
+ assert_equals(getComputedStyle(c).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(d).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(e).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(f).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(a).visibility, "visible"); |
+ assert_equals(getComputedStyle(b).visibility, "visible"); |
+ assert_equals(getComputedStyle(c).visibility, "visible"); |
+ assert_equals(getComputedStyle(d).visibility, "visible"); |
+ assert_equals(getComputedStyle(e).visibility, "collapse"); |
+ assert_equals(getComputedStyle(f).visibility, "collapse"); |
+ |
+ a.offsetTop; // Force recalc. |
+ a.style.pointerEvents = "none"; |
+ assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1); |
+ |
+ a.offsetTop; // Force recalc. |
+ a.style.visibility = "hidden"; |
+ assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1); |
+ |
+ assert_equals(getComputedStyle(a).pointerEvents, "none"); |
+ assert_equals(getComputedStyle(b).pointerEvents, "none"); |
+ assert_equals(getComputedStyle(c).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(d).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(e).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(f).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(a).visibility, "hidden"); |
+ assert_equals(getComputedStyle(b).visibility, "hidden"); |
+ assert_equals(getComputedStyle(c).visibility, "hidden"); |
+ assert_equals(getComputedStyle(d).visibility, "hidden"); |
+ assert_equals(getComputedStyle(e).visibility, "collapse"); |
+ assert_equals(getComputedStyle(f).visibility, "collapse"); |
+ |
+ a.offsetTop; // Force recalc. |
+ d.style.pointerEvents = "painted"; |
+ assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1); |
+ |
+ a.offsetTop; // Force recalc. |
+ e.style.visibility = "visible"; |
+ assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1); |
+ |
+ assert_equals(getComputedStyle(a).pointerEvents, "none"); |
+ assert_equals(getComputedStyle(b).pointerEvents, "none"); |
+ assert_equals(getComputedStyle(c).pointerEvents, "all"); |
+ assert_equals(getComputedStyle(d).pointerEvents, "painted"); |
+ assert_equals(getComputedStyle(e).pointerEvents, "painted"); |
+ assert_equals(getComputedStyle(f).pointerEvents, "painted"); |
+ assert_equals(getComputedStyle(a).visibility, "hidden"); |
+ assert_equals(getComputedStyle(b).visibility, "hidden"); |
+ assert_equals(getComputedStyle(c).visibility, "hidden"); |
+ assert_equals(getComputedStyle(d).visibility, "hidden"); |
+ assert_equals(getComputedStyle(e).visibility, "visible"); |
+ assert_equals(getComputedStyle(f).visibility, "visible"); |
+}, "Changing both pointer-events and visibility on an element, both independent inherited properties, doesn't cause a style recalc for its children."); |
+</script> |