Index: third_party/WebKit/Source/core/svg/SVGElement.cpp |
diff --git a/third_party/WebKit/Source/core/svg/SVGElement.cpp b/third_party/WebKit/Source/core/svg/SVGElement.cpp |
index 851793682737676af7afe23fdbe3aa6d2465da2e..2c2a275a0dd3cc8c0dd4b7bf8167a532e37329e6 100644 |
--- a/third_party/WebKit/Source/core/svg/SVGElement.cpp |
+++ b/third_party/WebKit/Source/core/svg/SVGElement.cpp |
@@ -113,26 +113,29 @@ void SVGElement::buildPendingResourcesIfNeeded() { |
AtomicString resourceId = getIdAttribute(); |
if (!extensions.hasPendingResource(resourceId)) |
return; |
+ // Guaranteed by hasPendingResource. |
+ DCHECK(!resourceId.isEmpty()); |
- // Mark pending resources as pending for removal. |
- extensions.markPendingResourcesForRemoval(resourceId); |
+ // Get pending elements for this id. |
+ SVGDocumentExtensions::SVGPendingElements* pendingElements = |
+ extensions.removePendingResource(resourceId); |
+ if (!pendingElements || pendingElements->isEmpty()) |
+ return; |
// Rebuild pending resources for each client of a pending resource that is |
// being removed. |
- while ( |
- Element* clientElement = |
- extensions.removeElementFromPendingResourcesForRemoval(resourceId)) { |
- ASSERT(clientElement->hasPendingResources()); |
- if (clientElement->hasPendingResources()) { |
- // FIXME: Ideally we'd always resolve pending resources async instead of |
- // inside insertedInto and svgAttributeChanged. For now we only do it for |
- // <use> since that would stamp out DOM. |
- if (isSVGUseElement(clientElement)) |
- toSVGUseElement(clientElement)->invalidateShadowTree(); |
- else |
- clientElement->buildPendingResource(); |
- extensions.clearHasPendingResourcesIfPossible(clientElement); |
- } |
+ for (Element* clientElement : *pendingElements) { |
+ DCHECK(clientElement->hasPendingResources()); |
+ if (!clientElement->hasPendingResources()) |
+ continue; |
+ // TODO(fs): Ideally we'd always resolve pending resources async instead of |
+ // inside insertedInto and svgAttributeChanged. For now we only do it for |
+ // <use> since that would stamp out DOM. |
+ if (isSVGUseElement(clientElement)) |
+ toSVGUseElement(clientElement)->invalidateShadowTree(); |
+ else |
+ clientElement->buildPendingResource(); |
+ extensions.clearHasPendingResourcesIfPossible(clientElement); |
} |
} |