Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: third_party/WebKit/Source/core/layout/svg/SVGResources.cpp

Issue 2824823003: DOM-based SVG resource tracking (Closed)
Patch Set: Update baselines Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 2 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 template <> 150 template <>
151 bool IsResourceOfType<LayoutSVGResourceContainer>( 151 bool IsResourceOfType<LayoutSVGResourceContainer>(
152 LayoutSVGResourceContainer* container) { 152 LayoutSVGResourceContainer* container) {
153 return true; 153 return true;
154 } 154 }
155 155
156 template <typename ContainerType> 156 template <typename ContainerType>
157 ContainerType* AttachToResource(SVGTreeScopeResources& tree_scope_resources, 157 ContainerType* AttachToResource(SVGTreeScopeResources& tree_scope_resources,
158 const AtomicString& id, 158 const AtomicString& id,
159 SVGElement& element) { 159 SVGElement& element) {
160 if (LayoutSVGResourceContainer* container = 160 SVGTreeScopeResources::Resource* resource =
161 tree_scope_resources.ResourceById(id)) { 161 tree_scope_resources.ResourceForId(id);
162 if (!resource)
163 return nullptr;
164 if (LayoutSVGResourceContainer* container = resource->ResourceContainer()) {
162 if (IsResourceOfType<ContainerType>(container)) 165 if (IsResourceOfType<ContainerType>(container))
163 return static_cast<ContainerType*>(container); 166 return static_cast<ContainerType*>(container);
164 } 167 }
165 tree_scope_resources.AddPendingResource(id, element); 168 resource->AddWatch(element);
166 return nullptr; 169 return nullptr;
167 } 170 }
168 } 171 }
169 172
170 bool SVGResources::HasResourceData() const { 173 bool SVGResources::HasResourceData() const {
171 return clipper_filter_masker_data_ || marker_data_ || fill_stroke_data_ || 174 return clipper_filter_masker_data_ || marker_data_ || fill_stroke_data_ ||
172 linked_resource_; 175 linked_resource_;
173 } 176 }
174 177
175 static inline SVGResources& EnsureResources( 178 static inline SVGResources& EnsureResources(
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 AtomicString id = TargetReferenceFromResource(element); 275 AtomicString id = TargetReferenceFromResource(element);
273 EnsureResources(resources).SetLinkedResource( 276 EnsureResources(resources).SetLinkedResource(
274 AttachToResource<LayoutSVGResourceContainer>(tree_scope_resources, id, 277 AttachToResource<LayoutSVGResourceContainer>(tree_scope_resources, id,
275 element)); 278 element));
276 } 279 }
277 280
278 return (!resources || !resources->HasResourceData()) ? nullptr 281 return (!resources || !resources->HasResourceData()) ? nullptr
279 : std::move(resources); 282 : std::move(resources);
280 } 283 }
281 284
285 void SVGResources::RemoveUnreferencedResources(const LayoutObject& object) {
286 SVGTreeScopeResources& tree_scope_resources =
287 ToSVGElement(*object.GetNode())
288 .TreeScopeForIdResolution()
289 .EnsureSVGTreeScopedResources();
290 tree_scope_resources.RemoveUnreferencedResources();
291 }
292
293 void SVGResources::RemoveWatchesForElement(Element& element) {
294 SECURITY_DCHECK(element.IsSVGElement());
295 SVGElement& svg_element = ToSVGElement(element);
296 SVGTreeScopeResources& tree_scope_resources =
297 svg_element.TreeScopeForIdResolution().EnsureSVGTreeScopedResources();
298 tree_scope_resources.RemoveWatchesForElement(svg_element);
299 }
300
282 void SVGResources::LayoutIfNeeded() { 301 void SVGResources::LayoutIfNeeded() {
283 if (clipper_filter_masker_data_) { 302 if (clipper_filter_masker_data_) {
284 if (LayoutSVGResourceClipper* clipper = 303 if (LayoutSVGResourceClipper* clipper =
285 clipper_filter_masker_data_->clipper) 304 clipper_filter_masker_data_->clipper)
286 clipper->LayoutIfNeeded(); 305 clipper->LayoutIfNeeded();
287 if (LayoutSVGResourceMasker* masker = clipper_filter_masker_data_->masker) 306 if (LayoutSVGResourceMasker* masker = clipper_filter_masker_data_->masker)
288 masker->LayoutIfNeeded(); 307 masker->LayoutIfNeeded();
289 if (LayoutSVGResourceFilter* filter = clipper_filter_masker_data_->filter) 308 if (LayoutSVGResourceFilter* filter = clipper_filter_masker_data_->filter)
290 filter->LayoutIfNeeded(); 309 filter->LayoutIfNeeded();
291 } 310 }
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 stroke->GetElement()); 673 stroke->GetElement());
655 } 674 }
656 675
657 if (linked_resource_) 676 if (linked_resource_)
658 fprintf(stderr, " |-> xlink:href : %p (node=%p)\n", linked_resource_, 677 fprintf(stderr, " |-> xlink:href : %p (node=%p)\n", linked_resource_,
659 linked_resource_->GetElement()); 678 linked_resource_->GetElement());
660 } 679 }
661 #endif 680 #endif
662 681
663 } // namespace blink 682 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698