blob: 097830f87080e61f18e0e7a7ec2e68f39ad2d50b [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 "components/ukm/ukm_test_helper.h"
#include <algorithm>
#include <string>
#include "base/containers/contains.h"
#include "base/feature_list.h"
#include "base/run_loop.h"
#include "components/metrics/log_decoder.h"
#include "components/metrics/unsent_log_store.h"
namespace ukm {
UkmTestHelper::UkmTestHelper(UkmService* ukm_service)
: ukm_service_(ukm_service) {}
bool UkmTestHelper::IsExtensionRecordingEnabled() const {
return ukm_service_ ? ukm_service_->extensions_enabled_ : false;
}
bool UkmTestHelper::IsRecordingEnabled() const {
return ukm_service_ ? ukm_service_->recording_enabled_ : false;
}
bool UkmTestHelper::IsReportUserNoisedUserBirthYearAndGenderEnabled() {
return base::FeatureList::IsEnabled(
ukm::UkmService::kReportUserNoisedUserBirthYearAndGender);
}
uint64_t UkmTestHelper::GetClientId() {
return ukm_service_->client_id_;
}
std::unique_ptr<Report> UkmTestHelper::GetUkmReport() {
if (!HasUnsentLogs())
return nullptr;
metrics::UnsentLogStore* log_store =
ukm_service_->reporting_service_.ukm_log_store();
if (log_store->has_staged_log()) {
// For testing purposes, we examine the content of a staged log without
// ever sending the log, so discard any previously staged log.
log_store->DiscardStagedLog();
}
log_store->StageNextLog();
if (!log_store->has_staged_log())
return nullptr;
std::unique_ptr<ukm::Report> report = std::make_unique<ukm::Report>();
if (!metrics::DecodeLogDataToProto(log_store->staged_log(), report.get()))
return nullptr;
return report;
}
UkmSource* UkmTestHelper::GetSource(SourceId source_id) {
if (!ukm_service_)
return nullptr;
auto it = ukm_service_->sources().find(source_id);
return it == ukm_service_->sources().end() ? nullptr : it->second.get();
}
bool UkmTestHelper::HasSource(SourceId source_id) {
return ukm_service_ && base::Contains(ukm_service_->sources(), source_id);
}
bool UkmTestHelper::IsSourceObsolete(SourceId source_id) {
return ukm_service_ &&
base::Contains(ukm_service_->recordings_.obsolete_source_ids,
source_id);
}
void UkmTestHelper::RecordSourceForTesting(SourceId source_id) {
if (ukm_service_)
ukm_service_->UpdateSourceURL(source_id, GURL("http://example.com"));
}
void UkmTestHelper::BuildAndStoreLog() {
// Wait for initialization to complete before flushing.
base::RunLoop run_loop;
ukm_service_->SetInitializationCompleteCallbackForTesting(
run_loop.QuitClosure());
run_loop.Run();
ukm_service_->Flush();
}
bool UkmTestHelper::HasUnsentLogs() {
return ukm_service_ &&
ukm_service_->reporting_service_.ukm_log_store()->has_unsent_logs();
}
} // namespace ukm