RenderLayer* LinkHighlight::computeEnclosingCompositingLayer() { if (!m_node || !m_node->renderer()) return 0; RenderLayer* renderLayer = m_node->renderer()->enclosingLayer(); // Find the nearest enclosing composited layer and attach to it. We may need to cross frame boundaries // to find a suitable layer. while (renderLayer && !renderLayer->isComposited()) { if (!renderLayer->parent()) { // See if we've reached the root in an enclosed frame. if (renderLayer->renderer()->frame()->ownerRenderer()) renderLayer = renderLayer->renderer()->frame()->ownerRenderer()->enclosingLayer(); else renderLayer = 0; } else renderLayer = renderLayer->parent(); } if (!renderLayer || !renderLayer->isComposited()) return 0; m_graphicsLayerOffset = FloatPoint(); GraphicsLayerChromium* newGraphicsLayer = static_cast<GraphicsLayerChromium*>(renderLayer->backing()->graphicsLayer()); if (!newGraphicsLayer->drawsContent()) { m_graphicsLayerOffset = newGraphicsLayer->position(); newGraphicsLayer = static_cast<GraphicsLayerChromium*>(m_owningWebViewImpl->nonCompositedContentHost()->topLevelRootLayer()); } if (m_currentGraphicsLayer != newGraphicsLayer) { if (m_currentGraphicsLayer) clearGraphicsLayerLinkHighlightPointer(); m_currentGraphicsLayer = newGraphicsLayer; m_currentGraphicsLayer->setLinkHighlight(this); } return renderLayer; }