Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp |
| index 65611647e36dbe5c7407d91728e52c9fc1fce5cb..d1a0c17e07cdfba2d015c91c536983df73159738 100644 |
| --- a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp |
| +++ b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp |
| @@ -1207,10 +1207,14 @@ void ReplaceSelectionCommand::doApply(EditingState* editingState) { |
| VisiblePosition startAfterDelete = endingSelection().visibleStart(); |
| if (isEndOfParagraph(startAfterDelete) && |
| !isStartOfParagraph(startAfterDelete) && |
| - !isEndOfEditableOrNonEditableContent(startAfterDelete)) |
| - setEndingSelection(nextPositionOf(startAfterDelete)); |
| - else |
| + !isEndOfEditableOrNonEditableContent(startAfterDelete)) { |
| + setEndingSelection( |
| + SelectionInDOMTree::Builder() |
| + .collapse(nextPositionOf(startAfterDelete).deepEquivalent()) |
| + .build()); |
| + } else { |
| insertParagraphSeparator(editingState); |
| + } |
| if (editingState->isAborted()) |
| return; |
| } |
| @@ -1221,7 +1225,9 @@ void ReplaceSelectionCommand::doApply(EditingState* editingState) { |
| nextPositionOf(visibleStart, CannotCrossEditingBoundary); |
| if (isEndOfParagraph(visibleStart) && !isStartOfParagraph(visibleStart) && |
| next.isNotNull()) { |
| - setEndingSelection(next); |
| + setEndingSelection(SelectionInDOMTree::Builder() |
| + .collapse(next.deepEquivalent()) |
| + .build()); |
| } else { |
| insertParagraphSeparator(editingState); |
| if (editingState->isAborted()) |
| @@ -1249,8 +1255,11 @@ void ReplaceSelectionCommand::doApply(EditingState* editingState) { |
| insertParagraphSeparator(editingState); |
| if (editingState->isAborted()) |
| return; |
| - document().updateStyleAndLayoutIgnorePendingStylesheets(); |
|
Xiaocheng
2016/10/26 07:33:23
previousPositionOf(VP) also requires clean layout.
yosin_UTC9
2016/10/26 07:41:02
Done.
I have it in PS#1, then I removed in PS#2.
|
| - setEndingSelection(previousPositionOf(endingSelection().visibleStart())); |
| + setEndingSelection( |
| + SelectionInDOMTree::Builder() |
| + .collapse(previousPositionOf(endingSelection().visibleStart()) |
| + .deepEquivalent()) |
| + .build()); |
| } |
| } |
| @@ -1627,14 +1636,17 @@ void ReplaceSelectionCommand::doApply(EditingState* editingState) { |
| if (editingState->isAborted()) |
| return; |
| } |
| - document().updateStyleAndLayoutIgnorePendingStylesheets(); |
| setEndingSelection( |
| - VisiblePosition::afterNode(insertedNodes.lastLeafInserted())); |
| + SelectionInDOMTree::Builder() |
| + .collapse(Position::afterNode(insertedNodes.lastLeafInserted())) |
| + .build()); |
| // Select up to the paragraph separator that was added. |
| lastPositionToSelect = |
| endingSelection().visibleStart().deepEquivalent(); |
| } else if (!isStartOfParagraph(endOfInsertedContent)) { |
| - setEndingSelection(endOfInsertedContent); |
| + setEndingSelection(SelectionInDOMTree::Builder() |
| + .collapse(endOfInsertedContent.deepEquivalent()) |
| + .build()); |
| Element* enclosingBlockElement = |
| enclosingBlock(endOfInsertedContent.deepEquivalent().anchorNode()); |
| if (isListItem(enclosingBlockElement)) { |
| @@ -1642,8 +1654,10 @@ void ReplaceSelectionCommand::doApply(EditingState* editingState) { |
| insertNodeAfter(newListItem, enclosingBlockElement, editingState); |
| if (editingState->isAborted()) |
| return; |
| - document().updateStyleAndLayoutIgnorePendingStylesheets(); |
| - setEndingSelection(VisiblePosition::firstPositionInNode(newListItem)); |
| + setEndingSelection( |
| + SelectionInDOMTree::Builder() |
| + .collapse(Position::firstPositionInNode(newListItem)) |
| + .build()); |
| } else { |
| // Use a default paragraph element (a plain div) for the empty |
| // paragraph, using the last paragraph block's style seems to annoy |