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) {