From d34a9c577816e8136425b3db13dcdda2c63413d2 Mon Sep 17 00:00:00 2001 From: ownedbywuigi Date: Fri, 27 Mar 2026 11:34:40 +0000 Subject: [PATCH] Refactor MaybeCheckSameAttrVal to streamline old value storage for custom elements --- dom/base/Element.cpp | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/dom/base/Element.cpp b/dom/base/Element.cpp index 364022644d..18858a159f 100644 --- a/dom/base/Element.cpp +++ b/dom/base/Element.cpp @@ -2336,6 +2336,7 @@ Element::MaybeCheckSameAttrVal(int32_t aNamespaceID, bool* aOldValueSet) { bool modification = false; + CustomElementData* customElementData = GetCustomElementData(); *aHasListeners = aNotify && nsContentUtils::HasMutationListeners(this, NS_EVENT_BITS_MUTATION_ATTRMODIFIED, @@ -2351,13 +2352,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 @@ -2368,10 +2370,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; } }