// Copyright 2023 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/metrics/structured/oobe_structured_metrics_watcher.h"
#include "chrome/browser/ash/login/startup_utils.h"
#include "components/metrics/structured/structured_metrics_service.h"
namespace metrics::structured {
OobeStructuredMetricsWatcher::OobeStructuredMetricsWatcher(
StructuredMetricsService* service,
int max_events)
: max_events_(max_events), service_(service) {}
bool OobeStructuredMetricsWatcher::ShouldProcessOnEventRecord(
const Event& event) {
return false;
}
void OobeStructuredMetricsWatcher::OnEventsRecord(Event* event) {}
void OobeStructuredMetricsWatcher::OnEventRecorded(
StructuredEventProto* event) {
// If an upload hasn't occurred then we will attempt to upload events even if
// OOBE has completed.
// TODO(b/314350095): Improve short term fix such that oobe events can be
// uploaded earlier.
if (upload_count_ > 0 && !IsOobeActive()) {
return;
}
event_count_ += 1;
AttemptUpload();
}
void OobeStructuredMetricsWatcher::OnProvideIndependentMetrics(
ChromeUserMetricsExtension* uma_proto) {}
bool OobeStructuredMetricsWatcher::IsOobeActive() const {
return !ash::StartupUtils::IsOobeCompleted();
}
void OobeStructuredMetricsWatcher::OnProfileAdded(
const base::FilePath& /*path*/) {
AttemptUpload();
}
bool OobeStructuredMetricsWatcher::ShouldUpload() const {
return service_->recorder()->CanProvideMetrics() &&
event_count_ >= max_events_;
}
void OobeStructuredMetricsWatcher::AttemptUpload() {
if (!ShouldUpload()) {
return;
}
service_->ManualUpload();
event_count_ = 0;
upload_count_ += 1;
}
} // namespace metrics::structured