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

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

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details. 12 * Library General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU Library General Public License 14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to 15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA. 17 * Boston, MA 02110-1301, USA.
18 */ 18 */
19 19
20 #include "core/layout/svg/SVGResourcesCache.h" 20 #include "core/layout/svg/SVGResourcesCache.h"
21 21
22 #include "core/HTMLNames.h" 22 #include "core/HTMLNames.h"
23 #include "core/layout/svg/LayoutSVGResourceContainer.h" 23 #include "core/layout/svg/LayoutSVGResourceContainer.h"
24 #include "core/layout/svg/SVGResources.h" 24 #include "core/layout/svg/SVGResources.h"
25 #include "core/layout/svg/SVGResourcesCycleSolver.h" 25 #include "core/layout/svg/SVGResourcesCycleSolver.h"
26 #include "core/svg/SVGDocumentExtensions.h" 26 #include "core/svg/SVGDocumentExtensions.h"
27 #include <memory>
28 27
29 namespace blink { 28 namespace blink {
30 29
31 SVGResourcesCache::SVGResourcesCache() 30 SVGResourcesCache::SVGResourcesCache()
32 { 31 {
33 } 32 }
34 33
35 SVGResourcesCache::~SVGResourcesCache() 34 SVGResourcesCache::~SVGResourcesCache()
36 { 35 {
37 } 36 }
38 37
39 void SVGResourcesCache::addResourcesFromLayoutObject(LayoutObject* object, const ComputedStyle& style) 38 void SVGResourcesCache::addResourcesFromLayoutObject(LayoutObject* object, const ComputedStyle& style)
40 { 39 {
41 ASSERT(object); 40 ASSERT(object);
42 ASSERT(!m_cache.contains(object)); 41 ASSERT(!m_cache.contains(object));
43 42
44 const SVGComputedStyle& svgStyle = style.svgStyle(); 43 const SVGComputedStyle& svgStyle = style.svgStyle();
45 44
46 // Build a list of all resources associated with the passed LayoutObject. 45 // Build a list of all resources associated with the passed LayoutObject.
47 std::unique_ptr<SVGResources> newResources = SVGResources::buildResources(ob ject, svgStyle); 46 OwnPtr<SVGResources> newResources = SVGResources::buildResources(object, svg Style);
48 if (!newResources) 47 if (!newResources)
49 return; 48 return;
50 49
51 // Put object in cache. 50 // Put object in cache.
52 SVGResources* resources = m_cache.set(object, std::move(newResources)).store dValue->value.get(); 51 SVGResources* resources = m_cache.set(object, std::move(newResources)).store dValue->value.get();
53 52
54 // Run cycle-detection _afterwards_, so self-references can be caught as wel l. 53 // Run cycle-detection _afterwards_, so self-references can be caught as wel l.
55 SVGResourcesCycleSolver solver(object, resources); 54 SVGResourcesCycleSolver solver(object, resources);
56 solver.resolveCycles(); 55 solver.resolveCycles();
57 56
58 // Walk resources and register the layout object as a client of each resourc e. 57 // Walk resources and register the layout object as a client of each resourc e.
59 HashSet<LayoutSVGResourceContainer*> resourceSet; 58 HashSet<LayoutSVGResourceContainer*> resourceSet;
60 resources->buildSetOfResources(resourceSet); 59 resources->buildSetOfResources(resourceSet);
61 60
62 for (auto* resourceContainer : resourceSet) 61 for (auto* resourceContainer : resourceSet)
63 resourceContainer->addClient(object); 62 resourceContainer->addClient(object);
64 } 63 }
65 64
66 void SVGResourcesCache::removeResourcesFromLayoutObject(LayoutObject* object) 65 void SVGResourcesCache::removeResourcesFromLayoutObject(LayoutObject* object)
67 { 66 {
68 std::unique_ptr<SVGResources> resources = m_cache.take(object); 67 OwnPtr<SVGResources> resources = m_cache.take(object);
69 if (!resources) 68 if (!resources)
70 return; 69 return;
71 70
72 // Walk resources and unregister the layout object as a client of each resou rce. 71 // Walk resources and unregister the layout object as a client of each resou rce.
73 HashSet<LayoutSVGResourceContainer*> resourceSet; 72 HashSet<LayoutSVGResourceContainer*> resourceSet;
74 resources->buildSetOfResources(resourceSet); 73 resources->buildSetOfResources(resourceSet);
75 74
76 for (auto* resourceContainer : resourceSet) 75 for (auto* resourceContainer : resourceSet)
77 resourceContainer->removeClient(object); 76 resourceContainer->removeClient(object);
78 } 77 }
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 ASSERT(layoutObject); 162 ASSERT(layoutObject);
164 163
165 SVGResources* resources = cachedResourcesForLayoutObject(layoutObject); 164 SVGResources* resources = cachedResourcesForLayoutObject(layoutObject);
166 if (resources) 165 if (resources)
167 resources->removeClientFromCache(layoutObject); 166 resources->removeClientFromCache(layoutObject);
168 SVGResourcesCache& cache = resourcesCache(layoutObject->document()); 167 SVGResourcesCache& cache = resourcesCache(layoutObject->document());
169 cache.removeResourcesFromLayoutObject(layoutObject); 168 cache.removeResourcesFromLayoutObject(layoutObject);
170 } 169 }
171 170
172 } // namespace blink 171 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698