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

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

Issue 2371793003: Mark calls of {previous,next}PositionOf with invalid VisiblePosition deprecated (Closed)
Patch Set: Rebased 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
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 6ab9347e7956955e656efcf9ca7369271f385b7e..59f2fb836c6e708d81ac73d78fbf43b24563cb95 100644
--- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
+++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
@@ -3391,9 +3391,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());
+ DCHECK(visiblePosition.isValid()) << visiblePosition;
+ const VisiblePositionTemplate<Strategy> next = createVisiblePosition(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affinity());
switch (rule) {
case CanCrossEditingBoundary:
@@ -3418,6 +3417,33 @@ VisiblePositionInFlatTree nextPositionOf(const VisiblePositionInFlatTree& visibl
}
template <typename Strategy>
+static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithmDeprecated(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
yosin_UTC9 2016/09/27 10:05:39 How about making nextPositionOfAlgorithm to take P
Xiaocheng 2016/09/27 12:27:08 Good idea. Done.
+{
+ const VisiblePositionTemplate<Strategy> next = createVisiblePositionDeprecated(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affinity());
+
+ switch (rule) {
+ case CanCrossEditingBoundary:
+ return next;
+ case CannotCrossEditingBoundary:
+ return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent());
+ case CanSkipOverEditingBoundary:
+ return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent());
+ }
+ NOTREACHED();
+ return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent());
+}
+
+VisiblePosition nextPositionOfDeprecated(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule)
+{
+ return nextPositionOfAlgorithmDeprecated<EditingStrategy>(visiblePosition, rule);
+}
+
+VisiblePositionInFlatTree nextPositionOfDeprecated(const VisiblePositionInFlatTree& visiblePosition, EditingBoundaryCrossingRule rule)
+{
+ return nextPositionOfAlgorithmDeprecated<EditingInFlatTreeStrategy>(visiblePosition, rule);
+}
+
+template <typename Strategy>
static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const VisiblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor)
{
DCHECK(pos.isValid()) << pos;
@@ -3445,8 +3471,7 @@ 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())|;
+ DCHECK(visiblePosition.isValid()) << visiblePosition;
const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(visiblePosition.deepEquivalent());
// return null visible position if there is no previous visible position
@@ -3457,7 +3482,7 @@ static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const Visib
// because going previous from an |TextAffinity::Upstream| position can
// never yield another |TextAffinity::Upstream position| (unless line wrap
// length is 0!).
- const VisiblePositionTemplate<Strategy> prev = createVisiblePositionDeprecated(pos);
+ const VisiblePositionTemplate<Strategy> prev = createVisiblePosition(pos);
if (prev.deepEquivalent() == visiblePosition.deepEquivalent())
return VisiblePositionTemplate<Strategy>();
@@ -3484,4 +3509,44 @@ VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi
return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition, rule);
}
+template <typename Strategy>
+static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithmDeprecated(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
yosin_UTC9 2016/09/27 10:05:39 Ditto as nextPositionOfAlgorithm.
Xiaocheng 2016/09/27 12:27:08 Done.
+{
+ const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(visiblePosition.deepEquivalent());
+
+ // return null visible position if there is no previous visible position
+ if (pos.atStartOfTree())
+ return VisiblePositionTemplate<Strategy>();
+
+ // we should always be able to make the affinity |TextAffinity::Downstream|,
+ // because going previous from an |TextAffinity::Upstream| position can
+ // never yield another |TextAffinity::Upstream position| (unless line wrap
+ // length is 0!).
+ const VisiblePositionTemplate<Strategy> prev = createVisiblePositionDeprecated(pos);
+ if (prev.deepEquivalent() == visiblePosition.deepEquivalent())
+ return VisiblePositionTemplate<Strategy>();
+
+ switch (rule) {
+ case CanCrossEditingBoundary:
+ return prev;
+ case CannotCrossEditingBoundary:
+ return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent());
+ case CanSkipOverEditingBoundary:
+ return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent());
+ }
+
+ NOTREACHED();
+ return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent());
+}
+
+VisiblePosition previousPositionOfDeprecated(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule)
+{
+ return previousPositionOfAlgorithmDeprecated<EditingStrategy>(visiblePosition, rule);
+}
+
+VisiblePositionInFlatTree previousPositionOfDeprecated(const VisiblePositionInFlatTree& visiblePosition, EditingBoundaryCrossingRule rule)
+{
+ return previousPositionOfAlgorithmDeprecated<EditingInFlatTreeStrategy>(visiblePosition, rule);
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698