| Index: third_party/WebKit/Source/core/layout/svg/SVGResources.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp b/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp
|
| index d2f4c08b6d4cd55a8fceab49ccad638cc11cc759..7c08f2fbde7816aeca1ca89bb80ecf377eca5f45 100644
|
| --- a/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/svg/SVGResources.cpp
|
| @@ -157,12 +157,15 @@ template <typename ContainerType>
|
| ContainerType* AttachToResource(SVGTreeScopeResources& tree_scope_resources,
|
| const AtomicString& id,
|
| SVGElement& element) {
|
| - if (LayoutSVGResourceContainer* container =
|
| - tree_scope_resources.ResourceById(id)) {
|
| + SVGTreeScopeResources::Resource* resource =
|
| + tree_scope_resources.ResourceForId(id);
|
| + if (!resource)
|
| + return nullptr;
|
| + if (LayoutSVGResourceContainer* container = resource->ResourceContainer()) {
|
| if (IsResourceOfType<ContainerType>(container))
|
| return static_cast<ContainerType*>(container);
|
| }
|
| - tree_scope_resources.AddPendingResource(id, element);
|
| + resource->AddWatch(element);
|
| return nullptr;
|
| }
|
| }
|
| @@ -279,6 +282,22 @@ std::unique_ptr<SVGResources> SVGResources::BuildResources(
|
| : std::move(resources);
|
| }
|
|
|
| +void SVGResources::RemoveUnreferencedResources(const LayoutObject& object) {
|
| + SVGTreeScopeResources& tree_scope_resources =
|
| + ToSVGElement(*object.GetNode())
|
| + .TreeScopeForIdResolution()
|
| + .EnsureSVGTreeScopedResources();
|
| + tree_scope_resources.RemoveUnreferencedResources();
|
| +}
|
| +
|
| +void SVGResources::RemoveWatchesForElement(Element& element) {
|
| + SECURITY_DCHECK(element.IsSVGElement());
|
| + SVGElement& svg_element = ToSVGElement(element);
|
| + SVGTreeScopeResources& tree_scope_resources =
|
| + svg_element.TreeScopeForIdResolution().EnsureSVGTreeScopedResources();
|
| + tree_scope_resources.RemoveWatchesForElement(svg_element);
|
| +}
|
| +
|
| void SVGResources::LayoutIfNeeded() {
|
| if (clipper_filter_masker_data_) {
|
| if (LayoutSVGResourceClipper* clipper =
|
|
|