Changeset 153660 in webkit


Ignore:
Timestamp:
Aug 2, 2013 11:52:52 AM (11 years ago)
Author:
Christophe Dumez
Message:

compareDocumentPosition() should report PRECEDING or FOLLOWING information even if nodes are disconnected
https://bugs.webkit.org/show_bug.cgi?id=119316

Reviewed by Ryosuke Niwa.

Source/WebCore:

As per the latest specification, compareDocumentPosition() should report PRECEDING or FOLLOWING
information even if nodes are disconnected:

This behavior is consistent with both IE10, Firefox 22 and since recently Blink.

No new tests, covered by existing tests.

  • dom/Node.cpp:

(WebCore::compareDetachedElementsPosition):
(WebCore::Node::compareDocumentPosition):

LayoutTests:

Update fast/dom/compare-document-position-disconnected-nodes.html to check that compareDocumentPosition()
now returns one of the following values for disconnected nodes:

  • DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | DOCUMENT_POSITION_PRECEDING
  • DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | DOCUMENT_POSITION_FOLLOWING

Several dom/xhtml/level3 are skipped and marked as WonfFix because they are outdated and no longer match
the DOM4 specification. They expect compareDocumentPosition() not to return PRECEDING / FOLLOWING
information for disconnected nodes.

  • 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:
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r153658 r153660  
     12013-08-02  Christophe Dumez  <ch.dumez@sisa.samsung.com>
     2
     3        compareDocumentPosition() should report PRECEDING or FOLLOWING information even if nodes are disconnected
     4        https://bugs.webkit.org/show_bug.cgi?id=119316
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        Update fast/dom/compare-document-position-disconnected-nodes.html to check that compareDocumentPosition()
     9        now returns one of the following values for disconnected nodes:
     10        - DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | DOCUMENT_POSITION_PRECEDING
     11        - DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | DOCUMENT_POSITION_FOLLOWING
     12
     13        Several dom/xhtml/level3 are skipped and marked as WonfFix because they are outdated and no longer match
     14        the DOM4 specification. They expect compareDocumentPosition() not to return PRECEDING / FOLLOWING
     15        information for disconnected nodes.
     16
     17        * TestExpectations:
     18        * dom/xhtml/level3/core/nodecomparedocumentposition38-expected.txt:
     19        * fast/dom/compare-document-position-disconnected-nodes-expected.txt:
     20        * fast/dom/compare-document-position-disconnected-nodes.html:
     21        * fast/dom/shadow/compare-document-position-expected.txt:
     22        * fast/dom/shadow/compare-document-position.html:
     23
    1242013-08-02  Mihai Tica  <mitica@adobe.com>
    225
  • trunk/LayoutTests/TestExpectations

    r153623 r153660  
    1717webkit.org/b/76280 media/W3C/video/networkState/networkState_during_progress.html [ Pass Failure ]
    1818
     19# These conformace tests are no longer in sync with the latest specification
     20# and expect compareDocumentPosition() to return:
     21# DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | DOCUMENT_POSITION_DISCONNECTED
     22# for disconnected nodes (missing PRECEDING / FOLLOWING information).
     23# We cannot check rebaseline them because their output is likely to change
     24# between test runs as it decides PRECEDING / FOLLOWING using pointer
     25# comparison.
     26dom/xhtml/level3/core/nodecomparedocumentposition03.xhtml [ WontFix ]
     27dom/xhtml/level3/core/nodecomparedocumentposition05.xhtml [ WontFix ]
     28dom/xhtml/level3/core/nodecomparedocumentposition16.xhtml [ WontFix ]
     29dom/xhtml/level3/core/nodecomparedocumentposition33.xhtml [ WontFix ]
     30
     31# Node::compareDocumentPosition() wrongly reports an attribute and its content as disconnected.
     32webkit.org/b/119325 dom/xhtml/level3/core/nodecomparedocumentposition38.xhtml [ Failure ]
     33
    1934# The CSS Shapes spec has changed the positioning model for floats with shape-outside.
    2035# Thus all of the tests need to be rewitten to work as the implementation of
  • trunk/LayoutTests/dom/xhtml/level3/core/nodecomparedocumentposition38-expected.txt

    r35143 r153660  
    11Test    http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodecomparedocumentposition38
    2 Status  failure
    3 Message nodecomparedocumentpositionIsContainsFollowing38: assertEquals failed, actual 33, expected 20.
     2Status  Success
  • trunk/LayoutTests/fast/dom/compare-document-position-disconnected-nodes-expected.txt

    r143239 r153660  
     1* Test with 2 disconnected elements
    12PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
    23PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     
    56PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
    67PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
     8PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     9PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     10PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
     11PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
     12* Test with document and a disconnected element
     13PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     14PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     15PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     16PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     17PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
     18PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
     19PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     20PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     21PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
     22PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
     23* Test with document and a disconnected attribute
     24PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     25PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     26PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     27PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     28PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
     29PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
     30PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     31PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     32PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
     33PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
     34* Test with 2 disconnected attributes
     35PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     36PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     37PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     38PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     39PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
     40PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
     41PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     42PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     43PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
     44PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
     45* Test with disconnected attribute and element
     46PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     47PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     48PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     49PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     50PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING
     51PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is not b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING
     52PASS a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     53PASS b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     54PASS a.compareDocumentPosition(b) is a.compareDocumentPosition(b)
     55PASS b.compareDocumentPosition(a) is b.compareDocumentPosition(a)
    756PASS successfullyParsed is true
    857
  • trunk/LayoutTests/fast/dom/compare-document-position-disconnected-nodes.html

    r143239 r153660  
    44    <script src="../js/resources/js-test-pre.js"></script>
    55    <script>
    6         window.a = document.createElement('a');
    7         window.b = document.createElement('b');
     6        var a;
     7        var b;
    88
    9         shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
    10         shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
    11         shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
    12         shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
    13         shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING');
    14         shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
     9        function testElements(_a, _b) {
     10            a = _a;
     11            b = _b;
     12
     13            shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
     14            shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
     15            shouldBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
     16            shouldBe('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
     17            shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING');
     18            shouldNotBe('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING', 'b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
     19            shouldBeNonZero('a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_PRECEDING || a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING');
     20            shouldBeNonZero('b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING || b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_FOLLOWING');
     21            // Make sure the returned result is consistent.
     22            shouldBe('a.compareDocumentPosition(b)', 'a.compareDocumentPosition(b)');
     23            shouldBe('b.compareDocumentPosition(a)', 'b.compareDocumentPosition(a)');
     24        }
     25
     26        debug("* Test with 2 disconnected elements");
     27        testElements(document.createElement('a'), document.createElement('b'));
     28        debug("* Test with document and a disconnected element");
     29        testElements(document, document.createElement('b'));
     30        debug("* Test with document and a disconnected attribute");
     31        testElements(document, document.createAttribute('b'));
     32        debug("* Test with 2 disconnected attributes");
     33        testElements(document.createAttribute("a"), document.createAttribute("b"));
     34        debug("* Test with disconnected attribute and element");
     35        testElements(document.createAttribute("a"), document.createElement("b"));
    1536    </script>
    1637    <script src="../js/resources/js-test-post.js"></script>
  • trunk/LayoutTests/fast/dom/shadow/compare-document-position-expected.txt

    r136090 r153660  
    1010PASS b2.compareDocumentPosition(b1) is Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING
    1111PASS b2.compareDocumentPosition(b3) is Node.DOCUMENT_POSITION_FOLLOWING
    12 PASS a1.compareDocumentPosition(b1) is Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
    13 PASS b1.compareDocumentPosition(c1) is Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     12PASS a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_PRECEDING || a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     13PASS a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     14PASS a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     15PASS a1.compareDocumentPosition(b1) is a1.compareDocumentPosition(b1)
     16PASS b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_PRECEDING || b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_FOLLOWING is non-zero.
     17PASS b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_DISCONNECTED is Node.DOCUMENT_POSITION_DISCONNECTED
     18PASS b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
     19PASS b1.compareDocumentPosition(c1) is b1.compareDocumentPosition(c1)
    1420PASS successfullyParsed is true
    1521
  • trunk/LayoutTests/fast/dom/shadow/compare-document-position.html

    r136090 r153660  
    4646    shouldBe('b2.compareDocumentPosition(b3)', 'Node.DOCUMENT_POSITION_FOLLOWING');
    4747
    48     // The current implementation does not return FOLLOWING OR PRECEDING flag.
    49     // We need a stable implementation which decides the total order between nodes in different shadow trees.
    50     shouldBe('a1.compareDocumentPosition(b1)', 'Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
    51     shouldBe('b1.compareDocumentPosition(c1)', 'Node.DOCUMENT_POSITION_DISCONNECTED | Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
     48    // Nodes in different shadow trees.
     49    shouldBeNonZero('a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_PRECEDING || a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_FOLLOWING');
     50    shouldBe('a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
     51    shouldBe('a1.compareDocumentPosition(b1) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
     52    shouldBe('a1.compareDocumentPosition(b1)', 'a1.compareDocumentPosition(b1)');
     53    shouldBeNonZero('b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_PRECEDING || b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_FOLLOWING');
     54    shouldBe('b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
     55    shouldBe('b1.compareDocumentPosition(c1) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
     56    shouldBe('b1.compareDocumentPosition(c1)', 'b1.compareDocumentPosition(c1)');
    5257}
    5358
  • trunk/Source/WebCore/ChangeLog

    r153655 r153660  
     12013-08-02  Christophe Dumez  <ch.dumez@sisa.samsung.com>
     2
     3        compareDocumentPosition() should report PRECEDING or FOLLOWING information even if nodes are disconnected
     4        https://bugs.webkit.org/show_bug.cgi?id=119316
     5
     6        Reviewed by Ryosuke Niwa.
     7
     8        As per the latest specification, compareDocumentPosition() should report PRECEDING or FOLLOWING
     9        information even if nodes are disconnected:
     10        - http://dom.spec.whatwg.org/#dom-node-comparedocumentposition
     11
     12        This behavior is consistent with both IE10, Firefox 22 and since recently Blink.
     13
     14        No new tests, covered by existing tests.
     15
     16        * dom/Node.cpp:
     17        (WebCore::compareDetachedElementsPosition):
     18        (WebCore::Node::compareDocumentPosition):
     19
    1202013-08-02  Simon Fraser  <simon.fraser@apple.com>
    221
  • trunk/Source/WebCore/dom/Node.cpp

    r152353 r153660  
    16221622}
    16231623
     1624static inline unsigned short compareDetachedElementsPosition(Node* firstNode, Node* secondNode)
     1625{
     1626    // If the 2 nodes are not in the same tree, return the result of adding DOCUMENT_POSITION_DISCONNECTED,
     1627    // DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, and either DOCUMENT_POSITION_PRECEDING or
     1628    // DOCUMENT_POSITION_FOLLOWING, with the constraint that this is to be consistent. Whether to return
     1629    // DOCUMENT_POSITION_PRECEDING or DOCUMENT_POSITION_FOLLOWING is implemented here via pointer
     1630    // comparison.
     1631    // See step 3 in http://www.w3.org/TR/2012/WD-dom-20121206/#dom-node-comparedocumentposition
     1632    unsigned short direction = (firstNode > secondNode) ? Node::DOCUMENT_POSITION_PRECEDING : Node::DOCUMENT_POSITION_FOLLOWING;
     1633    return Node::DOCUMENT_POSITION_DISCONNECTED | Node::DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | direction;
     1634}
     1635
    16241636unsigned short Node::compareDocumentPosition(Node* otherNode)
    16251637{
     
    16401652    // an orphaned attribute node.
    16411653    if (!start1 || !start2)
    1642         return DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
     1654        return compareDetachedElementsPosition(this, otherNode);
    16431655
    16441656    Vector<Node*, 16> chain1;
     
    16761688    if (start1->inDocument() != start2->inDocument() ||
    16771689        start1->treeScope() != start2->treeScope())
    1678         return DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
     1690        return compareDetachedElementsPosition(this, otherNode);
    16791691
    16801692    // We need to find a common ancestor container, and then compare the indices of the two immediate children.
     
    16891701
    16901702    // If the two elements don't have a common root, they're not in the same tree.
    1691     if (chain1[index1 - 1] != chain2[index2 - 1]) {
    1692         unsigned short direction = (start1 > start2) ? DOCUMENT_POSITION_PRECEDING : DOCUMENT_POSITION_FOLLOWING;
    1693         return DOCUMENT_POSITION_DISCONNECTED | DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC | direction;
    1694     }
     1703    if (chain1[index1 - 1] != chain2[index2 - 1])
     1704        return compareDetachedElementsPosition(this, otherNode);
    16951705
    16961706    // Walk the two chains backwards and look for the first difference.
Note: See TracChangeset for help on using the changeset viewer.