summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/highlight/highlight.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/highlight/highlight.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/highlight/highlight.cc52
1 files changed, 44 insertions, 8 deletions
diff --git a/chromium/third_party/blink/renderer/core/highlight/highlight.cc b/chromium/third_party/blink/renderer/core/highlight/highlight.cc
index 07d2fdcec26..4c019d3d8e7 100644
--- a/chromium/third_party/blink/renderer/core/highlight/highlight.cc
+++ b/chromium/third_party/blink/renderer/core/highlight/highlight.cc
@@ -11,14 +11,11 @@
namespace blink {
-Highlight* Highlight::Create(const String& name,
- HeapVector<Member<AbstractRange>>& ranges) {
- return MakeGarbageCollected<Highlight>(name, ranges);
+Highlight* Highlight::Create(const HeapVector<Member<AbstractRange>>& ranges) {
+ return MakeGarbageCollected<Highlight>(ranges);
}
-Highlight::Highlight(const String& name,
- HeapVector<Member<AbstractRange>>& ranges)
- : name_(name) {
+Highlight::Highlight(const HeapVector<Member<AbstractRange>>& ranges) {
for (const auto& range : ranges)
highlight_ranges_.insert(range);
}
@@ -27,18 +24,29 @@ Highlight::~Highlight() = default;
void Highlight::Trace(blink::Visitor* visitor) const {
visitor->Trace(highlight_ranges_);
+ visitor->Trace(containing_highlight_registries_);
ScriptWrappable::Trace(visitor);
}
+void Highlight::ScheduleRepaintsInContainingHighlightRegistries() const {
+ for (const auto& entry : containing_highlight_registries_) {
+ DCHECK_GT(entry.value, 0u);
+ Member<HighlightRegistry> highlight_registry = entry.key;
+ highlight_registry->ScheduleRepaint();
+ }
+}
+
Highlight* Highlight::addForBinding(ScriptState*,
AbstractRange* range,
ExceptionState&) {
- highlight_ranges_.insert(range);
+ if (highlight_ranges_.insert(range).is_new_entry)
+ ScheduleRepaintsInContainingHighlightRegistries();
return this;
}
void Highlight::clearForBinding(ScriptState*, ExceptionState&) {
highlight_ranges_.clear();
+ ScheduleRepaintsInContainingHighlightRegistries();
}
bool Highlight::deleteForBinding(ScriptState*,
@@ -47,6 +55,7 @@ bool Highlight::deleteForBinding(ScriptState*,
auto iterator = highlight_ranges_.find(range);
if (iterator != highlight_ranges_.end()) {
highlight_ranges_.erase(iterator);
+ ScheduleRepaintsInContainingHighlightRegistries();
return true;
}
return false;
@@ -55,13 +64,40 @@ bool Highlight::deleteForBinding(ScriptState*,
bool Highlight::hasForBinding(ScriptState*,
AbstractRange* range,
ExceptionState&) const {
- return highlight_ranges_.Contains(range);
+ return Contains(range);
}
wtf_size_t Highlight::size() const {
return highlight_ranges_.size();
}
+void Highlight::setPriority(const int32_t& priority) {
+ priority_ = priority;
+ ScheduleRepaintsInContainingHighlightRegistries();
+}
+
+bool Highlight::Contains(AbstractRange* range) const {
+ return highlight_ranges_.Contains(range);
+}
+
+void Highlight::RegisterIn(HighlightRegistry* highlight_registry) {
+ auto map_iterator = containing_highlight_registries_.find(highlight_registry);
+ if (map_iterator == containing_highlight_registries_.end()) {
+ containing_highlight_registries_.insert(highlight_registry, 1);
+ } else {
+ DCHECK_GT(map_iterator->value, 0u);
+ map_iterator->value++;
+ }
+}
+
+void Highlight::DeregisterFrom(HighlightRegistry* highlight_registry) {
+ auto map_iterator = containing_highlight_registries_.find(highlight_registry);
+ DCHECK_NE(map_iterator, containing_highlight_registries_.end());
+ DCHECK_GT(map_iterator->value, 0u);
+ if (--map_iterator->value == 0)
+ containing_highlight_registries_.erase(map_iterator);
+}
+
Highlight::IterationSource::IterationSource(const Highlight& highlight)
: index_(0) {
highlight_ranges_snapshot_.ReserveInitialCapacity(