Regression(r188105): Seems to have caused crashes during PLT on some iPads
[WebKit-https.git] / LayoutTests / fast / css / nth-last-child-of-style-update-optimization.html
1 <!doctype html>
2 <html>
3 <head>
4 <script src="../../resources/js-test-pre.js"></script>
5 <style>
6 * {
7     background-color: rgb(0, 0, 0);
8 }
9 :nth-last-child(n of foo, bar, *, .target) {
10     background-color: rgb(255, 255, 255);
11 }
12 :root {
13     background-color: rgb(255, 255, 255);
14 }
15 </style>
16 </head>
17 <body>
18     <div class="test-case">
19         <parent id="parent1">
20             <target></target>
21             <target id="target1"></target>
22         </parent>
23     </div>
24     <div class="test-case" style="display:none;">
25         <parent id="parent2">
26             <target></target>
27             <target id="target2"></target>
28         </parent>
29     </div>
30 </body>
31 <script>
32 description('Verify that style invalidation of elements affected by :nth-last-child() no not cause an invalidation storm.');
33
34 // Force a layout.
35 document.documentElement.offsetTop;
36
37 // Nothing should need a style recalc.
38 var allContent = document.querySelectorAll("*");
39 for (var i = 0; i < allContent.length; ++i) {
40     if (internals.nodeNeedsStyleRecalc(allContent[i])) {
41         testFailed("Invalid initial state, node " + i + " has dirty style.");
42         break;
43     }
44 }
45
46 // Change the class of target1, this could change the order of rules and need to cause a style recalc.
47 var target1 = document.getElementById('target1');
48 target1.className = 'target';
49
50 var allContent = document.querySelectorAll("*");
51 for (var i = 0; i < allContent.length; ++i) {
52     var node = allContent[i];
53     if (internals.nodeNeedsStyleRecalc(node)) {
54         if (node !== target1 && node !== target1.parentNode) {
55             testFailed("Invalidating the style of target1 should never invalidate more than target1 and its parent.");
56             break;
57         }
58     }
59 }
60
61 document.documentElement.offsetTop;
62
63 // Change the class of target1, this could change the order of rules and need to cause a style recalc.
64 var target2 = document.getElementById('target2');
65 target2.className = 'target';
66
67 var allContent = document.querySelectorAll("*");
68 for (var i = 0; i < allContent.length; ++i) {
69     var node = allContent[i];
70     if (internals.nodeNeedsStyleRecalc(node)) {
71         if (node !== target2 && node !== target2.parentNode) {
72             testFailed("Invalidating the style of target1 should never invalidate more than target1 and its parent.");
73             break;
74         }
75     }
76 }
77 </script>
78 <script src="../../resources/js-test-post.js"></script>
79 </html>