https://bugs.webkit.org/show_bug.cgi?id=153114
Reviewed by Alex Christensen.
LayoutTests/imported/w3c:
Rebaselined the tests for document.createElement now that more test cases are passing.
* web-platform-tests/dom/nodes/Document-createElement-expected.txt:
* web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt:
* web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt:
* web-platform-tests/dom/nodes/case-expected.txt:
Source/WebCore:
According to step 2 in https://dom.spec.whatwg.org/#dom-document-createelement, document.createElement should not
lowercase non-ASCII letters, and this is also what Firefox does. Match that behavior by lowercasing the tag name
by convertToASCIILowercase() instead of lower() in createElement.
Also merged HTMLDocument::createElement into Document::createElement for simplicity and avoid duplicating
the call to isValidName and setting a DOM exception.
No new tests since the behavior change is covered by the existing W3C tests.
* dom/Document.cpp:
(WebCore::Document::createElement): Create a HTML element with ASCII-lowercased tag name inside a HTML document.
* dom/Document.h:
* html/HTMLDocument.cpp:
(WebCore::addLocalNameToSet):
(WebCore::HTMLDocument::createElement): Merged into Document::createElement.
* html/HTMLDocument.h:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@195091
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2016-01-14 Ryosuke Niwa <rniwa@webkit.org>
+
+ createElement should not lowercase non-ASCII characters
+ https://bugs.webkit.org/show_bug.cgi?id=153114
+
+ Reviewed by Alex Christensen.
+
+ Rebaselined the tests for document.createElement now that more test cases are passing.
+
+ * web-platform-tests/dom/nodes/Document-createElement-expected.txt:
+ * web-platform-tests/dom/nodes/Document-getElementsByTagName-expected.txt:
+ * web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt:
+ * web-platform-tests/dom/nodes/case-expected.txt:
+
2016-01-14 Youenn Fablet <youenn.fablet@crf.canon.fr>
Fix problems with cross-origin redirects
PASS createElement("svg")
PASS createElement("math")
PASS createElement("FOO")
-FAIL createElement("marK") assert_equals: expected "marK" but got "mark"
-FAIL createElement("İnput") assert_equals: expected "İnput" but got "i̇nput"
+PASS createElement("marK")
+PASS createElement("İnput")
FAIL createElement("ınput") assert_equals: expected "ıNPUT" but got "INPUT"
PASS createElement("")
PASS createElement("1foo")
PASS Element in non-HTML namespace, no prefix, uppercase name
PASS Element in non-HTML namespace, prefix, lowercase name
PASS Element in non-HTML namespace, prefix, uppercase name
-FAIL Element in HTML namespace, no prefix, non-ascii characters in name assert_equals: expected "aÇ" but got "aç"
+PASS Element in HTML namespace, no prefix, non-ascii characters in name
PASS Element in non-HTML namespace, non-ascii characters in name
PASS Element in HTML namespace, prefix, non-ascii characters in name
PASS Element in non-HTML namespace, prefix, non-ascii characters in name
PASS Element in non-HTML namespace, no prefix, uppercase name
PASS Element in non-HTML namespace, prefix, lowercase name
PASS Element in non-HTML namespace, prefix, uppercase name
-FAIL Element in HTML namespace, no prefix, non-ascii characters in name assert_equals: expected "aÇ" but got "aç"
+PASS Element in HTML namespace, no prefix, non-ascii characters in name
PASS Element in non-HTML namespace, non-ascii characters in name
PASS Element in HTML namespace, prefix, non-ascii characters in name
PASS Element in non-HTML namespace, prefix, non-ascii characters in name
PASS getAttribute ä
PASS getElementsByTagName a:ä
PASS getElementsByTagName ä
-FAIL createElement Ä assert_equals: expected "Ä" but got "ä"
+PASS createElement Ä
PASS setAttribute Ä
PASS getAttribute Ä
PASS getElementsByTagName a:Ä
+2016-01-14 Ryosuke Niwa <rniwa@webkit.org>
+
+ createElement should not lowercase non-ASCII characters
+ https://bugs.webkit.org/show_bug.cgi?id=153114
+
+ Reviewed by Alex Christensen.
+
+ According to step 2 in https://dom.spec.whatwg.org/#dom-document-createelement, document.createElement should not
+ lowercase non-ASCII letters, and this is also what Firefox does. Match that behavior by lowercasing the tag name
+ by convertToASCIILowercase() instead of lower() in createElement.
+
+ Also merged HTMLDocument::createElement into Document::createElement for simplicity and avoid duplicating
+ the call to isValidName and setting a DOM exception.
+
+ No new tests since the behavior change is covered by the existing W3C tests.
+
+ * dom/Document.cpp:
+ (WebCore::Document::createElement): Create a HTML element with ASCII-lowercased tag name inside a HTML document.
+ * dom/Document.h:
+ * html/HTMLDocument.cpp:
+ (WebCore::addLocalNameToSet):
+ (WebCore::HTMLDocument::createElement): Merged into Document::createElement.
+ * html/HTMLDocument.h:
+
2016-01-14 Brady Eidson <beidson@apple.com>
Modern IDB: Support opening and deleting SQLite databases on disk.
return nullptr;
}
+ if (isHTMLDocument())
+ return HTMLElementFactory::createElement(QualifiedName(nullAtom, name.convertToASCIILowercase(), xhtmlNamespaceURI), *this);
+
if (isXHTMLDocument())
return HTMLElementFactory::createElement(QualifiedName(nullAtom, name, xhtmlNamespaceURI), *this);
bool hasManifest() const;
- virtual RefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&);
+ WEBCORE_EXPORT RefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&);
WEBCORE_EXPORT Ref<DocumentFragment> createDocumentFragment();
WEBCORE_EXPORT Ref<Text> createTextNode(const String& data);
Ref<Comment> createComment(const String& data);
// not part of the DOM
// --------------------------------------------------------------------------
-RefPtr<Element> HTMLDocument::createElement(const AtomicString& name, ExceptionCode& ec)
-{
- if (!isValidName(name)) {
- ec = INVALID_CHARACTER_ERR;
- return 0;
- }
- return HTMLElementFactory::createElement(QualifiedName(nullAtom, name.lower(), xhtmlNamespaceURI), *this);
-}
-
static void addLocalNameToSet(HashSet<AtomicStringImpl*>* set, const QualifiedName& qName)
{
set->add(qName.localName().impl());
HTMLDocument(Frame*, const URL&, DocumentClassFlags = 0, unsigned constructionFlags = 0);
private:
- virtual RefPtr<Element> createElement(const AtomicString& tagName, ExceptionCode&) override;
-
virtual bool isFrameSet() const override;
virtual Ref<DocumentParser> createParser() override;
virtual Ref<Document> cloneDocumentWithoutChildren() const override final;