| Index: LayoutTests/fast/css/invalidation/scrollbar-pseudo.html
 | 
| diff --git a/LayoutTests/fast/css/invalidation/scrollbar-pseudo.html b/LayoutTests/fast/css/invalidation/scrollbar-pseudo.html
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..ddf2b7de18c4e996b82da5d2967137fb0ee627d9
 | 
| --- /dev/null
 | 
| +++ b/LayoutTests/fast/css/invalidation/scrollbar-pseudo.html
 | 
| @@ -0,0 +1,113 @@
 | 
| +<!DOCTYPE html>
 | 
| +<script src="../../../resources/js-test.js"></script>
 | 
| +<style>
 | 
| +.scroller::-webkit-scrollbar {
 | 
| +    height: 5px;
 | 
| +}
 | 
| +
 | 
| +.scroller {
 | 
| +    width: 200px;
 | 
| +    height: 10px;
 | 
| +    overflow-x: scroll;
 | 
| +}
 | 
| +
 | 
| +.scroller > div {
 | 
| +    width: 400px;
 | 
| +}
 | 
| +
 | 
| +.t1 .scroller::-webkit-scrollbar,
 | 
| +.t2 + .scroller::-webkit-scrollbar,
 | 
| +.t3 .scroller::-webkit-scrollbar-button,
 | 
| +.t4 + .scroller::-webkit-scrollbar-button,
 | 
| +.t5 .scroller::-webkit-scrollbar-corner,
 | 
| +.t6 + .scroller::-webkit-scrollbar-corner,
 | 
| +.t7 .scroller::-webkit-scrollbar-thumb,
 | 
| +.t8 + .scroller::-webkit-scrollbar-thumb,
 | 
| +.t9 .scroller::-webkit-scrollbar-track,
 | 
| +.t10 + .scroller::-webkit-scrollbar-track,
 | 
| +.t11 .scroller::-webkit-scrollbar-track-piece,
 | 
| +.t12 + .scroller::-webkit-scrollbar-track-piece {
 | 
| +    background-color: green;
 | 
| +}
 | 
| +</style>
 | 
| +<div>
 | 
| +    <div id="scrollerParent">
 | 
| +        <div>
 | 
| +            <div id="scroller1" class="scroller">
 | 
| +                <div>
 | 
| +                    <span></span>
 | 
| +                    <span></span>
 | 
| +                    <span></span>
 | 
| +                    <span></span>
 | 
| +                </div>
 | 
| +            </div>
 | 
| +            <div></div>
 | 
| +        </div>
 | 
| +    </div>
 | 
| +</div>
 | 
| +<div>
 | 
| +    <div id="scrollerSibling"></div>
 | 
| +    <div id="scroller2" class="scroller">
 | 
| +        <div>
 | 
| +            <span></span>
 | 
| +            <span></span>
 | 
| +            <span></span>
 | 
| +            <span></span>
 | 
| +        </div>
 | 
| +    </div>
 | 
| +    <div>
 | 
| +        <div></div>
 | 
| +    </div>
 | 
| +<script>
 | 
| +description("Style invalidation for scrollbar pseudo elements.");
 | 
| +
 | 
| +var transparent = "rgba(0, 0, 0, 0)";
 | 
| +var green = "rgb(0, 128, 0)";
 | 
| +
 | 
| +function testScrollbarPseudo(pseudoElm, scroller, classElement, testClass, expectedCount) {
 | 
| +
 | 
| +    var computedString = "getComputedStyle(" + scroller + ", '" + pseudoElm + "').backgroundColor";
 | 
| +
 | 
| +    shouldBe(computedString, "transparent");
 | 
| +
 | 
| +    document.body.offsetTop; // force recalc
 | 
| +    classElement.className = testClass;
 | 
| +
 | 
| +    if (window.internals)
 | 
| +        shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "" + expectedCount);
 | 
| +
 | 
| +    shouldBe(computedString, "green");
 | 
| +    classElement.className = "";
 | 
| +}
 | 
| +
 | 
| +// The expected affected element counts below need an explanation:
 | 
| +//
 | 
| +// The descendant selector tests invalidate 2 normal dom elements:
 | 
| +// #scrollerParent, #scroller1
 | 
| +//
 | 
| +// The sibling selector tests invalidate 7 normal dom elements:
 | 
| +// #scrollerSibling, #scroller2, the div child of #scroller2 and its 4 spans
 | 
| +//
 | 
| +// In addition there the pseudo element selectors add the following pseudo elements
 | 
| +// on the #scroller1 and #scroller2 elements:
 | 
| +//
 | 
| +// ::-webkit-scrollbar: 1 scrollbar pseudo element (in total 3 and 8)
 | 
| +// ::-webkit-scrollbar-button: 1 scrollbar + 4 buttons (in total 7 and 12)
 | 
| +// ::-webkit-scrollbar-corner: 1 scrollbar + 1 corner (in total 4 and 9)
 | 
| +// ::-webkit-scrollbar-thumb: 1 scrollbar + 1 thumb (in total 4 and 9)
 | 
| +// ::-webkit-scrollbar-track: 1 scrollbar + 1 track (in total 4 and 9)
 | 
| +// ::-webkit-scrollbar-track-piece: 1 scrollbar + 2 track pieces (in total 5 and 12)
 | 
| +
 | 
| +testScrollbarPseudo("::-webkit-scrollbar", "scroller1", scrollerParent, "t1", 3);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar", "scroller2", scrollerSibling, "t2", 8);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-button", "scroller1", scrollerParent, "t3", 7);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-button", "scroller2", scrollerSibling, "t4", 12);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-corner", "scroller1", scrollerParent, "t5", 4);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-corner", "scroller2", scrollerSibling, "t6", 9);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-thumb", "scroller1", scrollerParent, "t7", 4);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-thumb", "scroller2", scrollerSibling, "t8", 9);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-track", "scroller1", scrollerParent, "t9", 4);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-track", "scroller2", scrollerSibling, "t10", 9);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-track-piece", "scroller1", scrollerParent, "t11", 5);
 | 
| +testScrollbarPseudo("::-webkit-scrollbar-track-piece", "scroller2", scrollerSibling, "t12", 10);
 | 
| +</script>
 | 
| 
 |