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

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

Issue 2642763009: Fix paint and rect mapping issues for stacked float under stacked inline (Closed)
Patch Set: Created 3 years, 11 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 10cd9e977478096c7ba27eefd8e83055a8e5be3b..52a7d7520b75cc66640e17f41e6769bd235ae6b5 100644
--- a/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutObjectTest.cpp
@@ -139,6 +139,7 @@ TEST_F(LayoutObjectTest, FloatUnderBlock) {
toLayoutBoxModelObject(getLayoutObjectByElementId("container"));
LayoutObject* floating = getLayoutObjectByElementId("floating");
+ EXPECT_TRUE(container->canContainFloatingObject(*floating));
EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer());
EXPECT_EQ(layeredDiv->layer(), floating->paintingLayer());
EXPECT_EQ(container, floating->container());
@@ -149,7 +150,7 @@ TEST_F(LayoutObjectTest, FloatUnderInline) {
setBodyInnerHTML(
"<div id='layered-div' style='position: absolute'>"
" <div id='container'>"
- " <span id='layered-span' style='position: relative'>"
+ " <span id='stacked-span' style='position: relative'>"
" <div id='floating' style='float: left'>FLOAT</div>"
" </span>"
" </div>"
@@ -159,17 +160,18 @@ TEST_F(LayoutObjectTest, FloatUnderInline) {
toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div"));
LayoutBoxModelObject* container =
toLayoutBoxModelObject(getLayoutObjectByElementId("container"));
- LayoutBoxModelObject* layeredSpan =
- toLayoutBoxModelObject(getLayoutObjectByElementId("layered-span"));
+ LayoutBoxModelObject* stackedSpan =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("stacked-span"));
LayoutObject* floating = getLayoutObjectByElementId("floating");
+ EXPECT_FALSE(stackedSpan->canContainFloatingObject(*floating));
EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer());
- EXPECT_EQ(layeredSpan->layer(), layeredSpan->paintingLayer());
+ EXPECT_EQ(stackedSpan->layer(), stackedSpan->paintingLayer());
EXPECT_EQ(layeredDiv->layer(), floating->paintingLayer());
EXPECT_EQ(container, floating->container());
EXPECT_EQ(container, floating->containingBlock());
- LayoutObject::AncestorSkipInfo skipInfo(layeredSpan);
+ LayoutObject::AncestorSkipInfo skipInfo(stackedSpan);
EXPECT_EQ(container, floating->container(&skipInfo));
EXPECT_TRUE(skipInfo.ancestorSkipped());
@@ -178,6 +180,112 @@ TEST_F(LayoutObjectTest, FloatUnderInline) {
EXPECT_FALSE(skipInfo.ancestorSkipped());
}
+TEST_F(LayoutObjectTest, StackedFloatUnderStaticInline) {
+ setBodyInnerHTML(
+ "<div id='layered-div' style='position: absolute'>"
+ " <div id='container'>"
+ " <span id='span'>"
+ " <div id='floating' style='position: relative; float: left'>F</div>"
+ " </span>"
+ " </div>"
+ "</div>");
+
+ LayoutBoxModelObject* layeredDiv =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div"));
+ LayoutBoxModelObject* container =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("container"));
+ LayoutObject* span = getLayoutObjectByElementId("span");
+ LayoutBoxModelObject* floating =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("floating"));
+
+ EXPECT_FALSE(span->canContainFloatingObject(*floating));
+ EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer());
+ EXPECT_EQ(layeredDiv->layer(), span->paintingLayer());
+ EXPECT_EQ(floating->layer(), floating->paintingLayer());
+ EXPECT_EQ(container, floating->container());
+ EXPECT_EQ(container, floating->containingBlock());
+
+ LayoutObject::AncestorSkipInfo skipInfo(span);
+ EXPECT_EQ(container, floating->container(&skipInfo));
+ EXPECT_TRUE(skipInfo.ancestorSkipped());
+
+ skipInfo = LayoutObject::AncestorSkipInfo(container);
+ EXPECT_EQ(container, floating->container(&skipInfo));
+ EXPECT_FALSE(skipInfo.ancestorSkipped());
+}
+
+TEST_F(LayoutObjectTest, StackedFloatUnderStackedInline) {
+ setBodyInnerHTML(
+ "<div id='layered-div' style='position: absolute'>"
+ " <div id='container'>"
+ " <span id='stacked-span' style='position: relative'>"
+ " <div id='floating' style='position: relative; float: left'>F</div>"
+ " </span>"
+ " </div>"
+ "</div>");
+
+ LayoutBoxModelObject* layeredDiv =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div"));
+ LayoutBoxModelObject* container =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("container"));
+ LayoutBoxModelObject* stackedSpan =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("stacked-span"));
+ LayoutBoxModelObject* floating =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("floating"));
+
+ EXPECT_TRUE(stackedSpan->canContainFloatingObject(*floating));
+ EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer());
+ EXPECT_EQ(stackedSpan->layer(), stackedSpan->paintingLayer());
+ EXPECT_EQ(floating->layer(), floating->paintingLayer());
+ EXPECT_EQ(stackedSpan, floating->container());
+ EXPECT_EQ(container, floating->containingBlock());
chrishtr 2017/01/21 02:14:59 Can you explain to me why containingBlock disagree
+
+ LayoutObject::AncestorSkipInfo skipInfo(stackedSpan);
+ EXPECT_EQ(stackedSpan, floating->container(&skipInfo));
+ EXPECT_FALSE(skipInfo.ancestorSkipped());
+}
+
+TEST_F(LayoutObjectTest, StackedFloatIndirectlyUnderStackedInline) {
+ setBodyInnerHTML(
+ "<div id='layered-div' style='position: absolute'>"
+ " <div id='container'>"
+ " <span id='stacked-span' style='opacity: 0.5'>"
+ " <span id='span'>"
+ " <div id='floating' style='position: relative; float: left'>"
+ " FLOAT"
+ " </div>"
+ " </span>"
+ " </span>"
+ " </div>"
+ "</div>");
+
+ LayoutBoxModelObject* layeredDiv =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("layered-div"));
+ LayoutBoxModelObject* container =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("container"));
+ LayoutBoxModelObject* stackedSpan =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("stacked-span"));
+ LayoutObject* span = getLayoutObjectByElementId("span");
+ LayoutBoxModelObject* floating =
+ toLayoutBoxModelObject(getLayoutObjectByElementId("floating"));
+
+ EXPECT_TRUE(stackedSpan->canContainFloatingObject(*floating));
+ EXPECT_FALSE(span->canContainFloatingObject(*floating));
+ EXPECT_EQ(layeredDiv->layer(), layeredDiv->paintingLayer());
+ EXPECT_EQ(stackedSpan->layer(), stackedSpan->paintingLayer());
+ EXPECT_EQ(floating->layer(), floating->paintingLayer());
+ EXPECT_EQ(stackedSpan, floating->container());
+ EXPECT_EQ(container, floating->containingBlock());
+
+ LayoutObject::AncestorSkipInfo skipInfo(span);
+ EXPECT_EQ(stackedSpan, floating->container(&skipInfo));
+ EXPECT_TRUE(skipInfo.ancestorSkipped());
+
+ skipInfo = LayoutObject::AncestorSkipInfo(stackedSpan);
+ EXPECT_EQ(stackedSpan, floating->container(&skipInfo));
+ EXPECT_FALSE(skipInfo.ancestorSkipped());
+}
+
TEST_F(LayoutObjectTest, MutableForPaintingClearPaintFlags) {
LayoutObject* object = document().body()->layoutObject();
object->setShouldDoFullPaintInvalidation();

Powered by Google App Engine
This is Rietveld 408576698