| 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..5bce5a139501596ed24ffef1731c056deb798103 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) {
|
| @@ -59,17 +62,19 @@ TEST_F(DeferredLoadingTest, Right) {
|
| histogramTester.expectTotalCount(kHistogramName, 1);
|
| }
|
|
|
| -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 +87,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 +104,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 +122,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 +136,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 +148,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, DisplayNoneIn2ScreensBelow) {
|
| 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; top:205vh' "
|
| + "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 +187,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);
|
| + 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 +318,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
|
|
|