static bool isViewportElement(const Element& element) { return (isSVGSVGElement(element) || isSVGSymbolElement(element) || isSVGForeignObjectElement(element) || isSVGImageElement(element)); }
bool SVGImage::currentFrameHasSingleSecurityOrigin() const { if (!m_page) return true; LocalFrame* frame = toLocalFrame(m_page->mainFrame()); RELEASE_ASSERT(frame->document()->loadEventFinished()); SVGSVGElement* rootElement = frame->document()->accessSVGExtensions().rootElement(); if (!rootElement) return true; // Don't allow foreignObject elements or images that are not known to be // single-origin since these can leak cross-origin information. for (Node* node = rootElement; node; node = ComposedTreeTraversal::next(*node)) { if (isSVGForeignObjectElement(*node)) return false; if (isSVGImageElement(*node)) { if (!toSVGImageElement(*node).currentFrameHasSingleSecurityOrigin()) return false; } else if (isSVGFEImageElement(*node)) { if (!toSVGFEImageElement(*node).currentFrameHasSingleSecurityOrigin()) return false; } } // Because SVG image rendering disallows external resources and links, these // images effectively are restricted to a single security origin. return true; }
SVGElement* SVGElement::viewportElement() const { // This function needs shadow tree support - as LayoutSVGContainer uses this function // to determine the "overflow" property. <use> on <symbol> wouldn't work otherwhise. ContainerNode* n = parentOrShadowHostNode(); while (n) { if (isSVGSVGElement(*n) || isSVGImageElement(*n) || isSVGSymbolElement(*n)) return toSVGElement(n); n = n->parentOrShadowHostNode(); } return nullptr; }
SVGElement* SVGElement::viewportElement() const { // This function needs shadow tree support - as RenderSVGContainer uses this function // to determine the "overflow" property. <use> on <symbol> wouldn't work otherwhise. ContainerNode* n = parentOrShadowHostNode(); while (n) { if (n->hasTagName(SVGNames::svgTag) || isSVGImageElement(n) || n->hasTagName(SVGNames::symbolTag)) return toSVGElement(n); n = n->parentOrShadowHostNode(); } return 0; }
END_REGISTER_ANIMATED_PROPERTIES inline SVGImageElement::SVGImageElement(const QualifiedName& tagName, Document* document) : SVGGraphicsElement(tagName, document) , m_x(LengthModeWidth) , m_y(LengthModeHeight) , m_width(LengthModeWidth) , m_height(LengthModeHeight) , m_imageLoader(this) { ASSERT(isSVGImageElement(this)); registerAnimatedPropertiesForSVGImageElement(); setHasCustomStyleResolveCallbacks(); }