| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 1006 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1017 EditingState editingState; | 1017 EditingState editingState; |
| 1018 if (!TypingCommand::insertParagraphSeparator(*frame().document())) | 1018 if (!TypingCommand::insertParagraphSeparator(*frame().document())) |
| 1019 return false; | 1019 return false; |
| 1020 revealSelectionAfterEditingOperation( | 1020 revealSelectionAfterEditingOperation( |
| 1021 alignToEdge ? ScrollAlignment::alignToEdgeIfNeeded | 1021 alignToEdge ? ScrollAlignment::alignToEdgeIfNeeded |
| 1022 : ScrollAlignment::alignCenterIfNeeded); | 1022 : ScrollAlignment::alignCenterIfNeeded); |
| 1023 | 1023 |
| 1024 return true; | 1024 return true; |
| 1025 } | 1025 } |
| 1026 | 1026 |
| 1027 void Editor::cut(EditorCommandSource source) { | 1027 void Editor::cut(CommandSource source) { |
| 1028 if (tryDHTMLCut()) | 1028 if (tryDHTMLCut()) |
| 1029 return; // DHTML did the whole operation | 1029 return; // DHTML did the whole operation |
| 1030 if (!canCut()) | 1030 if (!canCut()) |
| 1031 return; | 1031 return; |
| 1032 | 1032 |
| 1033 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets | 1033 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets |
| 1034 // needs to be audited. See http://crbug.com/590369 for more details. | 1034 // needs to be audited. See http://crbug.com/590369 for more details. |
| 1035 // |tryDHTMLCut| dispatches cut event, which may make layout dirty, but we | 1035 // |tryDHTMLCut| dispatches cut event, which may make layout dirty, but we |
| 1036 // need clean layout to obtain the selected content. | 1036 // need clean layout to obtain the selected content. |
| 1037 frame().document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 1037 frame().document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
| 1038 | 1038 |
| 1039 // TODO(yosin) We should use early return style here. | 1039 // TODO(yosin) We should use early return style here. |
| 1040 if (canDeleteRange(selectedRange())) { | 1040 if (canDeleteRange(selectedRange())) { |
| 1041 spellChecker().updateMarkersForWordsAffectedByEditing(true); | 1041 spellChecker().updateMarkersForWordsAffectedByEditing(true); |
| 1042 if (enclosingTextControl(frame().selection().start())) { | 1042 if (enclosingTextControl(frame().selection().start())) { |
| 1043 String plainText = frame().selectedTextForClipboard(); | 1043 String plainText = frame().selectedTextForClipboard(); |
| 1044 Pasteboard::generalPasteboard()->writePlainText( | 1044 Pasteboard::generalPasteboard()->writePlainText( |
| 1045 plainText, canSmartCopyOrDelete() ? Pasteboard::CanSmartReplace | 1045 plainText, canSmartCopyOrDelete() ? Pasteboard::CanSmartReplace |
| 1046 : Pasteboard::CannotSmartReplace); | 1046 : Pasteboard::CannotSmartReplace); |
| 1047 } else { | 1047 } else { |
| 1048 writeSelectionToPasteboard(); | 1048 writeSelectionToPasteboard(); |
| 1049 } | 1049 } |
| 1050 | 1050 |
| 1051 if (source == CommandFromMenuOrKeyBinding) { | 1051 if (source == CommandSource::MenuOrKeyBinding) { |
| 1052 if (dispatchBeforeInputDataTransfer(findEventTargetFromSelection(), | 1052 if (dispatchBeforeInputDataTransfer(findEventTargetFromSelection(), |
| 1053 InputEvent::InputType::DeleteByCut, | 1053 InputEvent::InputType::DeleteByCut, |
| 1054 nullptr, nullptr) != | 1054 nullptr, nullptr) != |
| 1055 DispatchEventResult::NotCanceled) | 1055 DispatchEventResult::NotCanceled) |
| 1056 return; | 1056 return; |
| 1057 // 'beforeinput' event handler may destroy target frame. | 1057 // 'beforeinput' event handler may destroy target frame. |
| 1058 if (m_frame->document()->frame() != m_frame) | 1058 if (m_frame->document()->frame() != m_frame) |
| 1059 return; | 1059 return; |
| 1060 } | 1060 } |
| 1061 deleteSelectionWithSmartDelete( | 1061 deleteSelectionWithSmartDelete( |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1085 Document* document = frame().document(); | 1085 Document* document = frame().document(); |
| 1086 if (HTMLImageElement* imageElement = | 1086 if (HTMLImageElement* imageElement = |
| 1087 imageElementFromImageDocument(document)) | 1087 imageElementFromImageDocument(document)) |
| 1088 writeImageNodeToPasteboard(Pasteboard::generalPasteboard(), imageElement, | 1088 writeImageNodeToPasteboard(Pasteboard::generalPasteboard(), imageElement, |
| 1089 document->title()); | 1089 document->title()); |
| 1090 else | 1090 else |
| 1091 writeSelectionToPasteboard(); | 1091 writeSelectionToPasteboard(); |
| 1092 } | 1092 } |
| 1093 } | 1093 } |
| 1094 | 1094 |
| 1095 void Editor::paste(EditorCommandSource source) { | 1095 void Editor::paste(CommandSource source) { |
| 1096 DCHECK(frame().document()); | 1096 DCHECK(frame().document()); |
| 1097 if (tryDHTMLPaste(AllMimeTypes)) | 1097 if (tryDHTMLPaste(AllMimeTypes)) |
| 1098 return; // DHTML did the whole operation | 1098 return; // DHTML did the whole operation |
| 1099 if (!canPaste()) | 1099 if (!canPaste()) |
| 1100 return; | 1100 return; |
| 1101 spellChecker().updateMarkersForWordsAffectedByEditing(false); | 1101 spellChecker().updateMarkersForWordsAffectedByEditing(false); |
| 1102 ResourceFetcher* loader = frame().document()->fetcher(); | 1102 ResourceFetcher* loader = frame().document()->fetcher(); |
| 1103 ResourceCacheValidationSuppressor validationSuppressor(loader); | 1103 ResourceCacheValidationSuppressor validationSuppressor(loader); |
| 1104 | 1104 |
| 1105 PasteMode pasteMode = frame().selection().isContentRichlyEditable() | 1105 PasteMode pasteMode = frame().selection().isContentRichlyEditable() |
| 1106 ? AllMimeTypes | 1106 ? AllMimeTypes |
| 1107 : PlainTextOnly; | 1107 : PlainTextOnly; |
| 1108 | 1108 |
| 1109 if (source == CommandFromMenuOrKeyBinding) { | 1109 if (source == CommandSource::MenuOrKeyBinding) { |
| 1110 DataTransfer* dataTransfer = | 1110 DataTransfer* dataTransfer = |
| 1111 DataTransfer::create(DataTransfer::CopyAndPaste, DataTransferReadable, | 1111 DataTransfer::create(DataTransfer::CopyAndPaste, DataTransferReadable, |
| 1112 DataObject::createFromPasteboard(pasteMode)); | 1112 DataObject::createFromPasteboard(pasteMode)); |
| 1113 | 1113 |
| 1114 if (dispatchBeforeInputDataTransfer(findEventTargetFromSelection(), | 1114 if (dispatchBeforeInputDataTransfer(findEventTargetFromSelection(), |
| 1115 InputEvent::InputType::InsertFromPaste, | 1115 InputEvent::InputType::InsertFromPaste, |
| 1116 dataTransfer, nullptr) != | 1116 dataTransfer, nullptr) != |
| 1117 DispatchEventResult::NotCanceled) | 1117 DispatchEventResult::NotCanceled) |
| 1118 return; | 1118 return; |
| 1119 // 'beforeinput' event handler may destroy target frame. | 1119 // 'beforeinput' event handler may destroy target frame. |
| 1120 if (m_frame->document()->frame() != m_frame) | 1120 if (m_frame->document()->frame() != m_frame) |
| 1121 return; | 1121 return; |
| 1122 } | 1122 } |
| 1123 | 1123 |
| 1124 if (pasteMode == AllMimeTypes) | 1124 if (pasteMode == AllMimeTypes) |
| 1125 pasteWithPasteboard(Pasteboard::generalPasteboard()); | 1125 pasteWithPasteboard(Pasteboard::generalPasteboard()); |
| 1126 else | 1126 else |
| 1127 pasteAsPlainTextWithPasteboard(Pasteboard::generalPasteboard()); | 1127 pasteAsPlainTextWithPasteboard(Pasteboard::generalPasteboard()); |
| 1128 } | 1128 } |
| 1129 | 1129 |
| 1130 void Editor::pasteAsPlainText(EditorCommandSource source) { | 1130 void Editor::pasteAsPlainText(CommandSource source) { |
| 1131 if (tryDHTMLPaste(PlainTextOnly)) | 1131 if (tryDHTMLPaste(PlainTextOnly)) |
| 1132 return; | 1132 return; |
| 1133 if (!canPaste()) | 1133 if (!canPaste()) |
| 1134 return; | 1134 return; |
| 1135 spellChecker().updateMarkersForWordsAffectedByEditing(false); | 1135 spellChecker().updateMarkersForWordsAffectedByEditing(false); |
| 1136 pasteAsPlainTextWithPasteboard(Pasteboard::generalPasteboard()); | 1136 pasteAsPlainTextWithPasteboard(Pasteboard::generalPasteboard()); |
| 1137 } | 1137 } |
| 1138 | 1138 |
| 1139 void Editor::performDelete() { | 1139 void Editor::performDelete() { |
| 1140 if (!canDelete()) | 1140 if (!canDelete()) |
| (...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1666 } | 1666 } |
| 1667 | 1667 |
| 1668 DEFINE_TRACE(Editor) { | 1668 DEFINE_TRACE(Editor) { |
| 1669 visitor->trace(m_frame); | 1669 visitor->trace(m_frame); |
| 1670 visitor->trace(m_lastEditCommand); | 1670 visitor->trace(m_lastEditCommand); |
| 1671 visitor->trace(m_undoStack); | 1671 visitor->trace(m_undoStack); |
| 1672 visitor->trace(m_mark); | 1672 visitor->trace(m_mark); |
| 1673 } | 1673 } |
| 1674 | 1674 |
| 1675 } // namespace blink | 1675 } // namespace blink |
| OLD | NEW |