Chromium Code Reviews| 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*) |