| OLD | NEW |
| 1 /* | 1 /* |
| 2 * (C) 1999 Lars Knoll (knoll@kde.org) | 2 * (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2000 Gunnstein Lye (gunnstein@netcom.no) | 3 * (C) 2000 Gunnstein Lye (gunnstein@netcom.no) |
| 4 * (C) 2000 Frederik Holljen (frederik.holljen@hig.no) | 4 * (C) 2000 Frederik Holljen (frederik.holljen@hig.no) |
| 5 * (C) 2001 Peter Kelly (pmk@post.com) | 5 * (C) 2001 Peter Kelly (pmk@post.com) |
| 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All | 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All |
| 7 * rights reserved. | 7 * rights reserved. |
| 8 * Copyright (C) 2011 Motorola Mobility. All rights reserved. | 8 * Copyright (C) 2011 Motorola Mobility. All rights reserved. |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 updateSelectionIfAddedToSelection(); | 242 updateSelectionIfAddedToSelection(); |
| 243 } | 243 } |
| 244 | 244 |
| 245 bool Range::isNodeFullyContained(Node& node) const { | 245 bool Range::isNodeFullyContained(Node& node) const { |
| 246 ContainerNode* parentNode = node.parentNode(); | 246 ContainerNode* parentNode = node.parentNode(); |
| 247 int nodeIndex = node.nodeIndex(); | 247 int nodeIndex = node.nodeIndex(); |
| 248 return isPointInRange( | 248 return isPointInRange( |
| 249 parentNode, nodeIndex, | 249 parentNode, nodeIndex, |
| 250 IGNORE_EXCEPTION_FOR_TESTING) // starts in the middle of this | 250 IGNORE_EXCEPTION_FOR_TESTING) // starts in the middle of this |
| 251 // range, or on the boundary points. | 251 // range, or on the boundary points. |
| 252 && isPointInRange( | 252 && |
| 253 parentNode, nodeIndex + 1, | 253 isPointInRange( |
| 254 IGNORE_EXCEPTION_FOR_TESTING); // ends in the middle of this | 254 parentNode, nodeIndex + 1, |
| 255 // range, or on the boundary | 255 IGNORE_EXCEPTION_FOR_TESTING); // ends in the middle of this |
| 256 // points. | 256 // range, or on the boundary |
| 257 // points. |
| 257 } | 258 } |
| 258 | 259 |
| 259 bool Range::hasSameRoot(const Node& node) const { | 260 bool Range::hasSameRoot(const Node& node) const { |
| 260 if (node.document() != m_ownerDocument) | 261 if (node.document() != m_ownerDocument) |
| 261 return false; | 262 return false; |
| 262 // commonAncestorContainer() is O(depth). We should avoid to call it in common | 263 // commonAncestorContainer() is O(depth). We should avoid to call it in common |
| 263 // cases. | 264 // cases. |
| 264 if (node.isInTreeScope() && m_start.container()->isInTreeScope() && | 265 if (node.isInTreeScope() && m_start.container()->isInTreeScope() && |
| 265 &node.treeScope() == &m_start.container()->treeScope()) | 266 &node.treeScope() == &m_start.container()->treeScope()) |
| 266 return true; | 267 return true; |
| (...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 841 "The node to be inserted contains a '" + c->nodeName() + | 842 "The node to be inserted contains a '" + c->nodeName() + |
| 842 "' node, which may not be inserted here."); | 843 "' node, which may not be inserted here."); |
| 843 return; | 844 return; |
| 844 } | 845 } |
| 845 ++numNewChildren; | 846 ++numNewChildren; |
| 846 } | 847 } |
| 847 } else { | 848 } else { |
| 848 numNewChildren = 1; | 849 numNewChildren = 1; |
| 849 if (!checkAgainst->childTypeAllowed(newNodeType)) { | 850 if (!checkAgainst->childTypeAllowed(newNodeType)) { |
| 850 exceptionState.throwDOMException( | 851 exceptionState.throwDOMException( |
| 851 HierarchyRequestError, "The node to be inserted is a '" + | 852 HierarchyRequestError, |
| 852 newNode->nodeName() + | 853 "The node to be inserted is a '" + newNode->nodeName() + |
| 853 "' node, which may not be inserted here."); | 854 "' node, which may not be inserted here."); |
| 854 return; | 855 return; |
| 855 } | 856 } |
| 856 } | 857 } |
| 857 | 858 |
| 858 for (Node& node : NodeTraversal::inclusiveAncestorsOf(*m_start.container())) { | 859 for (Node& node : NodeTraversal::inclusiveAncestorsOf(*m_start.container())) { |
| 859 if (node == newNode) { | 860 if (node == newNode) { |
| 860 exceptionState.throwDOMException(HierarchyRequestError, | 861 exceptionState.throwDOMException(HierarchyRequestError, |
| 861 "The node to be inserted contains the " | 862 "The node to be inserted contains the " |
| 862 "insertion point; it may not be " | 863 "insertion point; it may not be " |
| 863 "inserted into itself."); | 864 "inserted into itself."); |
| 864 return; | 865 return; |
| 865 } | 866 } |
| 866 } | 867 } |
| 867 | 868 |
| 868 // InvalidNodeTypeError: Raised if newNode is an Attr, Entity, Notation, | 869 // InvalidNodeTypeError: Raised if newNode is an Attr, Entity, Notation, |
| 869 // ShadowRoot or Document node. | 870 // ShadowRoot or Document node. |
| 870 switch (newNodeType) { | 871 switch (newNodeType) { |
| 871 case Node::kAttributeNode: | 872 case Node::kAttributeNode: |
| 872 case Node::kDocumentNode: | 873 case Node::kDocumentNode: |
| 873 exceptionState.throwDOMException( | 874 exceptionState.throwDOMException( |
| 874 InvalidNodeTypeError, "The node to be inserted is a '" + | 875 InvalidNodeTypeError, |
| 875 newNode->nodeName() + | 876 "The node to be inserted is a '" + newNode->nodeName() + |
| 876 "' node, which may not be inserted here."); | 877 "' node, which may not be inserted here."); |
| 877 return; | 878 return; |
| 878 default: | 879 default: |
| 879 if (newNode->isShadowRoot()) { | 880 if (newNode->isShadowRoot()) { |
| 880 exceptionState.throwDOMException(InvalidNodeTypeError, | 881 exceptionState.throwDOMException(InvalidNodeTypeError, |
| 881 "The node to be inserted is a shadow " | 882 "The node to be inserted is a shadow " |
| 882 "root, which may not be inserted " | 883 "root, which may not be inserted " |
| 883 "here."); | 884 "here."); |
| 884 return; | 885 return; |
| 885 } | 886 } |
| 886 break; | 887 break; |
| (...skipping 775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1662 if (node->isElementNode()) | 1663 if (node->isElementNode()) |
| 1663 nodeSet.insert(node); | 1664 nodeSet.insert(node); |
| 1664 } | 1665 } |
| 1665 | 1666 |
| 1666 for (Node* node = firstNode(); node != stopNode; | 1667 for (Node* node = firstNode(); node != stopNode; |
| 1667 node = NodeTraversal::next(*node)) { | 1668 node = NodeTraversal::next(*node)) { |
| 1668 if (node->isElementNode()) { | 1669 if (node->isElementNode()) { |
| 1669 // Exclude start & end container unless the entire corresponding | 1670 // Exclude start & end container unless the entire corresponding |
| 1670 // node is included in the range. | 1671 // node is included in the range. |
| 1671 if (!nodeSet.contains(node->parentNode()) && | 1672 if (!nodeSet.contains(node->parentNode()) && |
| 1672 (startContainer == endContainer || (!node->contains(startContainer) && | 1673 (startContainer == endContainer || |
| 1673 !node->contains(endContainer)))) { | 1674 (!node->contains(startContainer) && |
| 1675 !node->contains(endContainer)))) { |
| 1674 if (LayoutObject* layoutObject = toElement(node)->layoutObject()) { | 1676 if (LayoutObject* layoutObject = toElement(node)->layoutObject()) { |
| 1675 Vector<FloatQuad> elementQuads; | 1677 Vector<FloatQuad> elementQuads; |
| 1676 layoutObject->absoluteQuads(elementQuads); | 1678 layoutObject->absoluteQuads(elementQuads); |
| 1677 m_ownerDocument->adjustFloatQuadsForScrollAndAbsoluteZoom( | 1679 m_ownerDocument->adjustFloatQuadsForScrollAndAbsoluteZoom( |
| 1678 elementQuads, *layoutObject); | 1680 elementQuads, *layoutObject); |
| 1679 | 1681 |
| 1680 quads.appendVector(elementQuads); | 1682 quads.appendVector(elementQuads); |
| 1681 } | 1683 } |
| 1682 } | 1684 } |
| 1683 } else if (node->isTextNode()) { | 1685 } else if (node->isTextNode()) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1760 .data() | 1762 .data() |
| 1761 << "start offset: " << range->startOffset() | 1763 << "start offset: " << range->startOffset() |
| 1762 << ", end offset: " << range->endOffset(); | 1764 << ", end offset: " << range->endOffset(); |
| 1763 } else { | 1765 } else { |
| 1764 LOG(INFO) << "Cannot show tree if range is null, or if boundary points are " | 1766 LOG(INFO) << "Cannot show tree if range is null, or if boundary points are " |
| 1765 "invalid."; | 1767 "invalid."; |
| 1766 } | 1768 } |
| 1767 } | 1769 } |
| 1768 | 1770 |
| 1769 #endif | 1771 #endif |
| OLD | NEW |