Index: Source/core/dom/Document.cpp |
diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
index 8c770732ac76657342f57532da35367f200f9e9a..43e7d00eda7ca34bfb28f3657c8b644e2c9260bd 100644 |
--- a/Source/core/dom/Document.cpp |
+++ b/Source/core/dom/Document.cpp |
@@ -4427,11 +4427,21 @@ WeakPtr<Document> Document::contextDocument() |
PassRefPtr<Attr> Document::createAttribute(const AtomicString& name, ExceptionState& exceptionState) |
{ |
+ return createAttributeNS(nullAtom, name, exceptionState, true); |
+} |
+ |
+PassRefPtr<Attr> Document::createAttributeNS(const AtomicString& namespaceURI, const AtomicString& qualifiedName, ExceptionState& exceptionState, bool shouldIgnoreNamespaceChecks) |
+{ |
AtomicString prefix, localName; |
- if (!parseQualifiedName(name, prefix, localName, exceptionState)) |
+ if (!parseQualifiedName(qualifiedName, prefix, localName, exceptionState)) |
return nullptr; |
- QualifiedName qName(prefix, localName, nullAtom); |
+ QualifiedName qName(prefix, localName, namespaceURI); |
+ |
+ if (!shouldIgnoreNamespaceChecks && !hasValidNamespaceForAttributes(qName)) { |
+ exceptionState.throwDOMException(NamespaceError, "The namespace URI provided ('" + namespaceURI + "') is not valid for the qualified name provided ('" + qualifiedName + "')."); |
+ return nullptr; |
+ } |
return Attr::create(*this, qName, emptyAtom); |
} |