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

Unified Diff: third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp

Issue 1817693002: Support edge-inclusive intersections in mapToVisibleRectInAncestorSpace (Closed) Base URL: https://chromium.googlesource.com/chromium/src@intersection-observer-idle-callback
Patch Set: more tests 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
diff --git a/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp b/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
index ca38e7dbde378cc0ca7de8fdf33e9bedec7527f2..feca2dba975d9161080c5ef2148d0a8590f61b14 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
@@ -11,6 +11,9 @@
namespace blink {
class LayoutObjectTest : public RenderingTest {
+public:
+ LayoutObjectTest()
+ : RenderingTest(SingleChildFrameLoaderClient::create()) {}
protected:
LayoutView& layoutView() const { return *document().layoutView(); }
};
@@ -106,20 +109,76 @@ TEST_F(LayoutObjectTest, ContainingBlockAbsoluteLayoutObjectShouldNotBeNonStatic
EXPECT_EQ(layoutObject->containingBlock(), bodyLayoutObject);
}
-TEST_F(LayoutObjectTest, MapToVisibleRectInAncestorSpace)
+TEST_F(LayoutObjectTest, LayoutTextMapToVisibleRectInAncestorSpace)
{
setBodyInnerHTML(
- "<div id='container' style='overflow: scroll; will-change: transform; width: 50px; height: 50px'>"
+ "<style>body { margin: 0; }</style>"
+ "<div id='container' style='overflow: scroll; width: 50px; height: 50px'>"
" <span><img style='width: 20px; height: 100px'></span>"
" text text text text text text text"
"</div>");
+
LayoutBlock* container = toLayoutBlock(getLayoutObjectByElementId("container"));
LayoutText* text = toLayoutText(container->lastChild());
container->setScrollTop(LayoutUnit(50));
- LayoutRect rect(0, 60, 20, 20);
- text->mapToVisibleRectInAncestorSpace(container, rect, nullptr);
- EXPECT_TRUE(rect == LayoutRect(0, 10, 20, 20));
+ LayoutRect rect(0, 60, 20, 80);
+ EXPECT_TRUE(text->mapToVisibleRectInAncestorSpace(container, rect, nullptr));
+ EXPECT_EQ(rect, LayoutRect(0, 10, 20, 80));
+
+ rect = LayoutRect(0, 60, 80, 0);
+ EXPECT_TRUE(text->mapToVisibleRectInAncestorSpace(container, rect, nullptr, EdgeInclusive));
+ EXPECT_EQ(rect, LayoutRect(0, 10, 80, 0));
+}
+
+TEST_F(LayoutObjectTest, LayoutInlineMapToVisibleRectInAncestorSpace)
+{
+ document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com"));
+ setBodyInnerHTML(
+ "<style>body { margin: 0; }</style>"
+ "<div id='container' style='overflow: scroll; width: 50px; height: 50px'>"
+ " <span><img style='width: 20px; height: 100px'></span>"
+ " <span id=leaf></span></div>");
+
+ LayoutBlock* container = toLayoutBlock(getLayoutObjectByElementId("container"));
+ LayoutObject* leaf = container->lastChild();
+
+ container->setScrollTop(LayoutUnit(50));
+ LayoutRect rect(0, 60, 20, 80);
+ EXPECT_TRUE(leaf->mapToVisibleRectInAncestorSpace(container, rect, nullptr));
+ EXPECT_EQ(rect, LayoutRect(0, 10, 20, 80));
+
+ rect = LayoutRect(0, 60, 80, 0);
+ EXPECT_TRUE(leaf->mapToVisibleRectInAncestorSpace(container, rect, nullptr, EdgeInclusive));
+ EXPECT_EQ(rect, LayoutRect(0, 10, 80, 0));
+}
+
+TEST_F(LayoutObjectTest, LayoutViewMapToVisibleRectInAncestorSpace)
+{
+ document().setBaseURLOverride(KURL(ParsedURLString, "http://test.com"));
+ setBodyInnerHTML(
+ "<style>body { margin: 0; }</style>"
+ "<div id=frameContainer>"
+ " <iframe id=frame src='http://test.com' width='50' height='50' frameBorder='0'></iframe>"
+ "</div>");
+
+ Document& frameDocument = setupChildIframe("frame", "<style>body { margin: 0; }</style><span><img style='width: 20px; height: 100px'></span>text text text");
+ frameDocument.updateLayout();
+
+ LayoutBlock* frameContainer = toLayoutBlock(getLayoutObjectByElementId("frameContainer"));
+ LayoutBlock* frameBody = toLayoutBlock(frameDocument.body()->layoutObject());
+ LayoutText* frameText = toLayoutText(frameBody->lastChild());
+
+ // This case involves clipping: frame height is 50, y-coordinate of result rect is 13,
+ // so height should be clipped to (50 - 13) == 37.
+ frameDocument.view()->setScrollPosition(DoublePoint(0, 47), ProgrammaticScroll);
+ LayoutRect rect(4, 60, 20, 80);
+ EXPECT_TRUE(frameText->mapToVisibleRectInAncestorSpace(frameContainer, rect, nullptr));
+ EXPECT_EQ(rect, LayoutRect(4, 13, 20, 37));
+
+ rect = LayoutRect(4, 60, 0, 80);
+ EXPECT_TRUE(frameText->mapToVisibleRectInAncestorSpace(frameContainer, rect, nullptr, EdgeInclusive));
+ EXPECT_EQ(rect, LayoutRect(4, 13, 0, 37));
}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutObject.cpp ('k') | third_party/WebKit/Source/core/layout/LayoutTableCell.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698