summaryrefslogtreecommitdiffstats
path: root/dom/base/nsNodeUtils.cpp
diff options
context:
space:
mode:
authorGaming4JC <g4jc@hyperbola.info>2020-01-05 18:15:57 -0500
committerGaming4JC <g4jc@hyperbola.info>2020-01-26 15:50:30 -0500
commit8e6ce5fae721e5a4caf38b0b72e1c4a0324ae55e (patch)
tree1c398b6e727da3fd13829209835ede7a427eac97 /dom/base/nsNodeUtils.cpp
parent6bbb9f062b63c5a920b1d240ba0d8575150dd01a (diff)
downloadUXP-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.cpp17
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) {