| // 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 |