TEST_F(VisualRectMappingTest, DifferentPaintInvalidaitionContainerForAbsolutePosition) { enableCompositing(); document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); setBodyInnerHTML( "<div id='stacking-context' style='opacity: 0.9; background: blue; " "will-change: transform'>" " <div id='scroller' style='overflow: scroll; width: 80px; height: " "80px'>" " <div id='absolute' style='position: absolute; top: 111px; left: " "222px; width: 50px; height: 50px; background: green'></div>" " <div id='normal-flow' style='width: 2000px; height: 2000px; " "background: yellow'></div>" " </div>" "</div>"); LayoutBlock* scroller = toLayoutBlock(getLayoutObjectByElementId("scroller")); scroller->setScrollTop(LayoutUnit(77)); scroller->setScrollLeft(LayoutUnit(88)); document().view()->updateAllLifecyclePhases(); LayoutBlock* normalFlow = toLayoutBlock(getLayoutObjectByElementId("normal-flow")); EXPECT_EQ(scroller, &normalFlow->containerForPaintInvalidation()); LayoutRect normalFlowVisualRect = normalFlow->localVisualRect(); EXPECT_EQ(LayoutRect(0, 0, 2000, 2000), normalFlowVisualRect); LayoutRect rect = normalFlowVisualRect; EXPECT_TRUE(normalFlow->mapToVisualRectInAncestorSpace(scroller, rect)); EXPECT_EQ(LayoutRect(0, 0, 2000, 2000), rect); checkPaintInvalidationStateRectMapping(rect, normalFlowVisualRect, *normalFlow, layoutView(), *scroller); LayoutBlock* stackingContext = toLayoutBlock(getLayoutObjectByElementId("stacking-context")); LayoutBlock* absolute = toLayoutBlock(getLayoutObjectByElementId("absolute")); EXPECT_EQ(stackingContext, &absolute->containerForPaintInvalidation()); EXPECT_EQ(stackingContext, absolute->container()); LayoutRect absoluteVisualRect = absolute->localVisualRect(); EXPECT_EQ(LayoutRect(0, 0, 50, 50), absoluteVisualRect); rect = absoluteVisualRect; EXPECT_TRUE(absolute->mapToVisualRectInAncestorSpace(stackingContext, rect)); EXPECT_EQ(LayoutRect(222, 111, 50, 50), rect); checkPaintInvalidationStateRectMapping(rect, absoluteVisualRect, *absolute, layoutView(), *stackingContext); }
TEST_F(VisualRectMappingTest, ContainerOfAbsoluteAbovePaintInvalidationContainer) { enableCompositing(); document().frame()->settings()->setPreferCompositingToLCDTextEnabled(true); setBodyInnerHTML( "<div id='container' style='position: absolute; top: 88px; left: 99px'>" " <div style='height: 222px'></div>" // This div makes stacking-context composited. " <div style='position: absolute; width: 1px; height: 1px; " "background:yellow; will-change: transform'></div>" // This stacking context is paintInvalidationContainer of the absolute // child, but not a container of it. " <div id='stacking-context' style='opacity: 0.9'>" " <div id='absolute' style='position: absolute; top: 50px; left: " "50px; width: 50px; height: 50px; background: green'></div>" " </div>" "</div>"); LayoutBlock* stackingContext = toLayoutBlock(getLayoutObjectByElementId("stacking-context")); LayoutBlock* absolute = toLayoutBlock(getLayoutObjectByElementId("absolute")); LayoutBlock* container = toLayoutBlock(getLayoutObjectByElementId("container")); EXPECT_EQ(stackingContext, &absolute->containerForPaintInvalidation()); EXPECT_EQ(container, absolute->container()); LayoutRect absoluteVisualRect = absolute->localVisualRect(); EXPECT_EQ(LayoutRect(0, 0, 50, 50), absoluteVisualRect); LayoutRect rect = absoluteVisualRect; EXPECT_TRUE(absolute->mapToVisualRectInAncestorSpace(stackingContext, rect)); // -172 = top(50) - y_offset_of_stacking_context(222) EXPECT_EQ(LayoutRect(50, -172, 50, 50), rect); checkPaintInvalidationStateRectMapping(rect, absoluteVisualRect, *absolute, layoutView(), *stackingContext); }