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

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: Prevent code copying 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 3371 matching lines...) Expand 10 before | Expand all | Expand 10 after
3382 { 3382 {
3383 return rightPositionOfAlgorithm<EditingStrategy>(visiblePosition); 3383 return rightPositionOfAlgorithm<EditingStrategy>(visiblePosition);
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 PositionW ithAffinityTemplate<Strategy>& position, EditingBoundaryCrossingRule rule)
3393 { 3393 {
3394 // TODO(xiaochengh): Ensure that this function is called with a valid 3394 const VisiblePositionTemplate<Strategy> next = createVisiblePosition(nextVis uallyDistinctCandidate(position.position()), position.affinity());
3395 // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|;
3396 const VisiblePositionTemplate<Strategy> next = createVisiblePositionDeprecat ed(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosit ion.affinity());
3397 3395
3398 switch (rule) { 3396 switch (rule) {
3399 case CanCrossEditingBoundary: 3397 case CanCrossEditingBoundary:
3400 return next; 3398 return next;
3401 case CannotCrossEditingBoundary: 3399 case CannotCrossEditingBoundary:
3402 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalen t()); 3400 return honorEditingBoundaryAtOrAfter(next, position.position());
3403 case CanSkipOverEditingBoundary: 3401 case CanSkipOverEditingBoundary:
3404 return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent() ); 3402 return skipToEndOfEditingBoundary(next, position.position());
3405 } 3403 }
3406 NOTREACHED(); 3404 NOTREACHED();
3407 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent()) ; 3405 return honorEditingBoundaryAtOrAfter(next, position.position());
3408 } 3406 }
3409 3407
3410 VisiblePosition nextPositionOf(const VisiblePosition& visiblePosition, EditingBo undaryCrossingRule rule) 3408 VisiblePosition nextPositionOf(const VisiblePosition& visiblePosition, EditingBo undaryCrossingRule rule)
3411 { 3409 {
3412 return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); 3410 DCHECK(visiblePosition.isValid()) << visiblePosition;
3411 return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition.toPositionWi thAffinity(), 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 DCHECK(visiblePosition.isValid()) << visiblePosition;
3417 return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition.to PositionWithAffinity(), rule);
3418 }
3419
3420 VisiblePosition nextPositionOfDeprecated(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule)
3421 {
3422 if (visiblePosition.isNull())
3423 return VisiblePosition();
3424 visiblePosition.deepEquivalent().document()->updateStyleAndLayoutIgnorePendi ngStylesheets();
3425 return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition.toPositionWi thAffinity(), rule);
3426 }
3427
3428 VisiblePositionInFlatTree nextPositionOfDeprecated(const VisiblePositionInFlatTr ee& visiblePosition, EditingBoundaryCrossingRule rule)
3429 {
3430 if (visiblePosition.isNull())
3431 return VisiblePositionInFlatTree();
3432 visiblePosition.deepEquivalent().document()->updateStyleAndLayoutIgnorePendi ngStylesheets();
3433 return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition.to PositionWithAffinity(), rule);
3418 } 3434 }
3419 3435
3420 template <typename Strategy> 3436 template <typename Strategy>
3421 static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi blePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) 3437 static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi blePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor)
3422 { 3438 {
3423 DCHECK(pos.isValid()) << pos; 3439 DCHECK(pos.isValid()) << pos;
3424 if (pos.isNull()) 3440 if (pos.isNull())
3425 return pos; 3441 return pos;
3426 3442
3427 ContainerNode* highestRoot = highestEditableRoot(anchor); 3443 ContainerNode* highestRoot = highestEditableRoot(anchor);
3428 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); 3444 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent());
3429 3445
3430 // Return |pos| itself if the two are from the very same editable region, or 3446 // Return |pos| itself if the two are from the very same editable region, or
3431 // both are non-editable. 3447 // both are non-editable.
3432 if (highestRootOfPos == highestRoot) 3448 if (highestRootOfPos == highestRoot)
3433 return pos; 3449 return pos;
3434 3450
3435 // If this is not editable but |pos| has an editable root, skip to the start 3451 // If this is not editable but |pos| has an editable root, skip to the start
3436 if (!highestRoot && highestRootOfPos) 3452 if (!highestRoot && highestRootOfPos)
3437 return createVisiblePosition(previousVisuallyDistinctCandidate(PositionT emplate<Strategy>(highestRootOfPos, PositionAnchorType::BeforeAnchor).parentAnch oredEquivalent())); 3453 return createVisiblePosition(previousVisuallyDistinctCandidate(PositionT emplate<Strategy>(highestRootOfPos, PositionAnchorType::BeforeAnchor).parentAnch oredEquivalent()));
3438 3454
3439 // That must mean that |pos| is not editable. Return the last position 3455 // 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 3456 // before |pos| that is in the same editable region as this position
3441 DCHECK(highestRoot); 3457 DCHECK(highestRoot);
3442 return lastEditableVisiblePositionBeforePositionInRoot(pos.deepEquivalent(), *highestRoot); 3458 return lastEditableVisiblePositionBeforePositionInRoot(pos.deepEquivalent(), *highestRoot);
3443 } 3459 }
3444 3460
3445 template <typename Strategy> 3461 template <typename Strategy>
3446 static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const Visib lePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) 3462 static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const Posit ionTemplate<Strategy>& position, EditingBoundaryCrossingRule rule)
3447 { 3463 {
3448 // TODO(xiaochengh): Ensure that this function is called with a valid 3464 const PositionTemplate<Strategy> prevPosition = previousVisuallyDistinctCand idate(position);
3449 // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|;
3450 const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(vis iblePosition.deepEquivalent());
3451 3465
3452 // return null visible position if there is no previous visible position 3466 // return null visible position if there is no previous visible position
3453 if (pos.atStartOfTree()) 3467 if (prevPosition.atStartOfTree())
3454 return VisiblePositionTemplate<Strategy>(); 3468 return VisiblePositionTemplate<Strategy>();
3455 3469
3456 // we should always be able to make the affinity |TextAffinity::Downstream|, 3470 // we should always be able to make the affinity |TextAffinity::Downstream|,
3457 // because going previous from an |TextAffinity::Upstream| position can 3471 // because going previous from an |TextAffinity::Upstream| position can
3458 // never yield another |TextAffinity::Upstream position| (unless line wrap 3472 // never yield another |TextAffinity::Upstream position| (unless line wrap
3459 // length is 0!). 3473 // length is 0!).
3460 const VisiblePositionTemplate<Strategy> prev = createVisiblePositionDeprecat ed(pos); 3474 const VisiblePositionTemplate<Strategy> prev = createVisiblePosition(prevPos ition);
3461 if (prev.deepEquivalent() == visiblePosition.deepEquivalent()) 3475 if (prev.deepEquivalent() == position)
3462 return VisiblePositionTemplate<Strategy>(); 3476 return VisiblePositionTemplate<Strategy>();
3463 3477
3464 switch (rule) { 3478 switch (rule) {
3465 case CanCrossEditingBoundary: 3479 case CanCrossEditingBoundary:
3466 return prev; 3480 return prev;
3467 case CannotCrossEditingBoundary: 3481 case CannotCrossEditingBoundary:
3468 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivale nt()); 3482 return honorEditingBoundaryAtOrBefore(prev, position);
3469 case CanSkipOverEditingBoundary: 3483 case CanSkipOverEditingBoundary:
3470 return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent ()); 3484 return skipToStartOfEditingBoundary(prev, position);
3471 } 3485 }
3472 3486
3473 NOTREACHED(); 3487 NOTREACHED();
3474 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent() ); 3488 return honorEditingBoundaryAtOrBefore(prev, position);
3475 } 3489 }
3476 3490
3477 VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, Editi ngBoundaryCrossingRule rule) 3491 VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, Editi ngBoundaryCrossingRule rule)
3478 { 3492 {
3479 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); 3493 DCHECK(visiblePosition.isValid()) << visiblePosition;
3494 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition.deepEqui valent(), rule);
3480 } 3495 }
3481 3496
3482 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi siblePosition, EditingBoundaryCrossingRule rule) 3497 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi siblePosition, EditingBoundaryCrossingRule rule)
3483 { 3498 {
3484 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n, rule); 3499 DCHECK(visiblePosition.isValid()) << visiblePosition;
3500 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n.deepEquivalent(), rule);
3501 }
3502
3503 VisiblePosition previousPositionOfDeprecated(const VisiblePosition& visiblePosit ion, EditingBoundaryCrossingRule rule)
3504 {
3505 if (visiblePosition.isNull())
3506 return VisiblePosition();
3507 visiblePosition.deepEquivalent().document()->updateStyleAndLayoutIgnorePendi ngStylesheets();
3508 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition.deepEqui valent(), rule);
3509 }
3510
3511 VisiblePositionInFlatTree previousPositionOfDeprecated(const VisiblePositionInFl atTree& visiblePosition, EditingBoundaryCrossingRule rule)
3512 {
3513 if (visiblePosition.isNull())
3514 return VisiblePositionInFlatTree();
3515 visiblePosition.deepEquivalent().document()->updateStyleAndLayoutIgnorePendi ngStylesheets();
3516 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio n.deepEquivalent(), rule);
3485 } 3517 }
3486 3518
3487 } // namespace blink 3519 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698