Index: third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp |
diff --git a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp |
index f50247e0199b30ce70d3f2634876f15ba3c8931e..cf36a430aa6198a3035699bd6d8320e0787262d6 100644 |
--- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp |
+++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp |
@@ -67,31 +67,22 @@ void LayoutSVGResourceContainer::notifyContentChanged() { |
} |
void LayoutSVGResourceContainer::willBeDestroyed() { |
- // Detach all clients referring to this resource. If the resource itself is |
- // a client, it will be detached from any such resources by the call to |
- // LayoutSVGHiddenContainer::willBeDestroyed() below. |
- detachAllClients(); |
- |
LayoutSVGHiddenContainer::willBeDestroyed(); |
- if (!m_registered) |
- return; |
svgTreeScopeResourcesFromElement(element()).removeResource( |
- element()->getIdAttribute()); |
+ element()->getIdAttribute(), this); |
+ DCHECK(m_clients.isEmpty()); |
} |
void LayoutSVGResourceContainer::styleDidChange(StyleDifference diff, |
const ComputedStyle* oldStyle) { |
LayoutSVGHiddenContainer::styleDidChange(diff, oldStyle); |
- |
- if (m_registered) |
- return; |
- m_registered = true; |
svgTreeScopeResourcesFromElement(element()).updateResource( |
element()->getIdAttribute(), this); |
} |
-void LayoutSVGResourceContainer::detachAllClients() { |
- const AtomicString& id = element()->getIdAttribute(); |
+void LayoutSVGResourceContainer::detachAllClients(const AtomicString& toId) { |
+ removeAllClientsFromCache(); |
+ |
for (auto* client : m_clients) { |
// Unlink the resource from the client's SVGResources. (The actual |
// removal will be signaled after processing all the clients.) |
@@ -104,22 +95,15 @@ void LayoutSVGResourceContainer::detachAllClients() { |
// Add a pending resolution based on the id of the old resource. |
Element* clientElement = toElement(client->node()); |
svgTreeScopeResourcesFromElement(clientElement) |
- .addPendingResource(id, *clientElement); |
+ .addPendingResource(toId, *clientElement); |
} |
- |
- removeAllClientsFromCache(); |
+ m_clients.clear(); |
} |
void LayoutSVGResourceContainer::idChanged(const AtomicString& oldId, |
const AtomicString& newId) { |
- // Invalidate all our current clients. |
- removeAllClientsFromCache(); |
- |
- // Remove old id, that is guaranteed to be present in cache. |
- SVGTreeScopeResources& treeScopeResources = |
- svgTreeScopeResourcesFromElement(element()); |
- treeScopeResources.removeResource(oldId); |
- treeScopeResources.updateResource(newId, this); |
+ svgTreeScopeResourcesFromElement(element()).updateResource(oldId, newId, |
+ this); |
} |
void LayoutSVGResourceContainer::markAllClientsForInvalidation( |