Bug 1325279 - Put the reaction queue in CustomElementData structure instead of using a map;

Bug 1347446 makes accessing ElementReactionQueue becomes a bit non-trival (have to get it via DocGroup). Since bug 1359346 already refactors the creation time of CustomElementData, ReactionQueue can also be put into CustomElementData, then we can just get ReactionQueue from Element.

Tag UXP Issue #1344
This commit is contained in:
Gaming4JC 2020-01-04 19:47:42 -05:00 committed by Roy Tam
commit b631d9d59c
2 changed files with 21 additions and 29 deletions

View file

@ -933,23 +933,20 @@ void
CustomElementReactionsStack::Enqueue(Element* aElement,
CustomElementReaction* aReaction)
{
RefPtr<CustomElementData> elementData = aElement->GetCustomElementData();
MOZ_ASSERT(elementData, "CustomElementData should exist");
// Add element to the current element queue.
if (!mReactionsStack.IsEmpty()) {
mReactionsStack.LastElement().AppendElement(do_GetWeakReference(aElement));
ReactionQueue* reactionQueue =
mElementReactionQueueMap.LookupOrAdd(aElement);
reactionQueue->AppendElement(aReaction);
elementData->mReactionQueue.AppendElement(aReaction);
return;
}
// If the custom element reactions stack is empty, then:
// Add element to the backup element queue.
mBackupQueue.AppendElement(do_GetWeakReference(aElement));
ReactionQueue* reactionQueue =
mElementReactionQueueMap.LookupOrAdd(aElement);
reactionQueue->AppendElement(aReaction);
elementData->mReactionQueue.AppendElement(aReaction);
if (mIsBackupQueueProcessing) {
return;
@ -980,16 +977,15 @@ CustomElementReactionsStack::InvokeReactions(ElementQueue& aElementQueue)
continue;
}
nsAutoPtr<ReactionQueue> reactions;
mElementReactionQueueMap.RemoveAndForget(element, reactions);
RefPtr<CustomElementData> elementData = element->GetCustomElementData();
MOZ_ASSERT(elementData, "CustomElementData should exist");
MOZ_ASSERT(reactions,
"Associated ReactionQueue must be found in mElementReactionQueueMap");
for (uint32_t j = 0; j < reactions->Length(); ++j) {
nsAutoPtr<CustomElementReaction>& reaction = reactions->ElementAt(j);
reaction->Invoke(element);
nsTArray<nsAutoPtr<CustomElementReaction>>& reactions =
elementData->mReactionQueue;
for (uint32_t j = 0; j < reactions.Length(); ++j) {
reactions.ElementAt(j)->Invoke(element);
}
reactions.Clear();
}
aElementQueue.Clear();
}
@ -997,7 +993,6 @@ CustomElementReactionsStack::InvokeReactions(ElementQueue& aElementQueue)
//-----------------------------------------------------
// CustomElementDefinition
CustomElementDefinition::CustomElementDefinition(nsIAtom* aType,
nsIAtom* aLocalName,
JSObject* aConstructor,