Index: third_party/WebKit/Source/core/paint/PaintLayerTest.cpp |
diff --git a/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp b/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp |
index 3efb930a86ea17a6c9440608cd518bccf4f3e17d..e0fd7c42fcc8036eb677214af75f1d7c28b67929 100644 |
--- a/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp |
+++ b/third_party/WebKit/Source/core/paint/PaintLayerTest.cpp |
@@ -550,8 +550,11 @@ TEST_P(PaintLayerTest, FloatLayerAndAbsoluteUnderInlineLayer) { |
toLayoutBoxModelObject(getLayoutObjectByElementId("container"))->layer(); |
EXPECT_EQ(span, floating->parent()); |
+ EXPECT_EQ(container, floating->containingLayer()); |
EXPECT_EQ(span, absolute->parent()); |
+ EXPECT_EQ(span, absolute->containingLayer()); |
EXPECT_EQ(container, span->parent()); |
+ EXPECT_EQ(container, span->containingLayer()); |
EXPECT_EQ(LayoutPoint(83, 83), floating->location()); |
EXPECT_EQ(LayoutPoint(50, 50), absolute->location()); |
@@ -565,6 +568,39 @@ TEST_P(PaintLayerTest, FloatLayerAndAbsoluteUnderInlineLayer) { |
absolute->visualOffsetFromAncestor(container)); |
} |
+TEST_P(PaintLayerTest, FloatLayerUnderInlineLayerScrolled) { |
+ setBodyInnerHTML( |
+ "<div id='container' style='overflow: scroll; width: 50px; height: 50px'>" |
+ " <span id='span' style='position: relative; top: 100px; left: 100px'>" |
+ " <div id='floating'" |
+ " style='float: left; position: relative; top: 50px; left: 50px'>" |
+ " </div>" |
+ " </span>" |
+ " <div style='height: 1000px'></div>" |
+ "</div>"); |
+ |
+ PaintLayer* floating = |
+ toLayoutBoxModelObject(getLayoutObjectByElementId("floating"))->layer(); |
+ PaintLayer* span = |
+ toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); |
+ PaintLayer* container = |
+ toLayoutBoxModelObject(getLayoutObjectByElementId("container"))->layer(); |
+ container->getScrollableArea()->setScrollOffset(ScrollOffset(0, 400), |
+ ProgrammaticScroll); |
+ |
+ EXPECT_EQ(span, floating->parent()); |
+ EXPECT_EQ(container, floating->containingLayer()); |
+ EXPECT_EQ(container, span->parent()); |
+ EXPECT_EQ(container, span->containingLayer()); |
+ |
+ EXPECT_EQ(LayoutPoint(50, -350), floating->location()); |
+ EXPECT_EQ(LayoutPoint(100, -300), span->location()); |
+ |
+ EXPECT_EQ(LayoutPoint(-50, -50), floating->visualOffsetFromAncestor(span)); |
+ EXPECT_EQ(LayoutPoint(50, -350), |
+ floating->visualOffsetFromAncestor(container)); |
+} |
+ |
TEST_P(PaintLayerTest, FloatLayerUnderBlockUnderInlineLayer) { |
setBodyInnerHTML( |
"<style>body {margin: 0}</style>" |
@@ -582,6 +618,7 @@ TEST_P(PaintLayerTest, FloatLayerUnderBlockUnderInlineLayer) { |
toLayoutBoxModelObject(getLayoutObjectByElementId("span"))->layer(); |
EXPECT_EQ(span, floating->parent()); |
+ EXPECT_EQ(span, floating->containingLayer()); |
EXPECT_EQ(LayoutPoint(83, 83), floating->location()); |
EXPECT_EQ(LayoutPoint(100, 100), span->location()); |
@@ -626,4 +663,40 @@ TEST_P(PaintLayerTest, CompositingContainerFloatingIframe) { |
} |
} |
+TEST_P(PaintLayerTest, ColumnSpanLayerUnderExtraLayerScrolled) { |
+ setBodyInnerHTML( |
+ "<div id='columns' style='overflow: hidden; width: 80px; height: 80px; " |
+ " columns: 2; column-gap: 0'>" |
+ " <div id='extraLayer'" |
+ " style='position: relative; top: 100px; left: 100px'>" |
+ " <div id='spanner' style='column-span: all; position: relative; " |
+ " top: 50px; left: 50px'>" |
+ " </div>" |
+ " </div>" |
+ " <div style='height: 1000px'></div>" |
+ "</div>"); |
+ |
+ PaintLayer* spanner = |
+ toLayoutBoxModelObject(getLayoutObjectByElementId("spanner"))->layer(); |
+ PaintLayer* extraLayer = |
+ toLayoutBoxModelObject(getLayoutObjectByElementId("extraLayer"))->layer(); |
+ PaintLayer* columns = |
+ toLayoutBoxModelObject(getLayoutObjectByElementId("columns"))->layer(); |
+ columns->getScrollableArea()->setScrollOffset(ScrollOffset(200, 0), |
+ ProgrammaticScroll); |
+ |
+ EXPECT_EQ(extraLayer, spanner->parent()); |
+ EXPECT_EQ(columns, spanner->containingLayer()); |
+ EXPECT_EQ(columns, extraLayer->parent()->parent()); |
+ EXPECT_EQ(columns, extraLayer->containingLayer()->parent()); |
+ |
+ EXPECT_EQ(LayoutPoint(-150, 50), spanner->location()); |
+ EXPECT_EQ(LayoutPoint(100, 100), extraLayer->location()); |
+ // -60 = 2nd-column-x(40) - scroll-offset-x(200) + x-location(100) |
+ // 20 = y-location(100) - column-height(80) |
+ EXPECT_EQ(LayoutPoint(-60, 20), |
+ extraLayer->visualOffsetFromAncestor(columns)); |
+ EXPECT_EQ(LayoutPoint(-150, 50), spanner->visualOffsetFromAncestor(columns)); |
+} |
+ |
} // namespace blink |