void PaintLayerCompositor::detachRootLayer() { if (!m_rootContentLayer || m_rootLayerAttachment == RootLayerUnattached) return; switch (m_rootLayerAttachment) { case RootLayerAttachedViaEnclosingFrame: { // The layer will get unhooked up via CompositedLayerMapping::updateGraphicsLayerConfiguration() // for the frame's layoutObject in the parent document. if (m_overflowControlsHostLayer) m_overflowControlsHostLayer->removeFromParent(); else m_rootContentLayer->removeFromParent(); if (HTMLFrameOwnerElement* ownerElement = m_layoutView.document().ownerElement()) ownerElement->setNeedsCompositingUpdate(); break; } case RootLayerAttachedViaChromeClient: { LocalFrame& frame = m_layoutView.frameView()->frame(); Page* page = frame.page(); if (!page) return; page->chromeClient().attachRootGraphicsLayer(0, &frame); break; } case RootLayerUnattached: break; } m_rootLayerAttachment = RootLayerUnattached; }
void PaintLayerCompositor::attachRootLayer(RootLayerAttachment attachment) { if (!m_rootContentLayer) return; // In Slimming Paint v2, PaintArtifactCompositor is responsible for the root // layer. if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) return; switch (attachment) { case RootLayerUnattached: ASSERT_NOT_REACHED(); break; case RootLayerAttachedViaChromeClient: { LocalFrame& frame = m_layoutView.frameView()->frame(); Page* page = frame.page(); if (!page) return; page->chromeClient().attachRootGraphicsLayer(rootGraphicsLayer(), &frame); break; } case RootLayerAttachedViaEnclosingFrame: { HTMLFrameOwnerElement* ownerElement = m_layoutView.document().ownerElement(); ASSERT(ownerElement); // The layer will get hooked up via CompositedLayerMapping::updateGraphicsLayerConfiguration() // for the frame's layoutObject in the parent document. ownerElement->setNeedsCompositingUpdate(); break; } } m_rootLayerAttachment = attachment; }
bool SVGImage::isInSVGImage(const Node* node) { ASSERT(node); Page* page = node->document().page(); if (!page) return false; return page->chromeClient().isSVGImageChromeClient(); }
void PaintLayerCompositor::detachCompositorTimeline() { LocalFrame& frame = m_layoutView.frameView()->frame(); Page* page = frame.page(); if (!page) return; WebCompositorAnimationTimeline* compositorTimeline = frame.document() ? frame.document()->timeline().compositorTimeline() : nullptr; if (compositorTimeline) page->chromeClient().detachCompositorAnimationTimeline(compositorTimeline, &frame); }