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

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

Issue 2948133004: [MarkersIntersectingRange #2] Add DocumentMarkerController::MarkersIntersectingRange() (Closed)
Patch Set: Created 3 years, 6 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
7 * reserved. 7 * reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 static_cast<unsigned>(position.ComputeOffsetInContainerNode()); 372 static_cast<unsigned>(position.ComputeOffsetInContainerNode());
373 373
374 const auto& markers = MarkersFor(node, marker_types); 374 const auto& markers = MarkersFor(node, marker_types);
375 const auto& it = 375 const auto& it =
376 std::find_if(markers.begin(), markers.end(), [=](DocumentMarker* marker) { 376 std::find_if(markers.begin(), markers.end(), [=](DocumentMarker* marker) {
377 return marker->StartOffset() < offset && offset < marker->EndOffset(); 377 return marker->StartOffset() < offset && offset < marker->EndOffset();
378 }); 378 });
379 return it == markers.end() ? nullptr : *it; 379 return it == markers.end() ? nullptr : *it;
380 } 380 }
381 381
382 Vector<std::pair<Node*, DocumentMarker*>>
rlanday 2017/06/22 02:16:04 kouhei@: Is it safe to return a Vector of std::pai
kouhei (in TOK) 2017/06/22 03:31:49 No. Please use HeapVector<pair<Member<Node>, Membe
Xiaocheng 2017/06/22 03:39:09 For my curiosity: The lifetime of the returned vec
383 DocumentMarkerController::MarkersIntersectingRange(
384 const EphemeralRange& range,
385 DocumentMarker::MarkerTypes types) {
386 Node* const range_start_container =
387 range.StartPosition().ComputeContainerNode();
388 const unsigned range_start_offset =
389 range.StartPosition().ComputeOffsetInContainerNode();
390 Node* const range_end_container = range.EndPosition().ComputeContainerNode();
391 const unsigned range_end_offset =
392 range.EndPosition().ComputeOffsetInContainerNode();
393
394 Vector<std::pair<Node*, DocumentMarker*>> node_marker_pairs;
kouhei (in TOK) 2017/06/22 03:31:49 also here
395 for (Node& node : range.Nodes()) {
yosin_UTC9 2017/06/22 03:13:40 nit: s/Node&/const Node&/
rlanday 2017/06/22 03:27:10 This needs to be non-const since we return a non-c
396 MarkerLists* markers = markers_.at(&node);
yosin_UTC9 2017/06/22 03:13:40 nit: s/MarkerLists*/const MarkerLists* const/
rlanday 2017/06/22 03:27:10 ListForType() only works with a non-const pointer
397 if (!markers)
398 continue;
399
400 for (DocumentMarker::MarkerType type : types) {
401 DocumentMarkerList* const list = ListForType(markers, type);
402 if (!list)
403 continue;
404
405 unsigned start_offset =
yosin_UTC9 2017/06/22 03:13:40 nit: s/unsigned/const unsigned/
406 (node == range_start_container ? range_start_offset : 0);
yosin_UTC9 2017/06/22 03:13:40 nit: No need to have parenthesis.
407 unsigned end_offset =
yosin_UTC9 2017/06/22 03:13:40 nit: s/unsigned/const unsigned/
408 (node == range_end_container ? range_end_offset
yosin_UTC9 2017/06/22 03:13:40 nit: No need to have parenthesis.
409 : node.MaxCharacterOffset());
410
411 const DocumentMarkerVector& markers_from_this_list =
412 list->MarkersIntersectingRange(start_offset, end_offset);
413 for (DocumentMarker* marker : markers_from_this_list)
414 node_marker_pairs.push_back(std::make_pair(&node, marker));
415 }
416 }
417
418 return node_marker_pairs;
419 }
420
382 DocumentMarkerVector DocumentMarkerController::MarkersFor( 421 DocumentMarkerVector DocumentMarkerController::MarkersFor(
383 Node* node, 422 Node* node,
384 DocumentMarker::MarkerTypes marker_types) { 423 DocumentMarker::MarkerTypes marker_types) {
385 DocumentMarkerVector result; 424 DocumentMarkerVector result;
386 425
387 MarkerLists* markers = markers_.at(node); 426 MarkerLists* markers = markers_.at(node);
388 if (!markers) 427 if (!markers)
389 return result; 428 return result;
390 429
391 for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) { 430 for (DocumentMarker::MarkerType type : DocumentMarker::AllMarkers()) {
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 } 772 }
734 773
735 } // namespace blink 774 } // namespace blink
736 775
737 #ifndef NDEBUG 776 #ifndef NDEBUG
738 void showDocumentMarkers(const blink::DocumentMarkerController* controller) { 777 void showDocumentMarkers(const blink::DocumentMarkerController* controller) {
739 if (controller) 778 if (controller)
740 controller->ShowMarkers(); 779 controller->ShowMarkers();
741 } 780 }
742 #endif 781 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698