<!DOCTYPE html> <script src="../../../resources/js-test.js"></script> <style> .select::selection { background-color: red; } .t1 .select::selection, .t2 .select::selection:window-inactive { background-color: green; } </style> <div id="t1"> <div> <div class="select"> 1 <span></span> <span></span> </div> <div></div> </div> </div> <div id="t2"> <div> <div class="select"> 2 <span></span> <span></span> </div> <div></div> </div> </div> <script> description("Style invalidation for ::selection"); var red = "rgb(255, 0, 0)"; var green = "rgb(0, 128, 0)"; function setSelection(textNode) { var range = document.createRange(); range.setStart(textNode, 0); range.setEnd(textNode, 1); window.getSelection().addRange(range); } var select = document.querySelectorAll(".select"); setSelection(select[0].firstChild); shouldBe("getComputedStyle(select[0], '::selection').backgroundColor", "red"); document.body.offsetTop; // Force recalc. t1.className = "t1"; if (window.internals) shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1"); shouldBe("getComputedStyle(select[0], '::selection').backgroundColor", "green"); shouldBeDefined(window.testRunner); testRunner.setWindowIsKey(false); setSelection(select[1].firstChild); shouldBe("getComputedStyle(select[1], '::selection').backgroundColor", "red"); document.body.offsetTop; // Force recalc. t2.className = "t2"; if (window.internals) shouldBe("internals.updateStyleAndReturnAffectedElementCount()", "1"); shouldBe("getComputedStyle(select[1], '::selection').backgroundColor", "green"); </script>