bool SVGSVGElement::widthAttributeEstablishesViewport() const { if (!renderer() || renderer()->isSVGViewportContainer()) return true; // Spec: http://www.w3.org/TR/SVG/coords.html#ViewportSpace // The ‘width’ attribute on the outermost svg element establishes the viewport's width, unless the following conditions are met: // - the SVG content is a separately stored resource that is embedded by reference (such as the ‘object’ element in XHTML [XHTML]), or // the SVG content is embedded inline within a containing document; // - and the referencing element or containing document is styled using CSS [CSS2] or XSL [XSL]; // - and there are CSS-compatible positioning properties ([CSS2], section 9.3) specified on the referencing element (e.g., the ‘object’ element) // or on the containing document's outermost svg element that are sufficient to establish the width of the viewport. Under these conditions, // the positioning properties establish the viewport's width. RenderSVGRoot* root = toRenderSVGRoot(renderer()); // SVG embedded through object/embed/iframe. if (root->isEmbeddedThroughFrameContainingSVGDocument()) return !root->hasReplacedLogicalWidth() && !document()->frame()->ownerRenderer()->hasReplacedLogicalWidth(); // SVG embedded via SVGImage (background-image/border-image/etc) / Inline SVG. if (root->isEmbeddedThroughSVGImage() || document()->documentElement() != this) return !root->hasReplacedLogicalWidth(); return true; }
bool SVGSVGElement::heightAttributeEstablishesViewport() const { if (!renderer() || renderer()->isSVGViewportContainer()) return true; // Spec: http://www.w3.org/TR/SVG/coords.html#IntrinsicSizing // Similarly, if there are positioning properties specified on the referencing element or on the outermost svg element // that are sufficient to establish the height of the viewport, then these positioning properties establish the viewport's // height; otherwise, the ‘height’ attribute on the outermost svg element establishes the viewport's height. RenderSVGRoot* root = toRenderSVGRoot(renderer()); // SVG embedded through object/embed/iframe. if (root->isEmbeddedThroughFrameContainingSVGDocument()) return !root->hasReplacedLogicalHeight() && !document()->frame()->ownerRenderer()->hasReplacedLogicalHeight(); // SVG embedded via SVGImage (background-image/border-image/etc) / Inline SVG. if (root->isEmbeddedThroughSVGImage() || document()->documentElement() != this) return !root->hasReplacedLogicalHeight(); return true; }