1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
// Copyright 2020 The Chromium Authors
// 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/metrics_logs_event_manager.h"
#include "components/metrics/unsent_log_store.h"
#include "ukm_test_helper.h"
namespace ukm {
UkmTestHelper::UkmTestHelper(UkmService* ukm_service)
: ukm_service_(ukm_service) {}
bool UkmTestHelper::IsExtensionRecordingEnabled() const {
return ukm_service_ ? ukm_service_->recording_enabled(EXTENSIONS) : false;
}
bool UkmTestHelper::IsRecordingEnabled() const {
return ukm_service_ ? ukm_service_->recording_enabled() : false;
}
bool UkmTestHelper::IsReportUserNoisedUserBirthYearAndGenderEnabled() {
return base::FeatureList::IsEnabled(
ukm::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(metrics::MetricsLogsEventManager::CreateReason::kUnknown);
}
bool UkmTestHelper::HasUnsentLogs() {
return ukm_service_ &&
ukm_service_->reporting_service_.ukm_log_store()->has_unsent_logs();
}
void UkmTestHelper::SetMsbbConsent() {
DCHECK(ukm_service_);
ukm_service_->UpdateRecording({ukm::MSBB});
}
void UkmTestHelper::PurgeData() {
DCHECK(ukm_service_);
ukm_service_->Purge();
}
} // namespace ukm
|