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

Side by Side Diff: Source/core/rendering/svg/SVGResourcesCache.cpp

Issue 787563003: Fix RenderSVGResourceContainer task re-ordering bug (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: New fix Created 6 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "config.h" 20 #include "config.h"
21 #include "core/rendering/svg/SVGResourcesCache.h" 21 #include "core/rendering/svg/SVGResourcesCache.h"
22 22
23 #include "core/HTMLNames.h" 23 #include "core/HTMLNames.h"
24 #include "core/rendering/RenderLayer.h"
24 #include "core/rendering/svg/RenderSVGResourceContainer.h" 25 #include "core/rendering/svg/RenderSVGResourceContainer.h"
25 #include "core/rendering/svg/SVGResources.h" 26 #include "core/rendering/svg/SVGResources.h"
26 #include "core/rendering/svg/SVGResourcesCycleSolver.h" 27 #include "core/rendering/svg/SVGResourcesCycleSolver.h"
27 #include "core/svg/SVGDocumentExtensions.h" 28 #include "core/svg/SVGDocumentExtensions.h"
28 29
29 namespace blink { 30 namespace blink {
30 31
31 SVGResourcesCache::SVGResourcesCache() 32 SVGResourcesCache::SVGResourcesCache()
32 { 33 {
33 } 34 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 static inline bool rendererCanHaveResources(RenderObject* renderer) 111 static inline bool rendererCanHaveResources(RenderObject* renderer)
111 { 112 {
112 ASSERT(renderer); 113 ASSERT(renderer);
113 return renderer->node() && renderer->node()->isSVGElement() && !renderer->is SVGInlineText(); 114 return renderer->node() && renderer->node()->isSVGElement() && !renderer->is SVGInlineText();
114 } 115 }
115 116
116 void SVGResourcesCache::clientStyleChanged(RenderObject* renderer, StyleDifferen ce diff, const RenderStyle* newStyle) 117 void SVGResourcesCache::clientStyleChanged(RenderObject* renderer, StyleDifferen ce diff, const RenderStyle* newStyle)
117 { 118 {
118 ASSERT(renderer); 119 ASSERT(renderer);
119 ASSERT(renderer->node()); 120 ASSERT(renderer->node());
120 ASSERT(renderer->node()->isSVGElement());
121 121
122 if (!diff.hasDifference() || !renderer->parent()) 122 if (!diff.hasDifference() || !renderer->parent())
123 return; 123 return;
124 124
125 // If the renderer has a filter, make sure RenderLayer::updateFilters gets c alled.
126 if (renderer->hasFilter())
127 renderer->enclosingLayer()->styleChanged(diff, newStyle);
128
125 // In this case the proper SVGFE*Element will decide whether the modified CS S properties require a relayout or paintInvalidation. 129 // In this case the proper SVGFE*Element will decide whether the modified CS S properties require a relayout or paintInvalidation.
126 if (renderer->isSVGResourceFilterPrimitive() && !diff.needsLayout()) 130 if (renderer->isSVGResourceFilterPrimitive() && !diff.needsLayout())
127 return; 131 return;
128 132
129 // Dynamic changes of CSS properties like 'clip-path' may require us to reco mpute the associated resources for a renderer. 133 // Dynamic changes of CSS properties like 'clip-path' may require us to reco mpute the associated resources for a renderer.
130 // FIXME: Avoid passing in a useless StyleDifference, but instead compare ol dStyle/newStyle to see which resources changed 134 // FIXME: Avoid passing in a useless StyleDifference, but instead compare ol dStyle/newStyle to see which resources changed
131 // to be able to selectively rebuild individual resources, instead of all of them. 135 // to be able to selectively rebuild individual resources, instead of all of them.
132 if (rendererCanHaveResources(renderer)) { 136 if (rendererCanHaveResources(renderer)) {
133 SVGResourcesCache* cache = resourcesCacheFromRenderObject(renderer); 137 SVGResourcesCache* cache = resourcesCacheFromRenderObject(renderer);
134 cache->removeResourcesFromRenderObject(renderer); 138 cache->removeResourcesFromRenderObject(renderer);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 // Mark users of destroyed resources as pending resolution based on the id of the old resource. 192 // Mark users of destroyed resources as pending resolution based on the id of the old resource.
189 Element* resourceElement = resource->element(); 193 Element* resourceElement = resource->element();
190 Element* clientElement = toElement(objectResources.key->node()); 194 Element* clientElement = toElement(objectResources.key->node());
191 SVGDocumentExtensions& extensions = clientElement->document().accessSVGE xtensions(); 195 SVGDocumentExtensions& extensions = clientElement->document().accessSVGE xtensions();
192 196
193 extensions.addPendingResource(resourceElement->fastGetAttribute(HTMLName s::idAttr), clientElement); 197 extensions.addPendingResource(resourceElement->fastGetAttribute(HTMLName s::idAttr), clientElement);
194 } 198 }
195 } 199 }
196 200
197 } 201 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698