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

Unified Diff: third_party/WebKit/Source/core/svg/SVGUseElement.cpp

Issue 1377063004: Use more const, more RefPtrs while iterating the SVG shadow tree. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGUseElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/svg/SVGUseElement.cpp
diff --git a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
index bcdc4ba03b4403d2e60b5fb346318521d40168b2..175309cf366193019c1fb42838d5b3c26842e20b 100644
--- a/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
+++ b/third_party/WebKit/Source/core/svg/SVGUseElement.cpp
@@ -31,9 +31,9 @@
#include "core/XLinkNames.h"
#include "core/dom/Document.h"
#include "core/dom/ElementTraversal.h"
-#include "core/events/Event.h"
#include "core/dom/shadow/ElementShadow.h"
#include "core/dom/shadow/ShadowRoot.h"
+#include "core/events/Event.h"
#include "core/fetch/FetchRequest.h"
#include "core/fetch/ResourceFetcher.h"
#include "core/layout/svg/LayoutSVGTransformableContainer.h"
@@ -41,6 +41,7 @@
#include "core/svg/SVGLengthContext.h"
#include "core/svg/SVGSVGElement.h"
#include "core/xml/parser/XMLDocumentParser.h"
+#include "wtf/Vector.h"
namespace blink {
@@ -243,7 +244,7 @@ void SVGUseElement::svgAttributeChanged(const QualifiedName& attrName)
SVGGraphicsElement::svgAttributeChanged(attrName);
}
-static bool isDisallowedElement(Node* node)
+static bool isDisallowedElement(const Node* node)
{
// Spec: "Any 'svg', 'symbol', 'g', graphics element or other 'use' is potentially a template object that can be re-used
// (i.e., "instanced") in the SVG document via a 'use' element."
@@ -256,7 +257,7 @@ static bool isDisallowedElement(Node* node)
if (!node->isSVGElement())
return true;
- Element* element = toElement(node);
+ const Element* element = toElement(node);
DEFINE_STATIC_LOCAL(HashSet<QualifiedName>, allowedElementTags, ());
if (allowedElementTags.isEmpty()) {
@@ -284,12 +285,12 @@ static bool isDisallowedElement(Node* node)
return !allowedElementTags.contains<SVGAttributeHashTranslator>(element->tagQName());
}
-static bool subtreeContainsDisallowedElement(Node* start)
+static bool subtreeContainsDisallowedElement(const Node* start)
{
if (isDisallowedElement(start))
return true;
- for (Node* cur = start->firstChild(); cur; cur = cur->nextSibling()) {
+ for (const Node* cur = start->firstChild(); cur; cur = cur->nextSibling()) {
if (subtreeContainsDisallowedElement(cur))
return true;
}
@@ -372,7 +373,7 @@ static PassRefPtrWillBeRawPtr<Node> cloneNodeAndAssociate(Node& toClone)
if (EventTargetData* data = toClone.eventTargetData())
data->eventListenerMap.copyEventListenersNotCreatedFromMarkupToTarget(clone.get());
TrackExceptionState exceptionState;
- for (Node* node = toClone.firstChild(); node && !exceptionState.hadException(); node = node->nextSibling())
+ for (RefPtrWillBeRawPtr<Node> node = toClone.firstChild(); node && !exceptionState.hadException(); node = node->nextSibling())
clone->appendChild(cloneNodeAndAssociate(*node), exceptionState);
return clone.release();
}
@@ -516,9 +517,9 @@ bool SVGUseElement::buildShadowTree(SVGElement* target, SVGElement* targetInstan
if (EventTargetData* data = target->eventTargetData())
data->eventListenerMap.copyEventListenersNotCreatedFromMarkupToTarget(targetInstance);
- for (Node* child = target->firstChild(); child; child = child->nextSibling()) {
+ for (RefPtrWillBeRawPtr<Node> child = target->firstChild(); child; child = child->nextSibling()) {
// Skip any disallowed element.
- if (isDisallowedElement(child))
+ if (isDisallowedElement(child.get()))
continue;
RefPtrWillBeRawPtr<Node> newChild = child->cloneNode(false);
@@ -601,10 +602,10 @@ bool SVGUseElement::expandUseElementsInShadowTree(SVGElement* element)
cloneParent->setCorrespondingElement(use->correspondingElement());
// Move already cloned elements to the new <g> element
- for (Node* child = use->firstChild(); child; ) {
- Node* nextChild = child->nextSibling();
+ for (RefPtrWillBeRawPtr<Node> child = use->firstChild(); child; ) {
+ RefPtrWillBeRawPtr<Node> nextChild = child->nextSibling();
cloneParent->appendChild(child);
- child = nextChild;
+ child = nextChild.release();
}
// Spec: In the generated content, the 'use' will be replaced by 'g', where all attributes from the
@@ -665,10 +666,10 @@ void SVGUseElement::expandSymbolElementsInShadowTree(SVGElement* element)
svgElement->setCorrespondingElement(element->correspondingElement());
// Move already cloned elements to the new <svg> element
- for (Node* child = element->firstChild(); child; ) {
- Node* nextChild = child->nextSibling();
+ for (RefPtrWillBeRawPtr<Node> child = element->firstChild(); child; ) {
+ RefPtrWillBeRawPtr<Node> nextChild = child->nextSibling();
svgElement->appendChild(child);
- child = nextChild;
+ child = nextChild.release();
}
// We don't walk the target tree element-by-element, and clone each element,
@@ -706,9 +707,11 @@ void SVGUseElement::invalidateShadowTree()
void SVGUseElement::invalidateDependentShadowTrees()
{
// Recursively invalidate dependent <use> shadow trees
- const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>>& instances = instancesForElement();
- for (SVGElement* instance : instances) {
- if (SVGUseElement* element = instance->correspondingUseElement()) {
+ const WillBeHeapHashSet<RawPtrWillBeWeakMember<SVGElement>>& rawInstances = instancesForElement();
+ Vector<RefPtrWillBeRawPtr<SVGElement>> instances;
+ instances.appendRange(rawInstances.begin(), rawInstances.end());
+ for (auto& instance : instances) {
+ if (RefPtrWillBeRawPtr<SVGUseElement> element = instance->correspondingUseElement()) {
ASSERT(element->inDocument());
element->invalidateShadowTree();
}
@@ -779,9 +782,9 @@ void SVGUseElement::notifyFinished(Resource* resource)
return;
invalidateShadowTree();
- if (resource->errorOccurred())
+ if (resource->errorOccurred()) {
dispatchEvent(Event::create(EventTypeNames::error));
- else if (!resource->wasCanceled()) {
+ } else if (!resource->wasCanceled()) {
if (m_haveFiredLoadEvent)
return;
if (!isStructurallyExternal())
@@ -792,17 +795,17 @@ void SVGUseElement::notifyFinished(Resource* resource)
}
}
-bool SVGUseElement::resourceIsStillLoading()
+bool SVGUseElement::resourceIsStillLoading() const
{
if (m_resource && m_resource->isLoading())
return true;
return false;
}
-bool SVGUseElement::instanceTreeIsLoading(SVGElement* targetInstance)
+bool SVGUseElement::instanceTreeIsLoading(const SVGElement* targetInstance)
{
- for (SVGElement* element = Traversal<SVGElement>::firstChild(*targetInstance); element; element = Traversal<SVGElement>::nextSibling(*element)) {
- if (SVGUseElement* use = element->correspondingUseElement()) {
+ for (const SVGElement* element = Traversal<SVGElement>::firstChild(*targetInstance); element; element = Traversal<SVGElement>::nextSibling(*element)) {
+ if (const SVGUseElement* use = element->correspondingUseElement()) {
if (use->resourceIsStillLoading())
return true;
}
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGUseElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698