Chromium Code Reviews| Index: third_party/WebKit/Source/web/tests/DeferredLoadingTest.cpp |
| diff --git a/third_party/WebKit/Source/web/tests/DeferredLoadingTest.cpp b/third_party/WebKit/Source/web/tests/DeferredLoadingTest.cpp |
| index aba9e636a92dcd006f6b3b6a58d4d718a849580f..ebc4c3bdcfa5752889b70590d365d646ebb67a7d 100644 |
| --- a/third_party/WebKit/Source/web/tests/DeferredLoadingTest.cpp |
| +++ b/third_party/WebKit/Source/web/tests/DeferredLoadingTest.cpp |
| @@ -13,17 +13,16 @@ |
| namespace blink { |
| static const char* kHistogramName = |
| - "Navigation.DeferredDocumentLoading.StatesV3"; |
| + "Navigation.DeferredDocumentLoading.StatesV4"; |
| class DeferredLoadingTest : public SimTest { |
| protected: |
| DeferredLoadingTest() { webView().resize(WebSize(640, 480)); } |
| void compositeFrame() { |
| - compositor().beginFrame(); |
| - testing::runPendingTasks(); |
| - if (compositor().needsBeginFrame()) |
| - compositor().beginFrame(); // VisibleNestedInRight doesn't need this. |
| - ASSERT_FALSE(compositor().needsBeginFrame()); |
| + while (compositor().needsBeginFrame()) { |
| + compositor().beginFrame(); |
| + testing::runPendingTasks(); |
| + } |
| } |
| std::unique_ptr<SimRequest> createMainResource() { |
| @@ -44,6 +43,10 @@ TEST_F(DeferredLoadingTest, Visible) { |
| histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 5); |
| } |
| TEST_F(DeferredLoadingTest, Right) { |
| @@ -56,20 +59,25 @@ TEST_F(DeferredLoadingTest, Right) { |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| - histogramTester.expectTotalCount(kHistogramName, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 4); |
| } |
| -TEST_F(DeferredLoadingTest, Below) { |
| +TEST_F(DeferredLoadingTest, TwoScreensBelow) { |
| HistogramTester histogramTester; |
| std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| mainResource->complete( |
| - "<iframe style='position:absolute; top:105vh;' sandbox></iframe>"); |
| + "<iframe style='position:absolute; top:205vh;' sandbox></iframe>"); |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| - histogramTester.expectTotalCount(kHistogramName, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 3); |
| } |
| TEST_F(DeferredLoadingTest, Above) { |
| @@ -82,7 +90,11 @@ TEST_F(DeferredLoadingTest, Above) { |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| - histogramTester.expectBucketCount(kHistogramName, WouldLoadAbove, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 5); |
| } |
| TEST_F(DeferredLoadingTest, Left) { |
| @@ -95,7 +107,11 @@ TEST_F(DeferredLoadingTest, Left) { |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| - histogramTester.expectBucketCount(kHistogramName, WouldLoadLeft, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 5); |
| } |
| TEST_F(DeferredLoadingTest, AboveAndLeft) { |
| @@ -109,8 +125,8 @@ TEST_F(DeferredLoadingTest, AboveAndLeft) { |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| - histogramTester.expectBucketCount(kHistogramName, WouldLoadAboveAndLeft, 1); |
| - histogramTester.expectTotalCount(kHistogramName, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 5); |
| } |
| TEST_F(DeferredLoadingTest, ZeroByZero) { |
| @@ -123,7 +139,7 @@ TEST_F(DeferredLoadingTest, ZeroByZero) { |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| - histogramTester.expectBucketCount(kHistogramName, WouldLoadZeroByZero, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| } |
| TEST_F(DeferredLoadingTest, DisplayNone) { |
| @@ -135,23 +151,29 @@ TEST_F(DeferredLoadingTest, DisplayNone) { |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| - histogramTester.expectBucketCount(kHistogramName, WouldLoadDisplayNone, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 6); |
| } |
| -TEST_F(DeferredLoadingTest, VisibleNestedInRight) { |
| +TEST_F(DeferredLoadingTest, DisplayNoneIn2ScreensAway) { |
| HistogramTester histogramTester; |
| std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| SimRequest frameResource("https://example.com/iframe.html", "text/html"); |
| mainResource->complete( |
| - "<iframe style='position:absolute; left:105vw;' src='iframe.html' " |
| - "sandbox></iframe>"); |
| - frameResource.complete("<iframe sandbox></iframe>"); |
| + "<iframe style='position:absolute; left:105vw; top:105vh' " |
| + "src='iframe.html' sandbox></iframe>"); |
| + frameResource.complete("<iframe style='display:none' sandbox></iframe>"); |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 2); |
| - histogramTester.expectTotalCount(kHistogramName, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2); |
| + histogramTester.expectTotalCount(kHistogramName, 9); |
| } |
| TEST_F(DeferredLoadingTest, LeftNestedInBelow) { |
| @@ -168,7 +190,123 @@ TEST_F(DeferredLoadingTest, LeftNestedInBelow) { |
| compositeFrame(); |
| histogramTester.expectBucketCount(kHistogramName, Created, 2); |
| - histogramTester.expectTotalCount(kHistogramName, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2); |
| + histogramTester.expectTotalCount(kHistogramName, 8); |
| +} |
| + |
| +TEST_F(DeferredLoadingTest, OneScreenBelowThenVisible) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + |
| + mainResource->start(); |
| + mainResource->write( |
| + "<iframe id='theFrame' style='position:absolute; top:105vh;' " |
| + "sandbox></iframe>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 4); |
| + |
| + mainResource->write("<script>theFrame.style.top='10px'</script>"); |
| + mainResource->finish(); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 5); |
| +} |
| + |
| +TEST_F(DeferredLoadingTest, DisplayNoneThenTwoScreensAway) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + |
| + mainResource->start(); |
| + mainResource->write( |
| + "<iframe id='theFrame' style='display:none' sandbox></iframe>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 6); |
| + |
| + mainResource->write( |
| + "<script>theFrame.style.top='200vh';" |
| + "theFrame.style.position='absolute';" |
| + "theFrame.style.display='block';</script>"); |
| + mainResource->finish(); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1); |
|
ojan
2016/11/22 00:41:59
This test doesn't seem to be testing the two scree
dgrogan
2016/11/29 00:57:32
It's testing that the 3screen and 2screen buckets
|
| + histogramTester.expectTotalCount(kHistogramName, 6); |
| +} |
| + |
| +TEST_F(DeferredLoadingTest, DisplayNoneAsync) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + |
| + mainResource->start(); |
| + mainResource->write("some stuff"); |
| + |
| + compositeFrame(); |
| + |
| + mainResource->write( |
| + "<script>frame = document.createElement('iframe');" |
| + "frame.setAttribute('sandbox', true);" |
| + "frame.style.display = 'none';" |
| + "document.body.appendChild(frame);" |
| + "</script>"); |
| + mainResource->finish(); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 6); |
| +} |
| + |
| +// Documents some weird counting with display:none frames: If a frame changes to |
| +// display:none we don't count it as such until another frame is created. This |
| +// is hopefully rare in practice though. |
| +TEST_F(DeferredLoadingTest, TwoScreensAwayThenDisplayNoneThenNew) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + |
| + mainResource->start(); |
| + mainResource->write( |
| + "<iframe id='theFrame' style='position:absolute; top:205vh' sandbox>" |
| + "</iframe>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 3); |
| + |
| + mainResource->write("<script>theFrame.style.display='none'</script>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectTotalCount(kHistogramName, 3); |
| + |
| + mainResource->write( |
| + "<script>document.body.appendChild(document.createElement" |
| + "('iframe'));</script>"); |
| + mainResource->finish(); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadNoParent, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 6); |
| } |
| TEST_F(DeferredLoadingTest, SameOriginNotCounted) { |
| @@ -183,4 +321,126 @@ TEST_F(DeferredLoadingTest, SameOriginNotCounted) { |
| histogramTester.expectTotalCount(kHistogramName, 0); |
| } |
| +TEST_F(DeferredLoadingTest, AboveNestedInThreeScreensBelow) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + SimRequest frameResource("https://example.com/iframe.html", "text/html"); |
| + |
| + mainResource->complete( |
| + "<iframe style='position:absolute; top:300vh' src='iframe.html' " |
| + "sandbox></iframe>"); |
| + frameResource.complete( |
| + "<iframe style='position:absolute; top:-10000px;' sandbox></iframe>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2); |
| + histogramTester.expectTotalCount(kHistogramName, 4); |
| +} |
| + |
| +TEST_F(DeferredLoadingTest, VisibleNestedInTwoScreensBelow) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + SimRequest frameResource("https://example.com/iframe.html", "text/html"); |
| + |
| + mainResource->complete( |
| + "<iframe style='position:absolute; top:205vh' src='iframe.html' " |
| + "sandbox></iframe>"); |
| + frameResource.complete("<iframe sandbox></iframe>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2); |
| + histogramTester.expectTotalCount(kHistogramName, 6); |
| +} |
| + |
| +TEST_F(DeferredLoadingTest, ThreeScreensBelowNestedInTwoScreensBelow) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + SimRequest frameResource("https://example.com/iframe.html", "text/html"); |
| + |
| + mainResource->complete( |
| + "<iframe style='position:absolute; top:205vh' src='iframe.html' " |
| + "sandbox></iframe>"); |
| + frameResource.complete( |
| + "<iframe style='position:absolute; top:305vh' sandbox></iframe>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 2); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 2); |
| + histogramTester.expectTotalCount(kHistogramName, 5); |
| +} |
| + |
| +TEST_F(DeferredLoadingTest, TriplyNested) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + SimRequest frameResource("https://example.com/iframe.html", "text/html"); |
| + SimRequest frameResource2("https://example.com/iframe2.html", "text/html"); |
| + |
| + mainResource->complete( |
| + "<iframe style='position:absolute; top:300vh' src='iframe.html' " |
| + "sandbox></iframe>"); |
| + frameResource.complete( |
| + "<iframe style='position:absolute; top:200vh' src='iframe2.html' " |
| + "sandbox></iframe>"); |
| + frameResource2.complete( |
| + "<iframe style='position:absolute; top:100vh' sandbox></iframe>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 3); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 3); |
| + histogramTester.expectTotalCount(kHistogramName, 6); |
| +} |
| + |
| +TEST_F(DeferredLoadingTest, QuadruplyNested) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + SimRequest frameResource("https://example.com/iframe.html", "text/html"); |
| + SimRequest frameResource2("https://example.com/iframe2.html", "text/html"); |
| + SimRequest frameResource3("https://example.com/iframe3.html", "text/html"); |
| + |
| + mainResource->complete( |
| + "<iframe style='position:absolute; top:300vh' src='iframe.html' " |
| + "sandbox></iframe>"); |
| + frameResource.complete( |
| + "<iframe style='position:absolute; top:200vh' src='iframe2.html' " |
| + "sandbox></iframe>"); |
| + frameResource2.complete( |
| + "<iframe style='position:absolute; top:100vh' src='iframe3.html' " |
| + "sandbox></iframe>"); |
| + frameResource3.complete( |
| + "<iframe style='position:absolute; top:100vh' sandbox></iframe>"); |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 4); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 4); |
| + histogramTester.expectTotalCount(kHistogramName, 8); |
| +} |
| + |
| +TEST_F(DeferredLoadingTest, VisibleCrossOriginNestedInBelowFoldSameOrigin) { |
| + HistogramTester histogramTester; |
| + std::unique_ptr<SimRequest> mainResource = createMainResource(); |
| + SimRequest frameResource("https://example.com/iframe.html", "text/html"); |
| + |
| + mainResource->complete( |
| + "<iframe style='position:absolute; top:105vh' src='iframe.html'>" |
| + "</iframe>"); |
| + frameResource.complete("<iframe sandbox></iframe>"); |
| + |
| + compositeFrame(); |
| + |
| + histogramTester.expectBucketCount(kHistogramName, Created, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoadVisible, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad1ScreenAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad2ScreensAway, 1); |
| + histogramTester.expectBucketCount(kHistogramName, WouldLoad3ScreensAway, 1); |
| + histogramTester.expectTotalCount(kHistogramName, 5); |
| +} |
| + |
| } // namespace blink |