diff options
author | Gaming4JC <g4jc@hyperbola.info> | 2020-01-05 18:15:57 -0500 |
---|---|---|
committer | Gaming4JC <g4jc@hyperbola.info> | 2020-01-26 15:50:30 -0500 |
commit | 8e6ce5fae721e5a4caf38b0b72e1c4a0324ae55e (patch) | |
tree | 1c398b6e727da3fd13829209835ede7a427eac97 /dom/base/nsNodeUtils.cpp | |
parent | 6bbb9f062b63c5a920b1d240ba0d8575150dd01a (diff) | |
download | UXP-8e6ce5fae721e5a4caf38b0b72e1c4a0324ae55e.tar UXP-8e6ce5fae721e5a4caf38b0b72e1c4a0324ae55e.tar.gz UXP-8e6ce5fae721e5a4caf38b0b72e1c4a0324ae55e.tar.lz UXP-8e6ce5fae721e5a4caf38b0b72e1c4a0324ae55e.tar.xz UXP-8e6ce5fae721e5a4caf38b0b72e1c4a0324ae55e.zip |
Bug 1121994 - Implement adopted callback for custom elements.
Tag UXP Issue #1344
Diffstat (limited to 'dom/base/nsNodeUtils.cpp')
-rw-r--r-- | dom/base/nsNodeUtils.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/dom/base/nsNodeUtils.cpp b/dom/base/nsNodeUtils.cpp index c38f08a3d..ce023ccfa 100644 --- a/dom/base/nsNodeUtils.cpp +++ b/dom/base/nsNodeUtils.cpp @@ -526,6 +526,23 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep, nsIDocument* newDoc = aNode->OwnerDoc(); if (newDoc) { + if (CustomElementRegistry::IsCustomElementEnabled()) { + // Adopted callback must be enqueued whenever a node’s + // shadow-including inclusive descendants that is custom. + Element* element = aNode->IsElement() ? aNode->AsElement() : nullptr; + if (element) { + RefPtr<CustomElementData> data = element->GetCustomElementData(); + if (data && data->mState == CustomElementData::State::eCustom) { + LifecycleAdoptedCallbackArgs args = { + oldDoc, + newDoc + }; + nsContentUtils::EnqueueLifecycleCallback(nsIDocument::eAdopted, + element, nullptr, &args); + } + } + } + // XXX what if oldDoc is null, we don't know if this should be // registered or not! Can that really happen? if (wasRegistered) { |