diff options
Diffstat (limited to 'dom')
-rw-r--r-- | dom/base/CustomElementRegistry.cpp | 29 | ||||
-rw-r--r-- | dom/base/CustomElementRegistry.h | 21 |
2 files changed, 21 insertions, 29 deletions
diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp index 6c643d861..bd48f3c07 100644 --- a/dom/base/CustomElementRegistry.cpp +++ b/dom/base/CustomElementRegistry.cpp @@ -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); - - MOZ_ASSERT(reactions, - "Associated ReactionQueue must be found in mElementReactionQueueMap"); + RefPtr<CustomElementData> elementData = element->GetCustomElementData(); + MOZ_ASSERT(elementData, "CustomElementData should exist"); - 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, diff --git a/dom/base/CustomElementRegistry.h b/dom/base/CustomElementRegistry.h index 6184c0ac3..cb7bd67a5 100644 --- a/dom/base/CustomElementRegistry.h +++ b/dom/base/CustomElementRegistry.h @@ -25,6 +25,7 @@ struct CustomElementData; struct ElementDefinitionOptions; struct LifecycleCallbacks; class CallbackFunction; +class CustomElementReaction; class Function; class Promise; @@ -102,6 +103,13 @@ struct CustomElementData int32_t mAssociatedMicroTask; // Custom element state as described in the custom element spec. State mState; + // custom element reaction queue as described in the custom element spec. + // There is 1 reaction in reaction queue, when 1) it becomes disconnected, + // 2) it’s adopted into a new document, 3) its attributes are changed, + // appended, removed, or replaced. + // There are 3 reactions in reaction queue when doing upgrade operation, + // e.g., create an element, insert a node. + AutoTArray<nsAutoPtr<CustomElementReaction>, 3> mReactionQueue; // Empties the callback queue. void RunCallbackQueue(); @@ -190,7 +198,7 @@ public: } // nsWeakPtr is a weak pointer of Element - // The element reaction queues are stored in ElementReactionQueueMap. + // The element reaction queues are stored in CustomElementData. // We need to lookup ElementReactionQueueMap again to get relevant reaction queue. // The choice of 1 for the auto size here is based on gut feeling. typedef AutoTArray<nsWeakPtr, 1> ElementQueue; @@ -215,17 +223,6 @@ public: private: ~CustomElementReactionsStack() {}; - // There is 1 reaction in reaction queue, when 1) it becomes disconnected, - // 2) it’s adopted into a new document, 3) its attributes are changed, - // appended, removed, or replaced. - // There are 3 reactions in reaction queue when doing upgrade operation, - // e.g., create an element, insert a node. - typedef AutoTArray<nsAutoPtr<CustomElementReaction>, 3> ReactionQueue; - typedef nsClassHashtable<nsISupportsHashKey, ReactionQueue> - ElementReactionQueueMap; - - ElementReactionQueueMap mElementReactionQueueMap; - // The choice of 8 for the auto size here is based on gut feeling. AutoTArray<ElementQueue, 8> mReactionsStack; ElementQueue mBackupQueue; |