TEST_F(WebPluginContainerTest, ClippedRectsForIframedElement) { URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("plugin_container.html")); URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("plugin_containing_page.html")); TestPluginWebFrameClient pluginWebFrameClient; // Must outlive webViewHelper. FrameTestHelpers::WebViewHelper webViewHelper; WebView* webView = webViewHelper.initializeAndLoad(m_baseURL + "plugin_containing_page.html", true, &pluginWebFrameClient); ASSERT(webView); webView->settings()->setPluginsEnabled(true); webView->resize(WebSize(300, 300)); webView->updateAllLifecyclePhases(); runPendingTasks(); WebElement pluginElement = webView->mainFrame()->firstChild()->document().getElementById("translated-plugin"); RefPtrWillBeRawPtr<WebPluginContainerImpl> pluginContainerImpl = toWebPluginContainerImpl(pluginElement.pluginContainer()); ASSERT(pluginContainerImpl.get()); pluginContainerImpl->setFrameRect(IntRect(0, 0, 300, 300)); IntRect windowRect, clipRect, unobscuredRect; Vector<IntRect> cutOutRects; calculateGeometry(pluginContainerImpl.get(), windowRect, clipRect, unobscuredRect, cutOutRects); EXPECT_RECT_EQ(IntRect(10, 210, 300, 300), windowRect); EXPECT_RECT_EQ(IntRect(0, 0, 240, 90), clipRect); EXPECT_RECT_EQ(IntRect(0, 0, 240, 160), unobscuredRect); // Cause the plugin's frame to be detached. webViewHelper.reset(); }
TEST_F(CompositedLayerMappingTest, TallLayerWholeDocumentInterestRect) { setBodyInnerHTML("<div id='target' style='width: 200px; height: 10000px; will-change: transform'></div>"); document().settings()->setMainFrameClipsContent(false); document().view()->updateAllLifecyclePhases(); Element* element = document().getElementById("target"); PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->layer(); ASSERT_TRUE(paintLayer->graphicsLayerBacking()); ASSERT_TRUE(paintLayer->compositedLayerMapping()); // recomputeInterestRect computes the interest rect; computeInterestRect applies the extra setting to paint everything. EXPECT_RECT_EQ(IntRect(0, 0, 200, 4592), recomputeInterestRect(paintLayer->graphicsLayerBacking())); EXPECT_RECT_EQ(IntRect(0, 0, 200, 10000), computeInterestRect(paintLayer->compositedLayerMapping(), paintLayer->graphicsLayerBacking(), IntRect())); }
TEST_F(CompositedLayerMappingTest, RotatedInterestRect) { setBodyInnerHTML( "<div id='target' style='width: 200px; height: 200px; will-change: transform; transform: rotateZ(45deg)'></div>"); document().view()->updateAllLifecyclePhases(); Element* element = document().getElementById("target"); PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->layer(); ASSERT_TRUE(!!paintLayer->graphicsLayerBacking()); EXPECT_RECT_EQ(IntRect(0, 0, 200, 200), recomputeInterestRect(paintLayer->graphicsLayerBacking())); }
TEST_F(CompositedLayerMappingTest, TallLayerInterestRect) { setBodyInnerHTML("<div id='target' style='width: 200px; height: 10000px; will-change: transform'></div>"); document().view()->updateAllLifecyclePhases(); Element* element = document().getElementById("target"); PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->layer(); ASSERT_TRUE(paintLayer->graphicsLayerBacking()); // Screen-space visible content rect is [8, 8, 200, 600]. Mapping back to local, adding 4000px in all directions, then // clipping, yields this rect. EXPECT_RECT_EQ(IntRect(0, 0, 200, 4592), recomputeInterestRect(paintLayer->graphicsLayerBacking())); }
TEST_P(CompositedLayerMappingTest, RotatedInterestRectNear90Degrees) { setBodyInnerHTML( "<div id='target' style='width: 10000px; height: 200px; will-change: " "transform; transform: rotateY(89.9999deg)'></div>"); document().view()->updateAllLifecyclePhases(); Element* element = document().getElementById("target"); PaintLayer* paintLayer = toLayoutBoxModelObject(element->layoutObject())->layer(); ASSERT_TRUE(!!paintLayer->graphicsLayerBacking()); // Because the layer is rotated to almost 90 degrees, floating-point error // leads to a reverse-projected rect that is much much larger than the // original layer size in certain dimensions. In such cases, we often fall // back to the 4000px interest rect padding amount. EXPECT_RECT_EQ(IntRect(0, 0, 4000, 200), recomputeInterestRect(paintLayer->graphicsLayerBacking())); }
TEST_P(CompositedLayerMappingTest, VerticalRightLeftWritingModeDocument) { setBodyInnerHTML( "<style>html,body { margin: 0px } html { -webkit-writing-mode: " "vertical-rl}</style> <div id='target' style='width: 10000px; height: " "200px;'></div>"); document().view()->updateAllLifecyclePhases(); document().view()->layoutViewportScrollableArea()->setScrollOffset( ScrollOffset(-5000, 0), ProgrammaticScroll); document().view()->updateAllLifecyclePhases(); PaintLayer* paintLayer = document().layoutViewItem().layer(); ASSERT_TRUE(paintLayer->graphicsLayerBacking()); ASSERT_TRUE(paintLayer->compositedLayerMapping()); // A scroll by -5000px is equivalent to a scroll by (10000 - 5000 - 800)px = // 4200px in non-RTL mode. Expanding the resulting rect by 4000px in each // direction yields this result. EXPECT_RECT_EQ( IntRect(200, 0, 8800, 600), recomputeInterestRect(paintLayer->graphicsLayerBackingForScrolling())); }