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

Unified Diff: third_party/WebKit/Source/web/tests/WebFrameTest.cpp

Issue 2519163003: LayoutView's paint layer should clip to the full viewport size. (Closed)
Patch Set: Add test Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/web/tests/VisualViewportTest.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/web/tests/WebFrameTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
index 190c5c7e242c96804b85905e39ea7b9278c24185..6689a6c19441b56cb2de027f66cf962fc4761e32 100644
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -10367,6 +10367,76 @@ TEST_F(WebFrameTest, ImageDocumentDecodeError) {
toImageDocument(document)->cachedImage()->getStatus());
}
+// Ensure that the root layer -- whose size is ordinarily derived from the
+// content size -- maintains a minimum height matching the viewport in cases
+// where the content is smaller.
+TEST_F(WebFrameTest, RootLayerMinimumHeight) {
+ constexpr int viewportWidth = 320;
+ constexpr int viewportHeight = 640;
+ constexpr int browserControlsHeight = 100;
+
+ FrameTestHelpers::WebViewHelper webViewHelper;
+ webViewHelper.initialize(true, nullptr, nullptr, nullptr,
+ enableViewportSettings);
+ WebViewImpl* webView = webViewHelper.webView();
+ webView->resizeWithBrowserControls(
+ WebSize(viewportWidth, viewportHeight - browserControlsHeight),
+ browserControlsHeight, true);
+
+ initializeWithHTML(*webView->mainFrameImpl()->frame(),
+ "<!DOCTYPE html>"
+ "<style>"
+ " html, body {width:100%;height:540px;margin:0px}"
+ " #elem {"
+ " overflow: scroll;"
+ " width: 100px;"
+ " height: 10px;"
+ " position: fixed;"
+ " left: 0px;"
+ " bottom: 0px;"
+ " }"
+ "</style>"
+ "<div id='elem'></div>");
+ webView->updateAllLifecyclePhases();
+
+ Document* document = webView->mainFrameImpl()->frame()->document();
+ FrameView* frameView = webView->mainFrameImpl()->frameView();
+ PaintLayerCompositor* compositor = frameView->layoutViewItem().compositor();
+
+ EXPECT_EQ(viewportHeight - browserControlsHeight,
+ compositor->rootLayer()->boundingBoxForCompositing().height());
+
+ document->view()->setTracksPaintInvalidations(true);
+
+ webView->resizeWithBrowserControls(WebSize(viewportWidth, viewportHeight),
+ browserControlsHeight, false);
+
+ EXPECT_EQ(viewportHeight,
+ compositor->rootLayer()->boundingBoxForCompositing().height());
+ EXPECT_EQ(viewportHeight,
+ compositor->rootLayer()->graphicsLayerBacking()->size().height());
+ EXPECT_EQ(viewportHeight, compositor->rootGraphicsLayer()->size().height());
+
+ const RasterInvalidationTracking* invalidationTracking =
+ document->layoutView()
+ ->layer()
+ ->graphicsLayerBacking()
+ ->getRasterInvalidationTracking();
+ ASSERT_TRUE(invalidationTracking);
+ const auto* rasterInvalidations =
+ &invalidationTracking->trackedRasterInvalidations;
+
+ // The newly revealed content at the bottom of the screen should have been
+ // invalidated. There are additional invalidations for the position: fixed
+ // element.
+ EXPECT_GT(rasterInvalidations->size(), 0u);
+ EXPECT_TRUE((*rasterInvalidations)[0].rect.contains(
+ IntRect(0, viewportHeight - browserControlsHeight, viewportWidth,
+ browserControlsHeight)));
+
+ document->view()->setTracksPaintInvalidations(false);
+}
+
// Load a page with display:none set and try to scroll it. It shouldn't crash
// due to lack of layoutObject. crbug.com/653327.
TEST_F(WebFrameTest, ScrollBeforeLayoutDoesntCrash) {
« no previous file with comments | « third_party/WebKit/Source/web/tests/VisualViewportTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698