diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2020-01-05 16:09:19 -0500 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2020-01-26 15:50:29 -0500 |
commit | 6bbb9f062b63c5a920b1d240ba0d8575150dd01a (patch) | |
tree | fbb5b2857a0fcddce7873a4ecb94fe17af8840fb /dom/base/CustomElementRegistry.cpp | |
parent | 01dfbc928f45caccc5d27704a0e98d61e92a64f1 (diff) | |
download | UXP-6bbb9f062b63c5a920b1d240ba0d8575150dd01a.tar UXP-6bbb9f062b63c5a920b1d240ba0d8575150dd01a.tar.gz UXP-6bbb9f062b63c5a920b1d240ba0d8575150dd01a.tar.lz UXP-6bbb9f062b63c5a920b1d240ba0d8575150dd01a.tar.xz UXP-6bbb9f062b63c5a920b1d240ba0d8575150dd01a.zip |
Bug 1334044: Replace detached callback (v0) with disconnected callback (v1).
Tag UXP Issue #1344
Diffstat (limited to 'dom/base/CustomElementRegistry.cpp')
-rw-r--r-- | dom/base/CustomElementRegistry.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp index 67498a59b..069611f65 100644 --- a/dom/base/CustomElementRegistry.cpp +++ b/dom/base/CustomElementRegistry.cpp @@ -57,8 +57,8 @@ CustomElementCallback::Call() case nsIDocument::eConnected: static_cast<LifecycleConnectedCallback *>(mCallback.get())->Call(mThisObject, rv); break; - case nsIDocument::eDetached: - static_cast<LifecycleDetachedCallback *>(mCallback.get())->Call(mThisObject, rv); + case nsIDocument::eDisconnected: + static_cast<LifecycleDisconnectedCallback *>(mCallback.get())->Call(mThisObject, rv); break; case nsIDocument::eAttributeChanged: static_cast<LifecycleAttributeChangedCallback *>(mCallback.get())->Call(mThisObject, @@ -354,9 +354,9 @@ CustomElementRegistry::CreateCustomElementCallback( } break; - case nsIDocument::eDetached: - if (aDefinition->mCallbacks->mDetachedCallback.WasPassed()) { - func = aDefinition->mCallbacks->mDetachedCallback.Value(); + case nsIDocument::eDisconnected: + if (aDefinition->mCallbacks->mDisconnectedCallback.WasPassed()) { + func = aDefinition->mCallbacks->mDisconnectedCallback.Value(); } break; @@ -1025,14 +1025,14 @@ CustomElementReactionsStack::Enqueue(Element* aElement, // Add element to the current element queue. if (!mReactionsStack.IsEmpty()) { - mReactionsStack.LastElement()->AppendElement(do_GetWeakReference(aElement)); + mReactionsStack.LastElement()->AppendElement(aElement); 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)); + mBackupQueue.AppendElement(aElement); elementData->mReactionQueue.AppendElement(aReaction); if (mIsBackupQueueProcessing) { @@ -1070,14 +1070,18 @@ CustomElementReactionsStack::InvokeReactions(ElementQueue* aElementQueue, // Note: It's possible to re-enter this method. for (uint32_t i = 0; i < aElementQueue->Length(); ++i) { - nsCOMPtr<Element> element = do_QueryReferent(aElementQueue->ElementAt(i)); + Element* element = aElementQueue->ElementAt(i); if (!element) { continue; } RefPtr<CustomElementData> elementData = element->GetCustomElementData(); - MOZ_ASSERT(elementData, "CustomElementData should exist"); + if (!elementData) { + // This happens when the document is destroyed and the element is already + // unlinked, no need to fire the callbacks in this case. + return; + } auto& reactions = elementData->mReactionQueue; for (uint32_t j = 0; j < reactions.Length(); ++j) { @@ -1132,9 +1136,9 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(CustomElementDefinition) cb.NoteXPCOMChild(callbacks->mConnectedCallback.Value()); } - if (callbacks->mDetachedCallback.WasPassed()) { - NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mCallbacks->mDetachedCallback"); - cb.NoteXPCOMChild(callbacks->mDetachedCallback.Value()); + if (callbacks->mDisconnectedCallback.WasPassed()) { + NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mCallbacks->mDisconnectedCallback"); + cb.NoteXPCOMChild(callbacks->mDisconnectedCallback.Value()); } NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mConstructor"); |