Index: Source/core/dom/DocumentMarkerController.h |
diff --git a/Source/core/dom/DocumentMarkerController.h b/Source/core/dom/DocumentMarkerController.h |
index c7f0e456b21235def99ddf076e5002f96baea5f6..d63b137bba0f7f900b2970077c8ea8173d9887e7 100644 |
--- a/Source/core/dom/DocumentMarkerController.h |
+++ b/Source/core/dom/DocumentMarkerController.h |
@@ -28,6 +28,7 @@ |
#define DocumentMarkerController_h |
#include "core/dom/DocumentMarker.h" |
+#include "core/dom/Range.h" |
#include "platform/geometry/IntRect.h" |
#include "platform/heap/Handle.h" |
#include "wtf/HashMap.h" |
@@ -35,10 +36,32 @@ |
namespace blink { |
+class MarkerRemoverPredicate { |
+public: |
+ MarkerRemoverPredicate(Document* document, const Vector<String>& words) |
dcheng
2014/08/05 20:30:38
This can't ever be passed a non-null document righ
Klemen Forstnerič
2014/08/07 17:47:28
Done.
|
+ : m_document(document), m_words(words) |
+ { |
+ } |
+ |
+ bool operator()(const DocumentMarker& documentMarker, |
+ const Node* node) const { |
+ |
+ auto markerRange = Range::create(*m_document, |
dcheng
2014/08/05 20:30:38
auto is not allowed in cross-platform code.
Klemen Forstnerič
2014/08/07 17:47:28
Done.
|
+ const_cast<Node *>(node), documentMarker.startOffset(), |
dcheng
2014/08/05 20:30:38
Convention is to have the * and & by the typename,
Klemen Forstnerič
2014/08/07 17:47:28
Done.
|
+ const_cast<Node *>(node), documentMarker.endOffset()); |
+ |
+ return m_words.contains(markerRange->text()) |
+ ? true : false; |
+ } |
+ |
+private: |
+ Document* m_document; |
+ Vector<String> m_words; |
+}; |
+ |
class LayoutPoint; |
class LayoutRect; |
class Node; |
-class Range; |
class RenderedDocumentMarker; |
class DocumentMarkerController FINAL : public NoBaseWillBeGarbageCollected<DocumentMarkerController> { |
@@ -67,6 +90,7 @@ public: |
void removeMarkers(DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers()); |
void removeMarkers(Node*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers()); |
+ void removeMarkers(const MarkerRemoverPredicate& shouldRemoveMarker); |
void repaintMarkers(DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers()); |
void invalidateRenderedRectsForMarkersInRect(const LayoutRect&); |
void shiftMarkers(Node*, unsigned startOffset, int delta); |
@@ -91,6 +115,7 @@ private: |
typedef WillBeHeapVector<OwnPtrWillBeMember<RenderedDocumentMarker> > MarkerList; |
typedef WillBeHeapVector<OwnPtrWillBeMember<MarkerList>, DocumentMarker::MarkerTypeIndexesCount> MarkerLists; |
typedef WillBeHeapHashMap<RawPtrWillBeWeakMember<const Node>, OwnPtrWillBeMember<MarkerLists> > MarkerMap; |
+ |
void mergeOverlapping(MarkerList*, DocumentMarker&); |
bool possiblyHasMarkers(DocumentMarker::MarkerTypes); |
void removeMarkersFromList(MarkerMap::iterator, DocumentMarker::MarkerTypes); |