void nsMutationReceiver::AttributeWillChange(nsIDocument* aDocument, mozilla::dom::Element* aElement, int32_t aNameSpaceID, nsIAtom* aAttribute, int32_t aModType) { if (nsAutoMutationBatch::IsBatching() || !ObservesAttr(aElement, aNameSpaceID, aAttribute) || aElement->ChromeOnlyAccess()) { return; } nsDOMMutationRecord* m = Observer()->CurrentRecord(NS_LITERAL_STRING("attributes")); NS_ASSERTION(!m->mTarget || m->mTarget == aElement, "Wrong target!"); NS_ASSERTION(m->mAttrName.IsVoid() || m->mAttrName.Equals(nsDependentAtomString(aAttribute)), "Wrong attribute!"); if (!m->mTarget) { m->mTarget = aElement; m->mAttrName = nsAtomString(aAttribute); if (aNameSpaceID == kNameSpaceID_None) { m->mAttrNamespace.SetIsVoid(true); } else { nsContentUtils::NameSpaceManager()->GetNameSpaceURI(aNameSpaceID, m->mAttrNamespace); } } if (AttributeOldValue() && m->mPrevValue.IsVoid()) { if (!aElement->GetAttr(aNameSpaceID, aAttribute, m->mPrevValue)) { m->mPrevValue.SetIsVoid(true); } } }
void nsMutationReceiver::AttributeWillChange(nsIDocument* aDocument, mozilla::dom::Element* aElement, int32_t aNameSpaceID, nsIAtom* aAttribute, int32_t aModType) { if (nsAutoMutationBatch::IsBatching() || !ObservesAttr(RegisterTarget(), aElement, aNameSpaceID, aAttribute)) { return; } nsDOMMutationRecord* m = Observer()->CurrentRecord(nsGkAtoms::attributes); NS_ASSERTION(!m->mTarget || m->mTarget == aElement, "Wrong target!"); NS_ASSERTION(!m->mAttrName || m->mAttrName == aAttribute, "Wrong attribute!"); if (!m->mTarget) { m->mTarget = aElement; m->mAttrName = aAttribute; if (aNameSpaceID == kNameSpaceID_None) { m->mAttrNamespace.SetIsVoid(true); } else { nsContentUtils::NameSpaceManager()->GetNameSpaceURI(aNameSpaceID, m->mAttrNamespace); } } if (AttributeOldValue() && m->mPrevValue.IsVoid()) { if (!aElement->GetAttr(aNameSpaceID, aAttribute, m->mPrevValue)) { m->mPrevValue.SetIsVoid(true); } } }