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 e6e67c732f3df129031ba0821c0804b295cb8734..7a4bee67391cfc92b0ab3bcba62ac49666ad0b61 100644 |
--- a/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp |
+++ b/third_party/WebKit/Source/core/editing/markers/DocumentMarkerController.cpp |
@@ -395,6 +395,10 @@ DocumentMarkerVector DocumentMarkerController::Markers() { |
Vector<IntRect> DocumentMarkerController::RenderedRectsForMarkers( |
DocumentMarker::MarkerType marker_type) { |
+ // Only TextMatch markers can have rendered rects |
+ // TODO(rlanday): remove marker_type parameter |
+ DCHECK_EQ(marker_type, DocumentMarker::kTextMatch); |
+ |
Vector<IntRect> result; |
if (!PossiblyHasMarkers(marker_type)) |
@@ -410,17 +414,18 @@ Vector<IntRect> DocumentMarkerController::RenderedRectsForMarkers( |
if (!node.isConnected()) |
continue; |
MarkerLists* markers = node_iterator->value.Get(); |
- for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) { |
- DocumentMarkerList* const list = ListForType(markers, type); |
- if (!list || list->IsEmpty() || type != marker_type) |
- continue; |
+ DocumentMarkerList* const list = |
+ ListForType(markers, DocumentMarker::kTextMatch); |
+ if (!list || list->IsEmpty()) |
+ continue; |
- for (RenderedDocumentMarker* rendered_marker : list->GetMarkers()) { |
- UpdateMarkerRenderedRectIfNeeded(node, *rendered_marker); |
- if (!rendered_marker->IsRendered()) |
- continue; |
- result.push_back(rendered_marker->RenderedRect()); |
- } |
+ for (DocumentMarker* marker : list->GetMarkers()) { |
+ RenderedDocumentMarker* const rendered_marker = |
+ ToRenderedDocumentMarker(marker); |
+ UpdateMarkerRenderedRectIfNeeded(node, *rendered_marker); |
+ if (!rendered_marker->IsRendered()) |
+ continue; |
+ result.push_back(rendered_marker->RenderedRect()); |
} |
} |
@@ -445,18 +450,17 @@ void DocumentMarkerController::InvalidateRectsForMarkersInNode( |
const Node& node) { |
MarkerLists* markers = markers_.at(&node); |
- for (auto& marker_list : *markers) { |
- if (!marker_list || marker_list->IsEmpty()) |
- continue; |
+ const DocumentMarkerList* const marker_list = |
+ ListForType(markers, DocumentMarker::kTextMatch); |
+ if (!marker_list || marker_list->IsEmpty()) |
+ return; |
- const HeapVector<Member<RenderedDocumentMarker>>& markers_in_list = |
- marker_list->GetMarkers(); |
- for (auto& marker : markers_in_list) |
- marker->Invalidate(); |
+ const HeapVector<Member<DocumentMarker>>& markers_in_list = |
+ marker_list->GetMarkers(); |
+ for (auto& marker : markers_in_list) |
+ ToRenderedDocumentMarker(marker)->Invalidate(); |
- if (markers_in_list.front()->GetType() == DocumentMarker::kTextMatch) |
- InvalidatePaintForTickmarks(node); |
- } |
+ InvalidatePaintForTickmarks(node); |
} |
void DocumentMarkerController::InvalidateRectsForAllMarkers() { |
Xiaocheng
2017/05/18 19:15:09
This function should modify only TextMatch marker
|
@@ -466,7 +470,7 @@ void DocumentMarkerController::InvalidateRectsForAllMarkers() { |
if (!marker_list || marker_list->IsEmpty()) |
continue; |
- const HeapVector<Member<RenderedDocumentMarker>>& markers_in_list = |
+ const HeapVector<Member<DocumentMarker>>& markers_in_list = |
marker_list->GetMarkers(); |
for (DocumentMarker* marker : markers_in_list) |
ToRenderedDocumentMarker(marker)->Invalidate(); |
Xiaocheng
2017/05/18 19:15:09
Otherwise this is a bad cast
|
@@ -649,7 +653,7 @@ bool DocumentMarkerController::SetMarkersActive(Node* node, |
if (!list) |
return false; |
- const HeapVector<Member<RenderedDocumentMarker>>& markers_in_list = |
+ const HeapVector<Member<DocumentMarker>>& markers_in_list = |
list->GetMarkers(); |
// TODO(rlanday): this assumes that the markers are stored in sorted order. |
// This method should probably eventually be implemented by a |
@@ -688,7 +692,7 @@ void DocumentMarkerController::ShowMarkers() const { |
MarkerLists* markers = markers_.at(node); |
for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) { |
DocumentMarkerList* const list = ListForType(markers, type); |
- const HeapVector<Member<RenderedDocumentMarker>>& markers_in_list = |
+ const HeapVector<Member<DocumentMarker>>& markers_in_list = |
list->GetMarkers(); |
for (const DocumentMarker* marker : markers_in_list) { |
builder.Append(" "); |