Index: Source/core/svg/SVGUseElement.cpp |
diff --git a/Source/core/svg/SVGUseElement.cpp b/Source/core/svg/SVGUseElement.cpp |
index 36e9abf7495a092f5cc0351e34de6fd3cf63b43b..8045c508da04794d8b4696abc85e9e68d998229a 100644 |
--- a/Source/core/svg/SVGUseElement.cpp |
+++ b/Source/core/svg/SVGUseElement.cpp |
@@ -364,6 +364,18 @@ void SVGUseElement::buildPendingResource() |
ASSERT(!m_needsShadowTreeRecreation); |
} |
+namespace { |
+ |
+void rebuildNonUseElementReferencesForTree(SVGElement* shadowTreeTargetElement) |
+{ |
+ shadowTreeTargetElement->document().accessSVGExtensions().rebuildAllElementReferencesForTarget(shadowTreeTargetElement, SVGDocumentExtensions::ExcludeUseElements); |
+ |
+ for (SVGElement* child = Traversal<SVGElement>::firstChild(*shadowTreeTargetElement); child; child = Traversal<SVGElement>::nextSibling(*child)) |
+ rebuildNonUseElementReferencesForTree(child); |
+} |
+ |
+} // namespace |
+ |
void SVGUseElement::buildShadowAndInstanceTree(SVGElement* target) |
{ |
ASSERT(!m_targetElementInstance); |
@@ -451,6 +463,10 @@ void SVGUseElement::buildShadowAndInstanceTree(SVGElement* target) |
// Update relative length information. |
updateRelativeLengthsInformation(); |
+ |
+ // Element references need to be rebuilt to include the new shadow tree. |
+ // <use> elements are excluded from notification to avoid infinite loop. |
+ rebuildNonUseElementReferencesForTree(target); |
kouhei (in TOK)
2014/05/26 04:35:45
here.
|
} |
RenderObject* SVGUseElement::createRenderer(RenderStyle*) |