Title: [164920] trunk
Revision
164920
Author
[email protected]
Date
2014-03-01 10:48:16 -0800 (Sat, 01 Mar 2014)

Log Message

Node::compareDocumentPosition leaks memory structure
https://bugs.webkit.org/show_bug.cgi?id=120244

Reviewed by Ryosuke Niwa.

Source/WebCore: 

* dom/Node.cpp: (WebCore::Node::compareDocumentPosition): Don't do it.

LayoutTests: 

* TestExpectations:
* dom/xhtml/level3/core/nodecomparedocumentposition38-expected.txt:
* fast/dom/compare-document-position-disconnected-nodes-expected.txt:
* fast/dom/compare-document-position-disconnected-nodes.html:
* fast/dom/shadow/compare-document-position-expected.txt:
* fast/dom/shadow/compare-document-position.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (164919 => 164920)


--- trunk/LayoutTests/ChangeLog	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/LayoutTests/ChangeLog	2014-03-01 18:48:16 UTC (rev 164920)
@@ -1,3 +1,17 @@
+2014-02-28  Alexey Proskuryakov  <[email protected]>
+
+        Node::compareDocumentPosition leaks memory structure
+        https://bugs.webkit.org/show_bug.cgi?id=120244
+
+        Reviewed by Ryosuke Niwa.
+
+        * TestExpectations:
+        * dom/xhtml/level3/core/nodecomparedocumentposition38-expected.txt:
+        * fast/dom/compare-document-position-disconnected-nodes-expected.txt:
+        * fast/dom/compare-document-position-disconnected-nodes.html:
+        * fast/dom/shadow/compare-document-position-expected.txt:
+        * fast/dom/shadow/compare-document-position.html:
+
 2014-03-01  David Kilzer  <[email protected]>
 
         Fix lifetime handling of SVGPropertyTearOffs

Modified: trunk/LayoutTests/TestExpectations (164919 => 164920)


--- trunk/LayoutTests/TestExpectations	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/LayoutTests/TestExpectations	2014-03-01 18:48:16 UTC (rev 164920)
@@ -24,21 +24,6 @@
 webkit.org/b/57700  mathml/presentation/row.xhtml [ Failure ]
 webkit.org/b/57700  mathml/presentation/mo.xhtml [ Failure ]
 
-# These conformace tests are no longer in sync with the latest specification
-# and expect compareDocumentPosition() to return:
-# DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | DOCUMENT_POSITION_DISCONNECTED
-# for disconnected nodes (missing PRECEDING / FOLLOWING information).
-# We cannot check rebaseline them because their output is likely to change
-# between test runs as it decides PRECEDING / FOLLOWING using pointer
-# comparison.
-dom/xhtml/level3/core/nodecomparedocumentposition03.xhtml [ WontFix ]
-dom/xhtml/level3/core/nodecomparedocumentposition05.xhtml [ WontFix ]
-dom/xhtml/level3/core/nodecomparedocumentposition16.xhtml [ WontFix ]
-dom/xhtml/level3/core/nodecomparedocumentposition33.xhtml [ WontFix ]
-
-# Node::compareDocumentPosition() wrongly reports an attribute and its content as disconnected.
-webkit.org/b/119325 dom/xhtml/level3/core/nodecomparedocumentposition38.xhtml [ Failure ]
-
 webkit.org/b/118301 fast/dom/timer-throttling-hidden-page.html [ Skip ]
 
 webkit.org/b/119094 fast/forms/color/input-color-onchange-event.html [ Crash Pass ]

Modified: trunk/LayoutTests/dom/xhtml/level3/core/nodecomparedocumentposition38-expected.txt (164919 => 164920)


--- trunk/LayoutTests/dom/xhtml/level3/core/nodecomparedocumentposition38-expected.txt	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/LayoutTests/dom/xhtml/level3/core/nodecomparedocumentposition38-expected.txt	2014-03-01 18:48:16 UTC (rev 164920)
@@ -1,2 +1,3 @@
 Test	http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodecomparedocumentposition38
-Status	Success
+Status	failure
+Message	nodecomparedocumentpositionIsContainsFollowing38: assertEquals failed, actual 33, expected 20.

Modified: trunk/LayoutTests/fast/dom/compare-document-position-disconnected-nodes-expected.txt (164919 => 164920)


--- trunk/LayoutTests/fast/dom/compare-document-position-disconnected-nodes-expected.txt	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/LayoutTests/fast/dom/compare-document-position-disconnected-nodes-expected.txt	2014-03-01 18:48:16 UTC (rev 164920)
@@ -1,58 +1,9 @@
-* Test with 2 disconnected elements
 PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
 PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
 PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
 PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
-PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
-* Test with document and a disconnected element
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
-PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
-* Test with document and a disconnected attribute
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
-PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
-* Test with 2 disconnected attributes
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
-PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
-* Test with disconnected attribute and element
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
-PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
-PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
+PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is 0
+PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is 0
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/dom/compare-document-position-disconnected-nodes.html (164919 => 164920)


--- trunk/LayoutTests/fast/dom/compare-document-position-disconnected-nodes.html	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/LayoutTests/fast/dom/compare-document-position-disconnected-nodes.html	2014-03-01 18:48:16 UTC (rev 164920)
@@ -3,36 +3,15 @@
 <head>
     <script src=""
     <script>
-        var a;
-        var b;
+        window.a = document.createElement('a');
+        window.b = document.createElement('b');
 
-        function testElements(_a, _b) {
-            a = _a;
-            b = _b;
-
-            shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
-            shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
-            shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
-            shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
-            shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING');
-            shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
-            shouldBeNonZero('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING');
-            shouldBeNonZero('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
-            // Make sure the returned result is consistent.
-            shouldBe('a.compareDocumentPosition(b)', 'a.compareDocumentPosition(b)');
-            shouldBe('b.compareDocumentPosition(a)', 'b.compareDocumentPosition(a)');
-        }
-
-        debug("* Test with 2 disconnected elements");
-        testElements(document.createElement('a'), document.createElement('b'));
-        debug("* Test with document and a disconnected element");
-        testElements(document, document.createElement('b'));
-        debug("* Test with document and a disconnected attribute");
-        testElements(document, document.createAttribute('b'));
-        debug("* Test with 2 disconnected attributes");
-        testElements(document.createAttribute("a"), document.createAttribute("b"));
-        debug("* Test with disconnected attribute and element");
-        testElements(document.createAttribute("a"), document.createElement("b"));
+        shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
+        shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
+        shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
+        shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
+        shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING', '0');
+        shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING', '0');
     </script>
     <script src=""
 </head>

Modified: trunk/LayoutTests/fast/dom/shadow/compare-document-position-expected.txt (164919 => 164920)


--- trunk/LayoutTests/fast/dom/shadow/compare-document-position-expected.txt	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/LayoutTests/fast/dom/shadow/compare-document-position-expected.txt	2014-03-01 18:48:16 UTC (rev 164920)
@@ -9,14 +9,8 @@
 PASS b1.compareDocumentPosition(b2) is Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING
 PASS b2.compareDocumentPosition(b1) is Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING
 PASS b2.compareDocumentPosition(b3) is Node.DOCUMENT_POSITION_FOLLOWING
-PASS a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_PRECEDING || a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS a1.compareDocumentPosition(b1) is a1.compareDocumentPosition(b1)
-PASS b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_PRECEDING || b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
-PASS b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
-PASS b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
-PASS b1.compareDocumentPosition(c1) is b1.compareDocumentPosition(c1)
+PASS a1.compareDocumentPosition(b1) is Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
+PASS b1.compareDocumentPosition(c1) is Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/fast/dom/shadow/compare-document-position.html (164919 => 164920)


--- trunk/LayoutTests/fast/dom/shadow/compare-document-position.html	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/LayoutTests/fast/dom/shadow/compare-document-position.html	2014-03-01 18:48:16 UTC (rev 164920)
@@ -45,15 +45,10 @@
     shouldBe('b2.compareDocumentPosition(b1)', 'Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING');
     shouldBe('b2.compareDocumentPosition(b3)', 'Node.DOCUMENT_POSITION_FOLLOWING');
 
-    // Nodes in different shadow trees.
-    shouldBeNonZero('a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_PRECEDING || a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_FOLLOWING');
-    shouldBe('a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
-    shouldBe('a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
-    shouldBe('a1.compareDocumentPosition(b1)', 'a1.compareDocumentPosition(b1)');
-    shouldBeNonZero('b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_PRECEDING || b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_FOLLOWING');
-    shouldBe('b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
-    shouldBe('b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
-    shouldBe('b1.compareDocumentPosition(c1)', 'b1.compareDocumentPosition(c1)');
+    // The current implementation does not return FOLLOWING OR PRECEDING flag.
+    // We need a stable implementation which decides the total order between nodes in different shadow trees.
+    shouldBe('a1.compareDocumentPosition(b1)', 'Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
+    shouldBe('b1.compareDocumentPosition(c1)', 'Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
 }
 
 testCompareDocumentPosition();

Modified: trunk/Source/WebCore/ChangeLog (164919 => 164920)


--- trunk/Source/WebCore/ChangeLog	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/Source/WebCore/ChangeLog	2014-03-01 18:48:16 UTC (rev 164920)
@@ -1,3 +1,12 @@
+2014-02-28  Alexey Proskuryakov  <[email protected]>
+
+        Node::compareDocumentPosition leaks memory structure
+        https://bugs.webkit.org/show_bug.cgi?id=120244
+
+        Reviewed by Ryosuke Niwa.
+
+        * dom/Node.cpp: (WebCore::Node::compareDocumentPosition): Don't do it.
+
 2014-03-01  David Kilzer  <[email protected]>
 
         Fix lifetime handling of SVGPropertyTearOffs

Modified: trunk/Source/WebCore/dom/Node.cpp (164919 => 164920)


--- trunk/Source/WebCore/dom/Node.cpp	2014-03-01 18:46:35 UTC (rev 164919)
+++ trunk/Source/WebCore/dom/Node.cpp	2014-03-01 18:48:16 UTC (rev 164920)
@@ -1371,18 +1371,6 @@
     return false;
 }
 
-static inline unsigned short compareDetachedElementsPosition(Node* firstNode, Node* secondNode)
-{
-    // If the 2 nodes are not in the same tree, return the result of adding DOCUMENT_POSITION_DISCONNECTED,
-    // DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, and either DOCUMENT_POSITION_PRECEDING or
-    // DOCUMENT_POSITION_FOLLOWING, with the constraint that this is to be consistent. Whether to return
-    // DOCUMENT_POSITION_PRECEDING or DOCUMENT_POSITION_FOLLOWING is implemented here via pointer
-    // comparison.
-    // See step 3 in http://www.w3.org/TR/2012/WD-dom-20121206/#dom-node-comparedocumentposition
-    unsigned short direction = (firstNode > secondNode) ? Node::DOCUMENT_POSITION_PRECEDING : Node::DOCUMENT_POSITION_FOLLOWING;
-    return Node::DOCUMENT_POSITION_DISCONNECTED | Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | direction;
-}
-
 unsigned short Node::compareDocumentPosition(Node* otherNode)
 {
     // It is not clear what should be done if |otherNode| is 0.
@@ -1401,7 +1389,7 @@
     // If either of start1 or start2 is null, then we are disconnected, since one of the nodes is
     // an orphaned attribute node.
     if (!start1 || !start2)
-        return compareDetachedElementsPosition(this, otherNode);
+        return DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
 
     Vector<Node*, 16> chain1;
     Vector<Node*, 16> chain2;
@@ -1435,7 +1423,7 @@
     // comparing Attr nodes here, since they return false from inDocument() all the time (which seems like a bug).
     if (start1->inDocument() != start2->inDocument() ||
         &start1->treeScope() != &start2->treeScope())
-        return compareDetachedElementsPosition(this, otherNode);
+        return DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
 
     // We need to find a common ancestor container, and then compare the indices of the two immediate children.
     Node* current;
@@ -1449,7 +1437,7 @@
 
     // If the two elements don't have a common root, they're not in the same tree.
     if (chain1[index1 - 1] != chain2[index2 - 1])
-        return compareDetachedElementsPosition(this, otherNode);
+        return DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
 
     // Walk the two chains backwards and look for the first difference.
     for (unsigned i = std::min(index1, index2); i; --i) {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to