Chromium Code Reviews| 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(" "); |