From 05b01709b862fdf0c011a2a509fa11726c1931fd Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sun, 19 Jan 2020 22:18:56 -0500 Subject: [PATCH] Bug 1406325 - Part 2: Set CustomElementData when cloning a node. Tag UXP Issue #1344 --- dom/base/nsNodeUtils.cpp | 8 +-- ...ent_throw_on_dynamic_markup_insertion.html | 66 +++++++++++++++++++ 2 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 dom/tests/mochitest/webcomponents/test_custom_element_throw_on_dynamic_markup_insertion.html diff --git a/dom/base/nsNodeUtils.cpp b/dom/base/nsNodeUtils.cpp index 862b5db14b..3670b54381 100644 --- a/dom/base/nsNodeUtils.cpp +++ b/dom/base/nsNodeUtils.cpp @@ -486,12 +486,12 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep, CustomElementDefinition* definition = nullptr; RefPtr tagAtom = nodeInfo->NameAtom(); if (nsContentUtils::IsCustomElementName(tagAtom)) { + elem->SetCustomElementData(new CustomElementData(tagAtom)); definition = nsContentUtils::LookupCustomElementDefinition(nodeInfo->GetDocument(), nodeInfo->LocalName(), nodeInfo->NamespaceID()); if (definition) { - elem->SetCustomElementData(new CustomElementData(tagAtom)); nsContentUtils::EnqueueUpgradeReaction(elem, definition); } } else { @@ -500,14 +500,14 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep, nsAutoString extension; if (elem->GetAttr(kNameSpaceID_None, nsGkAtoms::is, extension) && !extension.IsEmpty()) { + RefPtr typeAtom = NS_Atomize(extension); + elem->SetCustomElementData(new CustomElementData(typeAtom)); definition = nsContentUtils::LookupCustomElementDefinition(nodeInfo->GetDocument(), nodeInfo->LocalName(), nodeInfo->NamespaceID(), &extension); if (definition) { - RefPtr typeAtom = NS_Atomize(extension); - elem->SetCustomElementData(new CustomElementData(typeAtom)); nsContentUtils::EnqueueUpgradeReaction(elem, definition); } } @@ -549,7 +549,7 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep, // shadow-including inclusive descendants that is custom. Element* element = aNode->IsElement() ? aNode->AsElement() : nullptr; if (element) { - RefPtr data = element->GetCustomElementData(); + CustomElementData* data = element->GetCustomElementData(); if (data && data->mState == CustomElementData::State::eCustom) { LifecycleAdoptedCallbackArgs args = { oldDoc, diff --git a/dom/tests/mochitest/webcomponents/test_custom_element_throw_on_dynamic_markup_insertion.html b/dom/tests/mochitest/webcomponents/test_custom_element_throw_on_dynamic_markup_insertion.html new file mode 100644 index 0000000000..b5ef668605 --- /dev/null +++ b/dom/tests/mochitest/webcomponents/test_custom_element_throw_on_dynamic_markup_insertion.html @@ -0,0 +1,66 @@ + + + + + Test throw on dynamic markup insertion when creating element synchronously from parser + + + + +Bug 1378079 +
+ + + + +