| 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 5eef8486a3ba1f1926a0aaf780173a5a5a686a53..eeb075233414345a9021c9544addd86e8711ca7e 100644
|
| --- a/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp
|
| +++ b/third_party/WebKit/Source/core/editing/commands/ReplaceSelectionCommand.cpp
|
| @@ -919,7 +919,7 @@ static inline HTMLElement* elementToSplitToAvoidPastingIntoInlineElementsWithSty
|
|
|
| void ReplaceSelectionCommand::doApply()
|
| {
|
| - VisibleSelection selection = endingSelection();
|
| + const VisibleSelection selection = endingSelection();
|
| ASSERT(selection.isCaretOrRange());
|
| ASSERT(selection.start().anchorNode());
|
| if (!selection.isNonOrphanedCaretOrRange() || !selection.start().anchorNode())
|
| @@ -942,17 +942,16 @@ void ReplaceSelectionCommand::doApply()
|
| m_insertionStyle->mergeTypingStyle(&document());
|
| }
|
|
|
| - VisiblePosition visibleStart = selection.visibleStart();
|
| - VisiblePosition visibleEnd = selection.visibleEnd();
|
| + const VisiblePosition visibleStart = selection.visibleStart();
|
| + const VisiblePosition visibleEnd = selection.visibleEnd();
|
|
|
| - bool selectionEndWasEndOfParagraph = isEndOfParagraph(visibleEnd);
|
| - bool selectionStartWasStartOfParagraph = isStartOfParagraph(visibleStart);
|
| + const bool selectionEndWasEndOfParagraph = isEndOfParagraph(visibleEnd);
|
| + const bool selectionStartWasStartOfParagraph = isStartOfParagraph(visibleStart);
|
|
|
| Element* enclosingBlockOfVisibleStart = enclosingBlock(visibleStart.deepEquivalent().anchorNode());
|
|
|
| - Position insertionPos = selection.start();
|
| - bool startIsInsideMailBlockquote = enclosingNodeOfType(insertionPos, isMailHTMLBlockquoteElement, CanCrossEditingBoundary);
|
| - bool selectionIsPlainText = !selection.isContentRichlyEditable();
|
| + const bool startIsInsideMailBlockquote = enclosingNodeOfType(selection.start(), isMailHTMLBlockquoteElement, CanCrossEditingBoundary);
|
| + const bool selectionIsPlainText = !selection.isContentRichlyEditable();
|
| Element* currentRoot = selection.rootEditableElement();
|
|
|
| if ((selectionStartWasStartOfParagraph && selectionEndWasEndOfParagraph && !startIsInsideMailBlockquote)
|
| @@ -973,43 +972,38 @@ void ReplaceSelectionCommand::doApply()
|
| // FIXME: We should only expand to include fully selected special elements if we are copying a
|
| // selection and pasting it on top of itself.
|
| deleteSelection(false, mergeBlocksAfterDelete, false);
|
| - visibleStart = endingSelection().visibleStart();
|
| if (fragment.hasInterchangeNewlineAtStart()) {
|
| - if (isEndOfParagraph(visibleStart) && !isStartOfParagraph(visibleStart)) {
|
| - if (!isEndOfEditableOrNonEditableContent(visibleStart))
|
| - setEndingSelection(nextPositionOf(visibleStart));
|
| - } else {
|
| + VisiblePosition startAfterDelete = endingSelection().visibleStart();
|
| + if (isEndOfParagraph(startAfterDelete) && !isStartOfParagraph(startAfterDelete) && !isEndOfEditableOrNonEditableContent(startAfterDelete))
|
| + setEndingSelection(nextPositionOf(startAfterDelete));
|
| + else
|
| insertParagraphSeparator();
|
| - }
|
| }
|
| - insertionPos = endingSelection().start();
|
| } else {
|
| ASSERT(selection.isCaret());
|
| if (fragment.hasInterchangeNewlineAtStart()) {
|
| - VisiblePosition next = nextPositionOf(visibleStart, CannotCrossEditingBoundary);
|
| - if (isEndOfParagraph(visibleStart) && !isStartOfParagraph(visibleStart) && next.isNotNull()) {
|
| + const VisiblePosition next = nextPositionOf(visibleStart, CannotCrossEditingBoundary);
|
| + if (isEndOfParagraph(visibleStart) && !isStartOfParagraph(visibleStart) && next.isNotNull())
|
| setEndingSelection(next);
|
| - } else {
|
| + else
|
| insertParagraphSeparator();
|
| - visibleStart = endingSelection().visibleStart();
|
| - }
|
| }
|
| // We split the current paragraph in two to avoid nesting the blocks from the fragment inside the current block.
|
| // For example paste <div>foo</div><div>bar</div><div>baz</div> into <div>x^x</div>, where ^ is the caret.
|
| // As long as the div styles are the same, visually you'd expect: <div>xbar</div><div>bar</div><div>bazx</div>,
|
| // not <div>xbar<div>bar</div><div>bazx</div></div>.
|
| // Don't do this if the selection started in a Mail blockquote.
|
| - if (m_preventNesting && !startIsInsideMailBlockquote && !isEndOfParagraph(visibleStart) && !isStartOfParagraph(visibleStart)) {
|
| + if (m_preventNesting && !startIsInsideMailBlockquote && !isEndOfParagraph(endingSelection().visibleStart()) && !isStartOfParagraph(endingSelection().visibleStart())) {
|
| insertParagraphSeparator();
|
| setEndingSelection(previousPositionOf(endingSelection().visibleStart()));
|
| }
|
| - insertionPos = endingSelection().start();
|
| }
|
|
|
| + Position insertionPos = endingSelection().start();
|
| // We don't want any of the pasted content to end up nested in a Mail blockquote, so first break
|
| // out of any surrounding Mail blockquotes. Unless we're inserting in a table, in which case
|
| // breaking the blockquote will prevent the content from actually being inserted in the table.
|
| - if (startIsInsideMailBlockquote && m_preventNesting && !(enclosingNodeOfType(insertionPos, &isTableStructureNode))) {
|
| + if (enclosingNodeOfType(insertionPos, isMailHTMLBlockquoteElement, CanCrossEditingBoundary) && m_preventNesting && !(enclosingNodeOfType(insertionPos, &isTableStructureNode))) {
|
| applyCommandToComposite(BreakBlockquoteCommand::create(document()));
|
| // This will leave a br between the split.
|
| Node* br = endingSelection().start().anchorNode();
|
|
|