6 window.testRunner.dumpAsText();
8 function isScrollbarRepaint(rect) {
9 return rect.width == 15 && rect.height == 285;
12 function hasNonScrollbarRepaint(repaintRects) {
13 for (var i = 0; i < repaintRects.length; ++i) {
14 if (!isScrollbarRepaint(repaintRects[i]))
20 function testRepaint() {
22 for (var testIteration = 0; testIteration < 3; ++testIteration) {
23 var container = document.getElementById("container");
24 var marquee = document.getElementById("marquee");
25 var span = document.getElementById("span");
27 var toScroll = container;
28 if (testIteration == 0) {
29 var selection = getSelection();
31 var range = document.createRange();
32 range.selectNode(document.getElementById("selection-start"));
33 selection.addRange(range);
35 range = document.createRange();
36 range.selectNode(document.getElementById("selection-end"));
37 selection.addRange(range);
38 } else if (testIteration == 1) {
39 marquee.style.display = "block";
42 span.style.display = "inline";
45 document.body.offsetTop;
48 window.internals.startTrackingRepaints(document);
50 toScroll.scrollTop = 100;
52 if (window.internals) {
53 var repaintRects = window.internals.repaintRects(toScroll);
54 var repainted = hasNonScrollbarRepaint(repaintRects);
55 if (repainted === true)
56 result += "PASS repainted when expected\n";
58 result += "FAIL did not repaint when expected\n";
59 window.internals.stopTrackingRepaints(document);
62 // Do all cleanup here (so as not to affect repaint rects).
63 toScroll.scrollTop = 0;
64 span.style.display = "none";
65 marquee.style.display = "none";
66 getSelection().removeAllRanges();
72 function testNoRepaint() {
74 var container = document.getElementById("container");
76 document.body.offsetTop;
79 window.internals.startTrackingRepaints(document);
81 container.scrollTop = 100;
83 if (window.internals) {
84 var repaintRects = window.internals.repaintRects(container);
85 var repainted = hasNonScrollbarRepaint(repaintRects);
86 if (repainted === false)
87 result += "PASS did not repaint as expected\n";
89 result += "FAIL repainted when unexpected\n";
90 window.internals.stopTrackingRepaints(document);
93 container.scrollTop = 0;
98 function testOverflowHidden() {
100 var container = document.getElementById("container");
102 container.style.overflow = "hidden";
103 document.body.offsetTop;
105 if (window.internals)
106 window.internals.startTrackingRepaints(document);
108 container.scrollTop = 100;
110 if (window.internals) {
111 var repaintRects = window.internals.repaintRects(container);
112 var repainted = hasNonScrollbarRepaint(repaintRects);
113 if (repainted === true)
114 result += "PASS repainted when expected\n";
116 result += "FAIL did not repaint when expected\n";
117 window.internals.stopTrackingRepaints(document);
120 container.scrollTop = 0;
126 var marquee = document.getElementById("marquee");
128 var result = testRepaint();
129 result += testNoRepaint();
130 result += testOverflowHidden();
131 var pre = document.createElement('pre');
132 document.body.appendChild(pre);
133 pre.innerHTML = result;
134 if (!window.internals)
135 document.getElementById("description").style.display = "block";
138 window.onload = doTests;
141 #target::selection { background-color: green; }
146 border: 1px black solid;
148 -webkit-backface-visibility: hidden;
158 background-color: blue;
159 -webkit-backface-visibility: hidden;
167 background-color: green;
168 -webkit-backface-visibility: hidden;
182 -webkit-backface-visibility: hidden;
188 <pre id="description">
189 This test ensures that if the only thing that scrolls is a composited layer,
190 we do not repaint. It passes if we repaint when we have to draw the selection
191 block gaps or if we have content that is not in a composited layer. It also
192 checks that we do not repaint when all the content is in a composited layer.
195 <span id="span">Hello!</span>
196 <div id="fixed"></div>
197 <div class="scrolled" id="selection-start"></div>
198 <div class="scrolled" id="selection-end"></div>
199 <div class="scrolled"></div>
200 <div class="scrolled"></div>
201 <div class="scrolled"></div>
202 <div class="scrolled"></div>
203 <div class="scrolled"></div>
204 <div class="scrolled"></div>
205 <div class="scrolled"></div>
207 <marquee id="marquee" direction="up" scrollamount="1">
208 <p>Lorem ipsum dolor amet</p>
209 <p>Lorem ipsum dolor amet</p>
210 <p>Lorem ipsum dolor amet</p>
211 <p>Lorem ipsum dolor amet</p>
212 <p>Lorem ipsum dolor amet</p>
213 <p>Lorem ipsum dolor amet</p>
214 <p>Lorem ipsum dolor amet</p>