Chromium Code Reviews| Index: Source/core/dom/Element.cpp |
| diff --git a/Source/core/dom/Element.cpp b/Source/core/dom/Element.cpp |
| index 899045fefa31be39fa3c4a11fc497c45e52c5153..2b27d19d3e17d004cabfc7f561c92ed1c25fc6dc 100644 |
| --- a/Source/core/dom/Element.cpp |
| +++ b/Source/core/dom/Element.cpp |
| @@ -431,7 +431,7 @@ const AtomicString& Element::getAttribute(const QualifiedName& name) const |
| if (!elementData()) |
| return nullAtom; |
| synchronizeAttribute(name); |
| - if (const Attribute* attribute = attributes().find(name)) |
| + if (const Attribute* attribute = elementData()->attributes().find(name)) |
| return attribute->value(); |
| return nullAtom; |
| } |
| @@ -910,7 +910,7 @@ ALWAYS_INLINE void Element::setAttributeInternal(size_t index, const QualifiedNa |
| return; |
| } |
| - const Attribute& existingAttribute = attributes().at(index); |
| + const Attribute& existingAttribute = elementData()->attributes().at(index); |
| QualifiedName existingAttributeName = existingAttribute.name(); |
| if (!inSynchronizationOfLazyAttribute) |
| @@ -1135,12 +1135,6 @@ void Element::parserSetAttributes(const Vector<Attribute>& attributeVector) |
| attributeChangedFromParserOrByCloning(attributeVector[i].name(), attributeVector[i].value(), ModifiedDirectly); |
| } |
| -bool Element::hasAttributes() const |
| -{ |
| - synchronizeAllAttributes(); |
| - return elementData() && !elementData()->attributes().isEmpty(); |
| -} |
| - |
| bool Element::hasEquivalentAttributes(const Element* other) const |
| { |
| synchronizeAllAttributes(); |
| @@ -1192,13 +1186,11 @@ const AtomicString& Element::locateNamespacePrefix(const AtomicString& namespace |
| if (!prefix().isNull() && namespaceURI() == namespaceToLocate) |
| return prefix(); |
| - if (hasAttributes()) { |
| - AttributeCollection attributes = this->attributes(); |
| - AttributeCollection::const_iterator end = attributes.end(); |
| - for (AttributeCollection::const_iterator it = attributes.begin(); it != end; ++it) { |
| - if (it->prefix() == xmlnsAtom && it->value() == namespaceToLocate) |
| - return it->localName(); |
| - } |
| + AttributeCollection attributes = this->attributes(); |
| + AttributeCollection::const_iterator end = attributes.end(); |
| + for (AttributeCollection::const_iterator it = attributes.begin(); it != end; ++it) { |
| + if (it->prefix() == xmlnsAtom && it->value() == namespaceToLocate) |
| + return it->localName(); |
| } |
| if (Element* parent = parentElement()) |
| @@ -2493,10 +2485,9 @@ void Element::cancelFocusAppearanceUpdate() |
| void Element::normalizeAttributes() |
| { |
| - if (!hasAttributes()) |
| - return; |
| + synchronizeAllAttributes(); |
| WillBeHeapVector<RefPtrWillBeMember<Attr> >* attrNodes = attrNodeList(); |
| - if (!attrNodes) |
| + if (!attrNodes || attrNodes->isEmpty()) |
|
adamk
2014/08/04 18:54:34
Why did this change?
Inactive
2014/08/04 19:09:46
I wanted to avoid the ElementData() null check in
Inactive
2014/08/04 19:39:52
Done.
|
| return; |
| // Copy the Attr Vector because Node::normalize() can fire synchronous JS |
| // events (e.g. DOMSubtreeModified) and a JS listener could add / remove |
| @@ -2969,7 +2960,7 @@ void Element::detachAllAttrNodesFromElement() |
| AttrNodeList* list = this->attrNodeList(); |
| ASSERT(list); |
| - AttributeCollection attributes = this->attributes(); |
| + AttributeCollection attributes = elementData()->attributes(); |
|
adamk
2014/08/04 18:54:34
I've seen enough of these that it worries me someo
Inactive
2014/08/04 19:09:46
I did not want do cause more work than before my p
adamk
2014/08/04 19:29:51
The more I think about this the more it's a reason
Inactive
2014/08/04 19:39:52
Ok, I kept it as is.
|
| AttributeCollection::const_iterator end = attributes.end(); |
| for (AttributeCollection::const_iterator it = attributes.begin(); it != end; ++it) { |
| if (RefPtrWillBeRawPtr<Attr> attrNode = findAttrNodeInList(*list, it->name())) |