Diff
Modified: trunk/Source/WebCore/ChangeLog (236606 => 236607)
--- trunk/Source/WebCore/ChangeLog 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/ChangeLog 2018-09-28 19:47:22 UTC (rev 236607)
@@ -1,3 +1,47 @@
+2018-09-27 Ryosuke Niwa <[email protected]>
+
+ 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 <[email protected]>
Refactoring: eliminate raw pointer usage in Fullscreen code
Modified: trunk/Source/WebCore/accessibility/AXObjectCache.cpp (236606 => 236607)
--- trunk/Source/WebCore/accessibility/AXObjectCache.cpp 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/accessibility/AXObjectCache.cpp 2018-09-28 19:47:22 UTC (rev 236607)
@@ -1823,9 +1823,9 @@
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,7 +1951,7 @@
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;
@@ -1958,7 +1958,7 @@
// 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 @@
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--;
} else {
// Sometimes VisiblePosition will move multiple characters, like emoji.
- if (currentPosition.deprecatedNode()->offsetInCharacters())
+ if (currentPosition.deprecatedNode()->isCharacterDataNode())
characterOffset += currentPosition.offsetInContainerNode() - previousPosition.offsetInContainerNode() - 1;
}
}
Modified: trunk/Source/WebCore/dom/CharacterData.cpp (236606 => 236607)
--- trunk/Source/WebCore/dom/CharacterData.cpp 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/dom/CharacterData.cpp 2018-09-28 19:47:22 UTC (rev 236607)
@@ -239,9 +239,4 @@
return static_cast<int>(length());
}
-bool CharacterData::offsetInCharacters() const
-{
- return true;
-}
-
} // namespace WebCore
Modified: trunk/Source/WebCore/dom/CharacterData.h (236606 => 236607)
--- trunk/Source/WebCore/dom/CharacterData.h 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/dom/CharacterData.h 2018-09-28 19:47:22 UTC (rev 236607)
@@ -64,7 +64,6 @@
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);
Modified: trunk/Source/WebCore/dom/Node.cpp (236606 => 236607)
--- trunk/Source/WebCore/dom/Node.cpp 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/dom/Node.cpp 2018-09-28 19:47:22 UTC (rev 236607)
@@ -1606,11 +1606,6 @@
return { };
}
-bool Node::offsetInCharacters() const
-{
- return false;
-}
-
static SHA1::Digest hashPointer(void* pointer)
{
SHA1 sha1;
Modified: trunk/Source/WebCore/dom/Node.h (236606 => 236607)
--- trunk/Source/WebCore/dom/Node.h 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/dom/Node.h 2018-09-28 19:47:22 UTC (rev 236607)
@@ -397,8 +397,6 @@
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;
Modified: trunk/Source/WebCore/dom/Position.cpp (236606 => 236607)
--- trunk/Source/WebCore/dom/Position.cpp 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/dom/Position.cpp 2018-09-28 19:47:22 UTC (rev 236607)
@@ -237,7 +237,7 @@
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()) {
Modified: trunk/Source/WebCore/dom/Position.h (236606 => 236607)
--- trunk/Source/WebCore/dom/Position.h 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/dom/Position.h 2018-09-28 19:47:22 UTC (rev 236607)
@@ -287,7 +287,7 @@
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 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 bool offsetIsBeforeLastNodeOffset(int offset, Node* anchorNode)
{
- if (anchorNode->offsetInCharacters())
+ if (anchorNode->isCharacterDataNode())
return offset < anchorNode->maxCharacterOffset();
int currentOffset = 0;
Modified: trunk/Source/WebCore/dom/Range.cpp (236606 => 236607)
--- trunk/Source/WebCore/dom/Range.cpp 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/dom/Range.cpp 2018-09-28 19:47:22 UTC (rev 236607)
@@ -1132,7 +1132,7 @@
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 @@
Node* Range::pastLastNode() const
{
- if (endContainer().offsetInCharacters())
+ if (endContainer().isCharacterDataNode())
return NodeTraversal::nextSkippingChildren(endContainer());
if (Node* child = endContainer().traverseToChildAt(m_end.offset()))
return child;
Modified: trunk/Source/WebCore/dom/RangeBoundaryPoint.h (236606 => 236607)
--- trunk/Source/WebCore/dom/RangeBoundaryPoint.h 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/dom/RangeBoundaryPoint.h 2018-09-28 19:47:22 UTC (rev 236607)
@@ -124,7 +124,7 @@
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::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 {
Modified: trunk/Source/WebCore/editing/Editing.cpp (236606 => 236607)
--- trunk/Source/WebCore/editing/Editing.cpp 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/editing/Editing.cpp 2018-09-28 19:47:22 UTC (rev 236607)
@@ -375,7 +375,7 @@
// 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())
Modified: trunk/Source/WebCore/editing/TextIterator.cpp (236606 => 236607)
--- trunk/Source/WebCore/editing/TextIterator.cpp 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/editing/TextIterator.cpp 2018-09-28 19:47:22 UTC (rev 236607)
@@ -190,7 +190,7 @@
// 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 @@
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 @@
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);
Modified: trunk/Source/WebCore/page/DOMSelection.cpp (236606 => 236607)
--- trunk/Source/WebCore/page/DOMSelection.cpp 2018-09-28 18:46:52 UTC (rev 236606)
+++ trunk/Source/WebCore/page/DOMSelection.cpp 2018-09-28 19:47:22 UTC (rev 236607)
@@ -279,7 +279,7 @@
{
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 { };