summaryrefslogtreecommitdiffstats
path: root/dom/base
diff options
context:
space:
mode:
Diffstat (limited to 'dom/base')
-rw-r--r--dom/base/CustomElementRegistry.cpp29
-rw-r--r--dom/base/CustomElementRegistry.h21
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;