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

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

Issue 2194913002: Ensure that we consistently check contains: paint for fixed position containment. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2785
Patch Set: Created 4 years, 5 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/MapCoordinatesTest.cpp
diff --git a/third_party/WebKit/Source/core/layout/MapCoordinatesTest.cpp b/third_party/WebKit/Source/core/layout/MapCoordinatesTest.cpp
index ee06f78ae4a5b5859d0bee3a063d0764b0e2fc7f..064108300fcf568ac4496a2ca19d2634d78b2ff7 100644
--- a/third_party/WebKit/Source/core/layout/MapCoordinatesTest.cpp
+++ b/third_party/WebKit/Source/core/layout/MapCoordinatesTest.cpp
@@ -450,6 +450,76 @@ TEST_F(MapCoordinatesTest, FixedPosInFixedPos)
EXPECT_EQ(FloatPoint(), mappedPoint);
}
+TEST_F(MapCoordinatesTest, FixedPosInTransform)
+{
+ setBodyInnerHTML("<style>#container { transform: translateY(100px); position: absolute; left: 0; top: 100px; }"
+ ".fixed { position: fixed; top: 0; }"
+ ".spacer { height: 2000px; } </style>"
+ "<div id='container'><div class='fixed' id='target'></div></div>"
+ "<div class='spacer'></div>");
+
+ document().view()->setScrollPosition(DoublePoint(0.0, 50), ProgrammaticScroll);
+ document().view()->updateAllLifecyclePhases();
+ EXPECT_EQ(50, document().view()->scrollPosition().y());
+
+ LayoutBox* target = toLayoutBox(getLayoutObjectByElementId("target"));
+ LayoutBox* container = toLayoutBox(getLayoutObjectByElementId("container"));
+ LayoutBox* body = container->parentBox();
+ LayoutBox* html = body->parentBox();
+ LayoutBox* view = html->parentBox();
+ ASSERT_TRUE(view->isLayoutView());
+
+ FloatPoint mappedPoint = mapLocalToAncestor(target, view, FloatPoint());
+ EXPECT_EQ(FloatPoint(0, 100), mappedPoint);
+ mappedPoint = mapAncestorToLocal(target, view, FloatPoint(0, 100));
+ EXPECT_EQ(FloatPoint(), mappedPoint);
+
+ mappedPoint = mapLocalToAncestor(target, container, FloatPoint());
+ EXPECT_EQ(FloatPoint(0, 0), mappedPoint);
+ mappedPoint = mapAncestorToLocal(target, container, FloatPoint(0, 0));
+ EXPECT_EQ(FloatPoint(), mappedPoint);
+
+ mappedPoint = mapLocalToAncestor(container, view, FloatPoint());
+ EXPECT_EQ(FloatPoint(0, 100), mappedPoint);
+ mappedPoint = mapAncestorToLocal(container, view, FloatPoint(0, 100));
+ EXPECT_EQ(FloatPoint(), mappedPoint);
+}
+
+TEST_F(MapCoordinatesTest, FixedPosInContainPaint)
+{
+ setBodyInnerHTML("<style>#container { contain: paint; position: absolute; left: 0; top: 100px; }"
+ ".fixed { position: fixed; top: 0; }"
+ ".spacer { height: 2000px; } </style>"
+ "<div id='container'><div class='fixed' id='target'></div></div>"
+ "<div class='spacer'></div>");
+
+ document().view()->setScrollPosition(DoublePoint(0.0, 50), ProgrammaticScroll);
+ document().view()->updateAllLifecyclePhases();
+ EXPECT_EQ(50, document().view()->scrollPosition().y());
+
+ LayoutBox* target = toLayoutBox(getLayoutObjectByElementId("target"));
+ LayoutBox* container = toLayoutBox(getLayoutObjectByElementId("container"));
+ LayoutBox* body = container->parentBox();
+ LayoutBox* html = body->parentBox();
+ LayoutBox* view = html->parentBox();
+ ASSERT_TRUE(view->isLayoutView());
+
+ FloatPoint mappedPoint = mapLocalToAncestor(target, view, FloatPoint());
+ EXPECT_EQ(FloatPoint(0, 100), mappedPoint);
+ mappedPoint = mapAncestorToLocal(target, view, FloatPoint(0, 100));
+ EXPECT_EQ(FloatPoint(), mappedPoint);
+
+ mappedPoint = mapLocalToAncestor(target, container, FloatPoint());
+ EXPECT_EQ(FloatPoint(0, 0), mappedPoint);
+ mappedPoint = mapAncestorToLocal(target, container, FloatPoint(0, 0));
+ EXPECT_EQ(FloatPoint(), mappedPoint);
+
+ mappedPoint = mapLocalToAncestor(container, view, FloatPoint());
+ EXPECT_EQ(FloatPoint(0, 100), mappedPoint);
+ mappedPoint = mapAncestorToLocal(container, view, FloatPoint(0, 100));
+ EXPECT_EQ(FloatPoint(), mappedPoint);
+}
+
// TODO(chrishtr): add more multi-frame tests.
TEST_F(MapCoordinatesTest, FixedPosInIFrameWhenMainFrameScrolled)
{

Powered by Google App Engine
This is Rietveld 408576698