| 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);
|
| }
|
|
|
| RenderObject* SVGUseElement::createRenderer(RenderStyle*)
|
|
|