Index: third_party/WebKit/Source/core/editing/Editor.cpp |
diff --git a/third_party/WebKit/Source/core/editing/Editor.cpp b/third_party/WebKit/Source/core/editing/Editor.cpp |
index 2ab4351d35d3b6b935d028158bc2c6a9ededb2bb..07092f9962c0d0e2b684969c50e866cff9b6863a 100644 |
--- a/third_party/WebKit/Source/core/editing/Editor.cpp |
+++ b/third_party/WebKit/Source/core/editing/Editor.cpp |
@@ -219,12 +219,13 @@ bool Editor::handleTextEvent(TextEvent* event) { |
if (event->isPaste()) { |
if (event->pastingFragment()) { |
replaceSelectionWithFragment( |
- event->pastingFragment(), false, event->shouldSmartReplace(), |
- event->shouldMatchStyle(), InputEvent::InputType::InsertFromPaste); |
+ EditCommandSource::kMenuOrKeyBinding, event->pastingFragment(), false, |
+ event->shouldSmartReplace(), event->shouldMatchStyle(), |
+ InputEvent::InputType::InsertFromPaste); |
} else { |
- replaceSelectionWithText(event->data(), false, |
- event->shouldSmartReplace(), |
- InputEvent::InputType::InsertFromPaste); |
+ replaceSelectionWithText( |
+ EditCommandSource::kMenuOrKeyBinding, event->data(), false, |
+ event->shouldSmartReplace(), InputEvent::InputType::InsertFromPaste); |
} |
return true; |
} |
@@ -236,7 +237,8 @@ bool Editor::handleTextEvent(TextEvent* event) { |
return insertParagraphSeparator(); |
} |
- return insertTextWithoutSendingTextEvent(data, false, event); |
+ return insertTextWithoutSendingTextEvent(EditCommandSource::kMenuOrKeyBinding, |
+ data, false, event); |
} |
bool Editor::canEdit() const { |
@@ -316,7 +318,8 @@ bool Editor::isSelectTrailingWhitespaceEnabled() const { |
return false; |
} |
-bool Editor::deleteWithDirection(DeleteDirection direction, |
+bool Editor::deleteWithDirection(EditCommandSource source, |
+ DeleteDirection direction, |
TextGranularity granularity, |
bool killRing, |
bool isTypingAction) { |
@@ -335,6 +338,7 @@ bool Editor::deleteWithDirection(DeleteDirection direction, |
if (killRing) |
addToKillRing(selectedRange()); |
deleteSelectionWithSmartDelete( |
+ source, |
canSmartCopyOrDelete() ? DeleteMode::Smart : DeleteMode::Simple, |
deletionInputTypeFromTextGranularity(direction, granularity)); |
// Implicitly calls revealSelectionAfterEditingOperation(). |
@@ -371,7 +375,9 @@ bool Editor::deleteWithDirection(DeleteDirection direction, |
return true; |
} |
+// TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|. |
void Editor::deleteSelectionWithSmartDelete( |
+ EditCommandSource, |
DeleteMode deleteMode, |
InputEvent::InputType inputType, |
const Position& referenceMovePosition) { |
@@ -564,7 +570,9 @@ bool Editor::canSmartReplaceWithPasteboard(Pasteboard* pasteboard) { |
return smartInsertDeleteEnabled() && pasteboard->canSmartReplace(); |
} |
-void Editor::replaceSelectionWithFragment(DocumentFragment* fragment, |
+// TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|. |
+void Editor::replaceSelectionWithFragment(EditCommandSource, |
+ DocumentFragment* fragment, |
bool selectReplacement, |
bool smartReplace, |
bool matchStyle, |
@@ -590,13 +598,14 @@ void Editor::replaceSelectionWithFragment(DocumentFragment* fragment, |
revealSelectionAfterEditingOperation(); |
} |
-void Editor::replaceSelectionWithText(const String& text, |
+void Editor::replaceSelectionWithText(EditCommandSource source, |
+ const String& text, |
bool selectReplacement, |
bool smartReplace, |
InputEvent::InputType inputType) { |
- replaceSelectionWithFragment(createFragmentFromText(selectedRange(), text), |
- selectReplacement, smartReplace, true, |
- inputType); |
+ replaceSelectionWithFragment( |
+ source, createFragmentFromText(selectedRange(), text), selectReplacement, |
+ smartReplace, true, inputType); |
} |
// TODO(xiaochengh): Merge it with |replaceSelectionWithFragment()|. |
@@ -635,7 +644,8 @@ bool Editor::deleteSelectionAfterDraggingWithEvents( |
if (shouldDelete && dragSource->isConnected()) { |
deleteSelectionWithSmartDelete( |
- deleteMode, InputEvent::InputType::DeleteByDrag, referenceMovePosition); |
+ EditCommandSource::kMenuOrKeyBinding, deleteMode, |
+ InputEvent::InputType::DeleteByDrag, referenceMovePosition); |
} |
return true; |
@@ -699,7 +709,8 @@ void Editor::respondToChangedContents(const VisibleSelection& endingSelection) { |
client().respondToChangedContents(); |
} |
-void Editor::removeFormattingAndStyle() { |
+// TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|. |
+void Editor::removeFormattingAndStyle(EditCommandSource) { |
DCHECK(frame().document()); |
RemoveFormatCommand::create(*frame().document())->apply(); |
} |
@@ -725,14 +736,15 @@ Element* Editor::findEventTargetFromSelection() const { |
return findEventTargetFrom(frame().selection().selection()); |
} |
-void Editor::applyStyle(StylePropertySet* style, |
+void Editor::applyStyle(EditCommandSource source, |
+ StylePropertySet* style, |
InputEvent::InputType inputType) { |
switch (frame().selection().getSelectionType()) { |
case NoSelection: |
// do nothing |
break; |
case CaretSelection: |
- computeAndSetTypingStyle(style, inputType); |
+ computeAndSetTypingStyle(source, style, inputType); |
break; |
case RangeSelection: |
if (style) { |
@@ -745,7 +757,9 @@ void Editor::applyStyle(StylePropertySet* style, |
} |
} |
-void Editor::applyParagraphStyle(StylePropertySet* style, |
+// TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|. |
+void Editor::applyParagraphStyle(EditCommandSource, |
+ StylePropertySet* style, |
InputEvent::InputType inputType) { |
if (frame().selection().isNone() || !style) |
return; |
@@ -755,20 +769,22 @@ void Editor::applyParagraphStyle(StylePropertySet* style, |
->apply(); |
} |
-void Editor::applyStyleToSelection(StylePropertySet* style, |
+void Editor::applyStyleToSelection(EditCommandSource source, |
+ StylePropertySet* style, |
InputEvent::InputType inputType) { |
if (!style || style->isEmpty() || !canEditRichly()) |
return; |
- applyStyle(style, inputType); |
+ applyStyle(source, style, inputType); |
} |
-void Editor::applyParagraphStyleToSelection(StylePropertySet* style, |
+void Editor::applyParagraphStyleToSelection(EditCommandSource source, |
+ StylePropertySet* style, |
InputEvent::InputType inputType) { |
if (!style || style->isEmpty() || !canEditRichly()) |
return; |
- applyParagraphStyle(style, inputType); |
+ applyParagraphStyle(source, style, inputType); |
} |
bool Editor::selectionStartHasStyle(CSSPropertyID propertyID, |
@@ -954,7 +970,8 @@ bool Editor::insertText(const String& text, KeyboardEvent* triggeringEvent) { |
return frame().eventHandler().handleTextInputEvent(text, triggeringEvent); |
} |
-bool Editor::insertTextWithoutSendingTextEvent(const String& text, |
+bool Editor::insertTextWithoutSendingTextEvent(EditCommandSource source, |
+ const String& text, |
bool selectInsertedText, |
TextEvent* triggeringEvent) { |
if (text.isEmpty()) |
@@ -1059,7 +1076,7 @@ void Editor::cut(EditCommandSource source) { |
return; |
} |
deleteSelectionWithSmartDelete( |
- canSmartCopyOrDelete() ? DeleteMode::Smart : DeleteMode::Simple, |
+ source, canSmartCopyOrDelete() ? DeleteMode::Smart : DeleteMode::Simple, |
InputEvent::InputType::DeleteByCut); |
} |
} |
@@ -1136,7 +1153,7 @@ void Editor::pasteAsPlainText(EditCommandSource source) { |
pasteAsPlainTextWithPasteboard(Pasteboard::generalPasteboard()); |
} |
-void Editor::performDelete() { |
+void Editor::performDelete(EditCommandSource source) { |
if (!canDelete()) |
return; |
@@ -1149,7 +1166,7 @@ void Editor::performDelete() { |
// TODO(chongz): |Editor::performDelete()| has no direction. |
// https://github.com/w3c/editing/issues/130 |
deleteSelectionWithSmartDelete( |
- canSmartCopyOrDelete() ? DeleteMode::Smart : DeleteMode::Simple, |
+ source, canSmartCopyOrDelete() ? DeleteMode::Smart : DeleteMode::Simple, |
InputEvent::InputType::DeleteContentBackward); |
// clear the "start new kill ring sequence" setting, because it was set to |
@@ -1236,7 +1253,8 @@ bool Editor::canUndo() { |
return m_undoStack->canUndo(); |
} |
-void Editor::undo() { |
+// TODO(chongz): Fire 'beforeinput' for user triggered undo. |
+void Editor::undo(EditCommandSource) { |
m_undoStack->undo(); |
} |
@@ -1244,7 +1262,8 @@ bool Editor::canRedo() { |
return m_undoStack->canRedo(); |
} |
-void Editor::redo() { |
+// TODO(chongz): Fire 'beforeinput' for user triggered redo. |
+void Editor::redo(EditCommandSource) { |
m_undoStack->redo(); |
} |
@@ -1268,7 +1287,8 @@ void Editor::setBaseWritingDirection(WritingDirection direction) { |
: direction == RightToLeftWritingDirection ? "rtl" : "inherit", |
false); |
applyParagraphStyleToSelection( |
- style, InputEvent::InputType::FormatSetBlockTextDirection); |
+ EditCommandSource::kMenuOrKeyBinding, style, |
+ InputEvent::InputType::FormatSetBlockTextDirection); |
} |
void Editor::revealSelectionAfterEditingOperation( |
@@ -1279,7 +1299,7 @@ void Editor::revealSelectionAfterEditingOperation( |
frame().selection().revealSelection(alignment, revealExtentOption); |
} |
-void Editor::transpose() { |
+void Editor::transpose(EditCommandSource source) { |
if (!canEdit()) |
return; |
@@ -1316,7 +1336,7 @@ void Editor::transpose() { |
// Insert the transposed characters. |
// TODO(chongz): Once we add |InsertTranspose| in |InputEvent::InputType|, we |
// should use it instead of |InsertFromPaste|. |
- replaceSelectionWithText(transposed, false, false, |
+ replaceSelectionWithText(source, transposed, false, false, |
InputEvent::InputType::InsertFromPaste); |
} |
@@ -1397,7 +1417,9 @@ IntRect Editor::firstRectForRange(const EphemeralRange& range) const { |
startCaretRect.height()); |
} |
-void Editor::computeAndSetTypingStyle(StylePropertySet* style, |
+// TODO(chongz): Pass |EditCommandSource| to |CompositeEditCommand|. |
+void Editor::computeAndSetTypingStyle(EditCommandSource, |
+ StylePropertySet* style, |
InputEvent::InputType inputType) { |
if (!style || style->isEmpty()) { |
frame().selection().clearTypingStyle(); |
@@ -1669,7 +1691,17 @@ void Editor::replaceSelection(const String& text) { |
DCHECK(!frame().document()->needsLayoutTreeUpdate()); |
bool selectReplacement = behavior().shouldSelectReplacement(); |
bool smartReplace = true; |
- replaceSelectionWithText(text, selectReplacement, smartReplace, |
+ replaceSelectionWithText(EditCommandSource::kMenuOrKeyBinding, text, |
+ selectReplacement, smartReplace, |
+ InputEvent::InputType::InsertReplacementText); |
+} |
+ |
+void Editor::replaceSelectionForSpellChecker(const String& text) { |
+ DCHECK(!frame().document()->needsLayoutTreeUpdate()); |
+ const bool kSelectReplacement = false; |
+ const bool kSmartReplace = false; |
+ replaceSelectionWithText(EditCommandSource::kMenuOrKeyBinding, text, |
+ kSelectReplacement, kSmartReplace, |
InputEvent::InputType::InsertReplacementText); |
} |