| Index: Source/core/editing/SelectionController.cpp
|
| diff --git a/Source/core/editing/SelectionController.cpp b/Source/core/editing/SelectionController.cpp
|
| index e23b7b4f956b0753d233f271c9fc05a715ab78e7..0f27f5a2700951dc211263bff4eeecff7ba915d6 100644
|
| --- a/Source/core/editing/SelectionController.cpp
|
| +++ b/Source/core/editing/SelectionController.cpp
|
| @@ -91,8 +91,8 @@ VisibleSelection expandSelectionToRespectUserSelectAllAlgorithm(Node* targetNode
|
| return selection;
|
|
|
| VisibleSelection newSelection(selection);
|
| - newSelection.setBase(PositionType::beforeNode(rootUserSelectAll).upstream(CanCrossEditingBoundary));
|
| - newSelection.setExtent(PositionType::afterNode(rootUserSelectAll).downstream(CanCrossEditingBoundary));
|
| + newSelection.setBase(mostBackwardCaretPosition(PositionType::beforeNode(rootUserSelectAll), CanCrossEditingBoundary));
|
| + newSelection.setExtent(mostForwardCaretPosition(PositionType::afterNode(rootUserSelectAll), CanCrossEditingBoundary));
|
|
|
| return newSelection;
|
| }
|
| @@ -252,22 +252,22 @@ void SelectionController::updateSelectionForMouseDragAlgorithm(const HitTestResu
|
| // TODO(yosin) Should we use |Strategy::rootUserSelectAllForNode()|?
|
| Node* rootUserSelectAllForMousePressNode = EditingStrategy::rootUserSelectAllForNode(mousePressNode);
|
| if (rootUserSelectAllForMousePressNode && rootUserSelectAllForMousePressNode == EditingStrategy::rootUserSelectAllForNode(target)) {
|
| - newSelection.setBase(PositionType::beforeNode(rootUserSelectAllForMousePressNode).upstream(CanCrossEditingBoundary));
|
| - newSelection.setExtent(PositionType::afterNode(rootUserSelectAllForMousePressNode).downstream(CanCrossEditingBoundary));
|
| + newSelection.setBase(mostBackwardCaretPosition(PositionType::beforeNode(rootUserSelectAllForMousePressNode), CanCrossEditingBoundary));
|
| + newSelection.setExtent(mostForwardCaretPosition(PositionType::afterNode(rootUserSelectAllForMousePressNode), CanCrossEditingBoundary));
|
| } else {
|
| // Reset base for user select all when base is inside user-select-all area and extent < base.
|
| if (rootUserSelectAllForMousePressNode) {
|
| PositionType eventPosition = Strategy::toPositionType(target->layoutObject()->positionForPoint(hitTestResult.localPoint()).position());
|
| PositionType dragStartPosition = Strategy::toPositionType(mousePressNode->layoutObject()->positionForPoint(dragStartPos).position());
|
| if (eventPosition.compareTo(dragStartPosition) < 0)
|
| - newSelection.setBase(PositionType::afterNode(rootUserSelectAllForMousePressNode).downstream(CanCrossEditingBoundary));
|
| + newSelection.setBase(mostForwardCaretPosition(PositionType::afterNode(rootUserSelectAllForMousePressNode), CanCrossEditingBoundary));
|
| }
|
|
|
| Node* rootUserSelectAllForTarget = EditingStrategy::rootUserSelectAllForNode(target);
|
| if (rootUserSelectAllForTarget && mousePressNode->layoutObject() && Strategy::toPositionType(target->layoutObject()->positionForPoint(hitTestResult.localPoint()).position()).compareTo(Strategy::toPositionType(mousePressNode->layoutObject()->positionForPoint(dragStartPos).position())) < 0)
|
| - newSelection.setExtent(PositionType::beforeNode(rootUserSelectAllForTarget).upstream(CanCrossEditingBoundary));
|
| + newSelection.setExtent(mostBackwardCaretPosition(PositionType::beforeNode(rootUserSelectAllForTarget), CanCrossEditingBoundary));
|
| else if (rootUserSelectAllForTarget && mousePressNode->layoutObject())
|
| - newSelection.setExtent(PositionType::afterNode(rootUserSelectAllForTarget).downstream(CanCrossEditingBoundary));
|
| + newSelection.setExtent(mostForwardCaretPosition(PositionType::afterNode(rootUserSelectAllForTarget), CanCrossEditingBoundary));
|
| else
|
| newSelection.setExtent(targetPosition);
|
| }
|
|
|