From 6ec385fbdb2523fb2876055a054ba1cdf6916784 Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sun, 5 Jan 2020 18:26:21 -0500 Subject: Bug 1319342 - Clone a node should enqueue an upgrade reaction. Tag UXP Issue #1344 --- dom/base/nsNodeUtils.cpp | 28 +++++++++-- dom/tests/mochitest/webcomponents/mochitest.ini | 1 - .../test_custom_element_clone_callbacks.html | 54 ---------------------- .../meta/custom-elements/reaction-timing.html.ini | 5 -- .../meta/custom-elements/reactions/Node.html.ini | 22 --------- .../meta/custom-elements/reactions/Range.html.ini | 10 ---- 6 files changed, 23 insertions(+), 97 deletions(-) delete mode 100644 dom/tests/mochitest/webcomponents/test_custom_element_clone_callbacks.html delete mode 100644 testing/web-platform/meta/custom-elements/reaction-timing.html.ini delete mode 100644 testing/web-platform/meta/custom-elements/reactions/Node.html.ini delete mode 100644 testing/web-platform/meta/custom-elements/reactions/Range.html.ini diff --git a/dom/base/nsNodeUtils.cpp b/dom/base/nsNodeUtils.cpp index ce023ccfa..862b5db14 100644 --- a/dom/base/nsNodeUtils.cpp +++ b/dom/base/nsNodeUtils.cpp @@ -479,19 +479,37 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep, rv = aNode->Clone(nodeInfo, getter_AddRefs(clone)); NS_ENSURE_SUCCESS(rv, rv); - if (clone->IsElement()) { + if (CustomElementRegistry::IsCustomElementEnabled() && clone->IsElement()) { // The cloned node may be a custom element that may require - // enqueing created callback and prototype swizzling. + // enqueing upgrade reaction. Element* elem = clone->AsElement(); - if (nsContentUtils::IsCustomElementName(nodeInfo->NameAtom())) { - nsContentUtils::SetupCustomElement(elem); + CustomElementDefinition* definition = nullptr; + RefPtr tagAtom = nodeInfo->NameAtom(); + if (nsContentUtils::IsCustomElementName(tagAtom)) { + definition = + nsContentUtils::LookupCustomElementDefinition(nodeInfo->GetDocument(), + nodeInfo->LocalName(), + nodeInfo->NamespaceID()); + if (definition) { + elem->SetCustomElementData(new CustomElementData(tagAtom)); + nsContentUtils::EnqueueUpgradeReaction(elem, definition); + } } else { // Check if node may be custom element by type extension. // ex.