2009-06-02 Julien Chaffraix <jchaffraix@webkit.org>
authoreric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Jun 2009 21:33:40 +0000 (21:33 +0000)
committereric@webkit.org <eric@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Jun 2009 21:33:40 +0000 (21:33 +0000)
        Reviewed by Eric Seidel.

        Bug 17167: Failures in fast/dom/Node/initial-values.html

        This partly solve a compatibility issue with other browsers. It will also
        make us more consistent while handling XHTML element.

        The issue is that when we create an XHTML element inside an HTML document
        (as it is the case when calling createElementNS), we default to the HTML
        behaviour in nodeName. As we cannot test if an HTMLElement is an XHTML
        element, our fix is to check whether it has a prefix and then default
        to XML behaviour for nodeName.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName): Add a prefix check before
        returning the uppercase tagName (HTML behaviour).

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@44369 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/Node/initial-values-expected.txt
LayoutTests/fast/dom/Node/resources/initial-values.js
WebCore/ChangeLog
WebCore/html/HTMLElement.cpp

index 441f636..46bb4aa 100644 (file)
@@ -1,3 +1,18 @@
+2009-06-02  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Reviewed by Eric Seidel.
+
+        Bug 17167: Failures in fast/dom/Node/initial-values.html
+
+        Added some more tests to show that the compatibility issue is only
+        partly solved.
+
+        Also updated the new passing result and removed the associated comment
+        inside the initial-values.js.
+
+        * fast/dom/Node/initial-values-expected.txt:
+        * fast/dom/Node/resources/initial-values.js:
+
 2009-06-02  Alexey Proskuryakov  <ap@webkit.org>
 
         Reviewed by Sam Weinig.
index 685c652..48d2895 100644 (file)
@@ -80,13 +80,34 @@ FAIL element.namespaceURI should be null (of type object). Was http://www.w3.org
 PASS element.prefix is null
 PASS element.nodeValue is null
 PASS element.attributes.toString() is '[object NamedNodeMap]'
-Element creation using createElementNS on an HTML doc:
-FAIL element.nodeName should be html:pre. Was PRE.
+Prefixed element creation using createElementNS on an HTML doc:
+PASS element.nodeName is 'html:pre'
 PASS element.localName is 'pre'
 PASS element.namespaceURI is 'http://www.w3.org/1999/xhtml'
 PASS element.prefix is 'html'
 PASS element.nodeValue is null
 PASS element.attributes.toString() is '[object NamedNodeMap]'
+SVG Element creation using createElementNS on an HTML doc:
+PASS element.nodeName is 'svg'
+PASS element.localName is 'svg'
+PASS element.namespaceURI is 'http://www.w3.org/2000/svg'
+PASS element.prefix is null
+PASS element.nodeValue is null
+PASS element.attributes.toString() is '[object NamedNodeMap]'
+Unknown Element creation using createElementNS on an HTML doc:
+PASS element.nodeName is 'foo:svg'
+PASS element.localName is 'svg'
+PASS element.namespaceURI is 'http://www.webkit.org'
+PASS element.prefix is 'foo'
+PASS element.nodeValue is null
+PASS element.attributes.toString() is '[object NamedNodeMap]'
+Element creation using createElementNS on an HTML doc:
+FAIL element.nodeName should be pre. Was PRE.
+PASS element.localName is 'pre'
+PASS element.namespaceURI is 'http://www.w3.org/1999/xhtml'
+PASS element.prefix is null
+PASS element.nodeValue is null
+PASS element.attributes.toString() is '[object NamedNodeMap]'
 Element creation using createElement on an XHTML doc:
 PASS element.nodeName is 'pre'
 FAIL element.localName should be null (of type object). Was pre (of type string).
index 5e3f61e..4dfc376 100644 (file)
@@ -108,7 +108,7 @@ shouldBe("element.prefix", "null");
 shouldBe("element.nodeValue", "null");
 shouldBe("element.attributes.toString()", "'[object NamedNodeMap]'");
 
-debug("Element creation using createElementNS on an HTML doc:")
+debug("Prefixed element creation using createElementNS on an HTML doc:")
 element = document.createElementNS("http://www.w3.org/1999/xhtml", "html:pre");
 shouldBe("element.nodeName", "'html:pre'");
 shouldBe("element.localName", "'pre'");
@@ -117,6 +117,35 @@ shouldBe("element.prefix", "'html'");
 shouldBe("element.nodeValue", "null");
 shouldBe("element.attributes.toString()", "'[object NamedNodeMap]'");
 
+debug("SVG Element creation using createElementNS on an HTML doc:")
+element = document.createElementNS("http://www.w3.org/2000/svg", "svg");
+shouldBe("element.nodeName", "'svg'");
+shouldBe("element.localName", "'svg'");
+shouldBe("element.namespaceURI", "'http://www.w3.org/2000/svg'");
+shouldBe("element.prefix", "null");
+shouldBe("element.nodeValue", "null");
+shouldBe("element.attributes.toString()", "'[object NamedNodeMap]'");
+
+debug("Unknown Element creation using createElementNS on an HTML doc:")
+element = document.createElementNS("http://www.webkit.org", "foo:svg");
+shouldBe("element.nodeName", "'foo:svg'");
+shouldBe("element.localName", "'svg'");
+shouldBe("element.namespaceURI", "'http://www.webkit.org'");
+shouldBe("element.prefix", "'foo'");
+shouldBe("element.nodeValue", "null");
+shouldBe("element.attributes.toString()", "'[object NamedNodeMap]'");
+
+debug("Element creation using createElementNS on an HTML doc:")
+element = document.createElementNS("http://www.w3.org/1999/xhtml", "pre");
+// Spec: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-104682815 (element.tagName)
+// FF and Opera returns "pre" for nodeName as it is an XHTML element, WebKit returns "PRE".
+shouldBe("element.nodeName", "'pre'");
+shouldBe("element.localName", "'pre'");
+shouldBe("element.namespaceURI", "'http://www.w3.org/1999/xhtml'");
+shouldBe("element.prefix", "null");
+shouldBe("element.nodeValue", "null");
+shouldBe("element.attributes.toString()", "'[object NamedNodeMap]'");
+
 debug("Element creation using createElement on an XHTML doc:")
 element = xmlDoc.createElement("pre");
 shouldBe("element.nodeName", "'pre'");
@@ -129,8 +158,6 @@ shouldBe("element.attributes.toString()", "'[object NamedNodeMap]'");
 
 debug("Element creation using createElementNS on an XHTML doc:")
 element = xmlDoc.createElementNS("http://www.w3.org/1999/xhtml", "html:pre");
-// Spec: http://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createElementNS
-// WebKit currently returns "PRE" instead of "html:pre"
 shouldBe("element.nodeName", "'html:pre'");
 shouldBe("element.localName", "'pre'");
 shouldBe("element.namespaceURI", "'http://www.w3.org/1999/xhtml'");
index b801efa..b25c030 100644 (file)
@@ -1,3 +1,22 @@
+2009-06-02  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Reviewed by Eric Seidel.
+
+        Bug 17167: Failures in fast/dom/Node/initial-values.html
+
+        This partly solve a compatibility issue with other browsers. It will also
+        make us more consistent while handling XHTML element.
+
+        The issue is that when we create an XHTML element inside an HTML document
+        (as it is the case when calling createElementNS), we default to the HTML
+        behaviour in nodeName. As we cannot test if an HTMLElement is an XHTML
+        element, our fix is to check whether it has a prefix and then default
+        to XML behaviour for nodeName.
+
+        * html/HTMLElement.cpp:
+        (WebCore::HTMLElement::nodeName): Add a prefix check before
+        returning the uppercase tagName (HTML behaviour).
+
 2009-06-02  Eric Seidel  <eric@webkit.org>
 
         Reviewed by Maciej Stachowiak.
index 53d18ec..572025a 100644 (file)
@@ -69,7 +69,8 @@ String HTMLElement::nodeName() const
 {
     // FIXME: Would be nice to have an atomicstring lookup based off uppercase chars that does not have to copy
     // the string on a hit in the hash.
-    if (document()->isHTMLDocument())
+    // FIXME: We should have a way to detect XHTML elements and replace the hasPrefix() check with it.
+    if (document()->isHTMLDocument() && !tagQName().hasPrefix())
         return tagQName().localName().string().upper();
     return Element::nodeName();
 }