Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Unified Diff: third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp

Issue 2806683002: Don't ever split DocumentMarkers on remove (Closed)
Patch Set: Leave partial markers in place for non-splitting case, preserve endpoints for splitting case Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
diff --git a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
index c14dbaa44c63304ab7d2f23cd70d37f2c075e21b..67acd8ffca9c5077dbc07142e683545cd11011cf 100644
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp
@@ -146,9 +146,7 @@ void DocumentMarkerController::prepareForDestruction() {
void DocumentMarkerController::removeMarkers(
TextIterator& markedText,
- DocumentMarker::MarkerTypes markerTypes,
- RemovePartiallyOverlappingMarkerOrNot
- shouldRemovePartiallyOverlappingMarker) {
+ DocumentMarker::MarkerTypes markerTypes) {
for (; !markedText.atEnd(); markedText.advance()) {
if (!possiblyHasMarkers(markerTypes))
return;
@@ -157,21 +155,17 @@ void DocumentMarkerController::removeMarkers(
int startOffset = markedText.startOffsetInCurrentContainer();
int endOffset = markedText.endOffsetInCurrentContainer();
removeMarkers(markedText.currentContainer(), startOffset,
- endOffset - startOffset, markerTypes,
- shouldRemovePartiallyOverlappingMarker);
+ endOffset - startOffset, markerTypes);
}
}
void DocumentMarkerController::removeMarkers(
const EphemeralRange& range,
- DocumentMarker::MarkerTypes markerTypes,
- RemovePartiallyOverlappingMarkerOrNot
- shouldRemovePartiallyOverlappingMarker) {
+ DocumentMarker::MarkerTypes markerTypes) {
DCHECK(!m_document->needsLayoutTreeUpdate());
TextIterator markedText(range.startPosition(), range.endPosition());
- DocumentMarkerController::removeMarkers(
- markedText, markerTypes, shouldRemovePartiallyOverlappingMarker);
+ DocumentMarkerController::removeMarkers(markedText, markerTypes);
}
static bool startsFurther(const Member<RenderedDocumentMarker>& lhv,
@@ -343,9 +337,7 @@ void DocumentMarkerController::removeMarkers(
Node* node,
unsigned startOffset,
int length,
- DocumentMarker::MarkerTypes markerTypes,
- RemovePartiallyOverlappingMarkerOrNot
- shouldRemovePartiallyOverlappingMarker) {
+ DocumentMarker::MarkerTypes markerTypes) {
if (length <= 0)
return;
@@ -382,34 +374,8 @@ void DocumentMarkerController::removeMarkers(
if (marker.startOffset() >= endOffset)
break;
- // at this point we know that marker and target intersect in some way
- docDirty = true;
-
- // pitch the old marker
list->erase(i - list->begin());
-
- if (shouldRemovePartiallyOverlappingMarker) {
- // Stop here. Don't add resulting slices back.
- continue;
- }
-
- // add either of the resulting slices that are left after removing target
- if (startOffset > marker.startOffset()) {
- DocumentMarker newLeft = marker;
- newLeft.setEndOffset(startOffset);
- size_t insertIndex = i - list->begin();
- list->insert(insertIndex, RenderedDocumentMarker::create(newLeft));
- // Move to the marker after the inserted one.
- i = list->begin() + insertIndex + 1;
- }
- if (marker.endOffset() > endOffset) {
- DocumentMarker newRight = marker;
- newRight.setStartOffset(endOffset);
- size_t insertIndex = i - list->begin();
- list->insert(insertIndex, RenderedDocumentMarker::create(newRight));
- // Move to the marker after the inserted one.
- i = list->begin() + insertIndex + 1;
- }
+ docDirty = true;
}
if (list->isEmpty()) {
@@ -829,12 +795,6 @@ void DocumentMarkerController::didUpdateCharacterData(CharacterData* node,
unsigned offset,
unsigned oldLength,
unsigned newLength) {
- // If we're doing a pure remove operation, remove the markers in the range
Xiaocheng 2017/04/08 00:23:36 I see. But this change fits better in the previou
- // being removed (markers containing, but larger than, the range, will be
- // split)
- if (newLength == 0)
- removeMarkers(node, offset, oldLength);
-
if (!possiblyHasMarkers(DocumentMarker::AllMarkers()))
return;
DCHECK(!m_markers.isEmpty());

Powered by Google App Engine
This is Rietveld 408576698