1
0
mirror of https://github.com/roytam1/UXP.git synced 2026-05-26 13:58:49 +00:00

Issue #3030 - Account for custom elements in attribute value checking.

Refactors MaybeCheckSameAttrVal to streamline old value storage for
custom elements.
This commit is contained in:
ownedbywuigi
2026-03-27 11:34:40 +00:00
committed by roytam1
parent f0a31850de
commit 8d7580c4ce
+10 -11
View File
@@ -2342,6 +2342,7 @@ Element::MaybeCheckSameAttrVal(int32_t aNamespaceID,
bool* aOldValueSet)
{
bool modification = false;
CustomElementData* customElementData = GetCustomElementData();
*aHasListeners = aNotify &&
nsContentUtils::HasMutationListeners(this,
NS_EVENT_BITS_MUTATION_ATTRMODIFIED,
@@ -2357,13 +2358,14 @@ Element::MaybeCheckSameAttrVal(int32_t aNamespaceID,
if (*aHasListeners || aNotify) {
BorrowedAttrInfo info(GetAttrInfo(aNamespaceID, aName));
if (info.mValue) {
// Check whether the old value is the same as the new one. Note that we
// only need to actually _get_ the old value if we have listeners or
// if the element is a custom element (because it may have an
// attribute changed callback).
if (*aHasListeners || GetCustomElementData()) {
// Need to store the old value.
//
bool valueMatches = aValue.EqualsAsStrings(*info.mValue);
if (valueMatches && aPrefix == info.mName->GetPrefix()) {
return true;
}
// Need to store the old value if listeners are present or this is a
// custom element that may run an attribute-changed callback.
if (*aHasListeners || customElementData) {
// If the current attribute value contains a pointer to some other data
// structure that gets updated in the process of setting the attribute
// we'll no longer have the old value of the attribute. Therefore, we
@@ -2374,10 +2376,7 @@ Element::MaybeCheckSameAttrVal(int32_t aNamespaceID,
aOldValue.SetToSerialized(*info.mValue);
*aOldValueSet = true;
}
bool valueMatches = aValue.EqualsAsStrings(*info.mValue);
if (valueMatches && aPrefix == info.mName->GetPrefix()) {
return true;
}
modification = true;
}
}