Index: third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp |
diff --git a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp |
index e5f54ac30782f339cad7c12cdf2ad6a04db9a52b..50648443d471778236e33e0cbe62878165bf0e95 100644 |
--- a/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp |
+++ b/third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp |
@@ -25,6 +25,7 @@ |
#include "core/editing/commands/CompositeEditCommand.h" |
+#include <algorithm> |
#include "bindings/core/v8/ExceptionState.h" |
#include "core/HTMLNames.h" |
#include "core/dom/Document.h" |
@@ -52,6 +53,7 @@ |
#include "core/editing/commands/RemoveNodePreservingChildrenCommand.h" |
#include "core/editing/commands/ReplaceNodeWithSpanCommand.h" |
#include "core/editing/commands/ReplaceSelectionCommand.h" |
+#include "core/editing/commands/SetCharacterDataCommand.h" |
#include "core/editing/commands/SetNodeAttributeCommand.h" |
#include "core/editing/commands/SplitElementCommand.h" |
#include "core/editing/commands/SplitTextNodeCommand.h" |
@@ -73,7 +75,6 @@ |
#include "core/layout/LayoutListItem.h" |
#include "core/layout/LayoutText.h" |
#include "core/layout/line/InlineTextBox.h" |
-#include <algorithm> |
namespace blink { |
@@ -540,15 +541,10 @@ void CompositeEditCommand::ReplaceTextInNode(Text* node, |
unsigned offset, |
unsigned count, |
const String& replacement_text) { |
- // DeleteFromTextNodeCommand and InsertIntoTextNodeCommand are never |
- // aborted. |
+ // SetCharacterDataCommand is never aborted. |
ApplyCommandToComposite( |
- DeleteFromTextNodeCommand::Create(node, offset, count), |
+ SetCharacterDataCommand::Create(node, offset, count, replacement_text), |
ASSERT_NO_EDITING_ABORT); |
- if (!replacement_text.IsEmpty()) |
- ApplyCommandToComposite( |
- InsertIntoTextNodeCommand::Create(node, offset, replacement_text), |
- ASSERT_NO_EDITING_ABORT); |
} |
Position CompositeEditCommand::ReplaceSelectedTextInNode(const String& text) { |
@@ -567,50 +563,6 @@ Position CompositeEditCommand::ReplaceSelectedTextInNode(const String& text) { |
return Position(text_node, start.OffsetInContainerNode() + text.length()); |
} |
-static void CopyMarkerTypesAndDescriptions( |
- const DocumentMarkerVector& marker_pointers, |
- Vector<DocumentMarker::MarkerType>& types, |
- Vector<String>& descriptions) { |
- size_t array_size = marker_pointers.size(); |
- types.ReserveCapacity(array_size); |
- descriptions.ReserveCapacity(array_size); |
- for (const auto& marker_pointer : marker_pointers) { |
- types.push_back(marker_pointer->GetType()); |
- descriptions.push_back(marker_pointer->Description()); |
- } |
-} |
- |
-void CompositeEditCommand::ReplaceTextInNodePreservingMarkers( |
- Text* node, |
- unsigned offset, |
- unsigned count, |
- const String& replacement_text) { |
- DocumentMarkerController& marker_controller = GetDocument().Markers(); |
- Vector<DocumentMarker::MarkerType> types; |
- Vector<String> descriptions; |
- CopyMarkerTypesAndDescriptions( |
- marker_controller.MarkersInRange( |
- EphemeralRange(Position(node, offset), |
- Position(node, offset + count)), |
- DocumentMarker::AllMarkers()), |
- types, descriptions); |
- |
- ReplaceTextInNode(node, offset, count, replacement_text); |
- |
- // Re-adding markers requires a clean tree. |
- GetDocument().UpdateStyleAndLayout(); |
- |
- DocumentLifecycle::DisallowTransitionScope disallow_transition( |
- GetDocument().Lifecycle()); |
- Position start_position(node, offset); |
- Position end_position(node, offset + replacement_text.length()); |
- DCHECK_EQ(types.size(), descriptions.size()); |
- |
- for (size_t i = 0; i < types.size(); ++i) |
- marker_controller.AddMarker(start_position, end_position, types[i], |
- descriptions[i]); |
-} |
- |
Position CompositeEditCommand::PositionOutsideTabSpan(const Position& pos) { |
if (!IsTabHTMLSpanElementTextNode(pos.AnchorNode())) |
return pos; |
@@ -775,8 +727,7 @@ void CompositeEditCommand::RebalanceWhitespaceOnTextSubstring(Text* text_node, |
should_emit_nbs_pbefore_end); |
if (string != rebalanced_string) |
- ReplaceTextInNodePreservingMarkers(text_node, upstream, length, |
- rebalanced_string); |
+ ReplaceTextInNode(text_node, upstream, length, rebalanced_string); |
} |
void CompositeEditCommand::PrepareWhitespaceAtPositionForSplit( |
@@ -818,9 +769,8 @@ void CompositeEditCommand:: |
Position pos = MostForwardCaretPosition(visible_position.DeepEquivalent()); |
if (!pos.ComputeContainerNode() || !pos.ComputeContainerNode()->IsTextNode()) |
return; |
- ReplaceTextInNodePreservingMarkers(ToText(pos.ComputeContainerNode()), |
- pos.OffsetInContainerNode(), 1, |
- NonBreakingSpaceString()); |
+ ReplaceTextInNode(ToText(pos.ComputeContainerNode()), |
+ pos.OffsetInContainerNode(), 1, NonBreakingSpaceString()); |
} |
void CompositeEditCommand::RebalanceWhitespace() { |