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

Side by Side Diff: third_party/WebKit/Source/web/tests/DeferredLoadingTest.cpp

Issue 2516473002: Cross-origin iframes: collect data under hypothetical loading strategies (Closed)
Patch Set: rebase Created 3 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 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/testing/HistogramTester.h" 5 #include "platform/testing/HistogramTester.h"
6 #include "platform/testing/UnitTestHelpers.h" 6 #include "platform/testing/UnitTestHelpers.h"
7 #include "web/WebLocalFrameImpl.h"
7 #include "web/WebViewImpl.h" 8 #include "web/WebViewImpl.h"
8 #include "web/tests/sim/SimCompositor.h" 9 #include "web/tests/sim/SimCompositor.h"
9 #include "web/tests/sim/SimDisplayItemList.h" 10 #include "web/tests/sim/SimDisplayItemList.h"
10 #include "web/tests/sim/SimRequest.h" 11 #include "web/tests/sim/SimRequest.h"
11 #include "web/tests/sim/SimTest.h" 12 #include "web/tests/sim/SimTest.h"
12 13
13 namespace blink { 14 namespace blink {
14 15
15 static const char* kHistogramName = 16 static const char* kHistogramName =
16 "Navigation.DeferredDocumentLoading.StatesV3"; 17 "Navigation.DeferredDocumentLoading.StatesV4";
17 18
18 class DeferredLoadingTest : public SimTest { 19 class DeferredLoadingTest : public SimTest {
19 protected: 20 protected:
20 DeferredLoadingTest() { webView().resize(WebSize(640, 480)); } 21 DeferredLoadingTest() { webView().resize(WebSize(640, 480)); }
21 void compositeFrame() { 22 void compositeFrame() {
22 compositor().beginFrame(); 23 while (compositor().needsBeginFrame()) {
23 testing::runPendingTasks(); 24 compositor().beginFrame();
24 if (compositor().needsBeginFrame()) 25 testing::runPendingTasks();
25 compositor().beginFrame(); // VisibleNestedInRight doesn't need this. 26 }
26 ASSERT_FALSE(compositor().needsBeginFrame());
27 } 27 }
28 28
29 std::unique_ptr<SimRequest> createMainResource() { 29 std::unique_ptr<SimRequest> createMainResource() {
30 std::unique_ptr<SimRequest> mainResource = 30 std::unique_ptr<SimRequest> mainResource =
31 WTF::wrapUnique(new SimRequest("https://example.com/", "text/html")); 31 WTF::wrapUnique(new SimRequest("https://example.com/", "text/html"));
32 loadURL("https://example.com/"); 32 loadURL("https://example.com/");
33 return mainResource; 33 return mainResource;
34 } 34 }
35 }; 35 };
36 36
37 TEST_F(DeferredLoadingTest, Visible) { 37 TEST_F(DeferredLoadingTest, Visible) {
38 HistogramTester histogramTester; 38 HistogramTester histogramTester;
39 std::unique_ptr<SimRequest> mainResource = createMainResource(); 39 std::unique_ptr<SimRequest> mainResource = createMainResource();
40 40
41 mainResource->complete("<iframe sandbox></iframe>"); 41 mainResource->complete("<iframe sandbox></iframe>");
42 42
43 compositeFrame(); 43 compositeFrame();
44 44
45 histogramTester.expectBucketCount(kHistogramName, Created, 1); 45 histogramTester.expectBucketCount(kHistogramName, Created, 1);
46 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); 46 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
47 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
48 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
49 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
50 histogramTester.expectTotalCount(kHistogramName, 5);
47 } 51 }
48 52
49 TEST_F(DeferredLoadingTest, Right) { 53 TEST_F(DeferredLoadingTest, Right) {
50 HistogramTester histogramTester; 54 HistogramTester histogramTester;
51 std::unique_ptr<SimRequest> mainResource = createMainResource(); 55 std::unique_ptr<SimRequest> mainResource = createMainResource();
52 56
53 mainResource->complete( 57 mainResource->complete(
54 "<iframe style='position:absolute; left:105vw;' sandbox></iframe>"); 58 "<iframe style='position:absolute; left:105vw;' sandbox></iframe>");
55 59
56 compositeFrame(); 60 compositeFrame();
57 61
58 histogramTester.expectBucketCount(kHistogramName, Created, 1); 62 histogramTester.expectBucketCount(kHistogramName, Created, 1);
59 histogramTester.expectTotalCount(kHistogramName, 1); 63 histogramTester.expectTotalCount(kHistogramName, 1);
60 } 64 }
61 65
62 TEST_F(DeferredLoadingTest, Below) { 66 TEST_F(DeferredLoadingTest, TwoScreensBelow) {
63 HistogramTester histogramTester; 67 HistogramTester histogramTester;
64 std::unique_ptr<SimRequest> mainResource = createMainResource(); 68 std::unique_ptr<SimRequest> mainResource = createMainResource();
65 69
66 mainResource->complete( 70 mainResource->complete(
67 "<iframe style='position:absolute; top:105vh;' sandbox></iframe>"); 71 "<iframe style='position:absolute; top:205vh;' sandbox></iframe>");
68 72
69 compositeFrame(); 73 compositeFrame();
70 74
71 histogramTester.expectBucketCount(kHistogramName, Created, 1); 75 histogramTester.expectBucketCount(kHistogramName, Created, 1);
72 histogramTester.expectTotalCount(kHistogramName, 1); 76 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
77 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
78 histogramTester.expectTotalCount(kHistogramName, 3);
73 } 79 }
74 80
75 TEST_F(DeferredLoadingTest, Above) { 81 TEST_F(DeferredLoadingTest, Above) {
76 HistogramTester histogramTester; 82 HistogramTester histogramTester;
77 std::unique_ptr<SimRequest> mainResource = createMainResource(); 83 std::unique_ptr<SimRequest> mainResource = createMainResource();
78 84
79 mainResource->complete( 85 mainResource->complete(
80 "<iframe style='position:absolute; top:-10000px;' sandbox></iframe>"); 86 "<iframe style='position:absolute; top:-10000px;' sandbox></iframe>");
81 87
82 compositeFrame(); 88 compositeFrame();
83 89
84 histogramTester.expectBucketCount(kHistogramName, Created, 1); 90 histogramTester.expectBucketCount(kHistogramName, Created, 1);
85 histogramTester.expectBucketCount(kHistogramName, WouldLoadAbove, 1); 91 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
92 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
93 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
94 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
95 histogramTester.expectTotalCount(kHistogramName, 5);
86 } 96 }
87 97
88 TEST_F(DeferredLoadingTest, Left) { 98 TEST_F(DeferredLoadingTest, Left) {
89 HistogramTester histogramTester; 99 HistogramTester histogramTester;
90 std::unique_ptr<SimRequest> mainResource = createMainResource(); 100 std::unique_ptr<SimRequest> mainResource = createMainResource();
91 101
92 mainResource->complete( 102 mainResource->complete(
93 "<iframe style='position:absolute; left:-10000px;' sandbox></iframe>"); 103 "<iframe style='position:absolute; left:-10000px;' sandbox></iframe>");
94 104
95 compositeFrame(); 105 compositeFrame();
96 106
97 histogramTester.expectBucketCount(kHistogramName, Created, 1); 107 histogramTester.expectBucketCount(kHistogramName, Created, 1);
98 histogramTester.expectBucketCount(kHistogramName, WouldLoadLeft, 1); 108 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
109 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
110 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
111 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
112 histogramTester.expectTotalCount(kHistogramName, 5);
99 } 113 }
100 114
101 TEST_F(DeferredLoadingTest, AboveAndLeft) { 115 TEST_F(DeferredLoadingTest, AboveAndLeft) {
102 HistogramTester histogramTester; 116 HistogramTester histogramTester;
103 std::unique_ptr<SimRequest> mainResource = createMainResource(); 117 std::unique_ptr<SimRequest> mainResource = createMainResource();
104 118
105 mainResource->complete( 119 mainResource->complete(
106 "<iframe style='position:absolute; left:-10000px; top:-10000px' sandbox>" 120 "<iframe style='position:absolute; left:-10000px; top:-10000px' sandbox>"
107 "</iframe>"); 121 "</iframe>");
108 122
109 compositeFrame(); 123 compositeFrame();
110 124
111 histogramTester.expectBucketCount(kHistogramName, Created, 1); 125 histogramTester.expectBucketCount(kHistogramName, Created, 1);
112 histogramTester.expectBucketCount(kHistogramName, WouldLoadAboveAndLeft, 1); 126 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
113 histogramTester.expectTotalCount(kHistogramName, 2); 127 histogramTester.expectTotalCount(kHistogramName, 5);
114 } 128 }
115 129
116 TEST_F(DeferredLoadingTest, ZeroByZero) { 130 TEST_F(DeferredLoadingTest, ZeroByZero) {
117 HistogramTester histogramTester; 131 HistogramTester histogramTester;
118 std::unique_ptr<SimRequest> mainResource = createMainResource(); 132 std::unique_ptr<SimRequest> mainResource = createMainResource();
119 133
120 mainResource->complete( 134 mainResource->complete(
121 "<iframe style='height:0px;width:0px;' sandbox></iframe>"); 135 "<iframe style='height:0px;width:0px;' sandbox></iframe>");
122 136
123 compositeFrame(); 137 compositeFrame();
124 138
125 histogramTester.expectBucketCount(kHistogramName, Created, 1); 139 histogramTester.expectBucketCount(kHistogramName, Created, 1);
126 histogramTester.expectBucketCount(kHistogramName, WouldLoadZeroByZero, 1); 140 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
127 } 141 }
128 142
129 TEST_F(DeferredLoadingTest, DisplayNone) { 143 TEST_F(DeferredLoadingTest, DisplayNone) {
130 HistogramTester histogramTester; 144 HistogramTester histogramTester;
131 std::unique_ptr<SimRequest> mainResource = createMainResource(); 145 std::unique_ptr<SimRequest> mainResource = createMainResource();
132 146
133 mainResource->complete("<iframe style='display:none' sandbox></iframe>"); 147 mainResource->complete("<iframe style='display:none' sandbox></iframe>");
134 148
135 compositeFrame(); 149 compositeFrame();
136 150
137 histogramTester.expectBucketCount(kHistogramName, Created, 1); 151 histogramTester.expectBucketCount(kHistogramName, Created, 1);
138 histogramTester.expectBucketCount(kHistogramName, WouldLoadDisplayNone, 1); 152 histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1);
153 histogramTester.expectTotalCount(kHistogramName, 6);
139 } 154 }
140 155
141 TEST_F(DeferredLoadingTest, VisibleNestedInRight) { 156 TEST_F(DeferredLoadingTest, DisplayNoneIn2ScreensBelow) {
142 HistogramTester histogramTester; 157 HistogramTester histogramTester;
143 std::unique_ptr<SimRequest> mainResource = createMainResource(); 158 std::unique_ptr<SimRequest> mainResource = createMainResource();
144 SimRequest frameResource("https://example.com/iframe.html", "text/html"); 159 SimRequest frameResource("https://example.com/iframe.html", "text/html");
145 160
146 mainResource->complete( 161 mainResource->complete(
147 "<iframe style='position:absolute; left:105vw;' src='iframe.html' " 162 "<iframe style='position:absolute; top:205vh' "
148 "sandbox></iframe>"); 163 "src='iframe.html' sandbox></iframe>");
149 frameResource.complete("<iframe sandbox></iframe>"); 164 frameResource.complete("<iframe style='display:none' sandbox></iframe>");
150 165
151 compositeFrame(); 166 compositeFrame();
152 167
153 histogramTester.expectBucketCount(kHistogramName, Created, 2); 168 histogramTester.expectBucketCount(kHistogramName, Created, 2);
154 histogramTester.expectTotalCount(kHistogramName, 2); 169 histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1);
170 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
171 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
172 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 2);
173 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2);
174 histogramTester.expectTotalCount(kHistogramName, 9);
155 } 175 }
156 176
157 TEST_F(DeferredLoadingTest, LeftNestedInBelow) { 177 TEST_F(DeferredLoadingTest, LeftNestedInBelow) {
158 HistogramTester histogramTester; 178 HistogramTester histogramTester;
159 std::unique_ptr<SimRequest> mainResource = createMainResource(); 179 std::unique_ptr<SimRequest> mainResource = createMainResource();
160 SimRequest frameResource("https://example.com/iframe.html", "text/html"); 180 SimRequest frameResource("https://example.com/iframe.html", "text/html");
161 181
162 mainResource->complete( 182 mainResource->complete(
163 "<iframe style='position:absolute; top:105vh;' src='iframe.html' " 183 "<iframe style='position:absolute; top:105vh;' src='iframe.html' "
164 "sandbox></iframe>"); 184 "sandbox></iframe>");
165 frameResource.complete( 185 frameResource.complete(
166 "<iframe style='position:absolute; left:-10000px;' sandbox></iframe>"); 186 "<iframe style='position:absolute; left:-10000px;' sandbox></iframe>");
167 187
168 compositeFrame(); 188 compositeFrame();
169 189
170 histogramTester.expectBucketCount(kHistogramName, Created, 2); 190 histogramTester.expectBucketCount(kHistogramName, Created, 2);
171 histogramTester.expectTotalCount(kHistogramName, 2); 191 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 2);
192 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 2);
193 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2);
194 histogramTester.expectTotalCount(kHistogramName, 8);
195 }
196
197 TEST_F(DeferredLoadingTest, OneScreenBelowThenScriptedVisible) {
198 HistogramTester histogramTester;
199 std::unique_ptr<SimRequest> mainResource = createMainResource();
200
201 mainResource->start();
202 mainResource->write(
203 "<iframe id='theFrame' style='position:absolute; top:105vh;' "
204 "sandbox></iframe>");
205
206 compositeFrame();
207
208 histogramTester.expectBucketCount(kHistogramName, Created, 1);
209 histogramTester.expectTotalCount(kHistogramName, 4);
210
211 mainResource->write("<script>theFrame.style.top='10px'</script>");
212 mainResource->finish();
213
214 compositeFrame();
215
216 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
217 histogramTester.expectTotalCount(kHistogramName, 5);
218 }
219
220 TEST_F(DeferredLoadingTest, OneScreenBelowThenScrolledVisible) {
221 HistogramTester histogramTester;
222 std::unique_ptr<SimRequest> mainResource = createMainResource();
223
224 mainResource->complete(
225 "<iframe id='theFrame' style='position:absolute; top:105vh; height:10px' "
226 "sandbox></iframe>");
227
228 compositeFrame();
229
230 histogramTester.expectBucketCount(kHistogramName, Created, 1);
231 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
232 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
233 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
234 histogramTester.expectTotalCount(kHistogramName, 4);
235
236 mainFrame().setScrollOffset(WebSize(0, 50));
237
238 compositeFrame();
239
240 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
241 histogramTester.expectTotalCount(kHistogramName, 5);
242 }
243
244 TEST_F(DeferredLoadingTest, DisplayNoneThenTwoScreensAway) {
245 HistogramTester histogramTester;
246 std::unique_ptr<SimRequest> mainResource = createMainResource();
247
248 mainResource->start();
249 mainResource->write(
250 "<iframe id='theFrame' style='display:none' sandbox></iframe>");
251
252 compositeFrame();
253
254 histogramTester.expectBucketCount(kHistogramName, Created, 1);
255 histogramTester.expectTotalCount(kHistogramName, 6);
256
257 mainResource->write(
258 "<script>theFrame.style.top='200vh';"
259 "theFrame.style.position='absolute';"
260 "theFrame.style.display='block';</script>");
261 mainResource->finish();
262
263 compositeFrame();
264
265 histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1);
266 histogramTester.expectTotalCount(kHistogramName, 6);
267 }
268
269 TEST_F(DeferredLoadingTest, DisplayNoneAsync) {
270 HistogramTester histogramTester;
271 std::unique_ptr<SimRequest> mainResource = createMainResource();
272
273 mainResource->start();
274 mainResource->write("some stuff");
275
276 compositeFrame();
277
278 mainResource->write(
279 "<script>frame = document.createElement('iframe');"
280 "frame.setAttribute('sandbox', true);"
281 "frame.style.display = 'none';"
282 "document.body.appendChild(frame);"
283 "</script>");
284 mainResource->finish();
285
286 compositeFrame();
287
288 histogramTester.expectBucketCount(kHistogramName, Created, 1);
289 histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1);
290 histogramTester.expectTotalCount(kHistogramName, 6);
291 }
292
293 TEST_F(DeferredLoadingTest, TwoScreensAwayThenDisplayNoneThenNew) {
294 HistogramTester histogramTester;
295 std::unique_ptr<SimRequest> mainResource = createMainResource();
296
297 mainResource->start();
298 mainResource->write(
299 "<iframe id='theFrame' style='position:absolute; top:205vh' sandbox>"
300 "</iframe>");
301
302 compositeFrame();
303
304 histogramTester.expectBucketCount(kHistogramName, Created, 1);
305 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
306 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
307 histogramTester.expectTotalCount(kHistogramName, 3);
308
309 mainResource->write("<script>theFrame.style.display='none'</script>");
310
311 compositeFrame();
312
313 histogramTester.expectTotalCount(kHistogramName, 6);
314
315 mainResource->write(
316 "<script>document.body.appendChild(document.createElement"
317 "('iframe'));</script>");
318 mainResource->finish();
319
320 compositeFrame();
321
322 histogramTester.expectBucketCount(kHistogramName, Created, 1);
323 histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1);
324 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
325 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
326 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
327 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
328 histogramTester.expectTotalCount(kHistogramName, 6);
172 } 329 }
173 330
174 TEST_F(DeferredLoadingTest, SameOriginNotCounted) { 331 TEST_F(DeferredLoadingTest, SameOriginNotCounted) {
175 HistogramTester histogramTester; 332 HistogramTester histogramTester;
176 std::unique_ptr<SimRequest> mainResource = createMainResource(); 333 std::unique_ptr<SimRequest> mainResource = createMainResource();
177 SimRequest frameResource("https://example.com/iframe.html", "text/html"); 334 SimRequest frameResource("https://example.com/iframe.html", "text/html");
178 335
179 mainResource->complete("<iframe src='iframe.html'></iframe>"); 336 mainResource->complete("<iframe src='iframe.html'></iframe>");
180 frameResource.complete("<iframe></iframe>"); 337 frameResource.complete("<iframe></iframe>");
181 compositeFrame(); 338 compositeFrame();
182 339
183 histogramTester.expectTotalCount(kHistogramName, 0); 340 histogramTester.expectTotalCount(kHistogramName, 0);
184 } 341 }
185 342
343 TEST_F(DeferredLoadingTest, AboveNestedInThreeScreensBelow) {
344 HistogramTester histogramTester;
345 std::unique_ptr<SimRequest> mainResource = createMainResource();
346 SimRequest frameResource("https://example.com/iframe.html", "text/html");
347
348 mainResource->complete(
349 "<iframe style='position:absolute; top:300vh' src='iframe.html' "
350 "sandbox></iframe>");
351 frameResource.complete(
352 "<iframe style='position:absolute; top:-10000px;' sandbox></iframe>");
353
354 compositeFrame();
355
356 histogramTester.expectBucketCount(kHistogramName, Created, 2);
357 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2);
358 histogramTester.expectTotalCount(kHistogramName, 4);
359 }
360
361 TEST_F(DeferredLoadingTest, VisibleNestedInTwoScreensBelow) {
362 HistogramTester histogramTester;
363 std::unique_ptr<SimRequest> mainResource = createMainResource();
364 SimRequest frameResource("https://example.com/iframe.html", "text/html");
365
366 mainResource->complete(
367 "<iframe style='position:absolute; top:205vh' src='iframe.html' "
368 "sandbox></iframe>");
369 frameResource.complete("<iframe sandbox></iframe>");
370
371 compositeFrame();
372
373 histogramTester.expectBucketCount(kHistogramName, Created, 2);
374 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 2);
375 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2);
376 histogramTester.expectTotalCount(kHistogramName, 6);
377 }
378
379 TEST_F(DeferredLoadingTest, ThreeScreensBelowNestedInTwoScreensBelow) {
380 HistogramTester histogramTester;
381 std::unique_ptr<SimRequest> mainResource = createMainResource();
382 SimRequest frameResource("https://example.com/iframe.html", "text/html");
383
384 mainResource->complete(
385 "<iframe style='position:absolute; top:205vh' src='iframe.html' "
386 "sandbox></iframe>");
387 frameResource.complete(
388 "<iframe style='position:absolute; top:305vh' sandbox></iframe>");
389
390 compositeFrame();
391
392 histogramTester.expectBucketCount(kHistogramName, Created, 2);
393 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
394 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
395 histogramTester.expectTotalCount(kHistogramName, 4);
396 }
397
398 TEST_F(DeferredLoadingTest, TriplyNested) {
399 HistogramTester histogramTester;
400 std::unique_ptr<SimRequest> mainResource = createMainResource();
401 SimRequest frameResource("https://example.com/iframe.html", "text/html");
402 SimRequest frameResource2("https://example.com/iframe2.html", "text/html");
403
404 mainResource->complete(
405 "<iframe style='position:absolute; top:300vh' src='iframe.html' "
406 "sandbox></iframe>");
407 frameResource.complete(
408 "<iframe style='position:absolute; top:200vh' src='iframe2.html' "
409 "sandbox></iframe>");
410 frameResource2.complete(
411 "<iframe style='position:absolute; top:100vh' sandbox></iframe>");
412
413 compositeFrame();
414
415 histogramTester.expectBucketCount(kHistogramName, Created, 3);
416 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
417 histogramTester.expectTotalCount(kHistogramName, 4);
418 }
419
420 TEST_F(DeferredLoadingTest, NestedFramesOfVariousSizes) {
421 HistogramTester histogramTester;
422 std::unique_ptr<SimRequest> mainResource = createMainResource();
423 SimRequest frameResource("https://example.com/iframe.html", "text/html");
424 SimRequest frameResource2("https://example.com/iframe2.html", "text/html");
425 SimRequest frameResource3("https://example.com/iframe3.html", "text/html");
426
427 mainResource->complete(
428 "<iframe style='position:absolute; top:50vh; height:10px;'"
429 "src='iframe.html' sandbox></iframe>");
430 frameResource.complete(
431 "<iframe style='position:absolute; top:200vh; height:100px;'"
432 "src='iframe2.html' sandbox></iframe>");
433 frameResource2.complete(
434 "<iframe style='position:absolute; top:100vh; height:50px;'"
435 "src='iframe3.html' sandbox></iframe>");
436 frameResource3.complete(
437 "<iframe style='position:absolute; top:100vh' sandbox></iframe>");
438 compositeFrame();
439
440 histogramTester.expectBucketCount(kHistogramName, Created, 4);
441 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
442 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
443 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 2);
444 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 3);
445 histogramTester.expectTotalCount(kHistogramName, 11);
446 }
447
448 TEST_F(DeferredLoadingTest, FourScreensBelow) {
449 HistogramTester histogramTester;
450 std::unique_ptr<SimRequest> mainResource = createMainResource();
451
452 mainResource->complete(
453 "<iframe style='position:absolute; top:405vh;' sandbox></iframe>");
454
455 compositeFrame();
456
457 histogramTester.expectBucketCount(kHistogramName, Created, 1);
458 histogramTester.expectTotalCount(kHistogramName, 1);
459 }
460
461 TEST_F(DeferredLoadingTest, TallIFrameStartsAbove) {
462 HistogramTester histogramTester;
463 std::unique_ptr<SimRequest> mainResource = createMainResource();
464
465 mainResource->complete(
466 "<iframe style='position:absolute; top:-150vh; height:200vh;' sandbox>"
467 "</iframe>");
468
469 compositeFrame();
470
471 histogramTester.expectBucketCount(kHistogramName, Created, 1);
472 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
473 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
474 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
475 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
476 histogramTester.expectTotalCount(kHistogramName, 5);
477 }
478
479 TEST_F(DeferredLoadingTest, OneDownAndOneRight) {
480 HistogramTester histogramTester;
481 std::unique_ptr<SimRequest> mainResource = createMainResource();
482
483 mainResource->complete(
484 "<iframe style='position:absolute; left:100vw; top:100vh' sandbox>"
485 "</iframe>");
486
487 compositeFrame();
488
489 histogramTester.expectBucketCount(kHistogramName, Created, 1);
490 histogramTester.expectTotalCount(kHistogramName, 1);
491 }
492
493 TEST_F(DeferredLoadingTest, VisibleCrossOriginNestedInBelowFoldSameOrigin) {
494 HistogramTester histogramTester;
495 std::unique_ptr<SimRequest> mainResource = createMainResource();
496 SimRequest frameResource("https://example.com/iframe.html", "text/html");
497
498 mainResource->complete(
499 "<iframe style='position:absolute; top:105vh' src='iframe.html'>"
500 "</iframe>");
501 frameResource.complete("<iframe sandbox></iframe>");
502
503 compositeFrame();
504
505 histogramTester.expectBucketCount(kHistogramName, Created, 1);
506 histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1);
507 histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1);
508 histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1);
509 histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1);
510 histogramTester.expectTotalCount(kHistogramName, 5);
511 }
512
186 } // namespace blink 513 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698