Bug 1288590: Use GetAttrInfoAt in SVGUseElement.cpp
MozReview-Commit-ID: BXdOCztAm2k
--- a/dom/base/nsAttrInfo.h
+++ b/dom/base/nsAttrInfo.h
@@ -34,11 +34,13 @@ struct nsAttrInfo
nsAttrInfo(const nsAttrInfo& aOther)
: mName(aOther.mName)
, mValue(aOther.mValue)
{
}
const nsAttrName* mName;
const nsAttrValue* mValue;
+
+ explicit operator bool() const { return mName != nullptr; }
};
#endif
--- a/dom/svg/SVGUseElement.cpp
+++ b/dom/svg/SVGUseElement.cpp
@@ -294,27 +294,28 @@ SVGUseElement::CreateAnonymousContent()
nsIDOMNode::ELEMENT_NODE);
nsCOMPtr<nsIContent> svgNode;
NS_NewSVGSVGElement(getter_AddRefs(svgNode), nodeInfo.forget(),
NOT_FROM_PARSER);
if (!svgNode)
return nullptr;
-
+
// copy attributes
- const nsAttrName* name;
+ nsAttrInfo info;
uint32_t i;
- for (i = 0; (name = newcontent->GetAttrNameAt(i)); i++) {
+ for (i = 0; (info = newcontent->GetAttrInfoAt(i)); i++) {
nsAutoString value;
- int32_t nsID = name->NamespaceID();
- nsIAtom* lname = name->LocalName();
+ int32_t nsID = info.mName->NamespaceID();
+ nsIAtom* lname = info.mName->LocalName();
- newcontent->GetAttr(nsID, lname, value);
- svgNode->SetAttr(nsID, lname, name->GetPrefix(), value, false);
+ info.mValue->ToString(value);
+
+ svgNode->SetAttr(nsID, lname, info.mName->GetPrefix(), value, false);
}
// move the children over
uint32_t num = newcontent->GetChildCount();
for (i = 0; i < num; i++) {
nsCOMPtr<nsIContent> child = newcontent->GetFirstChild();
newcontent->RemoveChildAt(0, false);
svgNode->InsertChildAt(child, i, true);