blob: 4a0eca2d2a123e053b5edadb9aeaa17d9c7a7a93 [file] [log] [blame]
// 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 "content/browser/attribution_reporting/test/mock_data_host.h"
#include <stddef.h>
#include <memory>
#include <utility>
#include <vector>
#include "base/run_loop.h"
#include "build/build_config.h"
#include "build/buildflag.h"
#include "components/attribution_reporting/source_registration.h"
#include "components/attribution_reporting/suitable_origin.h"
#include "components/attribution_reporting/trigger_registration.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "services/network/public/cpp/trigger_verification.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/mojom/conversions/attribution_data_host.mojom.h"
#include "url/gurl.h"
namespace content {
MockDataHost::MockDataHost(
mojo::PendingReceiver<blink::mojom::AttributionDataHost> data_host) {
receiver_.Bind(std::move(data_host));
}
MockDataHost::~MockDataHost() = default;
void MockDataHost::WaitForSourceData(size_t num_source_data) {
WaitForSourceAndTriggerData(num_source_data, /*num_trigger_data=*/0);
}
void MockDataHost::WaitForTriggerData(size_t num_trigger_data) {
WaitForSourceAndTriggerData(/*num_source_data=*/0, num_trigger_data);
}
void MockDataHost::WaitForSourceAndTriggerData(size_t num_source_data,
size_t num_trigger_data) {
min_source_data_count_ = num_source_data;
min_trigger_data_count_ = num_trigger_data;
if (source_data_.size() >= min_source_data_count_ &&
trigger_data_.size() >= min_trigger_data_count_) {
return;
}
wait_loop_.Run();
}
void MockDataHost::SourceDataAvailable(
attribution_reporting::SuitableOrigin reporting_origin,
attribution_reporting::SourceRegistration data) {
source_data_.push_back(std::move(data));
if (source_data_.size() < min_source_data_count_ ||
trigger_data_.size() < min_trigger_data_count_) {
return;
}
wait_loop_.Quit();
}
void MockDataHost::TriggerDataAvailable(
attribution_reporting::SuitableOrigin reporting_origin,
attribution_reporting::TriggerRegistration data,
absl::optional<network::TriggerVerification> verification) {
trigger_data_.push_back(std::move(data));
if (trigger_data_.size() < min_trigger_data_count_ ||
source_data_.size() < min_source_data_count_) {
return;
}
wait_loop_.Quit();
}
#if BUILDFLAG(IS_ANDROID)
void MockDataHost::OsSourceDataAvailable(const GURL& registration_url) {
os_sources_.push_back(registration_url);
if (os_sources_.size() < min_os_sources_count_) {
return;
}
wait_loop_.Quit();
}
void MockDataHost::OsTriggerDataAvailable(const GURL& registration_url) {
os_triggers_.push_back(registration_url);
if (os_triggers_.size() < min_os_triggers_count_) {
return;
}
wait_loop_.Quit();
}
void MockDataHost::WaitForOsSources(size_t num_os_sources) {
min_os_sources_count_ = num_os_sources;
if (os_sources_.size() >= min_os_sources_count_) {
return;
}
wait_loop_.Run();
}
void MockDataHost::WaitForOsTriggers(size_t num_os_triggers) {
min_os_triggers_count_ = num_os_triggers;
if (os_triggers_.size() >= min_os_triggers_count_) {
return;
}
wait_loop_.Run();
}
#endif // BUILDFLAG(IS_ANDROID)
std::unique_ptr<MockDataHost> GetRegisteredDataHost(
mojo::PendingReceiver<blink::mojom::AttributionDataHost> data_host) {
return std::make_unique<MockDataHost>(std::move(data_host));
}
} // namespace content