blob: 3d5ad1877272c7381cdc1c7988899f30457ef815 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/contextual_cueing/nudge_cap_tracker.h"
namespace contextual_cueing {
NudgeCapTracker::NudgeCapTracker(size_t cap_count, base::TimeDelta duration)
: cap_count_(cap_count), duration_(duration) {}
NudgeCapTracker::NudgeCapTracker(NudgeCapTracker&& source)
: cap_count_(source.cap_count_), duration_(source.duration_) {}
NudgeCapTracker::~NudgeCapTracker() = default;
void NudgeCapTracker::CueingNudgeShown() {
CHECK(cap_count_ == 0 || recent_nudge_timestamps_.size() <= cap_count_);
if (cap_count_ > 0 && recent_nudge_timestamps_.size() == cap_count_) {
recent_nudge_timestamps_.pop();
}
recent_nudge_timestamps_.push(base::TimeTicks::Now());
}
bool NudgeCapTracker::CanShowNudge() const {
if (!cap_count_) { // No restriction.
return true;
}
if (recent_nudge_timestamps_.size() < cap_count_) {
return true;
}
base::TimeDelta time_diff =
base::TimeTicks::Now() - recent_nudge_timestamps_.front();
CHECK(time_diff.is_positive());
return time_diff > duration_;
}
std::optional<base::TimeTicks> NudgeCapTracker::GetMostRecentNudgeTime() const {
if (recent_nudge_timestamps_.empty()) {
return std::nullopt;
}
return recent_nudge_timestamps_.back();
}
} // namespace contextual_cueing