| Index: third_party/WebKit/LayoutTests/fast/css/invalidation/independent-inheritance-fast-path.html
|
| diff --git a/third_party/WebKit/LayoutTests/fast/css/invalidation/independent-inheritance-fast-path.html b/third_party/WebKit/LayoutTests/fast/css/invalidation/independent-inheritance-fast-path.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7562b19629c9e43d71789c7da2237609947b8cc3
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/fast/css/invalidation/independent-inheritance-fast-path.html
|
| @@ -0,0 +1,72 @@
|
| +<!DOCTYPE html>
|
| +<script src="../../../resources/testharness.js"></script>
|
| +<script src="../../../resources/testharnessreport.js"></script>
|
| +<div id="testContainer">
|
| + <div id="outer">
|
| + <div id="inner">
|
| + <div id="innermost"></div>
|
| + </div>
|
| + </div>
|
| +</div>
|
| +<script>
|
| +
|
| +var independent_properties = [
|
| + // Property name, Value 1, Value 2
|
| + ["pointerEvents", "auto", "all"],
|
| + ["visibility", "visible", "hidden"],
|
| +];
|
| +
|
| +independent_properties.forEach(function(test_data)
|
| +{
|
| + var propertyName = test_data[0];
|
| + var value1 = test_data[1];
|
| + var value2 = test_data[2];
|
| +
|
| + test(function(t)
|
| + {
|
| + if (!window.internals)
|
| + assert_unreached('This test requires window.internals.');
|
| +
|
| + // Create a nested div structure for the test.
|
| + var outer = document.createElement("div");
|
| + var inner = document.createElement("div");
|
| + var innermost = document.createElement("div");
|
| + testContainer.appendChild(outer);
|
| + outer.appendChild(inner);
|
| + inner.appendChild(innermost);
|
| +
|
| + outer.offsetTop; // Force recalc.
|
| + assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 0);
|
| +
|
| + // Set the whole container to the first value.
|
| + testContainer.style[propertyName] = value1;
|
| +
|
| + // All elements start as the first value.
|
| + assert_equals(getComputedStyle(outer)[propertyName], value1);
|
| + assert_equals(getComputedStyle(inner)[propertyName], value1);
|
| + assert_equals(getComputedStyle(innermost)[propertyName], value1);
|
| + outer.offsetTop; // Force recalc.
|
| +
|
| + // Changing outer also changes inner and innermost.
|
| + outer.style[propertyName] = value2;
|
| + assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1, "Only outer should be recalced (3 without fast path)");
|
| +
|
| + assert_equals(getComputedStyle(outer)[propertyName], value2);
|
| + assert_equals(getComputedStyle(inner)[propertyName], value2);
|
| + assert_equals(getComputedStyle(innermost)[propertyName], value2);
|
| + outer.offsetTop; // Force recalc.
|
| +
|
| + // Changing inner to value1 changes all its children to that value.
|
| + inner.style[propertyName] = value1;
|
| + assert_equals(internals.updateStyleAndReturnAffectedElementCount(), 1, "Only inner should be recalced (2 without fast path)");
|
| +
|
| + assert_equals(getComputedStyle(outer)[propertyName], value2);
|
| + assert_equals(getComputedStyle(inner)[propertyName], value1);
|
| + assert_equals(getComputedStyle(innermost)[propertyName], value1);
|
| + outer.offsetTop; // Force recalc.
|
| +
|
| + // Clear for next test.
|
| + outer.remove();
|
| + }, "Changing " + propertyName + ", an independent inherited property, propagates correctly with a single style recalc.");
|
| +})
|
| +</script>
|
|
|