Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(853)

Unified Diff: third_party/WebKit/Source/core/editing/VisibleUnits.cpp

Issue 2359723002: Prune CreateVisiblePositionDeprecated from most of VisibleUnits (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/editing/VisibleUnits.cpp
diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
index 09d07a49bf76a65a8a52f2de2be4c5b7afea0d12..7691d8695260de48c5c590456107a94f85faddcc 100644
--- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -201,7 +201,8 @@ static PositionWithAffinityTemplate<Strategy> honorEditingBoundaryAtOrBefore(con
template <typename Strategy>
static VisiblePositionTemplate<Strategy> honorEditingBoundaryAtOrBefore(const VisiblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor)
{
- return createVisiblePositionDeprecated(honorEditingBoundaryAtOrBefore(pos.toPositionWithAffinity(), anchor));
+ DCHECK(pos.isValid());
+ return createVisiblePosition(honorEditingBoundaryAtOrBefore(pos.toPositionWithAffinity(), anchor));
}
template <typename Strategy>
@@ -313,10 +314,11 @@ static Node* nextLeafWithSameEditability(Node* node, EditableType editableType =
// FIXME: consolidate with code in previousLinePosition.
static Position previousRootInlineBoxCandidatePosition(Node* node, const VisiblePosition& visiblePosition, EditableType editableType)
{
+ DCHECK(visiblePosition.isValid());
ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquivalent(), editableType);
Node* previousNode = previousLeafWithSameEditability(node, editableType);
- while (previousNode && (!previousNode->layoutObject() || inSameLine(createVisiblePositionDeprecated(firstPositionInOrBeforeNode(previousNode)), visiblePosition)))
+ while (previousNode && (!previousNode->layoutObject() || inSameLine(createVisiblePosition(firstPositionInOrBeforeNode(previousNode)), visiblePosition)))
previousNode = previousLeafWithSameEditability(previousNode, editableType);
while (previousNode && !previousNode->isShadowRoot()) {
@@ -336,9 +338,10 @@ static Position previousRootInlineBoxCandidatePosition(Node* node, const Visible
static Position nextRootInlineBoxCandidatePosition(Node* node, const VisiblePosition& visiblePosition, EditableType editableType)
{
+ DCHECK(visiblePosition.isValid());
ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquivalent(), editableType);
Node* nextNode = nextLeafWithSameEditability(node, editableType);
- while (nextNode && (!nextNode->layoutObject() || inSameLine(createVisiblePositionDeprecated(firstPositionInOrBeforeNode(nextNode)), visiblePosition)))
+ while (nextNode && (!nextNode->layoutObject() || inSameLine(createVisiblePosition(firstPositionInOrBeforeNode(nextNode)), visiblePosition)))
nextNode = nextLeafWithSameEditability(nextNode, ContentIsEditable);
while (nextNode && !nextNode->isShadowRoot()) {
@@ -706,6 +709,7 @@ typedef unsigned (*BoundarySearchFunction)(const UChar*, unsigned length, unsign
template <typename Strategy>
static VisiblePositionTemplate<Strategy> previousBoundary(const VisiblePositionTemplate<Strategy>& c, BoundarySearchFunction searchFunction)
{
+ DCHECK(c.isValid());
const PositionTemplate<Strategy> pos = c.deepEquivalent();
Node* boundary = parentEditingBoundary(pos);
if (!boundary)
@@ -771,13 +775,13 @@ static VisiblePositionTemplate<Strategy> previousBoundary(const VisiblePositionT
}
if (!next)
- return createVisiblePositionDeprecated(it.atEnd() ? it.startPosition() : pos);
+ return createVisiblePosition(it.atEnd() ? it.startPosition() : pos);
Node* node = it.startContainer();
int boundaryOffset = remainingLength + next;
if (node->isTextNode() && boundaryOffset <= node->maxCharacterOffset()) {
// The next variable contains a usable index into a text node
- return createVisiblePositionDeprecated(PositionTemplate<Strategy>(node, boundaryOffset));
+ return createVisiblePosition(PositionTemplate<Strategy>(node, boundaryOffset));
}
// Use the character iterator to translate the next value into a DOM
@@ -785,12 +789,13 @@ static VisiblePositionTemplate<Strategy> previousBoundary(const VisiblePositionT
BackwardsCharacterIteratorAlgorithm<Strategy> charIt(start, end);
charIt.advance(string.size() - suffixLength - next);
// TODO(yosin) charIt can get out of shadow host.
- return createVisiblePositionDeprecated(charIt.endPosition());
+ return createVisiblePosition(charIt.endPosition());
}
template <typename Strategy>
static VisiblePositionTemplate<Strategy> nextBoundary(const VisiblePositionTemplate<Strategy>& c, BoundarySearchFunction searchFunction)
{
+ DCHECK(c.isValid());
PositionTemplate<Strategy> pos = c.deepEquivalent();
Node* boundary = parentEditingBoundary(pos);
if (!boundary)
@@ -873,8 +878,8 @@ static VisiblePositionTemplate<Strategy> nextBoundary(const VisiblePositionTempl
// TODO(yosin) workaround for collapsed range (where only start
// position is correct) emitted for some emitted newlines
// (see rdar://5192593)
- const VisiblePositionTemplate<Strategy> visPos = createVisiblePositionDeprecated(pos);
- if (visPos.deepEquivalent() == createVisiblePositionDeprecated(charIt.startPosition()).deepEquivalent()) {
+ const VisiblePositionTemplate<Strategy> visPos = createVisiblePosition(pos);
+ if (visPos.deepEquivalent() == createVisiblePosition(charIt.startPosition()).deepEquivalent()) {
charIt.advance(1);
pos = charIt.startPosition();
}
@@ -882,7 +887,7 @@ static VisiblePositionTemplate<Strategy> nextBoundary(const VisiblePositionTempl
}
// generate VisiblePosition, use TextAffinity::Upstream affinity if possible
- return createVisiblePositionDeprecated(pos, VP_UPSTREAM_IF_POSSIBLE);
+ return createVisiblePosition(pos, VP_UPSTREAM_IF_POSSIBLE);
}
// ---------
@@ -1068,12 +1073,14 @@ static PositionInFlatTreeWithAffinity startOfLine(const PositionInFlatTreeWithAf
// FIXME: Rename this function to reflect the fact it ignores bidi levels.
VisiblePosition startOfLine(const VisiblePosition& currentPosition)
{
- return createVisiblePositionDeprecated(startOfLine(currentPosition.toPositionWithAffinity()));
+ DCHECK(currentPosition.isValid());
+ return createVisiblePosition(startOfLine(currentPosition.toPositionWithAffinity()));
}
VisiblePositionInFlatTree startOfLine(const VisiblePositionInFlatTree& currentPosition)
{
- return createVisiblePositionDeprecated(startOfLine(currentPosition.toPositionWithAffinity()));
+ DCHECK(currentPosition.isValid());
+ return createVisiblePosition(startOfLine(currentPosition.toPositionWithAffinity()));
}
template <typename Strategy>
@@ -1093,17 +1100,20 @@ static PositionWithAffinityTemplate<Strategy> logicalStartOfLineAlgorithm(const
VisiblePosition logicalStartOfLine(const VisiblePosition& currentPosition)
{
- return createVisiblePositionDeprecated(logicalStartOfLineAlgorithm<EditingStrategy>(currentPosition.toPositionWithAffinity()));
+ DCHECK(currentPosition.isValid());
+ return createVisiblePosition(logicalStartOfLineAlgorithm<EditingStrategy>(currentPosition.toPositionWithAffinity()));
}
VisiblePositionInFlatTree logicalStartOfLine(const VisiblePositionInFlatTree& currentPosition)
{
- return createVisiblePositionDeprecated(logicalStartOfLineAlgorithm<EditingInFlatTreeStrategy>(currentPosition.toPositionWithAffinity()));
+ DCHECK(currentPosition.isValid());
+ return createVisiblePosition(logicalStartOfLineAlgorithm<EditingInFlatTreeStrategy>(currentPosition.toPositionWithAffinity()));
}
template <typename Strategy>
static VisiblePositionTemplate<Strategy> endPositionForLine(const VisiblePositionTemplate<Strategy>& c, LineEndpointComputationMode mode)
{
+ DCHECK(c.isValid());
if (c.isNull())
return VisiblePositionTemplate<Strategy>();
@@ -1153,7 +1163,7 @@ static VisiblePositionTemplate<Strategy> endPositionForLine(const VisiblePositio
pos = PositionTemplate<Strategy>::afterNode(endNode);
}
- return createVisiblePositionDeprecated(pos, VP_UPSTREAM_IF_POSSIBLE);
+ return createVisiblePosition(pos, VP_UPSTREAM_IF_POSSIBLE);
}
// TODO(yosin) Rename this function to reflect the fact it ignores bidi levels.
@@ -1202,6 +1212,7 @@ static bool inSameLogicalLine(const VisiblePositionTemplate<Strategy>& a, const
template <typename Strategy>
VisiblePositionTemplate<Strategy> logicalEndOfLineAlgorithm(const VisiblePositionTemplate<Strategy>& currentPosition)
{
+ DCHECK(currentPosition.isValid());
// TODO(yosin) this is the current behavior that might need to be fixed.
// Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail.
VisiblePositionTemplate<Strategy> visPos = endPositionForLine(currentPosition, UseLogicalOrdering);
@@ -1219,7 +1230,7 @@ VisiblePositionTemplate<Strategy> logicalEndOfLineAlgorithm(const VisiblePositio
if (ContainerNode* editableRoot = highestEditableRoot(currentPosition.deepEquivalent())) {
if (!editableRoot->contains(visPos.deepEquivalent().computeContainerNode()))
- return createVisiblePositionDeprecated(PositionTemplate<Strategy>::lastPositionInNode(editableRoot));
+ return createVisiblePosition(PositionTemplate<Strategy>::lastPositionInNode(editableRoot));
}
return honorEditingBoundaryAtOrAfter(visPos, currentPosition.deepEquivalent());
@@ -1362,10 +1373,10 @@ VisiblePosition previousLinePosition(const VisiblePosition& visiblePosition, Lay
if (!root) {
Position position = previousRootInlineBoxCandidatePosition(node, visiblePosition, editableType);
if (position.isNotNull()) {
- RenderedPosition renderedPosition((createVisiblePositionDeprecated(position)));
+ RenderedPosition renderedPosition((createVisiblePosition(position)));
root = renderedPosition.rootBox();
if (!root)
- return createVisiblePositionDeprecated(position);
+ return createVisiblePosition(position);
}
}
@@ -1376,7 +1387,7 @@ VisiblePosition previousLinePosition(const VisiblePosition& visiblePosition, Lay
Node* node = lineLayoutItem.node();
if (node && editingIgnoresContent(node))
return VisiblePosition::inParentBeforeNode(*node);
- return createVisiblePositionDeprecated(lineLayoutItem.positionForPoint(pointInLine));
+ return createVisiblePosition(lineLayoutItem.positionForPoint(pointInLine));
}
// Could not find a previous line. This means we must already be on the first line.
@@ -1418,10 +1429,10 @@ VisiblePosition nextLinePosition(const VisiblePosition& visiblePosition, LayoutU
node = child ? child : &NodeTraversal::lastWithinOrSelf(*node);
Position position = nextRootInlineBoxCandidatePosition(node, visiblePosition, editableType);
if (position.isNotNull()) {
- RenderedPosition renderedPosition((createVisiblePositionDeprecated(position)));
+ RenderedPosition renderedPosition((createVisiblePosition(position)));
root = renderedPosition.rootBox();
if (!root)
- return createVisiblePositionDeprecated(position);
+ return createVisiblePosition(position);
}
}
@@ -1432,7 +1443,7 @@ VisiblePosition nextLinePosition(const VisiblePosition& visiblePosition, LayoutU
Node* node = lineLayoutItem.node();
if (node && editingIgnoresContent(node))
return VisiblePosition::inParentBeforeNode(*node);
- return createVisiblePositionDeprecated(lineLayoutItem.positionForPoint(pointInLine));
+ return createVisiblePosition(lineLayoutItem.positionForPoint(pointInLine));
}
// Could not find a next line. This means we must already be on the last line.
@@ -1599,6 +1610,8 @@ PositionTemplate<Strategy> startOfParagraphAlgorithm(const PositionTemplate<Stra
template <typename Strategy>
VisiblePositionTemplate<Strategy> startOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryCrossingRule)
{
+ // TODO(xiaochengh): Ensure that this function is called with a valid
+ // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|;
return createVisiblePositionDeprecated(startOfParagraphAlgorithm(visiblePosition.deepEquivalent(), boundaryCrossingRule));
}
@@ -1690,6 +1703,8 @@ static PositionTemplate<Strategy> endOfParagraphAlgorithm(const PositionTemplate
template <typename Strategy>
static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryCrossingRule)
{
+ // TODO(xiaochengh): Ensure that this function is called with a valid
+ // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|;
return createVisiblePositionDeprecated(endOfParagraphAlgorithm(visiblePosition.deepEquivalent(), boundaryCrossingRule));
}
@@ -1812,11 +1827,12 @@ bool isEndOfBlock(const VisiblePosition& pos)
template <typename Strategy>
static VisiblePositionTemplate<Strategy> startOfDocumentAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
{
+ DCHECK(visiblePosition.isValid());
Node* node = visiblePosition.deepEquivalent().anchorNode();
if (!node || !node->document().documentElement())
return VisiblePositionTemplate<Strategy>();
- return createVisiblePositionDeprecated(PositionTemplate<Strategy>::firstPositionInNode(node->document().documentElement()));
+ return createVisiblePosition(PositionTemplate<Strategy>::firstPositionInNode(node->document().documentElement()));
}
VisiblePosition startOfDocument(const VisiblePosition& c)
@@ -1832,12 +1848,13 @@ VisiblePositionInFlatTree startOfDocument(const VisiblePositionInFlatTree& c)
template <typename Strategy>
static VisiblePositionTemplate<Strategy> endOfDocumentAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
{
+ DCHECK(visiblePosition.isValid());
Node* node = visiblePosition.deepEquivalent().anchorNode();
if (!node || !node->document().documentElement())
return VisiblePositionTemplate<Strategy>();
Element* doc = node->document().documentElement();
- return createVisiblePositionDeprecated(PositionTemplate<Strategy>::lastPositionInNode(doc));
+ return createVisiblePosition(PositionTemplate<Strategy>::lastPositionInNode(doc));
}
VisiblePosition endOfDocument(const VisiblePosition& c)
@@ -2245,7 +2262,7 @@ VisiblePosition visiblePositionForContentsPoint(const IntPoint& contentsPoint, L
frame->document()->layoutViewItem().hitTest(result);
if (Node* node = result.innerNode())
- return createVisiblePositionDeprecated(positionRespectingEditingBoundary(frame->selection().selection().start(), result.localPoint(), node));
+ return createVisiblePosition(positionRespectingEditingBoundary(frame->selection().selection().start(), result.localPoint(), node));
return VisiblePosition();
}
@@ -2812,6 +2829,7 @@ IntRect absoluteCaretBoundsOf(const VisiblePositionInFlatTree& visiblePosition)
template <typename Strategy>
static VisiblePositionTemplate<Strategy> skipToEndOfEditingBoundary(const VisiblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor)
{
+ DCHECK(pos.isValid());
if (pos.isNull())
return pos;
@@ -2825,7 +2843,7 @@ static VisiblePositionTemplate<Strategy> skipToEndOfEditingBoundary(const Visibl
// If this is not editable but |pos| has an editable root, skip to the end
if (!highestRoot && highestRootOfPos)
- return createVisiblePositionDeprecated(PositionTemplate<Strategy>(highestRootOfPos, PositionAnchorType::AfterAnchor).parentAnchoredEquivalent());
+ return createVisiblePosition(PositionTemplate<Strategy>(highestRootOfPos, PositionAnchorType::AfterAnchor).parentAnchoredEquivalent());
// That must mean that |pos| is not editable. Return the next position after
// |pos| that is in the same editable region as this position
@@ -3035,12 +3053,13 @@ static PositionTemplate<Strategy> leftVisuallyDistinctCandidate(const VisiblePos
template <typename Strategy>
VisiblePositionTemplate<Strategy> leftPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
{
+ DCHECK(visiblePosition.isValid());
const PositionTemplate<Strategy> pos = leftVisuallyDistinctCandidate(visiblePosition);
// TODO(yosin) Why can't we move left from the last position in a tree?
if (pos.atStartOfTree() || pos.atEndOfTree())
return VisiblePositionTemplate<Strategy>();
- const VisiblePositionTemplate<Strategy> left = createVisiblePositionDeprecated(pos);
+ const VisiblePositionTemplate<Strategy> left = createVisiblePosition(pos);
DCHECK_NE(left.deepEquivalent(), visiblePosition.deepEquivalent());
return directionOfEnclosingBlock(left.deepEquivalent()) == LTR ? honorEditingBoundaryAtOrBefore(left, visiblePosition.deepEquivalent()) : honorEditingBoundaryAtOrAfter(left, visiblePosition.deepEquivalent());
@@ -3213,12 +3232,13 @@ static PositionTemplate<Strategy> rightVisuallyDistinctCandidate(const VisiblePo
template <typename Strategy>
static VisiblePositionTemplate<Strategy> rightPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
{
+ DCHECK(visiblePosition.isValid());
const PositionTemplate<Strategy> pos = rightVisuallyDistinctCandidate(visiblePosition);
// FIXME: Why can't we move left from the last position in a tree?
if (pos.atStartOfTree() || pos.atEndOfTree())
return VisiblePositionTemplate<Strategy>();
- const VisiblePositionTemplate<Strategy> right = createVisiblePositionDeprecated(pos);
+ const VisiblePositionTemplate<Strategy> right = createVisiblePosition(pos);
DCHECK_NE(right.deepEquivalent(), visiblePosition.deepEquivalent());
return directionOfEnclosingBlock(right.deepEquivalent()) == LTR ? honorEditingBoundaryAtOrAfter(right, visiblePosition.deepEquivalent()) : honorEditingBoundaryAtOrBefore(right, visiblePosition.deepEquivalent());
@@ -3237,6 +3257,8 @@ VisiblePositionInFlatTree rightPositionOf(const VisiblePositionInFlatTree& visib
template <typename Strategy>
static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
{
+ // TODO(xiaochengh): Ensure that this function is called with a valid
+ // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|;
const VisiblePositionTemplate<Strategy> next = createVisiblePositionDeprecated(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affinity());
switch (rule) {
@@ -3264,6 +3286,7 @@ VisiblePositionInFlatTree nextPositionOf(const VisiblePositionInFlatTree& visibl
template <typename Strategy>
static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const VisiblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor)
{
+ DCHECK(pos.isValid());
if (pos.isNull())
return pos;
@@ -3277,7 +3300,7 @@ static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi
// If this is not editable but |pos| has an editable root, skip to the start
if (!highestRoot && highestRootOfPos)
- return createVisiblePositionDeprecated(previousVisuallyDistinctCandidate(PositionTemplate<Strategy>(highestRootOfPos, PositionAnchorType::BeforeAnchor).parentAnchoredEquivalent()));
+ return createVisiblePosition(previousVisuallyDistinctCandidate(PositionTemplate<Strategy>(highestRootOfPos, PositionAnchorType::BeforeAnchor).parentAnchoredEquivalent()));
// That must mean that |pos| is not editable. Return the last position
// before |pos| that is in the same editable region as this position
@@ -3288,6 +3311,8 @@ static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi
template <typename Strategy>
static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
{
+ // TODO(xiaochengh): Ensure that this function is called with a valid
+ // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|;
const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(visiblePosition.deepEquivalent());
// return null visible position if there is no previous visible position
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698