| Index: third_party/WebKit/Source/core/dom/custom/CustomElement.cpp
|
| diff --git a/third_party/WebKit/Source/core/dom/custom/CustomElement.cpp b/third_party/WebKit/Source/core/dom/custom/CustomElement.cpp
|
| index fb55576c5c0db3774ea8c68b6b824ebb26f2300c..51fc350f7529c2b20729c9e731d87b0433368e91 100644
|
| --- a/third_party/WebKit/Source/core/dom/custom/CustomElement.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/custom/CustomElement.cpp
|
| @@ -4,6 +4,12 @@
|
|
|
| #include "core/dom/custom/CustomElement.h"
|
|
|
| +#include "core/dom/Document.h"
|
| +#include "core/dom/Element.h"
|
| +#include "core/dom/QualifiedName.h"
|
| +#include "core/dom/custom/V0CustomElement.h"
|
| +#include "core/dom/custom/V0CustomElementRegistrationContext.h"
|
| +#include "core/html/HTMLElement.h"
|
| #include "platform/text/Character.h"
|
| #include "wtf/text/AtomicStringHash.h"
|
|
|
| @@ -45,4 +51,43 @@ bool CustomElement::isValidName(const AtomicString& name)
|
| return !hyphenContainingElementNames.contains(name);
|
| }
|
|
|
| +bool CustomElement::shouldCreateCustomElement(Document& document, const AtomicString& localName)
|
| +{
|
| + return RuntimeEnabledFeatures::customElementsV1Enabled()
|
| + && document.frame() && isValidName(localName);
|
| +}
|
| +
|
| +bool CustomElement::shouldCreateCustomElement(Document& document, const QualifiedName& tagName)
|
| +{
|
| + return shouldCreateCustomElement(document, tagName.localName())
|
| + && tagName.namespaceURI() == HTMLNames::xhtmlNamespaceURI;
|
| +}
|
| +
|
| +HTMLElement* CustomElement::createCustomElement(Document& document, const AtomicString& localName)
|
| +{
|
| + return createCustomElement(document,
|
| + QualifiedName(nullAtom, document.convertLocalName(localName), HTMLNames::xhtmlNamespaceURI));
|
| +}
|
| +
|
| +HTMLElement* CustomElement::createCustomElement(Document& document, const QualifiedName& tagName)
|
| +{
|
| + DCHECK(shouldCreateCustomElement(document, tagName));
|
| +
|
| + // TODO(kojii): Look up already defined custom elements when custom element
|
| + // queues and upgrade are implemented.
|
| +
|
| + HTMLElement* element;
|
| + if (V0CustomElement::isValidName(tagName.localName()) && document.registrationContext()) {
|
| + Element* v0element = document.registrationContext()->createCustomTagElement(document, tagName);
|
| + SECURITY_DCHECK(v0element->isHTMLElement());
|
| + element = toHTMLElement(v0element);
|
| + } else {
|
| + element = HTMLElement::create(tagName, document);
|
| + }
|
| +
|
| + element->setCustomElementState(CustomElementState::Undefined);
|
| +
|
| + return element;
|
| +}
|
| +
|
| } // namespace blink
|
|
|