| 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() {
|
|
|