From b7f890e02e6bf24db172881d6da910e70c7586fe Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sat, 18 Jan 2020 20:35:11 -0500 Subject: Bug 1410790 - Add more assertion in CustomElementData::SetCustomElementDefinition and GetCustomElementDefinition; This is a follow-up patch for bug 1392970. Since we only set CustomElementDefinition on a custom element which is custom, we could add more assertion to ensure that. Tag UXP Issue #1344 --- dom/base/CustomElementRegistry.cpp | 42 ++++++++++++++++++++++++++++++++++++++ dom/base/CustomElementRegistry.h | 23 ++++++++------------- dom/base/FragmentOrElement.cpp | 18 ++-------------- 3 files changed, 52 insertions(+), 31 deletions(-) diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp index 200668f9e..0f03b16bd 100644 --- a/dom/base/CustomElementRegistry.cpp +++ b/dom/base/CustomElementRegistry.cpp @@ -138,6 +138,48 @@ CustomElementData::CustomElementData(nsIAtom* aType, State aState) { } +void +CustomElementData::SetCustomElementDefinition(CustomElementDefinition* aDefinition) +{ + MOZ_ASSERT(mState == State::eCustom); + MOZ_ASSERT(!mCustomElementDefinition); + MOZ_ASSERT(aDefinition->mType == mType); + + mCustomElementDefinition = aDefinition; +} + +CustomElementDefinition* +CustomElementData::GetCustomElementDefinition() +{ + MOZ_ASSERT(mCustomElementDefinition ? mState == State::eCustom + : mState != State::eCustom); + + return mCustomElementDefinition; +} + +void +CustomElementData::Traverse(nsCycleCollectionTraversalCallback& aCb) const +{ + for (uint32_t i = 0; i < mReactionQueue.Length(); i++) { + if (mReactionQueue[i]) { + mReactionQueue[i]->Traverse(aCb); + } + } + + if (mCustomElementDefinition) { + NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(aCb, "mCustomElementDefinition"); + aCb.NoteNativeChild(mCustomElementDefinition, + NS_CYCLE_COLLECTION_PARTICIPANT(CustomElementDefinition)); + } +} + +void +CustomElementData::Unlink() +{ + mReactionQueue.Clear(); + mCustomElementDefinition = nullptr; +} + //----------------------------------------------------- // CustomElementRegistry diff --git a/dom/base/CustomElementRegistry.h b/dom/base/CustomElementRegistry.h index 867c92647..d3dfef682 100644 --- a/dom/base/CustomElementRegistry.h +++ b/dom/base/CustomElementRegistry.h @@ -130,24 +130,16 @@ struct CustomElementData // e.g., create an element, insert a node. AutoTArray, 3> mReactionQueue; - RefPtr mCustomElementDefinition; - - void - SetCustomElementDefinition(CustomElementDefinition* aDefinition) - { - MOZ_ASSERT(!mCustomElementDefinition); - - mCustomElementDefinition = aDefinition; - } + void SetCustomElementDefinition(CustomElementDefinition* aDefinition); + CustomElementDefinition* GetCustomElementDefinition(); - CustomElementDefinition* - GetCustomElementDefinition() - { - return mCustomElementDefinition; - } + void Traverse(nsCycleCollectionTraversalCallback& aCb) const; + void Unlink(); private: virtual ~CustomElementData() {} + + RefPtr mCustomElementDefinition; }; #define ALEADY_CONSTRUCTED_MARKER nullptr @@ -167,7 +159,8 @@ struct CustomElementDefinition mozilla::dom::LifecycleCallbacks* aCallbacks, uint32_t aDocOrder); - // The type (name) for this custom element. + // The type (name) for this custom element, for