Bug 1288590: Use GetAttrInfoAt in SVGUseElement.cpp draft
authorEmilio Cobos Álvarez <ecoal95@gmail.com>
Thu, 21 Jul 2016 19:18:07 -0700
changeset 391418 ed9a07ed9e5753f00b028c5b15edf08fd41fe66b
parent 391417 ead7cfa915b3a061248b7ca115343209e7353f9a
child 391419 b3e847bf4009e9684addbc87fb6f619339830701
push id23902
push userbmo:ealvarez@mozilla.com
push dateFri, 22 Jul 2016 18:21:53 +0000
bugs1288590
milestone50.0a1
Bug 1288590: Use GetAttrInfoAt in SVGUseElement.cpp MozReview-Commit-ID: BXdOCztAm2k
dom/base/nsAttrInfo.h
dom/svg/SVGUseElement.cpp
--- 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);