Title: [188711] trunk
Revision
188711
Author
[email protected]
Date
2015-08-20 15:32:10 -0700 (Thu, 20 Aug 2015)

Log Message

Default value for createNodeIterator() / createTreeWalker()'s whatToShow parameter should be 0xFFFFFFFF
https://bugs.webkit.org/show_bug.cgi?id=148238

Reviewed by Ryosuke Niwa.

Source/WebCore:

Default value for createNodeIterator() / createTreeWalker()'s whatToShow
parameter should be 0xFFFFFFFF as per the specification:
- http://w3c-test.org/dom/traversal/NodeIterator.html
- http://w3c-test.org/dom/traversal/TreeWalker.html

Firefox and Chrome conform to the specification. However, WebKit was
using 0 as default value.

We still don't behave as expected in some cases, as visible from
the checks that are still failing in the new layout tests. Those
will be addressed separately.

Tests: fast/dom/createNodeIterator-parameters.html
       fast/dom/createTreeWalker-parameters.html

* dom/Document.cpp:
(WebCore::Document::createNodeIterator):
(WebCore::Document::createTreeWalker):
(WebCore::Document::scheduleForcedStyleRecalc): Deleted.
(WebCore::Document::scheduleStyleRecalc): Deleted.
* dom/Document.h:
* dom/Document.idl:
* dom/NodeIterator.cpp:
(WebCore::NodeIterator::NodeIterator):
* dom/NodeIterator.h:
(WebCore::NodeIterator::create):
* dom/Traversal.cpp:
(WebCore::NodeIteratorBase::NodeIteratorBase):
* dom/Traversal.h:
(WebCore::NodeIteratorBase::whatToShow):
* dom/TreeWalker.cpp:
(WebCore::TreeWalker::TreeWalker):
* dom/TreeWalker.h:
(WebCore::TreeWalker::create):

LayoutTests:

Add tests for createNodeIterator() / createTreeWalker() parameters.
Some of the checks are still failing.

* fast/dom/createNodeIterator-parameters-expected.txt: Added.
* fast/dom/createNodeIterator-parameters.html: Added.
* fast/dom/createTreeWalker-parameters-expected.txt: Added.
* fast/dom/createTreeWalker-parameters.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (188710 => 188711)


--- trunk/LayoutTests/ChangeLog	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/LayoutTests/ChangeLog	2015-08-20 22:32:10 UTC (rev 188711)
@@ -1,3 +1,18 @@
+2015-08-20  Chris Dumez  <[email protected]>
+
+        Default value for createNodeIterator() / createTreeWalker()'s whatToShow parameter should be 0xFFFFFFFF
+        https://bugs.webkit.org/show_bug.cgi?id=148238
+
+        Reviewed by Ryosuke Niwa.
+
+        Add tests for createNodeIterator() / createTreeWalker() parameters.
+        Some of the checks are still failing.
+
+        * fast/dom/createNodeIterator-parameters-expected.txt: Added.
+        * fast/dom/createNodeIterator-parameters.html: Added.
+        * fast/dom/createTreeWalker-parameters-expected.txt: Added.
+        * fast/dom/createTreeWalker-parameters.html: Added.
+
 2015-08-20  Nan Wang  <[email protected]>
 
         AX: Re-enable aria-checked-mixed-value.html test for mac

Added: trunk/LayoutTests/fast/dom/createNodeIterator-parameters-expected.txt (0 => 188711)


--- trunk/LayoutTests/fast/dom/createNodeIterator-parameters-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/createNodeIterator-parameters-expected.txt	2015-08-20 22:32:10 UTC (rev 188711)
@@ -0,0 +1,35 @@
+Tests parameters of document.createNodeIterator() API.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+* No parameters
+PASS document.createNodeIterator() threw exception TypeError: Not enough arguments.
+
+Default parameters
+iterator = document.createNodeIterator(document)
+PASS iterator.root is document
+PASS iterator.referenceNode is document
+PASS iterator.whatToShow is 0xFFFFFFFF
+PASS iterator.filter is null
+PASS iterator.pointerBeforeReferenceNode is true
+
+Passing null for optional parameters
+iterator = document.createNodeIterator(document, null, null)
+PASS iterator.root is document
+PASS iterator.referenceNode is document
+PASS iterator.whatToShow is 0
+FAIL iterator.filter should be null. Was [object NodeFilter].
+PASS iterator.pointerBeforeReferenceNode is true
+
+Passing undefined for optional parameters
+iterator = document.createNodeIterator(document, undefined, undefined)
+PASS iterator.root is document
+PASS iterator.referenceNode is document
+FAIL iterator.whatToShow should be 4294967295. Was 0.
+FAIL iterator.filter should be null. Was [object NodeFilter].
+PASS iterator.pointerBeforeReferenceNode is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/dom/createNodeIterator-parameters.html (0 => 188711)


--- trunk/LayoutTests/fast/dom/createNodeIterator-parameters.html	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/createNodeIterator-parameters.html	2015-08-20 22:32:10 UTC (rev 188711)
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+description("Tests parameters of document.createNodeIterator() API.");
+
+debug("* No parameters");
+shouldThrow("document.createNodeIterator()", "'TypeError: Not enough arguments'");
+
+debug("");
+debug("Default parameters");
+evalAndLog("iterator = document.createNodeIterator(document)");
+shouldBe("iterator.root", "document");
+shouldBe("iterator.referenceNode", "document");
+shouldBe("iterator.whatToShow", "0xFFFFFFFF");
+shouldBeNull("iterator.filter");
+shouldBeTrue("iterator.pointerBeforeReferenceNode");
+
+debug("");
+debug("Passing null for optional parameters");
+evalAndLog("iterator = document.createNodeIterator(document, null, null)");
+shouldBe("iterator.root", "document");
+shouldBe("iterator.referenceNode", "document");
+shouldBe("iterator.whatToShow", "0");
+shouldBeNull("iterator.filter");
+shouldBeTrue("iterator.pointerBeforeReferenceNode");
+
+debug("");
+debug("Passing undefined for optional parameters");
+evalAndLog("iterator = document.createNodeIterator(document, undefined, undefined)");
+shouldBe("iterator.root", "document");
+shouldBe("iterator.referenceNode", "document");
+shouldBe("iterator.whatToShow", "0xFFFFFFFF");
+shouldBeNull("iterator.filter");
+shouldBeTrue("iterator.pointerBeforeReferenceNode");
+
+</script>
+<script src=""
+</body>
+</html>

Added: trunk/LayoutTests/fast/dom/createTreeWalker-parameters-expected.txt (0 => 188711)


--- trunk/LayoutTests/fast/dom/createTreeWalker-parameters-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/createTreeWalker-parameters-expected.txt	2015-08-20 22:32:10 UTC (rev 188711)
@@ -0,0 +1,32 @@
+Tests parameters of document.createTreeWalker() API.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+* No parameters
+PASS document.createTreeWalker() threw exception TypeError: Not enough arguments.
+
+Default parameters
+walker = document.createTreeWalker(document)
+PASS walker.root is document
+PASS walker.currentNode is document
+PASS walker.whatToShow is 0xFFFFFFFF
+PASS walker.filter is null
+
+Passing null for optional parameters
+walker = document.createTreeWalker(document, null, null)
+PASS walker.root is document
+PASS walker.currentNode is document
+PASS walker.whatToShow is 0
+FAIL walker.filter should be null. Was [object NodeFilter].
+
+Passing undefined for optional parameters
+walker = document.createTreeWalker(document, undefined, undefined)
+PASS walker.root is document
+PASS walker.currentNode is document
+FAIL walker.whatToShow should be 4294967295. Was 0.
+FAIL walker.filter should be null. Was [object NodeFilter].
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/dom/createTreeWalker-parameters.html (0 => 188711)


--- trunk/LayoutTests/fast/dom/createTreeWalker-parameters.html	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/createTreeWalker-parameters.html	2015-08-20 22:32:10 UTC (rev 188711)
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+<body>
+<script src=""
+<script>
+description("Tests parameters of document.createTreeWalker() API.");
+
+debug("* No parameters");
+shouldThrow("document.createTreeWalker()", "'TypeError: Not enough arguments'");
+
+debug("");
+debug("Default parameters");
+evalAndLog("walker = document.createTreeWalker(document)");
+shouldBe("walker.root", "document");
+shouldBe("walker.currentNode", "document");
+shouldBe("walker.whatToShow", "0xFFFFFFFF");
+shouldBeNull("walker.filter");
+
+debug("");
+debug("Passing null for optional parameters");
+evalAndLog("walker = document.createTreeWalker(document, null, null)");
+shouldBe("walker.root", "document");
+shouldBe("walker.currentNode", "document");
+shouldBe("walker.whatToShow", "0");
+shouldBeNull("walker.filter");
+
+debug("");
+debug("Passing undefined for optional parameters");
+evalAndLog("walker = document.createTreeWalker(document, undefined, undefined)");
+shouldBe("walker.root", "document");
+shouldBe("walker.currentNode", "document");
+shouldBe("walker.whatToShow", "0xFFFFFFFF");
+shouldBeNull("walker.filter");
+
+</script>
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (188710 => 188711)


--- trunk/Source/WebCore/ChangeLog	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/ChangeLog	2015-08-20 22:32:10 UTC (rev 188711)
@@ -1,3 +1,45 @@
+2015-08-20  Chris Dumez  <[email protected]>
+
+        Default value for createNodeIterator() / createTreeWalker()'s whatToShow parameter should be 0xFFFFFFFF
+        https://bugs.webkit.org/show_bug.cgi?id=148238
+
+        Reviewed by Ryosuke Niwa.
+
+        Default value for createNodeIterator() / createTreeWalker()'s whatToShow
+        parameter should be 0xFFFFFFFF as per the specification:
+        - http://w3c-test.org/dom/traversal/NodeIterator.html
+        - http://w3c-test.org/dom/traversal/TreeWalker.html
+
+        Firefox and Chrome conform to the specification. However, WebKit was
+        using 0 as default value.
+
+        We still don't behave as expected in some cases, as visible from
+        the checks that are still failing in the new layout tests. Those
+        will be addressed separately.
+
+        Tests: fast/dom/createNodeIterator-parameters.html
+               fast/dom/createTreeWalker-parameters.html
+
+        * dom/Document.cpp:
+        (WebCore::Document::createNodeIterator):
+        (WebCore::Document::createTreeWalker):
+        (WebCore::Document::scheduleForcedStyleRecalc): Deleted.
+        (WebCore::Document::scheduleStyleRecalc): Deleted.
+        * dom/Document.h:
+        * dom/Document.idl:
+        * dom/NodeIterator.cpp:
+        (WebCore::NodeIterator::NodeIterator):
+        * dom/NodeIterator.h:
+        (WebCore::NodeIterator::create):
+        * dom/Traversal.cpp:
+        (WebCore::NodeIteratorBase::NodeIteratorBase):
+        * dom/Traversal.h:
+        (WebCore::NodeIteratorBase::whatToShow):
+        * dom/TreeWalker.cpp:
+        (WebCore::TreeWalker::TreeWalker):
+        * dom/TreeWalker.h:
+        (WebCore::TreeWalker::create):
+
 2015-08-20  Anders Carlsson  <[email protected]>
 
         Stop using cancelCallOnMainThread in MediaPlayerPrivateAVFoundation

Modified: trunk/Source/WebCore/dom/Document.cpp (188710 => 188711)


--- trunk/Source/WebCore/dom/Document.cpp	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/Document.cpp	2015-08-20 22:32:10 UTC (rev 188711)
@@ -1694,23 +1694,13 @@
     return Range::create(*this);
 }
 
-RefPtr<NodeIterator> Document::createNodeIterator(Node* root, unsigned whatToShow, 
-    PassRefPtr<NodeFilter> filter, bool expandEntityReferences, ExceptionCode& ec)
+RefPtr<NodeIterator> Document::createNodeIterator(Node* root, unsigned long whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
 {
-    if (!root) {
-        ec = NOT_SUPPORTED_ERR;
-        return nullptr;
-    }
     return NodeIterator::create(root, whatToShow, filter, expandEntityReferences);
 }
 
-RefPtr<TreeWalker> Document::createTreeWalker(Node* root, unsigned whatToShow, 
-    PassRefPtr<NodeFilter> filter, bool expandEntityReferences, ExceptionCode& ec)
+RefPtr<TreeWalker> Document::createTreeWalker(Node* root, unsigned long whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
 {
-    if (!root) {
-        ec = NOT_SUPPORTED_ERR;
-        return nullptr;
-    }
     return TreeWalker::create(root, whatToShow, filter, expandEntityReferences);
 }
 

Modified: trunk/Source/WebCore/dom/Document.h (188710 => 188711)


--- trunk/Source/WebCore/dom/Document.h	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/Document.h	2015-08-20 22:32:10 UTC (rev 188711)
@@ -536,11 +536,9 @@
 
     WEBCORE_EXPORT Ref<Range> createRange();
 
-    RefPtr<NodeIterator> createNodeIterator(Node* root, unsigned whatToShow,
-        PassRefPtr<NodeFilter>, bool expandEntityReferences, ExceptionCode&);
+    RefPtr<NodeIterator> createNodeIterator(Node* root, unsigned long whatToShow = 0xFFFFFFFF, PassRefPtr<NodeFilter> = nullptr, bool expandEntityReferences = false);
 
-    RefPtr<TreeWalker> createTreeWalker(Node* root, unsigned whatToShow,
-        PassRefPtr<NodeFilter>, bool expandEntityReferences, ExceptionCode&);
+    RefPtr<TreeWalker> createTreeWalker(Node* root, unsigned long whatToShow = 0xFFFFFFFF, PassRefPtr<NodeFilter> = nullptr, bool expandEntityReferences = false);
 
     // Special support for editing
     Ref<CSSStyleDeclaration> createCSSStyleDeclaration();

Modified: trunk/Source/WebCore/dom/Document.idl (188710 => 188711)


--- trunk/Source/WebCore/dom/Document.idl	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/Document.idl	2015-08-20 22:32:10 UTC (rev 188711)
@@ -83,14 +83,14 @@
 
     // DOM Level 2 Tranversal and Range (DocumentTraversal interface)
 
-    [ObjCLegacyUnnamedParameters, RaisesException] NodeIterator createNodeIterator([Default=Undefined] optional Node root,
-                                                   [Default=Undefined] optional unsigned long whatToShow,
-                                                   [Default=Undefined] optional NodeFilter filter,
-                                                   [Default=Undefined] optional boolean expandEntityReferences);
-    [ObjCLegacyUnnamedParameters, RaisesException] TreeWalker createTreeWalker([Default=Undefined] optional Node root,
-                                               [Default=Undefined] optional unsigned long whatToShow,
-                                               [Default=Undefined] optional NodeFilter filter,
-                                               [Default=Undefined] optional boolean expandEntityReferences);
+    [ObjCLegacyUnnamedParameters] NodeIterator createNodeIterator(Node root,
+        optional unsigned long whatToShow,
+        optional NodeFilter? filter,
+        optional boolean expandEntityReferences);
+    [ObjCLegacyUnnamedParameters] TreeWalker createTreeWalker(Node root,
+        optional unsigned long whatToShow,
+        optional NodeFilter? filter,
+        optional boolean expandEntityReferences);
 
     // DOM Level 2 Abstract Views (DocumentView interface)
 

Modified: trunk/Source/WebCore/dom/NodeIterator.cpp (188710 => 188711)


--- trunk/Source/WebCore/dom/NodeIterator.cpp	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/NodeIterator.cpp	2015-08-20 22:32:10 UTC (rev 188711)
@@ -76,7 +76,7 @@
     return node;
 }
 
-NodeIterator::NodeIterator(PassRefPtr<Node> rootNode, unsigned whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
+NodeIterator::NodeIterator(PassRefPtr<Node> rootNode, unsigned long whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
     : NodeIteratorBase(rootNode, whatToShow, filter, expandEntityReferences)
     , m_referenceNode(root(), true)
     , m_detached(false)

Modified: trunk/Source/WebCore/dom/NodeIterator.h (188710 => 188711)


--- trunk/Source/WebCore/dom/NodeIterator.h	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/NodeIterator.h	2015-08-20 22:32:10 UTC (rev 188711)
@@ -37,7 +37,7 @@
 
     class NodeIterator : public ScriptWrappable, public RefCounted<NodeIterator>, public NodeIteratorBase {
     public:
-        static Ref<NodeIterator> create(PassRefPtr<Node> rootNode, unsigned whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
+        static Ref<NodeIterator> create(PassRefPtr<Node> rootNode, unsigned long whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
         {
             return adoptRef(*new NodeIterator(rootNode, whatToShow, filter, expandEntityReferences));
         }
@@ -59,7 +59,7 @@
         PassRefPtr<Node> previousNode(ExceptionCode& ec) { return previousNode(execStateFromNode(mainThreadNormalWorld(), referenceNode()), ec); }
 
     private:
-        NodeIterator(PassRefPtr<Node>, unsigned whatToShow, PassRefPtr<NodeFilter>, bool expandEntityReferences);
+        NodeIterator(PassRefPtr<Node>, unsigned long whatToShow, PassRefPtr<NodeFilter>, bool expandEntityReferences);
 
         struct NodePointer {
             RefPtr<Node> node;

Modified: trunk/Source/WebCore/dom/Traversal.cpp (188710 => 188711)


--- trunk/Source/WebCore/dom/Traversal.cpp	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/Traversal.cpp	2015-08-20 22:32:10 UTC (rev 188711)
@@ -30,7 +30,7 @@
 
 namespace WebCore {
 
-NodeIteratorBase::NodeIteratorBase(PassRefPtr<Node> rootNode, unsigned whatToShow, PassRefPtr<NodeFilter> nodeFilter, bool expandEntityReferences)
+NodeIteratorBase::NodeIteratorBase(PassRefPtr<Node> rootNode, unsigned long whatToShow, PassRefPtr<NodeFilter> nodeFilter, bool expandEntityReferences)
     : m_root(rootNode)
     , m_whatToShow(whatToShow)
     , m_filter(nodeFilter)

Modified: trunk/Source/WebCore/dom/Traversal.h (188710 => 188711)


--- trunk/Source/WebCore/dom/Traversal.h	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/Traversal.h	2015-08-20 22:32:10 UTC (rev 188711)
@@ -36,17 +36,17 @@
     class NodeIteratorBase {
     public:
         Node* root() const { return m_root.get(); }
-        unsigned whatToShow() const { return m_whatToShow; }
+        unsigned long whatToShow() const { return m_whatToShow; }
         NodeFilter* filter() const { return m_filter.get(); }
         bool expandEntityReferences() const { return m_expandEntityReferences; }
 
     protected:
-        NodeIteratorBase(PassRefPtr<Node>, unsigned whatToShow, PassRefPtr<NodeFilter>, bool expandEntityReferences);
+        NodeIteratorBase(PassRefPtr<Node>, unsigned long whatToShow, PassRefPtr<NodeFilter>, bool expandEntityReferences);
         short acceptNode(JSC::ExecState*, Node*) const;
 
     private:
         RefPtr<Node> m_root;
-        unsigned m_whatToShow;
+        unsigned long m_whatToShow;
         RefPtr<NodeFilter> m_filter;
         bool m_expandEntityReferences;
     };

Modified: trunk/Source/WebCore/dom/TreeWalker.cpp (188710 => 188711)


--- trunk/Source/WebCore/dom/TreeWalker.cpp	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/TreeWalker.cpp	2015-08-20 22:32:10 UTC (rev 188711)
@@ -33,7 +33,7 @@
 
 namespace WebCore {
 
-TreeWalker::TreeWalker(PassRefPtr<Node> rootNode, unsigned whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
+TreeWalker::TreeWalker(PassRefPtr<Node> rootNode, unsigned long whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
     : NodeIteratorBase(rootNode, whatToShow, filter, expandEntityReferences)
     , m_current(root())
 {

Modified: trunk/Source/WebCore/dom/TreeWalker.h (188710 => 188711)


--- trunk/Source/WebCore/dom/TreeWalker.h	2015-08-20 22:15:00 UTC (rev 188710)
+++ trunk/Source/WebCore/dom/TreeWalker.h	2015-08-20 22:32:10 UTC (rev 188711)
@@ -37,7 +37,7 @@
 
     class TreeWalker : public ScriptWrappable, public RefCounted<TreeWalker>, public NodeIteratorBase {
     public:
-        static Ref<TreeWalker> create(PassRefPtr<Node> rootNode, unsigned whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
+        static Ref<TreeWalker> create(PassRefPtr<Node> rootNode, unsigned long whatToShow, PassRefPtr<NodeFilter> filter, bool expandEntityReferences)
         {
             return adoptRef(*new TreeWalker(rootNode, whatToShow, filter, expandEntityReferences));
         }                            
@@ -64,7 +64,7 @@
         Node* nextNode() { return nextNode(execStateFromNode(mainThreadNormalWorld(), m_current.get())); }
 
     private:
-        TreeWalker(PassRefPtr<Node>, unsigned whatToShow, PassRefPtr<NodeFilter>, bool expandEntityReferences);
+        TreeWalker(PassRefPtr<Node>, unsigned long whatToShow, PassRefPtr<NodeFilter>, bool expandEntityReferences);
         
         Node* setCurrent(PassRefPtr<Node>);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to