summaryrefslogtreecommitdiffstats
path: root/dom/base/CustomElementRegistry.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/CustomElementRegistry.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/CustomElementRegistry.cpp')
-rw-r--r--dom/base/CustomElementRegistry.cpp35
1 files changed, 29 insertions, 6 deletions
diff --git a/dom/base/CustomElementRegistry.cpp b/dom/base/CustomElementRegistry.cpp
index 069611f65..bad100cf5 100644
--- a/dom/base/CustomElementRegistry.cpp
+++ b/dom/base/CustomElementRegistry.cpp
@@ -47,7 +47,7 @@ CustomElementCallback::Call()
ni->LocalName(), ni->NamespaceID(),
extType.IsEmpty() ? nullptr : &extType);
nsContentUtils::EnqueueLifecycleCallback(
- nsIDocument::eConnected, mThisObject, nullptr, definition);
+ nsIDocument::eConnected, mThisObject, nullptr, nullptr, definition);
}
static_cast<LifecycleCreatedCallback *>(mCallback.get())->Call(mThisObject, rv);
@@ -60,6 +60,10 @@ CustomElementCallback::Call()
case nsIDocument::eDisconnected:
static_cast<LifecycleDisconnectedCallback *>(mCallback.get())->Call(mThisObject, rv);
break;
+ case nsIDocument::eAdopted:
+ static_cast<LifecycleAdoptedCallback *>(mCallback.get())->Call(mThisObject,
+ mAdoptedCallbackArgs.mOldDocument, mAdoptedCallbackArgs.mNewDocument, rv);
+ break;
case nsIDocument::eAttributeChanged:
static_cast<LifecycleAttributeChangedCallback *>(mCallback.get())->Call(mThisObject,
mArgs.name, mArgs.oldValue, mArgs.newValue, mArgs.namespaceURI, rv);
@@ -332,7 +336,9 @@ CustomElementRegistry::SetupCustomElement(Element* aElement,
/* static */ UniquePtr<CustomElementCallback>
CustomElementRegistry::CreateCustomElementCallback(
nsIDocument::ElementCallbackType aType, Element* aCustomElement,
- LifecycleCallbackArgs* aArgs, CustomElementDefinition* aDefinition)
+ LifecycleCallbackArgs* aArgs,
+ LifecycleAdoptedCallbackArgs* aAdoptedCallbackArgs,
+ CustomElementDefinition* aDefinition)
{
MOZ_ASSERT(aDefinition, "CustomElementDefinition should not be null");
@@ -360,6 +366,12 @@ CustomElementRegistry::CreateCustomElementCallback(
}
break;
+ case nsIDocument::eAdopted:
+ if (aDefinition->mCallbacks->mAdoptedCallback.WasPassed()) {
+ func = aDefinition->mCallbacks->mAdoptedCallback.Value();
+ }
+ break;
+
case nsIDocument::eAttributeChanged:
if (aDefinition->mCallbacks->mAttributeChangedCallback.WasPassed()) {
func = aDefinition->mCallbacks->mAttributeChangedCallback.Value();
@@ -388,6 +400,9 @@ CustomElementRegistry::CreateCustomElementCallback(
callback->SetArgs(*aArgs);
}
+ if (aAdoptedCallbackArgs) {
+ callback->SetAdoptedCallbackArgs(*aAdoptedCallbackArgs);
+ }
return Move(callback);
}
@@ -395,6 +410,7 @@ CustomElementRegistry::CreateCustomElementCallback(
CustomElementRegistry::EnqueueLifecycleCallback(nsIDocument::ElementCallbackType aType,
Element* aCustomElement,
LifecycleCallbackArgs* aArgs,
+ LifecycleAdoptedCallbackArgs* aAdoptedCallbackArgs,
CustomElementDefinition* aDefinition)
{
CustomElementDefinition* definition = aDefinition;
@@ -407,7 +423,8 @@ CustomElementRegistry::EnqueueLifecycleCallback(nsIDocument::ElementCallbackType
}
auto callback =
- CreateCustomElementCallback(aType, aCustomElement, aArgs, definition);
+ CreateCustomElementCallback(aType, aCustomElement, aArgs,
+ aAdoptedCallbackArgs, definition);
if (!callback) {
return;
}
@@ -926,7 +943,7 @@ CustomElementRegistry::Upgrade(Element* aElement,
};
nsContentUtils::EnqueueLifecycleCallback(nsIDocument::eAttributeChanged,
aElement,
- &args, aDefinition);
+ &args, nullptr, aDefinition);
}
}
}
@@ -934,7 +951,7 @@ CustomElementRegistry::Upgrade(Element* aElement,
// Step 4.
if (aElement->IsInComposedDoc()) {
nsContentUtils::EnqueueLifecycleCallback(nsIDocument::eConnected, aElement,
- nullptr, aDefinition);
+ nullptr, nullptr, aDefinition);
}
// Step 5.
@@ -958,7 +975,8 @@ CustomElementRegistry::Upgrade(Element* aElement,
// This is for old spec.
nsContentUtils::EnqueueLifecycleCallback(nsIDocument::eCreated,
- aElement, nullptr, aDefinition);
+ aElement, nullptr,
+ nullptr, aDefinition);
}
//-----------------------------------------------------
@@ -1141,6 +1159,11 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(CustomElementDefinition)
cb.NoteXPCOMChild(callbacks->mDisconnectedCallback.Value());
}
+ if (callbacks->mAdoptedCallback.WasPassed()) {
+ NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mCallbacks->mAdoptedCallback");
+ cb.NoteXPCOMChild(callbacks->mAdoptedCallback.Value());
+ }
+
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mConstructor");
cb.NoteXPCOMChild(tmp->mConstructor);
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END