Replace every use of Node::offsetInCharacters() by Node::isCharacterDataNode()
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 28 Sep 2018 19:47:22 +0000 (19:47 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 28 Sep 2018 19:47:22 +0000 (19:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190069

Reviewed by Zalan Bujtas.

Removed Node::offsetInCharacters() and replaced every use of it by isCharacterDataNode()
because their implementations are identical.

Note that offsetInCharacters() sounds like a function which returns some kind of an offset
but it doesn't. It returns true when called on a CharacterData and false elsewhere.

* accessibility/AXObjectCache.cpp:
(WebCore::characterOffsetsInOrder):
(WebCore::AXObjectCache::startOrEndCharacterOffsetForRange):
(WebCore::AXObjectCache::characterOffsetFromVisiblePosition):
* dom/CharacterData.cpp:
(WebCore::CharacterData::offsetInCharacters const): Deleted.
* dom/CharacterData.h:
* dom/Node.cpp:
(WebCore::Node::offsetInCharacters const): Deleted.
* dom/Node.h:
* dom/Position.cpp:
(WebCore::Position::parentAnchoredEquivalent const):
* dom/Position.h:
(WebCore::lastOffsetInNode):
(WebCore::minOffsetForNode):
(WebCore::offsetIsBeforeLastNodeOffset):
* dom/Range.cpp:
(WebCore::Range::firstNode const):
(WebCore::Range::pastLastNode const):
* dom/RangeBoundaryPoint.h:
(WebCore::RangeBoundaryPoint::setOffset):
(WebCore::RangeBoundaryPoint::setToEndOfNode):
* editing/Editing.cpp:
(WebCore::lastOffsetForEditing):
* editing/TextIterator.cpp:
(WebCore::nextInPreOrderCrossingShadowBoundaries):
(WebCore::TextIterator::node const):
(WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
* page/DOMSelection.cpp:
(WebCore::DOMSelection::extend):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236607 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
Source/WebCore/ChangeLog
Source/WebCore/accessibility/AXObjectCache.cpp
Source/WebCore/dom/CharacterData.cpp
Source/WebCore/dom/CharacterData.h
Source/WebCore/dom/Node.cpp
Source/WebCore/dom/Node.h
Source/WebCore/dom/Position.cpp
Source/WebCore/dom/Position.h
Source/WebCore/dom/Range.cpp
Source/WebCore/dom/RangeBoundaryPoint.h
Source/WebCore/editing/Editing.cpp
Source/WebCore/editing/TextIterator.cpp
Source/WebCore/page/DOMSelection.cpp

index f57f0ba..eaa96b9 100644 (file)
@@ -1,3 +1,47 @@
+2018-09-27  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Replace every use of Node::offsetInCharacters() by Node::isCharacterDataNode()
+        https://bugs.webkit.org/show_bug.cgi?id=190069
+
+        Reviewed by Zalan Bujtas.
+
+        Removed Node::offsetInCharacters() and replaced every use of it by isCharacterDataNode()
+        because their implementations are identical.
+
+        Note that offsetInCharacters() sounds like a function which returns some kind of an offset
+        but it doesn't. It returns true when called on a CharacterData and false elsewhere.
+
+        * accessibility/AXObjectCache.cpp:
+        (WebCore::characterOffsetsInOrder):
+        (WebCore::AXObjectCache::startOrEndCharacterOffsetForRange):
+        (WebCore::AXObjectCache::characterOffsetFromVisiblePosition):
+        * dom/CharacterData.cpp:
+        (WebCore::CharacterData::offsetInCharacters const): Deleted.
+        * dom/CharacterData.h:
+        * dom/Node.cpp:
+        (WebCore::Node::offsetInCharacters const): Deleted.
+        * dom/Node.h:
+        * dom/Position.cpp:
+        (WebCore::Position::parentAnchoredEquivalent const):
+        * dom/Position.h:
+        (WebCore::lastOffsetInNode):
+        (WebCore::minOffsetForNode):
+        (WebCore::offsetIsBeforeLastNodeOffset):
+        * dom/Range.cpp:
+        (WebCore::Range::firstNode const):
+        (WebCore::Range::pastLastNode const):
+        * dom/RangeBoundaryPoint.h:
+        (WebCore::RangeBoundaryPoint::setOffset):
+        (WebCore::RangeBoundaryPoint::setToEndOfNode):
+        * editing/Editing.cpp:
+        (WebCore::lastOffsetForEditing):
+        * editing/TextIterator.cpp:
+        (WebCore::nextInPreOrderCrossingShadowBoundaries):
+        (WebCore::TextIterator::node const):
+        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
+        * page/DOMSelection.cpp:
+        (WebCore::DOMSelection::extend):
+
 2018-09-28  Jer Noble  <jer.noble@apple.com>
 
         Refactoring: eliminate raw pointer usage in Fullscreen code
index c000a0a..312250a 100644 (file)
@@ -1823,9 +1823,9 @@ static bool characterOffsetsInOrder(const CharacterOffset& characterOffset1, con
     
     Node* node1 = characterOffset1.node;
     Node* node2 = characterOffset2.node;
-    if (!node1->offsetInCharacters() && !isReplacedNodeOrBR(node1) && node1->hasChildNodes())
+    if (!node1->isCharacterDataNode() && !isReplacedNodeOrBR(node1) && node1->hasChildNodes())
         node1 = node1->traverseToChildAt(characterOffset1.offset);
-    if (!node2->offsetInCharacters() && !isReplacedNodeOrBR(node2) && node2->hasChildNodes())
+    if (!node2->isCharacterDataNode() && !isReplacedNodeOrBR(node2) && node2->hasChildNodes())
         node2 = node2->traverseToChildAt(characterOffset2.offset);
     
     if (!node1 || !node2)
@@ -1951,14 +1951,14 @@ CharacterOffset AXObjectCache::startOrEndCharacterOffsetForRange(RefPtr<Range> r
     bool stayWithinRange = !isStart;
     
     Node& endNode = range->endContainer();
-    if (endNode.offsetInCharacters() && !isStart)
+    if (endNode.isCharacterDataNode() && !isStart)
         return traverseToOffsetInRange(rangeForNodeContents(&endNode), range->endOffset(), TraverseOptionValidateOffset);
     
     Ref<Range> copyRange = *range;
     // Change the start of the range, so the character offset starts from node beginning.
     int offset = 0;
     Node& node = copyRange->startContainer();
-    if (node.offsetInCharacters()) {
+    if (node.isCharacterDataNode()) {
         CharacterOffset nodeStartOffset = traverseToOffsetInRange(rangeForNodeContents(&node), range->startOffset(), TraverseOptionValidateOffset);
         if (isStart)
             return nodeStartOffset;
@@ -2135,7 +2135,7 @@ CharacterOffset AXObjectCache::characterOffsetFromVisiblePosition(const VisibleP
     Node* domNode = deepPos.deprecatedNode();
     ASSERT(domNode);
     
-    if (domNode->offsetInCharacters())
+    if (domNode->isCharacterDataNode())
         return traverseToOffsetInRange(rangeForNodeContents(domNode), deepPos.deprecatedEditingOffset(), TraverseOptionValidateOffset);
     
     RefPtr<AccessibilityObject> obj = this->getOrCreate(domNode);
@@ -2167,7 +2167,7 @@ CharacterOffset AXObjectCache::characterOffsetFromVisiblePosition(const VisibleP
                 characterOffset--;
         } else {
             // Sometimes VisiblePosition will move multiple characters, like emoji.
-            if (currentPosition.deprecatedNode()->offsetInCharacters())
+            if (currentPosition.deprecatedNode()->isCharacterDataNode())
                 characterOffset += currentPosition.offsetInContainerNode() - previousPosition.offsetInContainerNode() - 1;
         }
     }
index 9c99e78..075d572 100644 (file)
@@ -239,9 +239,4 @@ int CharacterData::maxCharacterOffset() const
     return static_cast<int>(length());
 }
 
-bool CharacterData::offsetInCharacters() const
-{
-    return true;
-}
-
 } // namespace WebCore
index d9e9605..1527c51 100644 (file)
@@ -64,7 +64,6 @@ private:
     ExceptionOr<void> setNodeValue(const String&) final;
     bool isCharacterDataNode() const final { return true; }
     int maxCharacterOffset() const final;
-    bool offsetInCharacters() const final;
     void setDataAndUpdate(const String&, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength);
     void notifyParentAfterChange(ContainerNode::ChildChangeSource);
 
index 140ef12..a5202d5 100644 (file)
@@ -1606,11 +1606,6 @@ ExceptionOr<void> Node::setTextContent(const String& text)
     return { };
 }
 
-bool Node::offsetInCharacters() const
-{
-    return false;
-}
-
 static SHA1::Digest hashPointer(void* pointer)
 {
     SHA1 sha1;
index 27de22e..52da6d1 100644 (file)
@@ -397,8 +397,6 @@ public:
     bool containsIncludingShadowDOM(const Node*) const;
     bool containsIncludingHostElements(const Node*) const;
 
-    // Used to determine whether range offsets use characters or node indices.
-    virtual bool offsetInCharacters() const;
     // Number of DOM 16-bit units contained in node. Note that rendered text length can be different - e.g. because of
     // css-transform:capitalize breaking up precomposed characters and ligatures.
     virtual int maxCharacterOffset() const;
index 25ffee5..02f1c71 100644 (file)
@@ -237,7 +237,7 @@ Position Position::parentAnchoredEquivalent() const
         return Position(m_anchorNode.get(), 0, PositionIsOffsetInAnchor);
     }
 
-    if (!m_anchorNode->offsetInCharacters()
+    if (!m_anchorNode->isCharacterDataNode()
         && (m_anchorType == PositionIsAfterAnchor || m_anchorType == PositionIsAfterChildren || static_cast<unsigned>(m_offset) == m_anchorNode->countChildNodes())
         && (editingIgnoresContent(*m_anchorNode) || isRenderedTable(m_anchorNode.get()))
         && containerNode()) {
index 2dcfe59..b5f7390 100644 (file)
@@ -287,7 +287,7 @@ inline Position positionAfterNode(Node* anchorNode)
 
 inline int lastOffsetInNode(Node* node)
 {
-    return node->offsetInCharacters() ? node->maxCharacterOffset() : static_cast<int>(node->countChildNodes());
+    return node->isCharacterDataNode() ? node->maxCharacterOffset() : static_cast<int>(node->countChildNodes());
 }
 
 // firstPositionInNode and lastPositionInNode return parent-anchored positions, lastPositionInNode construction is O(n) due to countChildNodes()
@@ -307,7 +307,7 @@ inline Position lastPositionInNode(Node* anchorNode)
 
 inline int minOffsetForNode(Node* anchorNode, int offset)
 {
-    if (anchorNode->offsetInCharacters())
+    if (anchorNode->isCharacterDataNode())
         return std::min(offset, anchorNode->maxCharacterOffset());
 
     int newOffset = 0;
@@ -319,7 +319,7 @@ inline int minOffsetForNode(Node* anchorNode, int offset)
 
 inline bool offsetIsBeforeLastNodeOffset(int offset, Node* anchorNode)
 {
-    if (anchorNode->offsetInCharacters())
+    if (anchorNode->isCharacterDataNode())
         return offset < anchorNode->maxCharacterOffset();
 
     int currentOffset = 0;
index 773cfc6..14ebd93 100644 (file)
@@ -1132,7 +1132,7 @@ ExceptionOr<void> Range::setStartBefore(Node& refNode)
 
 Node* Range::firstNode() const
 {
-    if (startContainer().offsetInCharacters())
+    if (startContainer().isCharacterDataNode())
         return &startContainer();
     if (Node* child = startContainer().traverseToChildAt(m_start.offset()))
         return child;
@@ -1148,7 +1148,7 @@ ShadowRoot* Range::shadowRoot() const
 
 Node* Range::pastLastNode() const
 {
-    if (endContainer().offsetInCharacters())
+    if (endContainer().isCharacterDataNode())
         return NodeTraversal::nextSkippingChildren(endContainer());
     if (Node* child = endContainer().traverseToChildAt(m_end.offset()))
         return child;
index 71c92cd..d85fa32 100644 (file)
@@ -124,7 +124,7 @@ inline void RangeBoundaryPoint::set(Ref<Node>&& container, unsigned offset, Node
 inline void RangeBoundaryPoint::setOffset(unsigned offset)
 {
     ASSERT(m_containerNode);
-    ASSERT(m_containerNode->offsetInCharacters());
+    ASSERT(m_containerNode->isCharacterDataNode());
     ASSERT(m_offsetInContainer);
     ASSERT(!m_childBeforeBoundary);
     m_offsetInContainer = offset;
@@ -156,7 +156,7 @@ inline void RangeBoundaryPoint::setToStartOfNode(Ref<Node>&& container)
 inline void RangeBoundaryPoint::setToEndOfNode(Ref<Node>&& container)
 {
     m_containerNode = WTFMove(container);
-    if (m_containerNode->offsetInCharacters()) {
+    if (m_containerNode->isCharacterDataNode()) {
         m_offsetInContainer = m_containerNode->maxCharacterOffset();
         m_childBeforeBoundary = nullptr;
     } else {
index 497c104..cca4ede 100644 (file)
@@ -375,7 +375,7 @@ TextDirection directionOfEnclosingBlock(const Position& position)
 // on a Position before using it to create a DOM Range, or an exception will be thrown.
 int lastOffsetForEditing(const Node& node)
 {
-    if (node.offsetInCharacters())
+    if (node.isCharacterDataNode())
         return node.maxCharacterOffset();
 
     if (node.hasChildNodes())
index 53a0f2a..9dd88eb 100644 (file)
@@ -190,7 +190,7 @@ unsigned BitStack::size() const
 // This function is like Range::pastLastNode, except for the fact that it can climb up out of shadow trees.
 static Node* nextInPreOrderCrossingShadowBoundaries(Node& rangeEndContainer, int rangeEndOffset)
 {
-    if (rangeEndOffset >= 0 && !rangeEndContainer.offsetInCharacters()) {
+    if (rangeEndOffset >= 0 && !rangeEndContainer.isCharacterDataNode()) {
         if (Node* next = rangeEndContainer.traverseToChildAt(rangeEndOffset))
             return next;
     }
@@ -1267,7 +1267,7 @@ Node* TextIterator::node() const
     Ref<Range> textRange = range();
 
     Node& node = textRange->startContainer();
-    if (node.offsetInCharacters())
+    if (node.isCharacterDataNode())
         return &node;
     
     return node.traverseToChildAt(textRange->startOffset());
@@ -1284,13 +1284,13 @@ SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator(const Range& ra
     int startOffset = range.startOffset();
     int endOffset = range.endOffset();
 
-    if (!startNode->offsetInCharacters()) {
+    if (!startNode->isCharacterDataNode()) {
         if (startOffset >= 0 && startOffset < static_cast<int>(startNode->countChildNodes())) {
             startNode = startNode->traverseToChildAt(startOffset);
             startOffset = 0;
         }
     }
-    if (!endNode->offsetInCharacters()) {
+    if (!endNode->isCharacterDataNode()) {
         if (endOffset > 0 && endOffset <= static_cast<int>(endNode->countChildNodes())) {
             endNode = endNode->traverseToChildAt(endOffset - 1);
             endOffset = lastOffsetInNode(endNode);
index e98dd76..e8ba27c 100644 (file)
@@ -279,7 +279,7 @@ ExceptionOr<void> DOMSelection::extend(Node& node, unsigned offset)
 {
     if (!m_frame)
         return { };
-    if (offset > (node.offsetInCharacters() ? caretMaxOffset(node) : node.countChildNodes()))
+    if (offset > (node.isCharacterDataNode() ? caretMaxOffset(node) : node.countChildNodes()))
         return Exception { IndexSizeError };
     if (!isValidForPosition(&node))
         return { };