| 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 cdc2f6db42a93e3b572c711c789ead694a4004db..6db283ccd58a7a75331003f4d3758c0d2120d1d9 100644
|
| --- a/third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/custom/CustomElementDefinition.cpp
|
| @@ -4,12 +4,14 @@
|
|
|
| #include "core/dom/custom/CustomElementDefinition.h"
|
|
|
| +#include "core/dom/ExceptionCode.h"
|
| #include "core/dom/custom/CEReactionsScope.h"
|
| #include "core/dom/custom/CustomElement.h"
|
| #include "core/dom/custom/CustomElementAttributeChangedCallbackReaction.h"
|
| #include "core/dom/custom/CustomElementConnectedCallbackReaction.h"
|
| #include "core/dom/custom/CustomElementDisconnectedCallbackReaction.h"
|
| #include "core/dom/custom/CustomElementUpgradeReaction.h"
|
| +#include "core/html/HTMLElement.h"
|
|
|
| namespace blink {
|
|
|
| @@ -28,6 +30,66 @@ DEFINE_TRACE(CustomElementDefinition)
|
| visitor->trace(m_constructionStack);
|
| }
|
|
|
| +static String errorMessageForConstructorResult(Element* element,
|
| + Document& document, const QualifiedName& tagName)
|
| +{
|
| + // https://dom.spec.whatwg.org/#concept-create-element
|
| + // 6.1.4. If result's attribute list is not empty, then throw a NotSupportedError.
|
| + if (element->hasAttributes())
|
| + return "The result must not have attributes";
|
| + // 6.1.5. If result has children, then throw a NotSupportedError.
|
| + if (element->hasChildren())
|
| + return "The result must not have children";
|
| + // 6.1.6. If result's parent is not null, then throw a NotSupportedError.
|
| + if (element->parentNode())
|
| + return "The result must not have a parent";
|
| + // 6.1.7. If result's node document is not document, then throw a NotSupportedError.
|
| + if (&element->document() != &document)
|
| + return "The result must be in the same document";
|
| + // 6.1.8. If result's namespace is not the HTML namespace, then throw a NotSupportedError.
|
| + if (element->namespaceURI() != HTMLNames::xhtmlNamespaceURI)
|
| + return "The result must have HTML namespace";
|
| + // 6.1.9. If result's local name is not equal to localName, then throw a NotSupportedError.
|
| + if (element->localName() != tagName.localName())
|
| + return "The result must have the same localName";
|
| + return String();
|
| +}
|
| +
|
| +void CustomElementDefinition::checkConstructorResult(Element* element,
|
| + Document& document, const QualifiedName& tagName,
|
| + ExceptionState& exceptionState)
|
| +{
|
| + // https://dom.spec.whatwg.org/#concept-create-element
|
| + // 6.1.3. If result does not implement the HTMLElement interface, throw a TypeError.
|
| + // See https://github.com/whatwg/html/issues/1402 for more clarifications.
|
| + if (!element || !element->isHTMLElement()) {
|
| + exceptionState.throwTypeError("The result must implement HTMLElement interface");
|
| + return;
|
| + }
|
| +
|
| + // 6.1.4. through 6.1.9.
|
| + const String message = errorMessageForConstructorResult(element, document, tagName);
|
| + if (!message.isEmpty())
|
| + exceptionState.throwDOMException(NotSupportedError, message);
|
| +}
|
| +
|
| +HTMLElement* CustomElementDefinition::createElementAsync(Document& document, const QualifiedName& tagName)
|
| +{
|
| + // https://dom.spec.whatwg.org/#concept-create-element
|
| + // 6. If definition is non-null, then:
|
| + // 6.2. If the synchronous custom elements flag is not set:
|
| + // 6.2.1. Set result to a new element that implements the HTMLElement
|
| + // interface, with no attributes, namespace set to the HTML namespace,
|
| + // namespace prefix set to prefix, local name set to localName, custom
|
| + // element state set to "undefined", and node document set to document.
|
| + HTMLElement* element = HTMLElement::create(tagName, document);
|
| + element->setCustomElementState(CustomElementState::Undefined);
|
| + // 6.2.2. Enqueue a custom element upgrade reaction given result and
|
| + // definition.
|
| + enqueueUpgradeReaction(element);
|
| + return element;
|
| +}
|
| +
|
| // https://html.spec.whatwg.org/multipage/scripting.html#concept-upgrade-an-element
|
| void CustomElementDefinition::upgrade(Element* element)
|
| {
|
|
|