| 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 3ad812c3ff8e5e13780f9da5f99d344492b20c7d..f50247e0199b30ce70d3f2634876f15ba3c8931e 100644
|
| --- a/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/svg/LayoutSVGResourceContainer.cpp
|
| @@ -36,7 +36,6 @@ static inline SVGTreeScopeResources& svgTreeScopeResourcesFromElement(
|
| LayoutSVGResourceContainer::LayoutSVGResourceContainer(SVGElement* node)
|
| : LayoutSVGHiddenContainer(node),
|
| m_isInLayout(false),
|
| - m_id(node->getIdAttribute()),
|
| m_invalidationMask(0),
|
| m_registered(false),
|
| m_isInvalidating(false) {}
|
| @@ -74,8 +73,10 @@ void LayoutSVGResourceContainer::willBeDestroyed() {
|
| detachAllClients();
|
|
|
| LayoutSVGHiddenContainer::willBeDestroyed();
|
| - if (m_registered)
|
| - svgTreeScopeResourcesFromElement(element()).removeResource(m_id);
|
| + if (!m_registered)
|
| + return;
|
| + svgTreeScopeResourcesFromElement(element()).removeResource(
|
| + element()->getIdAttribute());
|
| }
|
|
|
| void LayoutSVGResourceContainer::styleDidChange(StyleDifference diff,
|
| @@ -85,10 +86,12 @@ void LayoutSVGResourceContainer::styleDidChange(StyleDifference diff,
|
| if (m_registered)
|
| return;
|
| m_registered = true;
|
| - svgTreeScopeResourcesFromElement(element()).updateResource(m_id, this);
|
| + svgTreeScopeResourcesFromElement(element()).updateResource(
|
| + element()->getIdAttribute(), this);
|
| }
|
|
|
| void LayoutSVGResourceContainer::detachAllClients() {
|
| + const AtomicString& id = element()->getIdAttribute();
|
| for (auto* client : m_clients) {
|
| // Unlink the resource from the client's SVGResources. (The actual
|
| // removal will be signaled after processing all the clients.)
|
| @@ -101,22 +104,22 @@ void LayoutSVGResourceContainer::detachAllClients() {
|
| // Add a pending resolution based on the id of the old resource.
|
| Element* clientElement = toElement(client->node());
|
| svgTreeScopeResourcesFromElement(clientElement)
|
| - .addPendingResource(m_id, *clientElement);
|
| + .addPendingResource(id, *clientElement);
|
| }
|
|
|
| removeAllClientsFromCache();
|
| }
|
|
|
| -void LayoutSVGResourceContainer::idChanged() {
|
| +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(m_id);
|
| - m_id = element()->getIdAttribute();
|
| - treeScopeResources.updateResource(m_id, this);
|
| + treeScopeResources.removeResource(oldId);
|
| + treeScopeResources.updateResource(newId, this);
|
| }
|
|
|
| void LayoutSVGResourceContainer::markAllClientsForInvalidation(
|
|
|