// 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 #include #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 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 report = std::make_unique(); 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