blob: ebb1f07e6654680a4409c0ba929829ef1420de45 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/safe_browsing/safe_browsing_metrics_collector.h"
#include "base/logging.h"
#include "base/metrics/histogram_functions.h"
#include "components/prefs/pref_service.h"
#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
namespace {
const int kMetricsLoggingIntervalDay = 1;
} // namespace
namespace safe_browsing {
SafeBrowsingMetricsCollector::SafeBrowsingMetricsCollector(
PrefService* pref_service)
: pref_service_(pref_service) {}
void SafeBrowsingMetricsCollector::StartLogging() {
base::TimeDelta log_interval =
base::TimeDelta::FromDays(kMetricsLoggingIntervalDay);
base::Time last_log_time =
base::Time::FromDeltaSinceWindowsEpoch(base::TimeDelta::FromSeconds(
pref_service_->GetInt64(prefs::kSafeBrowsingMetricsLastLogTime)));
base::TimeDelta delay = base::Time::Now() - last_log_time;
if (delay >= log_interval) {
LogMetricsAndScheduleNextLogging();
} else {
ScheduleNextLoggingAfterInterval(log_interval - delay);
}
}
void SafeBrowsingMetricsCollector::LogMetricsAndScheduleNextLogging() {
base::UmaHistogramEnumeration("SafeBrowsing.Pref.Daily.SafeBrowsingState",
GetSafeBrowsingState(*pref_service_));
base::UmaHistogramBoolean("SafeBrowsing.Pref.Daily.Extended",
IsExtendedReportingEnabled(*pref_service_));
pref_service_->SetInt64(
prefs::kSafeBrowsingMetricsLastLogTime,
base::Time::Now().ToDeltaSinceWindowsEpoch().InSeconds());
ScheduleNextLoggingAfterInterval(
base::TimeDelta::FromDays(kMetricsLoggingIntervalDay));
}
void SafeBrowsingMetricsCollector::ScheduleNextLoggingAfterInterval(
base::TimeDelta interval) {
metrics_collector_timer_.Stop();
metrics_collector_timer_.Start(
FROM_HERE, interval, this,
&SafeBrowsingMetricsCollector::LogMetricsAndScheduleNextLogging);
}
} // namespace safe_browsing