| 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..53af524c7724ce42830ed87902445c1c412f2b48 100644
|
| --- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
|
| +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp
|
| @@ -3389,32 +3389,48 @@ VisiblePositionInFlatTree rightPositionOf(const VisiblePositionInFlatTree& visib
|
| }
|
|
|
| template <typename Strategy>
|
| -static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
|
| +static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const PositionWithAffinityTemplate<Strategy>& position, 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());
|
| + const VisiblePositionTemplate<Strategy> next = createVisiblePosition(nextVisuallyDistinctCandidate(position.position()), position.affinity());
|
|
|
| switch (rule) {
|
| case CanCrossEditingBoundary:
|
| return next;
|
| case CannotCrossEditingBoundary:
|
| - return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent());
|
| + return honorEditingBoundaryAtOrAfter(next, position.position());
|
| case CanSkipOverEditingBoundary:
|
| - return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent());
|
| + return skipToEndOfEditingBoundary(next, position.position());
|
| }
|
| NOTREACHED();
|
| - return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent());
|
| + return honorEditingBoundaryAtOrAfter(next, position.position());
|
| }
|
|
|
| VisiblePosition nextPositionOf(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule)
|
| {
|
| - return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule);
|
| + DCHECK(visiblePosition.isValid()) << visiblePosition;
|
| + return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition.toPositionWithAffinity(), rule);
|
| }
|
|
|
| VisiblePositionInFlatTree nextPositionOf(const VisiblePositionInFlatTree& visiblePosition, EditingBoundaryCrossingRule rule)
|
| {
|
| - return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition, rule);
|
| + DCHECK(visiblePosition.isValid()) << visiblePosition;
|
| + return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition.toPositionWithAffinity(), rule);
|
| +}
|
| +
|
| +VisiblePosition nextPositionOfDeprecated(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule)
|
| +{
|
| + if (visiblePosition.isNull())
|
| + return VisiblePosition();
|
| + visiblePosition.deepEquivalent().document()->updateStyleAndLayoutIgnorePendingStylesheets();
|
| + return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition.toPositionWithAffinity(), rule);
|
| +}
|
| +
|
| +VisiblePositionInFlatTree nextPositionOfDeprecated(const VisiblePositionInFlatTree& visiblePosition, EditingBoundaryCrossingRule rule)
|
| +{
|
| + if (visiblePosition.isNull())
|
| + return VisiblePositionInFlatTree();
|
| + visiblePosition.deepEquivalent().document()->updateStyleAndLayoutIgnorePendingStylesheets();
|
| + return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition.toPositionWithAffinity(), rule);
|
| }
|
|
|
| template <typename Strategy>
|
| @@ -3443,45 +3459,61 @@ static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi
|
| }
|
|
|
| template <typename Strategy>
|
| -static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
|
| +static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const PositionTemplate<Strategy>& position, 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());
|
| + const PositionTemplate<Strategy> prevPosition = previousVisuallyDistinctCandidate(position);
|
|
|
| // return null visible position if there is no previous visible position
|
| - if (pos.atStartOfTree())
|
| + if (prevPosition.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())
|
| + const VisiblePositionTemplate<Strategy> prev = createVisiblePosition(prevPosition);
|
| + if (prev.deepEquivalent() == position)
|
| return VisiblePositionTemplate<Strategy>();
|
|
|
| switch (rule) {
|
| case CanCrossEditingBoundary:
|
| return prev;
|
| case CannotCrossEditingBoundary:
|
| - return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent());
|
| + return honorEditingBoundaryAtOrBefore(prev, position);
|
| case CanSkipOverEditingBoundary:
|
| - return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent());
|
| + return skipToStartOfEditingBoundary(prev, position);
|
| }
|
|
|
| NOTREACHED();
|
| - return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent());
|
| + return honorEditingBoundaryAtOrBefore(prev, position);
|
| }
|
|
|
| VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule)
|
| {
|
| - return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule);
|
| + DCHECK(visiblePosition.isValid()) << visiblePosition;
|
| + return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition.deepEquivalent(), rule);
|
| }
|
|
|
| VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& visiblePosition, EditingBoundaryCrossingRule rule)
|
| {
|
| - return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition, rule);
|
| + DCHECK(visiblePosition.isValid()) << visiblePosition;
|
| + return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition.deepEquivalent(), rule);
|
| +}
|
| +
|
| +VisiblePosition previousPositionOfDeprecated(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule)
|
| +{
|
| + if (visiblePosition.isNull())
|
| + return VisiblePosition();
|
| + visiblePosition.deepEquivalent().document()->updateStyleAndLayoutIgnorePendingStylesheets();
|
| + return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition.deepEquivalent(), rule);
|
| +}
|
| +
|
| +VisiblePositionInFlatTree previousPositionOfDeprecated(const VisiblePositionInFlatTree& visiblePosition, EditingBoundaryCrossingRule rule)
|
| +{
|
| + if (visiblePosition.isNull())
|
| + return VisiblePositionInFlatTree();
|
| + visiblePosition.deepEquivalent().document()->updateStyleAndLayoutIgnorePendingStylesheets();
|
| + return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition.deepEquivalent(), rule);
|
| }
|
|
|
| } // namespace blink
|
|
|