Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(303)

Unified Diff: third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp

Issue 2023093003: Upgrade in-document custom elements when an element is defined. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..bf25a6c9fd338919082eab769427bc7500500445 100644
--- a/third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp
+++ b/third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp
@@ -16,4 +16,37 @@ 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)
+{
+ size_t depth = m_constructionStack.size();
+ m_constructionStack.append(element);
yosin_UTC9 2016/06/01 06:15:44 We should have DCHECK(!m_constructionStack.isEmpty
dominicc (has gone to gerrit) 2016/06/01 23:30:56 Why? How would anything get upgraded if there's an
yosin_UTC9 2016/06/02 02:02:18 Sorry, my comment is wrong.
+
+ bool succeeded = runConstructor(element);
+
+ // Pop the construction stack.
+ DCHECK(m_constructionStack.last() == element
yosin_UTC9 2016/06/01 06:15:44 Better to use DCHECK_EQ if (!m_consturctionStack.l
dominicc (has gone to gerrit) 2016/06/01 23:30:57 I don't think that's applicable because of the tes
yosin_UTC9 2016/06/02 02:02:18 Oh, typo if (m_consturctionStack.last()) DCHEC
+ || !m_constructionStack.last());
+ m_constructionStack.removeLast();
+ DCHECK(m_constructionStack.size() == depth); // It's a *stack*.
yosin_UTC9 2016/06/01 06:15:44 nit: DCHECK_EQ
+
+ 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.
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698