Bug 1288590: Use GetAttrInfoAt in ServoBindings.cpp draft
authorEmilio Cobos Álvarez <ecoal95@gmail.com>
Thu, 21 Jul 2016 19:43:38 -0700
changeset 391422 02d0768a36f860f4e363241dcf25d320e4691983
parent 391421 f437971509021bed6d4604a3a52410583b59cb05
child 392053 5665a80ea08a900fcd43f87600d3f751d58613cb
child 392064 d7468bf0a5f607476af20b920845d19b61b1587d
child 392065 e70d8b4577b20992af971a48c128f218d6dcab83
push id23902
push userbmo:ealvarez@mozilla.com
push dateFri, 22 Jul 2016 18:21:53 +0000
bugs1288590
milestone50.0a1
Bug 1288590: Use GetAttrInfoAt in ServoBindings.cpp MozReview-Commit-ID: 5tglYnx8pJk
layout/style/ServoBindings.cpp
layout/style/ServoElementSnapshot.h
--- a/layout/style/ServoBindings.cpp
+++ b/layout/style/ServoBindings.cpp
@@ -208,24 +208,22 @@ DoMatch(Implementor* aElement, nsIAtom* 
 {
   if (aNS) {
     int32_t ns = nsContentUtils::NameSpaceManager()->GetNameSpaceID(aNS);
     NS_ENSURE_TRUE(ns != kNameSpaceID_Unknown, false);
     const nsAttrValue* value = aElement->GetParsedAttr(aName, ns);
     return value && aMatch(value);
   }
   // No namespace means any namespace - we have to check them all. :-(
-  const nsAttrName* attrName;
-  for (uint32_t i = 0; (attrName = aElement->GetAttrNameAt(i)); ++i) {
-    if (attrName->LocalName() != aName) {
+  nsAttrInfo attrInfo;
+  for (uint32_t i = 0; (attrInfo = aElement->GetAttrInfoAt(i)); ++i) {
+    if (attrInfo.mName->LocalName() != aName) {
       continue;
     }
-    const nsAttrValue* value =
-      aElement->GetParsedAttr(attrName->LocalName(), attrName->NamespaceID());
-    if (aMatch(value)) {
+    if (aMatch(attrInfo.mValue)) {
       return true;
     }
   }
   return false;
 }
 
 // Work around our overly-restrictive static analysis. This can be removed once
 // bug 1281935 lands.
--- a/layout/style/ServoElementSnapshot.h
+++ b/layout/style/ServoElementSnapshot.h
@@ -6,16 +6,17 @@
 
 #ifndef mozilla_ServoElementSnapshot_h
 #define mozilla_ServoElementSnapshot_h
 
 #include "mozilla/EventStates.h"
 #include "mozilla/TypedEnumBits.h"
 #include "nsAttrName.h"
 #include "nsAttrValue.h"
+#include "nsAttrInfo.h"
 #include "nsChangeHint.h"
 #include "nsIAtom.h"
 
 namespace mozilla {
 
 namespace dom {
 class Element;
 } // namespace dom
@@ -110,22 +111,22 @@ public:
 
   nsRestyleHint ExplicitRestyleHint() { return mExplicitRestyleHint; }
 
   nsChangeHint ExplicitChangeHint() { return mExplicitChangeHint; }
 
   /**
    * Needed methods for attribute matching.
    */
-  const nsAttrName* GetAttrNameAt(uint32_t aIndex) const
+  nsAttrInfo GetAttrInfoAt(uint32_t aIndex) const
   {
     if (aIndex >= mAttrs.Length()) {
-      return nullptr;
+      return nsAttrInfo(nullptr, nullptr);
     }
-    return &mAttrs[aIndex].mName;
+    return nsAttrInfo(&mAttrs[aIndex].mName, &mAttrs[aIndex].mValue);
   }
 
   const nsAttrValue* GetParsedAttr(nsIAtom* aLocalName) const
   {
     return GetParsedAttr(aLocalName, kNameSpaceID_None);
   }
 
   const nsAttrValue* GetParsedAttr(nsIAtom* aLocalName,