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

Side by Side 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, 2 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 3373 matching lines...) Expand 10 before | Expand all | Expand 10 after
3384 } 3384 }
3385 3385
3386 VisiblePositionInFlatTree rightPositionOf(const VisiblePositionInFlatTree& visib lePosition) 3386 VisiblePositionInFlatTree rightPositionOf(const VisiblePositionInFlatTree& visib lePosition)
3387 { 3387 {
3388 return rightPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition); 3388 return rightPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition);
3389 } 3389 }
3390 3390
3391 template <typename Strategy> 3391 template <typename Strategy>
3392 static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePo sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) 3392 static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePo sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
3393 { 3393 {
3394 // TODO(xiaochengh): Ensure that this function is called with a valid 3394 DCHECK(visiblePosition.isValid()) << visiblePosition;
3395 // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|; 3395 const VisiblePositionTemplate<Strategy> next = createVisiblePosition(nextVis uallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affini ty());
3396 const VisiblePositionTemplate<Strategy> next = createVisiblePositionDeprecat ed(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosit ion.affinity());
3397 3396
3398 switch (rule) { 3397 switch (rule) {
3399 case CanCrossEditingBoundary: 3398 case CanCrossEditingBoundary:
3400 return next; 3399 return next;
3401 case CannotCrossEditingBoundary: 3400 case CannotCrossEditingBoundary:
3402 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalen t()); 3401 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalen t());
3403 case CanSkipOverEditingBoundary: 3402 case CanSkipOverEditingBoundary:
3404 return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent() ); 3403 return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent() );
3405 } 3404 }
3406 NOTREACHED(); 3405 NOTREACHED();
3407 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent()) ; 3406 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent()) ;
3408 } 3407 }
3409 3408
3410 VisiblePosition nextPositionOf(const VisiblePosition& visiblePosition, EditingBo undaryCrossingRule rule) 3409 VisiblePosition nextPositionOf(const VisiblePosition& visiblePosition, EditingBo undaryCrossingRule rule)
3411 { 3410 {
3412 return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); 3411 return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule);
3413 } 3412 }
3414 3413
3415 VisiblePositionInFlatTree nextPositionOf(const VisiblePositionInFlatTree& visibl ePosition, EditingBoundaryCrossingRule rule) 3414 VisiblePositionInFlatTree nextPositionOf(const VisiblePositionInFlatTree& visibl ePosition, EditingBoundaryCrossingRule rule)
3416 { 3415 {
3417 return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition, r ule); 3416 return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition, r ule);
3418 } 3417 }
3419 3418
3420 template <typename Strategy> 3419 template <typename Strategy>
3420 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.
3421 {
3422 const VisiblePositionTemplate<Strategy> next = createVisiblePositionDeprecat ed(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosit ion.affinity());
3423
3424 switch (rule) {
3425 case CanCrossEditingBoundary:
3426 return next;
3427 case CannotCrossEditingBoundary:
3428 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalen t());
3429 case CanSkipOverEditingBoundary:
3430 return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent() );
3431 }
3432 NOTREACHED();
3433 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent()) ;
3434 }
3435
3436 VisiblePosition nextPositionOfDeprecated(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule)
3437 {
3438 return nextPositionOfAlgorithmDeprecated<EditingStrategy>(visiblePosition, r ule);
3439 }
3440
3441 VisiblePositionInFlatTree nextPositionOfDeprecated(const VisiblePositionInFlatTr ee& visiblePosition, EditingBoundaryCrossingRule rule)
3442 {
3443 return nextPositionOfAlgorithmDeprecated<EditingInFlatTreeStrategy>(visibleP osition, rule);
3444 }
3445
3446 template <typename Strategy>
3421 static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi blePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) 3447 static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi blePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor)
3422 { 3448 {
3423 DCHECK(pos.isValid()) << pos; 3449 DCHECK(pos.isValid()) << pos;
3424 if (pos.isNull()) 3450 if (pos.isNull())
3425 return pos; 3451 return pos;
3426 3452
3427 ContainerNode* highestRoot = highestEditableRoot(anchor); 3453 ContainerNode* highestRoot = highestEditableRoot(anchor);
3428 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); 3454 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent());
3429 3455
3430 // Return |pos| itself if the two are from the very same editable region, or 3456 // Return |pos| itself if the two are from the very same editable region, or
3431 // both are non-editable. 3457 // both are non-editable.
3432 if (highestRootOfPos == highestRoot) 3458 if (highestRootOfPos == highestRoot)
3433 return pos; 3459 return pos;
3434 3460
3435 // If this is not editable but |pos| has an editable root, skip to the start 3461 // If this is not editable but |pos| has an editable root, skip to the start
3436 if (!highestRoot && highestRootOfPos) 3462 if (!highestRoot && highestRootOfPos)
3437 return createVisiblePosition(previousVisuallyDistinctCandidate(PositionT emplate<Strategy>(highestRootOfPos, PositionAnchorType::BeforeAnchor).parentAnch oredEquivalent())); 3463 return createVisiblePosition(previousVisuallyDistinctCandidate(PositionT emplate<Strategy>(highestRootOfPos, PositionAnchorType::BeforeAnchor).parentAnch oredEquivalent()));
3438 3464
3439 // That must mean that |pos| is not editable. Return the last position 3465 // That must mean that |pos| is not editable. Return the last position
3440 // before |pos| that is in the same editable region as this position 3466 // before |pos| that is in the same editable region as this position
3441 DCHECK(highestRoot); 3467 DCHECK(highestRoot);
3442 return lastEditableVisiblePositionBeforePositionInRoot(pos.deepEquivalent(), *highestRoot); 3468 return lastEditableVisiblePositionBeforePositionInRoot(pos.deepEquivalent(), *highestRoot);
3443 } 3469 }
3444 3470
3445 template <typename Strategy> 3471 template <typename Strategy>
3446 static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const Visib lePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) 3472 static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const Visib lePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
3447 { 3473 {
3448 // TODO(xiaochengh): Ensure that this function is called with a valid 3474 DCHECK(visiblePosition.isValid()) << visiblePosition;
3449 // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|;
3450 const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(vis iblePosition.deepEquivalent()); 3475 const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(vis iblePosition.deepEquivalent());
3451 3476
3452 // return null visible position if there is no previous visible position 3477 // return null visible position if there is no previous visible position
3453 if (pos.atStartOfTree()) 3478 if (pos.atStartOfTree())
3454 return VisiblePositionTemplate<Strategy>(); 3479 return VisiblePositionTemplate<Strategy>();
3455 3480
3456 // we should always be able to make the affinity |TextAffinity::Downstream|, 3481 // we should always be able to make the affinity |TextAffinity::Downstream|,
3457 // because going previous from an |TextAffinity::Upstream| position can 3482 // because going previous from an |TextAffinity::Upstream| position can
3458 // never yield another |TextAffinity::Upstream position| (unless line wrap 3483 // never yield another |TextAffinity::Upstream position| (unless line wrap
3459 // length is 0!). 3484 // length is 0!).
3460 const VisiblePositionTemplate<Strategy> prev = createVisiblePositionDeprecat ed(pos); 3485 const VisiblePositionTemplate<Strategy> prev = createVisiblePosition(pos);
3461 if (prev.deepEquivalent() == visiblePosition.deepEquivalent()) 3486 if (prev.deepEquivalent() == visiblePosition.deepEquivalent())
3462 return VisiblePositionTemplate<Strategy>(); 3487 return VisiblePositionTemplate<Strategy>();
3463 3488
3464 switch (rule) { 3489 switch (rule) {
3465 case CanCrossEditingBoundary: 3490 case CanCrossEditingBoundary:
3466 return prev; 3491 return prev;
3467 case CannotCrossEditingBoundary: 3492 case CannotCrossEditingBoundary:
3468 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivale nt()); 3493 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivale nt());
3469 case CanSkipOverEditingBoundary: 3494 case CanSkipOverEditingBoundary:
3470 return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent ()); 3495 return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent ());
3471 } 3496 }
3472 3497
3473 NOTREACHED(); 3498 NOTREACHED();
3474 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent() ); 3499 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent() );
3475 } 3500 }
3476 3501
3477 VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, Editi ngBoundaryCrossingRule rule) 3502 VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, Editi ngBoundaryCrossingRule rule)
3478 { 3503 {
3479 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); 3504 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule);
3480 } 3505 }
3481 3506
3482 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi siblePosition, EditingBoundaryCrossingRule rule) 3507 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi siblePosition, EditingBoundaryCrossingRule rule)
3483 { 3508 {
3484 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n, rule); 3509 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n, rule);
3485 } 3510 }
3486 3511
3512 template <typename Strategy>
3513 static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithmDeprecated(c onst VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossing Rule rule)
yosin_UTC9 2016/09/27 10:05:39 Ditto as nextPositionOfAlgorithm.
Xiaocheng 2016/09/27 12:27:08 Done.
3514 {
3515 const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(vis iblePosition.deepEquivalent());
3516
3517 // return null visible position if there is no previous visible position
3518 if (pos.atStartOfTree())
3519 return VisiblePositionTemplate<Strategy>();
3520
3521 // we should always be able to make the affinity |TextAffinity::Downstream|,
3522 // because going previous from an |TextAffinity::Upstream| position can
3523 // never yield another |TextAffinity::Upstream position| (unless line wrap
3524 // length is 0!).
3525 const VisiblePositionTemplate<Strategy> prev = createVisiblePositionDeprecat ed(pos);
3526 if (prev.deepEquivalent() == visiblePosition.deepEquivalent())
3527 return VisiblePositionTemplate<Strategy>();
3528
3529 switch (rule) {
3530 case CanCrossEditingBoundary:
3531 return prev;
3532 case CannotCrossEditingBoundary:
3533 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivale nt());
3534 case CanSkipOverEditingBoundary:
3535 return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent ());
3536 }
3537
3538 NOTREACHED();
3539 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent() );
3540 }
3541
3542 VisiblePosition previousPositionOfDeprecated(const VisiblePosition& visiblePosit ion, EditingBoundaryCrossingRule rule)
3543 {
3544 return previousPositionOfAlgorithmDeprecated<EditingStrategy>(visiblePositio n, rule);
3545 }
3546
3547 VisiblePositionInFlatTree previousPositionOfDeprecated(const VisiblePositionInFl atTree& visiblePosition, EditingBoundaryCrossingRule rule)
3548 {
3549 return previousPositionOfAlgorithmDeprecated<EditingInFlatTreeStrategy>(visi blePosition, rule);
3550 }
3551
3487 } // namespace blink 3552 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698