Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(50)

Side by Side Diff: third_party/WebKit/LayoutTests/intersection-observer/multiple-thresholds.html

Issue 1776493002: IntersectionObserver: use an idle callback to send notifications. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <script src="../resources/js-test.js"></script> 2 <script src="../resources/js-test.js"></script>
3 <script src="helper-functions.js"></script> 3 <script src="helper-functions.js"></script>
4 <div style="width:100%; height:700px;"></div> 4 <div style="width:100%; height:700px;"></div>
5 <div id="target" style="background-color: green; width:100px; height:100px"></di v> 5 <div id="target" style="background-color: green; width:100px; height:100px"></di v>
6 <div style="width:100%; height:700px;"></div> 6 <div style="width:100%; height:700px;"></div>
7 7
8 <script> 8 <script>
9 description("Intersection observer test with multiple thresholds."); 9 description("Intersection observer test with multiple thresholds.");
10 var target = document.getElementById("target"); 10 var target = document.getElementById("target");
11 var entries = []; 11 var entries = [];
12 12 var observer = new IntersectionObserver(
13 observer_callback = function(changes) { 13 changes => { entries = entries.concat(changes) },
14 for (var i in changes) 14 { threshold: [0, 0.25, 0.5, 0.75, 1] }
15 entries.push(changes[i]); 15 );
16 }; 16
17 var observer = new IntersectionObserver(observer_callback, { 17 onload = function() {
18 threshold: [0, 0.25, 0.5, 0.75, 1]
19 });
20 observer.observe(target); 18 observer.observe(target);
21 19 entries = entries.concat(observer.takeRecords());
22 function step0() { 20 shouldBeEqualToNumber("entries.length", 0);
23 setTimeout(function() { 21 requestAnimationFrame(() => { requestAnimationFrame(step0) });
24 shouldBeEqualToNumber("entries.length", 0); 22 }
25 document.scrollingElement.scrollTop = 120; 23
26 requestAnimationFrame(step1); 24 function step0() {
27 }); 25 entries = entries.concat(observer.takeRecords());
28 } 26 shouldBeEqualToNumber("entries.length", 0);
29 27 document.scrollingElement.scrollTop = 120;
30 function step1() { 28 requestAnimationFrame(step1);
31 setTimeout(function() { 29 }
32 shouldBeEqualToNumber("entries.length", 1); 30
33 shouldBeEqualToNumber("entries[0].boundingClientRect.left", 8); 31 function step1() {
34 shouldBeEqualToNumber("entries[0].boundingClientRect.right", 108); 32 entries = entries.concat(observer.takeRecords());
35 shouldBeEqualToNumber("entries[0].boundingClientRect.top", 588); 33 shouldBeEqualToNumber("entries.length", 1);
36 shouldBeEqualToNumber("entries[0].boundingClientRect.bottom", 688); 34 if (entries.length > 0) {
37 shouldBeEqualToNumber("entries[0].intersectionRect.left", 8); 35 shouldBeEqualToNumber("entries[0].boundingClientRect.left", 8);
38 shouldBeEqualToNumber("entries[0].intersectionRect.right", 108); 36 shouldBeEqualToNumber("entries[0].boundingClientRect.right", 108);
39 shouldBeEqualToNumber("entries[0].intersectionRect.top", 588); 37 shouldBeEqualToNumber("entries[0].boundingClientRect.top", 588);
40 shouldBeEqualToNumber("entries[0].intersectionRect.bottom", 600); 38 shouldBeEqualToNumber("entries[0].boundingClientRect.bottom", 688);
41 shouldBeEqualToNumber("entries[0].rootBounds.left", 0); 39 shouldBeEqualToNumber("entries[0].intersectionRect.left", 8);
42 shouldBeEqualToNumber("entries[0].rootBounds.right", 785); 40 shouldBeEqualToNumber("entries[0].intersectionRect.right", 108);
43 shouldBeEqualToNumber("entries[0].rootBounds.top", 0); 41 shouldBeEqualToNumber("entries[0].intersectionRect.top", 588);
44 shouldBeEqualToNumber("entries[0].rootBounds.bottom", 600); 42 shouldBeEqualToNumber("entries[0].intersectionRect.bottom", 600);
45 shouldEvaluateToSameObject("entries[0].target", target); 43 shouldBeEqualToNumber("entries[0].rootBounds.left", 0);
46 document.scrollingElement.scrollTop = 160; 44 shouldBeEqualToNumber("entries[0].rootBounds.right", 785);
47 requestAnimationFrame(step2); 45 shouldBeEqualToNumber("entries[0].rootBounds.top", 0);
48 }); 46 shouldBeEqualToNumber("entries[0].rootBounds.bottom", 600);
49 } 47 shouldEvaluateToSameObject("entries[0].target", target);
50 48 }
51 function step2() { 49 document.scrollingElement.scrollTop = 160;
52 setTimeout(function() { 50 requestAnimationFrame(step2);
53 shouldBeEqualToNumber("entries.length", 2); 51 }
54 shouldBeEqualToNumber("entries[1].boundingClientRect.left", 8); 52
55 shouldBeEqualToNumber("entries[1].boundingClientRect.right", 108); 53 function step2() {
56 shouldBeEqualToNumber("entries[1].boundingClientRect.top", 548); 54 entries = entries.concat(observer.takeRecords());
57 shouldBeEqualToNumber("entries[1].boundingClientRect.bottom", 648); 55 shouldBeEqualToNumber("entries.length", 2);
58 shouldBeEqualToNumber("entries[1].intersectionRect.left", 8); 56 if (entries.length > 1) {
59 shouldBeEqualToNumber("entries[1].intersectionRect.right", 108); 57 shouldBeEqualToNumber("entries[1].boundingClientRect.left", 8);
60 shouldBeEqualToNumber("entries[1].intersectionRect.top", 548); 58 shouldBeEqualToNumber("entries[1].boundingClientRect.right", 108);
61 shouldBeEqualToNumber("entries[1].intersectionRect.bottom", 600); 59 shouldBeEqualToNumber("entries[1].boundingClientRect.top", 548);
62 shouldBeEqualToNumber("entries[1].rootBounds.left", 0); 60 shouldBeEqualToNumber("entries[1].boundingClientRect.bottom", 648);
63 shouldBeEqualToNumber("entries[1].rootBounds.right", 785); 61 shouldBeEqualToNumber("entries[1].intersectionRect.left", 8);
64 shouldBeEqualToNumber("entries[1].rootBounds.top", 0); 62 shouldBeEqualToNumber("entries[1].intersectionRect.right", 108);
65 shouldBeEqualToNumber("entries[1].rootBounds.bottom", 600); 63 shouldBeEqualToNumber("entries[1].intersectionRect.top", 548);
66 shouldEvaluateToSameObject("entries[1].target", target); 64 shouldBeEqualToNumber("entries[1].intersectionRect.bottom", 600);
67 document.scrollingElement.scrollTop = 200; 65 shouldBeEqualToNumber("entries[1].rootBounds.left", 0);
68 requestAnimationFrame(step3); 66 shouldBeEqualToNumber("entries[1].rootBounds.right", 785);
69 }); 67 shouldBeEqualToNumber("entries[1].rootBounds.top", 0);
70 } 68 shouldBeEqualToNumber("entries[1].rootBounds.bottom", 600);
71 69 shouldEvaluateToSameObject("entries[1].target", target);
72 function step3() { 70 }
73 setTimeout(function() { 71 document.scrollingElement.scrollTop = 200;
74 shouldBeEqualToNumber("entries.length", 3); 72 requestAnimationFrame(step3);
75 shouldBeEqualToNumber("entries[2].boundingClientRect.left", 8); 73 }
76 shouldBeEqualToNumber("entries[2].boundingClientRect.right", 108); 74
77 shouldBeEqualToNumber("entries[2].boundingClientRect.top", 508); 75 function step3() {
78 shouldBeEqualToNumber("entries[2].boundingClientRect.bottom", 608); 76 entries = entries.concat(observer.takeRecords());
79 shouldBeEqualToNumber("entries[2].intersectionRect.left", 8); 77 shouldBeEqualToNumber("entries.length", 3);
80 shouldBeEqualToNumber("entries[2].intersectionRect.right", 108); 78 if (entries.length > 2) {
81 shouldBeEqualToNumber("entries[2].intersectionRect.top", 508); 79 shouldBeEqualToNumber("entries[2].boundingClientRect.left", 8);
82 shouldBeEqualToNumber("entries[2].intersectionRect.bottom", 600); 80 shouldBeEqualToNumber("entries[2].boundingClientRect.right", 108);
83 shouldBeEqualToNumber("entries[2].rootBounds.left", 0); 81 shouldBeEqualToNumber("entries[2].boundingClientRect.top", 508);
84 shouldBeEqualToNumber("entries[2].rootBounds.right", 785); 82 shouldBeEqualToNumber("entries[2].boundingClientRect.bottom", 608);
85 shouldBeEqualToNumber("entries[2].rootBounds.top", 0); 83 shouldBeEqualToNumber("entries[2].intersectionRect.left", 8);
86 shouldBeEqualToNumber("entries[2].rootBounds.bottom", 600); 84 shouldBeEqualToNumber("entries[2].intersectionRect.right", 108);
87 shouldEvaluateToSameObject("entries[2].target", target); 85 shouldBeEqualToNumber("entries[2].intersectionRect.top", 508);
88 document.scrollingElement.scrollTop = 240; 86 shouldBeEqualToNumber("entries[2].intersectionRect.bottom", 600);
89 requestAnimationFrame(step4); 87 shouldBeEqualToNumber("entries[2].rootBounds.left", 0);
90 }); 88 shouldBeEqualToNumber("entries[2].rootBounds.right", 785);
91 } 89 shouldBeEqualToNumber("entries[2].rootBounds.top", 0);
92 90 shouldBeEqualToNumber("entries[2].rootBounds.bottom", 600);
93 function step4() { 91 shouldEvaluateToSameObject("entries[2].target", target);
94 setTimeout(function() { 92 }
95 shouldBeEqualToNumber("entries.length", 4); 93 document.scrollingElement.scrollTop = 240;
96 shouldBeEqualToNumber("entries[3].boundingClientRect.left", 8); 94 requestAnimationFrame(step4);
97 shouldBeEqualToNumber("entries[3].boundingClientRect.right", 108); 95 }
98 shouldBeEqualToNumber("entries[3].boundingClientRect.top", 468); 96
99 shouldBeEqualToNumber("entries[3].boundingClientRect.bottom", 568); 97 function step4() {
100 shouldBeEqualToNumber("entries[3].intersectionRect.left", 8); 98 entries = entries.concat(observer.takeRecords());
101 shouldBeEqualToNumber("entries[3].intersectionRect.right", 108); 99 shouldBeEqualToNumber("entries.length", 4);
102 shouldBeEqualToNumber("entries[3].intersectionRect.top", 468); 100 if (entries.length > 3) {
103 shouldBeEqualToNumber("entries[3].intersectionRect.bottom", 568); 101 shouldBeEqualToNumber("entries[3].boundingClientRect.left", 8);
104 shouldBeEqualToNumber("entries[3].rootBounds.left", 0); 102 shouldBeEqualToNumber("entries[3].boundingClientRect.right", 108);
105 shouldBeEqualToNumber("entries[3].rootBounds.right", 785); 103 shouldBeEqualToNumber("entries[3].boundingClientRect.top", 468);
106 shouldBeEqualToNumber("entries[3].rootBounds.top", 0); 104 shouldBeEqualToNumber("entries[3].boundingClientRect.bottom", 568);
107 shouldBeEqualToNumber("entries[3].rootBounds.bottom", 600); 105 shouldBeEqualToNumber("entries[3].intersectionRect.left", 8);
108 shouldEvaluateToSameObject("entries[3].target", target); 106 shouldBeEqualToNumber("entries[3].intersectionRect.right", 108);
109 document.scrollingElement.scrollTop = 740; 107 shouldBeEqualToNumber("entries[3].intersectionRect.top", 468);
110 requestAnimationFrame(step5); 108 shouldBeEqualToNumber("entries[3].intersectionRect.bottom", 568);
111 }); 109 shouldBeEqualToNumber("entries[3].rootBounds.left", 0);
112 } 110 shouldBeEqualToNumber("entries[3].rootBounds.right", 785);
113 111 shouldBeEqualToNumber("entries[3].rootBounds.top", 0);
114 function step5() { 112 shouldBeEqualToNumber("entries[3].rootBounds.bottom", 600);
115 setTimeout(function() { 113 shouldEvaluateToSameObject("entries[3].target", target);
116 shouldBeEqualToNumber("entries.length", 5); 114 }
117 shouldBeEqualToNumber("entries[4].boundingClientRect.left", 8); 115 document.scrollingElement.scrollTop = 740;
118 shouldBeEqualToNumber("entries[4].boundingClientRect.right", 108); 116 requestAnimationFrame(step5);
119 shouldBeEqualToNumber("entries[4].boundingClientRect.top", -32); 117 }
120 shouldBeEqualToNumber("entries[4].boundingClientRect.bottom", 68); 118
121 shouldBeEqualToNumber("entries[4].intersectionRect.left", 8); 119 function step5() {
122 shouldBeEqualToNumber("entries[4].intersectionRect.right", 108); 120 entries = entries.concat(observer.takeRecords());
123 shouldBeEqualToNumber("entries[4].intersectionRect.top", 0); 121 shouldBeEqualToNumber("entries.length", 5);
124 shouldBeEqualToNumber("entries[4].intersectionRect.bottom", 68); 122 if (entries.length > 4) {
125 shouldBeEqualToNumber("entries[4].rootBounds.left", 0); 123 shouldBeEqualToNumber("entries[4].boundingClientRect.left", 8);
126 shouldBeEqualToNumber("entries[4].rootBounds.right", 785); 124 shouldBeEqualToNumber("entries[4].boundingClientRect.right", 108);
127 shouldBeEqualToNumber("entries[4].rootBounds.top", 0); 125 shouldBeEqualToNumber("entries[4].boundingClientRect.top", -32);
128 shouldBeEqualToNumber("entries[4].rootBounds.bottom", 600); 126 shouldBeEqualToNumber("entries[4].boundingClientRect.bottom", 68);
129 shouldEvaluateToSameObject("entries[4].target", target); 127 shouldBeEqualToNumber("entries[4].intersectionRect.left", 8);
130 document.scrollingElement.scrollTop = 760; 128 shouldBeEqualToNumber("entries[4].intersectionRect.right", 108);
131 requestAnimationFrame(step6); 129 shouldBeEqualToNumber("entries[4].intersectionRect.top", 0);
132 }); 130 shouldBeEqualToNumber("entries[4].intersectionRect.bottom", 68);
133 } 131 shouldBeEqualToNumber("entries[4].rootBounds.left", 0);
134 132 shouldBeEqualToNumber("entries[4].rootBounds.right", 785);
135 function step6() { 133 shouldBeEqualToNumber("entries[4].rootBounds.top", 0);
136 setTimeout(function() { 134 shouldBeEqualToNumber("entries[4].rootBounds.bottom", 600);
137 shouldBeEqualToNumber("entries.length", 6); 135 shouldEvaluateToSameObject("entries[4].target", target);
138 shouldBeEqualToNumber("entries[5].boundingClientRect.left", 8); 136 }
139 shouldBeEqualToNumber("entries[5].boundingClientRect.right", 108); 137 document.scrollingElement.scrollTop = 760;
140 shouldBeEqualToNumber("entries[5].boundingClientRect.top", -52); 138 requestAnimationFrame(step6);
141 shouldBeEqualToNumber("entries[5].boundingClientRect.bottom", 48); 139 }
142 shouldBeEqualToNumber("entries[5].intersectionRect.left", 8); 140
143 shouldBeEqualToNumber("entries[5].intersectionRect.right", 108); 141 function step6() {
144 shouldBeEqualToNumber("entries[5].intersectionRect.top", 0); 142 entries = entries.concat(observer.takeRecords());
145 shouldBeEqualToNumber("entries[5].intersectionRect.bottom", 48); 143 shouldBeEqualToNumber("entries.length", 6);
146 shouldBeEqualToNumber("entries[5].rootBounds.left", 0); 144 if (entries.length > 5) {
147 shouldBeEqualToNumber("entries[5].rootBounds.right", 785); 145 shouldBeEqualToNumber("entries[5].boundingClientRect.left", 8);
148 shouldBeEqualToNumber("entries[5].rootBounds.top", 0); 146 shouldBeEqualToNumber("entries[5].boundingClientRect.right", 108);
149 shouldBeEqualToNumber("entries[5].rootBounds.bottom", 600); 147 shouldBeEqualToNumber("entries[5].boundingClientRect.top", -52);
150 shouldEvaluateToSameObject("entries[5].target", target); 148 shouldBeEqualToNumber("entries[5].boundingClientRect.bottom", 48);
151 document.scrollingElement.scrollTop = 800; 149 shouldBeEqualToNumber("entries[5].intersectionRect.left", 8);
152 requestAnimationFrame(step7); 150 shouldBeEqualToNumber("entries[5].intersectionRect.right", 108);
153 }); 151 shouldBeEqualToNumber("entries[5].intersectionRect.top", 0);
154 } 152 shouldBeEqualToNumber("entries[5].intersectionRect.bottom", 48);
155 153 shouldBeEqualToNumber("entries[5].rootBounds.left", 0);
156 function step7() { 154 shouldBeEqualToNumber("entries[5].rootBounds.right", 785);
157 setTimeout(function() { 155 shouldBeEqualToNumber("entries[5].rootBounds.top", 0);
158 shouldBeEqualToNumber("entries.length", 7); 156 shouldBeEqualToNumber("entries[5].rootBounds.bottom", 600);
159 shouldBeEqualToNumber("entries[6].boundingClientRect.left", 8); 157 shouldEvaluateToSameObject("entries[5].target", target);
160 shouldBeEqualToNumber("entries[6].boundingClientRect.right", 108); 158 }
161 shouldBeEqualToNumber("entries[6].boundingClientRect.top", -92); 159 document.scrollingElement.scrollTop = 800;
162 shouldBeEqualToNumber("entries[6].boundingClientRect.bottom", 8); 160 requestAnimationFrame(step7);
163 shouldBeEqualToNumber("entries[6].intersectionRect.left", 8); 161 }
164 shouldBeEqualToNumber("entries[6].intersectionRect.right", 108); 162
165 shouldBeEqualToNumber("entries[6].intersectionRect.top", 0); 163 function step7() {
166 shouldBeEqualToNumber("entries[6].intersectionRect.bottom", 8); 164 entries = entries.concat(observer.takeRecords());
167 shouldBeEqualToNumber("entries[6].rootBounds.left", 0); 165 shouldBeEqualToNumber("entries.length", 7);
168 shouldBeEqualToNumber("entries[6].rootBounds.right", 785); 166 if (entries.length > 6) {
169 shouldBeEqualToNumber("entries[6].rootBounds.top", 0); 167 shouldBeEqualToNumber("entries[6].boundingClientRect.left", 8);
170 shouldBeEqualToNumber("entries[6].rootBounds.bottom", 600); 168 shouldBeEqualToNumber("entries[6].boundingClientRect.right", 108);
171 shouldEvaluateToSameObject("entries[6].target", target); 169 shouldBeEqualToNumber("entries[6].boundingClientRect.top", -92);
172 document.scrollingElement.scrollTop = 820; 170 shouldBeEqualToNumber("entries[6].boundingClientRect.bottom", 8);
173 requestAnimationFrame(step8); 171 shouldBeEqualToNumber("entries[6].intersectionRect.left", 8);
174 }); 172 shouldBeEqualToNumber("entries[6].intersectionRect.right", 108);
175 } 173 shouldBeEqualToNumber("entries[6].intersectionRect.top", 0);
176 174 shouldBeEqualToNumber("entries[6].intersectionRect.bottom", 8);
177 function step8() { 175 shouldBeEqualToNumber("entries[6].rootBounds.left", 0);
178 setTimeout(function() { 176 shouldBeEqualToNumber("entries[6].rootBounds.right", 785);
179 shouldBeEqualToNumber("entries.length", 8); 177 shouldBeEqualToNumber("entries[6].rootBounds.top", 0);
180 shouldBeEqualToNumber("entries[7].boundingClientRect.left", 8); 178 shouldBeEqualToNumber("entries[6].rootBounds.bottom", 600);
181 shouldBeEqualToNumber("entries[7].boundingClientRect.right", 108); 179 shouldEvaluateToSameObject("entries[6].target", target);
182 shouldBeEqualToNumber("entries[7].boundingClientRect.top", -112); 180 }
183 shouldBeEqualToNumber("entries[7].boundingClientRect.bottom", -12); 181 document.scrollingElement.scrollTop = 820;
184 shouldBeEqualToNumber("entries[7].intersectionRect.left", 0); 182 requestAnimationFrame(step8);
185 shouldBeEqualToNumber("entries[7].intersectionRect.right", 0); 183 }
186 shouldBeEqualToNumber("entries[7].intersectionRect.top", 0); 184
187 shouldBeEqualToNumber("entries[7].intersectionRect.bottom", 0); 185 function step8() {
188 shouldBeEqualToNumber("entries[7].rootBounds.left", 0); 186 entries = entries.concat(observer.takeRecords());
189 shouldBeEqualToNumber("entries[7].rootBounds.right", 785); 187 shouldBeEqualToNumber("entries.length", 8);
190 shouldBeEqualToNumber("entries[7].rootBounds.top", 0); 188 if (entries.length > 7) {
191 shouldBeEqualToNumber("entries[7].rootBounds.bottom", 600); 189 shouldBeEqualToNumber("entries[7].boundingClientRect.left", 8);
192 shouldEvaluateToSameObject("entries[7].target", target); 190 shouldBeEqualToNumber("entries[7].boundingClientRect.right", 108);
193 finishJSTest(); 191 shouldBeEqualToNumber("entries[7].boundingClientRect.top", -112);
194 document.scrollingElement.scrollTop = 0; 192 shouldBeEqualToNumber("entries[7].boundingClientRect.bottom", -12);
195 }); 193 shouldBeEqualToNumber("entries[7].intersectionRect.left", 0);
196 } 194 shouldBeEqualToNumber("entries[7].intersectionRect.right", 0);
197 195 shouldBeEqualToNumber("entries[7].intersectionRect.top", 0);
198 step0(); 196 shouldBeEqualToNumber("entries[7].intersectionRect.bottom", 0);
197 shouldBeEqualToNumber("entries[7].rootBounds.left", 0);
198 shouldBeEqualToNumber("entries[7].rootBounds.right", 785);
199 shouldBeEqualToNumber("entries[7].rootBounds.top", 0);
200 shouldBeEqualToNumber("entries[7].rootBounds.bottom", 600);
201 shouldEvaluateToSameObject("entries[7].target", target);
202 }
203 finishJSTest();
204 document.scrollingElement.scrollTop = 0;
205 }
199 </script> 206 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698