Index: third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp |
diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp |
index 0e9fb986ac4b248e3d095790b443e4d0ebf698e0..4c7626d3171b1e9405d056961fc2d425cf1a3e6d 100644 |
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp |
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp |
@@ -16,4 +16,42 @@ CustomElementDefinition::~CustomElementDefinition() |
{ |
} |
+DEFINE_TRACE(CustomElementDefinition) |
+{ |
+ visitor->trace(m_constructionStack); |
+} |
+ |
+// https://html.spec.whatwg.org/multipage/scripting.html#concept-upgrade-an-element |
+void CustomElementDefinition::upgrade(Element* element) |
+{ |
+ m_constructionStack.append(element); |
+ size_t depth = m_constructionStack.size(); |
+ |
+ bool succeeded = runConstructor(element); |
+ |
+ // Pop the construction stack. |
+ if (m_constructionStack.last().get()) |
+ DCHECK_EQ(m_constructionStack.last(), element); |
+ DCHECK_EQ(m_constructionStack.size(), depth); // It's a *stack*. |
+ m_constructionStack.removeLast(); |
+ |
+ if (!succeeded) |
+ return; |
+ |
+ // TODO(dominicc): Turn this into an assertion when setting |
+ // 'custom' moves to the HTMLElement constructor. We will need to |
+ // add a bit for MARQUEE to be custom-gets-callbacks-yet-not-custom. |
+ element->setCustomElementState(CustomElementState::Custom); |
+ |
+ // TODO(dominicc): When the attributeChangedCallback is implemented, |
+ // enqueue reactions for attributes here. |
+ // TODO(dominicc): When the connectedCallback is implemented, enqueue |
+ // reactions here, if applicable. |
+} |
+ |
+bool CustomElementDefinition::runConstructor(Element*) |
+{ |
+ return true; |
+} |
+ |
} // namespace blink |