Refactor std::function usages from Brave Ads.

fix https://github.com/brave/brave-browser/issues/26589
This commit is contained in:
Aleksey Seren
2023-02-06 11:28:05 -05:00
parent 8387dffebe
commit d4b2495016
78 changed files with 1536 additions and 1111 deletions
+49 -33
View File
@@ -137,15 +137,9 @@ void Account::Deposit(const std::string& creative_instance_id,
}
deposit->GetValue(
creative_instance_id, [=](const bool success, const double value) {
if (!success) {
FailedToProcessDeposit(creative_instance_id, ad_type,
confirmation_type);
return;
}
ProcessDeposit(creative_instance_id, ad_type, confirmation_type, value);
});
creative_instance_id,
base::BindOnce(&Account::OnGetDepositValue, base::Unretained(this),
creative_instance_id, ad_type, confirmation_type));
}
// static
@@ -168,31 +162,50 @@ void Account::MaybeGetIssuers() const {
issuers_->MaybeFetch();
}
void Account::OnGetDepositValue(const std::string& creative_instance_id,
const AdType& ad_type,
const ConfirmationType& confirmation_type,
const bool success,
const double value) const {
if (!success) {
FailedToProcessDeposit(creative_instance_id, ad_type, confirmation_type);
return;
}
ProcessDeposit(creative_instance_id, ad_type, confirmation_type, value);
}
void Account::ProcessDeposit(const std::string& creative_instance_id,
const AdType& ad_type,
const ConfirmationType& confirmation_type,
const double value) const {
transactions::Add(
creative_instance_id, value, ad_type, confirmation_type,
[=](const bool success, const TransactionInfo& transaction) {
if (!success) {
FailedToProcessDeposit(creative_instance_id, ad_type,
confirmation_type);
return;
}
base::BindOnce(&Account::OnDepositProcessed, base::Unretained(this),
creative_instance_id, ad_type, confirmation_type));
}
BLOG(3, "Successfully processed deposit for "
<< transaction.ad_type << " with creative instance id "
<< transaction.creative_instance_id << " and "
<< transaction.confirmation_type << " valued at "
<< transaction.value);
void Account::OnDepositProcessed(const std::string& creative_instance_id,
const AdType& ad_type,
const ConfirmationType& confirmation_type,
const bool success,
const TransactionInfo& transaction) const {
if (!success) {
FailedToProcessDeposit(creative_instance_id, ad_type, confirmation_type);
return;
}
NotifyDidProcessDeposit(transaction);
BLOG(3, "Successfully processed deposit for "
<< transaction.ad_type << " with creative instance id "
<< transaction.creative_instance_id << " and "
<< transaction.confirmation_type << " valued at "
<< transaction.value);
NotifyStatementOfAccountsDidChange();
NotifyDidProcessDeposit(transaction);
confirmations_->Confirm(transaction);
});
NotifyStatementOfAccountsDidChange();
confirmations_->Confirm(transaction);
}
void Account::FailedToProcessDeposit(
@@ -233,18 +246,21 @@ void Account::WalletDidChange(const WalletInfo& wallet) const {
NotifyWalletDidChange(wallet);
ResetRewards([=](const bool success) {
if (!success) {
BLOG(0, "Failed to reset rewards state");
return;
}
ResetRewards(
base::BindOnce(&Account::OnRewardsReset, base::Unretained(this)));
}
BLOG(3, "Successfully reset rewards state");
void Account::OnRewardsReset(const bool success) const {
if (!success) {
BLOG(0, "Failed to reset rewards state");
return;
}
NotifyStatementOfAccountsDidChange();
BLOG(3, "Successfully reset rewards state");
TopUpUnblindedTokens();
});
NotifyStatementOfAccountsDidChange();
TopUpUnblindedTokens();
}
void Account::MaybeResetIssuersAndConfirmations() {
@@ -6,7 +6,6 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_ACCOUNT_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_ACCOUNT_H_
#include <functional>
#include <memory>
#include <string>
@@ -72,10 +71,20 @@ class Account final : public PrefManagerObserver,
private:
void MaybeGetIssuers() const;
void OnGetDepositValue(const std::string& creative_instance_id,
const AdType& ad_type,
const ConfirmationType& confirmation_type,
bool success,
double value) const;
void ProcessDeposit(const std::string& creative_instance_id,
const AdType& ad_type,
const ConfirmationType& confirmation_type,
double value) const;
void OnDepositProcessed(const std::string& creative_instance_id,
const AdType& ad_type,
const ConfirmationType& confirmation_type,
bool success,
const TransactionInfo& transaction) const;
void FailedToProcessDeposit(const std::string& creative_instance_id,
const AdType& ad_type,
const ConfirmationType& confirmation_type) const;
@@ -85,6 +94,7 @@ class Account final : public PrefManagerObserver,
void WalletDidUpdate(const WalletInfo& wallet) const;
void WalletDidChange(const WalletInfo& wallet) const;
void OnRewardsReset(bool success) const;
void MaybeResetIssuersAndConfirmations();
@@ -5,6 +5,10 @@
#include "bat/ads/internal/account/account_util.h"
#include <utility>
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "bat/ads/internal/account/confirmations/confirmation_util.h"
#include "bat/ads/internal/account/transactions/transactions.h"
#include "bat/ads/internal/ads_client_helper.h"
@@ -17,18 +21,20 @@ bool ShouldRewardUser() {
return AdsClientHelper::GetInstance()->GetBooleanPref(prefs::kEnabled);
}
void ResetRewards(const ResetRewardsCallback& callback) {
transactions::RemoveAll([callback](const bool success) {
if (!success) {
BLOG(0, "Failed to remove transactions");
callback(/*success*/ false);
return;
}
void ResetRewards(ResetRewardsCallback callback) {
transactions::RemoveAll(base::BindOnce(
[](ResetRewardsCallback callback, const bool success) {
if (!success) {
BLOG(0, "Failed to remove transactions");
std::move(callback).Run(/*success*/ false);
return;
}
ResetConfirmations();
ResetConfirmations();
callback(/*success*/ true);
});
std::move(callback).Run(/*success*/ true);
},
std::move(callback)));
}
} // namespace ads
@@ -6,15 +6,15 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_ACCOUNT_UTIL_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_ACCOUNT_UTIL_H_
#include <functional>
#include "base/functional/callback_forward.h"
namespace ads {
using ResetRewardsCallback = std::function<void(const bool)>;
using ResetRewardsCallback = base::OnceCallback<void(const bool)>;
bool ShouldRewardUser();
void ResetRewards(const ResetRewardsCallback& callback);
void ResetRewards(ResetRewardsCallback callback);
} // namespace ads
@@ -64,7 +64,7 @@ TEST_F(BatAdsAccountUtilTest, ResetRewards) {
privacy::GetUnblindedPaymentTokens()->AddTokens(unblinded_payment_tokens);
// Act
ResetRewards([](const bool success) {
ResetRewards(base::BindOnce([](const bool success) {
ASSERT_TRUE(success);
const database::table::Transactions database_table;
@@ -79,7 +79,7 @@ TEST_F(BatAdsAccountUtilTest, ResetRewards) {
EXPECT_TRUE(failed_confirmations.empty());
EXPECT_TRUE(privacy::UnblindedPaymentTokensIsEmpty());
});
}));
// Assert
}
@@ -88,7 +88,7 @@ TEST_F(BatAdsAccountUtilTest, ResetRewardsWithNoState) {
// Arrange
// Act
ResetRewards([](const bool success) {
ResetRewards(base::BindOnce([](const bool success) {
ASSERT_TRUE(success);
const database::table::Transactions database_table;
@@ -103,7 +103,7 @@ TEST_F(BatAdsAccountUtilTest, ResetRewardsWithNoState) {
EXPECT_TRUE(failed_confirmations.empty());
EXPECT_TRUE(privacy::UnblindedPaymentTokensIsEmpty());
});
}));
// Assert
}
@@ -8,6 +8,8 @@
#include <utility>
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/values.h"
#include "bat/ads/internal/account/user_data/build_channel_user_data.h"
#include "bat/ads/internal/account/user_data/catalog_user_data.h"
@@ -40,22 +42,27 @@ void ConfirmationUserDataBuilder::Build(
UserDataBuilderCallback callback) const {
user_data::GetConversion(
creative_instance_id_, confirmation_type_,
[=](base::Value::Dict user_data) {
user_data.Merge(user_data::GetBuildChannel());
user_data.Merge(user_data::GetCatalog());
user_data.Merge(user_data::GetCreatedAtTimestamp(created_at_));
user_data.Merge(user_data::GetDiagnosticId());
user_data.Merge(user_data::GetLocale());
user_data.Merge(user_data::GetMutated());
user_data.Merge(user_data::GetOdyssey());
user_data.Merge(user_data::GetPlatform());
user_data.Merge(user_data::GetRotatingHash(creative_instance_id_));
user_data.Merge(user_data::GetStudies());
user_data.Merge(user_data::GetSystemTimestamp());
user_data.Merge(user_data::GetVersionNumber());
base::BindOnce(&ConfirmationUserDataBuilder::OnGetConversion,
base::Unretained(this), std::move(callback)));
}
callback(user_data);
});
void ConfirmationUserDataBuilder::OnGetConversion(
UserDataBuilderCallback callback,
base::Value::Dict user_data) const {
user_data.Merge(user_data::GetBuildChannel());
user_data.Merge(user_data::GetCatalog());
user_data.Merge(user_data::GetCreatedAtTimestamp(created_at_));
user_data.Merge(user_data::GetDiagnosticId());
user_data.Merge(user_data::GetLocale());
user_data.Merge(user_data::GetMutated());
user_data.Merge(user_data::GetOdyssey());
user_data.Merge(user_data::GetPlatform());
user_data.Merge(user_data::GetRotatingHash(creative_instance_id_));
user_data.Merge(user_data::GetStudies());
user_data.Merge(user_data::GetSystemTimestamp());
user_data.Merge(user_data::GetVersionNumber());
std::move(callback).Run(user_data);
}
} // namespace ads
@@ -23,6 +23,9 @@ class ConfirmationUserDataBuilder final : public UserDataBuilderInterface {
void Build(UserDataBuilderCallback callback) const override;
private:
void OnGetConversion(UserDataBuilderCallback callback,
base::Value::Dict user_data) const;
base::Time created_at_;
std::string creative_instance_id_;
ConfirmationType confirmation_type_ = ConfirmationType::kUndefined;
@@ -5,6 +5,7 @@
#include <string>
#include "base/functional/bind.h"
#include "base/json/json_writer.h"
#include "base/values.h"
#include "bat/ads/internal/account/confirmations/confirmation_user_data_builder.h"
@@ -56,14 +57,15 @@ TEST_F(BatAdsConfirmationUserDataBuilderTest,
// Assert
const ConfirmationUserDataBuilder user_data_builder(
Now(), kCreativeInstanceId, ConfirmationType::kViewed);
user_data_builder.Build([](const base::Value::Dict& user_data) {
user_data_builder.Build(base::BindOnce([](const base::Value::Dict&
user_data) {
std::string json;
ASSERT_TRUE(base::JSONWriter::Write(user_data, &json));
const std::string pattern =
R"~({"buildChannel":"release","catalog":\[{"id":"29e5c8bc0ba319069980bb390d8e8f9b58c05a20"}],"countryCode":"US","createdAtTimestamp":"2020-11-18T12:00:00.000Z","mutated":true,"odyssey":"host","platform":"windows","rotating_hash":"p3QDOuQ3HakWNXLBZCP8dktH\+zyu7FsHpKONKhWliJE=","studies":\[],"systemTimestamp":"2020-11-18T12:00:00.000Z","versionNumber":"\d{1,}\.\d{1,}\.\d{1,}\.\d{1,}"})~";
EXPECT_TRUE(RE2::FullMatch(json, pattern));
});
}));
}
TEST_F(BatAdsConfirmationUserDataBuilderTest,
@@ -89,14 +91,15 @@ TEST_F(BatAdsConfirmationUserDataBuilderTest,
// Assert
const ConfirmationUserDataBuilder user_data_builder(
Now(), kCreativeInstanceId, ConfirmationType::kConversion);
user_data_builder.Build([](const base::Value::Dict& user_data) {
user_data_builder.Build(base::BindOnce([](const base::Value::Dict&
user_data) {
std::string json;
ASSERT_TRUE(base::JSONWriter::Write(user_data, &json));
const std::string pattern =
R"~({"buildChannel":"release","catalog":\[{"id":"29e5c8bc0ba319069980bb390d8e8f9b58c05a20"}],"conversionEnvelope":{"alg":"crypto_box_curve25519xsalsa20poly1305","ciphertext":"(.{64})","epk":"(.{44})","nonce":"(.{32})"},"countryCode":"US","createdAtTimestamp":"2020-11-18T12:00:00.000Z","mutated":true,"odyssey":"host","platform":"windows","rotating_hash":"p3QDOuQ3HakWNXLBZCP8dktH\+zyu7FsHpKONKhWliJE=","studies":\[],"systemTimestamp":"2020-11-18T12:00:00.000Z","versionNumber":"\d{1,}\.\d{1,}\.\d{1,}\.\d{1,}"})~";
EXPECT_TRUE(RE2::FullMatch(json, pattern));
});
}));
}
} // namespace ads
@@ -94,18 +94,9 @@ void Confirmations::Confirm(const TransactionInfo& transaction) {
const ConfirmationUserDataBuilder user_data_builder(
created_at, transaction.creative_instance_id,
transaction.confirmation_type);
user_data_builder.Build([=](const base::Value::Dict& user_data) {
const absl::optional<ConfirmationInfo> confirmation = CreateConfirmation(
token_generator_, created_at, transaction.id,
transaction.creative_instance_id, transaction.confirmation_type,
transaction.ad_type, user_data);
if (!confirmation) {
BLOG(0, "Failed to confirm confirmation");
return;
}
redeem_unblinded_token_->Redeem(*confirmation);
});
user_data_builder.Build(
base::BindOnce(&Confirmations::CreateConfirmationAndRedeemToken,
base::Unretained(this), transaction, created_at));
}
void Confirmations::ProcessRetryQueue() {
@@ -153,26 +144,35 @@ void Confirmations::StopRetrying() {
retry_timer_.Stop();
}
void Confirmations::CreateConfirmationAndRedeemToken(
const TransactionInfo& transaction,
const base::Time& created_at,
const base::Value::Dict& user_data) {
const absl::optional<ConfirmationInfo> confirmation = CreateConfirmation(
token_generator_, created_at, transaction.id,
transaction.creative_instance_id, transaction.confirmation_type,
transaction.ad_type, user_data);
if (!confirmation) {
BLOG(0, "Failed to confirm confirmation");
return;
}
redeem_unblinded_token_->Redeem(*confirmation);
}
void Confirmations::CreateNewConfirmationAndAppendToRetryQueue(
const ConfirmationInfo& confirmation) {
DCHECK(IsValid(confirmation));
const ConfirmationInfo& confirmation,
const base::Value::Dict& user_data) {
const absl::optional<ConfirmationInfo> new_confirmation = CreateConfirmation(
token_generator_, confirmation.created_at, confirmation.transaction_id,
confirmation.creative_instance_id, confirmation.type,
confirmation.ad_type, user_data);
if (!new_confirmation) {
AppendToRetryQueue(confirmation);
return;
}
const ConfirmationUserDataBuilder user_data_builder(
confirmation.created_at, confirmation.creative_instance_id,
confirmation.type);
user_data_builder.Build([=](const base::Value::Dict& user_data) {
const absl::optional<ConfirmationInfo> new_confirmation =
CreateConfirmation(token_generator_, confirmation.created_at,
confirmation.transaction_id,
confirmation.creative_instance_id, confirmation.type,
confirmation.ad_type, user_data);
if (!new_confirmation) {
AppendToRetryQueue(confirmation);
return;
}
AppendToRetryQueue(*new_confirmation);
});
AppendToRetryQueue(*new_confirmation);
}
void Confirmations::OnDidSendConfirmation(
@@ -234,9 +234,16 @@ void Confirmations::OnFailedToRedeemUnblindedToken(
const ConfirmationInfo& confirmation,
const bool should_retry,
const bool should_backoff) {
DCHECK(IsValid(confirmation));
if (should_retry) {
if (!confirmation.was_created) {
CreateNewConfirmationAndAppendToRetryQueue(confirmation);
const ConfirmationUserDataBuilder user_data_builder(
confirmation.created_at, confirmation.creative_instance_id,
confirmation.type);
user_data_builder.Build(base::BindOnce(
&Confirmations::CreateNewConfirmationAndAppendToRetryQueue,
base::Unretained(this), confirmation));
} else {
AppendToRetryQueue(confirmation);
}
@@ -9,6 +9,7 @@
#include <memory>
#include "base/memory/raw_ptr.h"
#include "base/values.h"
#include "bat/ads/internal/account/confirmations/confirmations_delegate.h"
#include "bat/ads/internal/account/utility/redeem_unblinded_token/redeem_unblinded_token_delegate.h"
#include "bat/ads/internal/common/timer/backoff_timer.h"
@@ -49,8 +50,13 @@ class Confirmations final : public RedeemUnblindedTokenDelegate {
void OnRetry();
void StopRetrying();
void CreateConfirmationAndRedeemToken(const TransactionInfo& transaction,
const base::Time& created_at,
const base::Value::Dict& user_data);
void CreateNewConfirmationAndAppendToRetryQueue(
const ConfirmationInfo& confirmation);
const ConfirmationInfo& confirmation,
const base::Value::Dict& user_data);
// RedeemUnblindedTokenDelegate:
void OnDidSendConfirmation(const ConfirmationInfo& confirmation) override;
@@ -5,7 +5,11 @@
#include "bat/ads/internal/account/deposits/cash_deposit.h"
#include <utility>
#include "absl/types/optional.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "bat/ads/internal/account/deposits/deposit_info.h"
#include "bat/ads/internal/account/deposits/deposits_database_table.h"
@@ -16,20 +20,22 @@ void CashDeposit::GetValue(const std::string& creative_instance_id,
const database::table::Deposits database_table;
database_table.GetForCreativeInstanceId(
creative_instance_id,
[callback](const bool success,
const absl::optional<DepositInfo>& deposit) {
if (!success) {
callback(/*success */ false, /* value*/ 0.0);
return;
}
base::BindOnce(
[](GetDepositCallback callback, const bool success,
const absl::optional<DepositInfo>& deposit) {
if (!success) {
std::move(callback).Run(/*success */ false, /* value*/ 0.0);
return;
}
if (!deposit) {
callback(/*success */ false, /* value*/ 0.0);
return;
}
if (!deposit) {
std::move(callback).Run(/*success */ false, /* value*/ 0.0);
return;
}
callback(/*success*/ true, deposit->value);
});
std::move(callback).Run(/*success*/ true, deposit->value);
},
std::move(callback)));
}
} // namespace ads
@@ -5,6 +5,7 @@
#include "bat/ads/internal/account/deposits/cash_deposit.h"
#include "base/functional/bind.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
#include "bat/ads/internal/common/unittest/unittest_mock_util.h"
#include "net/http/http_status_code.h"
@@ -42,10 +43,10 @@ TEST_F(BatAdsCashDepositIntegrationTest, GetValue) {
// Assert
deposit.GetValue(kCreativeInstanceId,
[](const bool success, const double value) {
base::BindOnce([](const bool success, const double value) {
EXPECT_TRUE(success);
EXPECT_EQ(1.0, value);
});
}));
}
TEST_F(BatAdsCashDepositIntegrationTest,
@@ -57,10 +58,10 @@ TEST_F(BatAdsCashDepositIntegrationTest,
// Assert
deposit.GetValue(kMissingCreativeInstanceId,
[](const bool success, const double value) {
base::BindOnce([](const bool success, const double value) {
EXPECT_FALSE(success);
EXPECT_EQ(0.0, value);
});
}));
}
} // namespace ads
@@ -6,12 +6,13 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_DEPOSITS_DEPOSIT_INTERFACE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_DEPOSITS_DEPOSIT_INTERFACE_H_
#include <functional>
#include <string>
#include "base/functional/callback_forward.h"
namespace ads {
using GetDepositCallback = std::function<void(const bool, const double)>;
using GetDepositCallback = base::OnceCallback<void(const bool, const double)>;
class DepositInterface {
public:
@@ -63,17 +63,17 @@ DepositInfo GetFromRecord(mojom::DBRecordInfo* record) {
}
void OnGetForCreativeInstanceId(const std::string& /*creative_instance_id*/,
const GetDepositsCallback& callback,
GetDepositsCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get deposit value");
callback(/*success*/ false, absl::nullopt);
std::move(callback).Run(/*success*/ false, absl::nullopt);
return;
}
if (response->result->get_records().empty()) {
callback(/*success*/ true, absl::nullopt);
std::move(callback).Run(/*success*/ true, absl::nullopt);
return;
}
@@ -81,7 +81,7 @@ void OnGetForCreativeInstanceId(const std::string& /*creative_instance_id*/,
std::move(response->result->get_records().front());
DepositInfo deposit = GetFromRecord(record.get());
callback(/*success*/ true, std::move(deposit));
std::move(callback).Run(/*success*/ true, std::move(deposit));
}
void MigrateToV24(mojom::DBTransactionInfo* transaction) {
@@ -149,7 +149,7 @@ void Deposits::InsertOrUpdate(mojom::DBTransactionInfo* transaction,
void Deposits::GetForCreativeInstanceId(const std::string& creative_instance_id,
GetDepositsCallback callback) const {
if (creative_instance_id.empty()) {
callback(/*success*/ false, absl::nullopt);
std::move(callback).Run(/*success*/ false, absl::nullopt);
return;
}
@@ -177,8 +177,9 @@ void Deposits::GetForCreativeInstanceId(const std::string& creative_instance_id,
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetForCreativeInstanceId,
creative_instance_id, callback));
std::move(transaction),
base::BindOnce(&OnGetForCreativeInstanceId, creative_instance_id,
std::move(callback)));
}
void Deposits::PurgeExpired(ResultCallback callback) const {
@@ -6,10 +6,10 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_DEPOSITS_DEPOSITS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_DEPOSITS_DEPOSITS_DATABASE_TABLE_H_
#include <functional>
#include <string>
#include "absl/types/optional.h"
#include "base/functional/callback_forward.h"
#include "bat/ads/ads_client_callback.h"
#include "bat/ads/internal/account/deposits/deposit_info.h"
#include "bat/ads/internal/creatives/creative_ad_info.h"
@@ -19,8 +19,8 @@
namespace ads::database::table {
using GetDepositsCallback =
std::function<void(const bool success,
const absl::optional<DepositInfo>& deposit)>;
base::OnceCallback<void(const bool success,
const absl::optional<DepositInfo>& deposit)>;
class Deposits final : public TableInterface {
public:
@@ -5,11 +5,15 @@
#include "bat/ads/internal/account/deposits/non_cash_deposit.h"
#include <utility>
#include "base/functional/callback.h"
namespace ads {
void NonCashDeposit::GetValue(const std::string& /*creative_instance_id*/,
GetDepositCallback callback) {
callback(/*success */ true, /* value*/ 0.0);
std::move(callback).Run(/*success */ true, /* value*/ 0.0);
}
} // namespace ads
@@ -5,6 +5,7 @@
#include "bat/ads/internal/account/deposits/non_cash_deposit.h"
#include "base/functional/bind.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
// npm run test -- brave_unit_tests --filter=BatAds*
@@ -23,10 +24,10 @@ TEST_F(BatAdsNonCashDepositTest, GetValue) {
// Act
deposit.GetValue(kCreativeInstanceId,
[](const bool success, const double value) {
base::BindOnce([](const bool success, const double value) {
EXPECT_TRUE(success);
EXPECT_EQ(0.0, value);
});
}));
// Assert
}
@@ -39,16 +39,16 @@ TransactionInfo Add(const std::string& creative_instance_id,
database_table.Save(
{transaction},
base::BindOnce(
[](const AddCallback& callback, const TransactionInfo& transaction,
[](AddCallback callback, const TransactionInfo& transaction,
const bool success) {
if (!success) {
callback(/*success*/ false, {});
std::move(callback).Run(/*success*/ false, {});
return;
}
callback(/*success*/ true, transaction);
std::move(callback).Run(/*success*/ true, transaction);
},
callback, transaction));
std::move(callback), transaction));
return transaction;
}
@@ -75,15 +75,15 @@ void GetForDateRange(const base::Time from_time,
void RemoveAll(RemoveAllCallback callback) {
const database::table::Transactions database_table;
database_table.Delete(base::BindOnce(
[](const RemoveAllCallback& callback, const bool success) {
[](RemoveAllCallback callback, const bool success) {
if (!success) {
callback(/*success*/ false);
std::move(callback).Run(/*success*/ false);
return;
}
callback(/*success*/ true);
std::move(callback).Run(/*success*/ true);
},
callback));
std::move(callback)));
}
} // namespace ads::transactions
@@ -6,7 +6,6 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_TRANSACTIONS_TRANSACTIONS_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_TRANSACTIONS_TRANSACTIONS_H_
#include <functional>
#include <string>
#include "base/functional/callback_forward.h"
@@ -24,12 +23,12 @@ class ConfirmationType;
namespace transactions {
using AddCallback =
std::function<void(const bool, const TransactionInfo& transaction)>;
base::OnceCallback<void(const bool, const TransactionInfo& transaction)>;
using GetCallback =
base::OnceCallback<void(const bool, const TransactionList&)>;
using RemoveAllCallback = std::function<void(const bool)>;
using RemoveAllCallback = base::OnceCallback<void(const bool)>;
TransactionInfo Add(const std::string& creative_instance_id,
double value,
@@ -7,6 +7,7 @@
#include <utility>
#include "base/functional/bind.h"
#include "bat/ads/internal/account/transactions/transaction_info.h"
#include "bat/ads/internal/account/transactions/transactions_unittest_util.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
@@ -25,9 +26,10 @@ TEST_F(BatAdsTransactionsTest, Add) {
const TransactionInfo transaction = transactions::Add(
"42a33833-0a08-4cbb-ab3e-458e020221ab", 0.01, AdType::kNotificationAd,
ConfirmationType::kViewed,
[](const bool success, const TransactionInfo& /*transaction*/) {
ASSERT_TRUE(success);
});
base::BindOnce(
[](const bool success, const TransactionInfo& /*transaction*/) {
ASSERT_TRUE(success);
}));
// Assert
TransactionList expected_transactions = {transaction};
@@ -96,7 +98,8 @@ TEST_F(BatAdsTransactionsTest, RemoveAll) {
SaveTransactions(transactions);
// Act
transactions::RemoveAll([](const bool success) { ASSERT_TRUE(success); });
transactions::RemoveAll(
base::BindOnce([](const bool success) { ASSERT_TRUE(success); }));
// Assert
transactions::GetForDateRange(
@@ -5,7 +5,10 @@
#include "bat/ads/internal/account/user_data/conversion_user_data.h"
#include <utility>
#include "base/check_op.h"
#include "base/functional/callback.h"
#include "bat/ads/confirmation_type.h"
#include "bat/ads/internal/account/user_data/conversion_user_data_builder.h"
@@ -13,19 +16,22 @@ namespace ads::user_data {
void GetConversion(const std::string& creative_instance_id,
const ConfirmationType& confirmation_type,
const ConversionCallback& callback) {
ConversionCallback callback) {
DCHECK(!creative_instance_id.empty());
DCHECK_NE(ConfirmationType::kUndefined, confirmation_type.value());
if (confirmation_type != ConfirmationType::kConversion) {
callback(base::Value::Dict());
std::move(callback).Run(base::Value::Dict());
return;
}
builder::BuildConversion(creative_instance_id,
[callback](const base::Value::Dict& user_data) {
callback(user_data.Clone());
});
builder::BuildConversion(
creative_instance_id,
base::BindOnce(
[](ConversionCallback callback, base::Value::Dict user_data) {
std::move(callback).Run(user_data.Clone());
},
std::move(callback)));
}
} // namespace ads::user_data
@@ -6,22 +6,21 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_USER_DATA_CONVERSION_USER_DATA_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_USER_DATA_CONVERSION_USER_DATA_H_
#include <functional>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/values.h"
namespace ads {
class ConfirmationType;
namespace user_data {
using ConversionCallback = std::function<void(base::Value::Dict)>;
using ConversionCallback = base::OnceCallback<void(base::Value::Dict)>;
void GetConversion(const std::string& creative_instance_id,
const ConfirmationType& confirmation_type,
const ConversionCallback& callback);
ConversionCallback callback);
} // namespace user_data
} // namespace ads
@@ -9,6 +9,8 @@
#include "absl/types/optional.h"
#include "base/check.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "bat/ads/internal/account/user_data/conversion_user_data_util.h"
#include "bat/ads/internal/conversions/conversion_queue_database_table.h"
#include "bat/ads/internal/conversions/conversion_queue_item_info.h"
@@ -25,56 +27,60 @@ constexpr char kEphemeralPublicKeyKey[] = "epk";
constexpr char kNonceKey[] = "nonce";
constexpr char kConversionEnvelopeKey[] = "conversionEnvelope";
void ReportConversionDoesNotExist(const BuildConversionCallback& callback) {
callback(base::Value::Dict());
void ReportConversionDoesNotExist(BuildConversionCallback callback) {
std::move(callback).Run(base::Value::Dict());
}
} // namespace
void BuildConversion(const std::string& creative_instance_id,
const BuildConversionCallback& callback) {
BuildConversionCallback callback) {
DCHECK(!creative_instance_id.empty());
const database::table::ConversionQueue database_table;
database_table.GetForCreativeInstanceId(
creative_instance_id,
[callback](const bool success,
const std::string& /*creative_instance_id*/,
const ConversionQueueItemList& conversion_queue_items) {
if (!success) {
ReportConversionDoesNotExist(callback);
return;
}
base::BindOnce(
[](BuildConversionCallback callback, const bool success,
const std::string& /*creative_instance_id*/,
const ConversionQueueItemList& conversion_queue_items) {
if (!success) {
ReportConversionDoesNotExist(std::move(callback));
return;
}
if (conversion_queue_items.empty()) {
ReportConversionDoesNotExist(callback);
return;
}
if (conversion_queue_items.empty()) {
ReportConversionDoesNotExist(std::move(callback));
return;
}
const ConversionQueueItemInfo& conversion_queue_item =
conversion_queue_items.front();
const absl::optional<security::VerifiableConversionEnvelopeInfo>
verifiable_conversion_envelope = GetEnvelope(conversion_queue_item);
if (!verifiable_conversion_envelope) {
ReportConversionDoesNotExist(callback);
return;
}
const ConversionQueueItemInfo& conversion_queue_item =
conversion_queue_items.front();
const absl::optional<security::VerifiableConversionEnvelopeInfo>
verifiable_conversion_envelope =
GetEnvelope(conversion_queue_item);
if (!verifiable_conversion_envelope) {
ReportConversionDoesNotExist(std::move(callback));
return;
}
base::Value::Dict conversion_envelope;
conversion_envelope.Set(kAlgorithmKey, kAlgorithm);
conversion_envelope.Set(kCipherTextKey,
verifiable_conversion_envelope->ciphertext);
conversion_envelope.Set(
kEphemeralPublicKeyKey,
verifiable_conversion_envelope->ephemeral_public_key);
conversion_envelope.Set(kNonceKey,
verifiable_conversion_envelope->nonce);
base::Value::Dict conversion_envelope;
conversion_envelope.Set(kAlgorithmKey, kAlgorithm);
conversion_envelope.Set(kCipherTextKey,
verifiable_conversion_envelope->ciphertext);
conversion_envelope.Set(
kEphemeralPublicKeyKey,
verifiable_conversion_envelope->ephemeral_public_key);
conversion_envelope.Set(kNonceKey,
verifiable_conversion_envelope->nonce);
base::Value::Dict user_data;
user_data.Set(kConversionEnvelopeKey, std::move(conversion_envelope));
base::Value::Dict user_data;
user_data.Set(kConversionEnvelopeKey,
std::move(conversion_envelope));
callback(std::move(user_data));
});
std::move(callback).Run(std::move(user_data));
},
std::move(callback)));
}
} // namespace ads::user_data::builder
@@ -6,17 +6,17 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_USER_DATA_CONVERSION_USER_DATA_BUILDER_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_USER_DATA_CONVERSION_USER_DATA_BUILDER_H_
#include <functional>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/values.h"
namespace ads::user_data::builder {
using BuildConversionCallback = std::function<void(base::Value::Dict)>;
using BuildConversionCallback = base::OnceCallback<void(base::Value::Dict)>;
void BuildConversion(const std::string& creative_instance_id,
const BuildConversionCallback& callback);
BuildConversionCallback callback);
} // namespace ads::user_data::builder
@@ -6,6 +6,7 @@
#include "bat/ads/internal/account/user_data/conversion_user_data_builder.h"
#include "absl/types/optional.h"
#include "base/functional/bind.h"
#include "base/test/values_test_util.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
#include "bat/ads/internal/conversions/conversion_queue_item_unittest_util.h"
@@ -40,15 +41,16 @@ TEST_F(BatAdsConversionUserDataBuilderTest, BuildConversion) {
BuildAndSaveConversionQueueItem(kConversionId, kAdvertiserPublicKey);
// Act
BuildConversion(kCreativeInstanceId, [](base::Value::Dict user_data) {
const absl::optional<std::string> message =
security::OpenEnvelopeForUserDataAndAdvertiserSecretKey(
user_data, kAdvertiserSecretKey);
ASSERT_TRUE(message);
BuildConversion(kCreativeInstanceId,
base::BindOnce([](base::Value::Dict user_data) {
const absl::optional<std::string> message =
security::OpenEnvelopeForUserDataAndAdvertiserSecretKey(
user_data, kAdvertiserSecretKey);
ASSERT_TRUE(message);
const std::string expected_message = kConversionId;
EXPECT_EQ(expected_message, *message);
});
const std::string expected_message = kConversionId;
EXPECT_EQ(expected_message, *message);
}));
// Assert
}
@@ -59,13 +61,15 @@ TEST_F(BatAdsConversionUserDataBuilderTest,
BuildAndSaveConversionQueueItem(kConversionId, kAdvertiserPublicKey);
// Act
BuildConversion(kMissingCreativeInstanceId, [](base::Value::Dict user_data) {
// Assert
const base::Value expected_user_data = base::test::ParseJson("{}");
ASSERT_TRUE(expected_user_data.is_dict());
BuildConversion(kMissingCreativeInstanceId,
base::BindOnce([](base::Value::Dict user_data) {
// Assert
const base::Value expected_user_data =
base::test::ParseJson("{}");
ASSERT_TRUE(expected_user_data.is_dict());
EXPECT_EQ(expected_user_data, user_data);
});
EXPECT_EQ(expected_user_data, user_data);
}));
// Assert
}
@@ -77,13 +81,14 @@ TEST_F(BatAdsConversionUserDataBuilderTest,
kEmptyAdvertiserPublicKey);
// Act
BuildConversion(kCreativeInstanceId, [](base::Value::Dict user_data) {
// Assert
const base::Value expected_user_data = base::test::ParseJson("{}");
ASSERT_TRUE(expected_user_data.is_dict());
BuildConversion(
kCreativeInstanceId, base::BindOnce([](base::Value::Dict user_data) {
// Assert
const base::Value expected_user_data = base::test::ParseJson("{}");
ASSERT_TRUE(expected_user_data.is_dict());
EXPECT_EQ(expected_user_data, user_data);
});
EXPECT_EQ(expected_user_data, user_data);
}));
// Assert
}
@@ -6,6 +6,7 @@
#include "bat/ads/internal/account/user_data/conversion_user_data.h"
#include "absl/types/optional.h"
#include "base/functional/bind.h"
#include "bat/ads/confirmation_type.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
#include "bat/ads/internal/conversions/conversion_queue_item_unittest_util.h"
@@ -34,12 +35,12 @@ TEST_F(BatAdsConversionUserDataTest, GetForConversionConfirmationType) {
// Act
GetConversion(
kCreativeInstanceId, ConfirmationType::kConversion,
[](base::Value::Dict user_data) {
base::BindOnce([](base::Value::Dict user_data) {
const absl::optional<security::VerifiableConversionEnvelopeInfo>
verifiable_conversion_envelope =
security::GetVerifiableConversionEnvelopeForUserData(user_data);
ASSERT_TRUE(verifiable_conversion_envelope);
});
}));
// Assert
}
@@ -51,12 +52,12 @@ TEST_F(BatAdsConversionUserDataTest, DoNotGetForNonConversionConfirmationType) {
// Act
GetConversion(
kCreativeInstanceId, ConfirmationType::kViewed,
[](base::Value::Dict user_data) {
base::BindOnce([](base::Value::Dict user_data) {
const absl::optional<security::VerifiableConversionEnvelopeInfo>
verifiable_conversion_envelope =
security::GetVerifiableConversionEnvelopeForUserData(user_data);
ASSERT_FALSE(verifiable_conversion_envelope);
});
}));
// Assert
}
@@ -6,13 +6,13 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_USER_DATA_USER_DATA_BUILDER_INTERFACE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ACCOUNT_USER_DATA_USER_DATA_BUILDER_INTERFACE_H_
#include <functional>
#include "base/functional/callback_forward.h"
#include "base/values.h"
namespace ads {
using UserDataBuilderCallback = std::function<void(const base::Value::Dict&)>;
using UserDataBuilderCallback =
base::OnceCallback<void(const base::Value::Dict&)>;
class UserDataBuilderInterface {
public:
@@ -8,6 +8,7 @@
#include <cstdint>
#include <utility>
#include "base/functional/bind.h"
#include "base/time/time.h"
#include "base/values.h"
#include "bat/ads/internal/account/utility/redeem_unblinded_payment_tokens/redeem_unblinded_payment_tokens_url_request_builder.h"
@@ -119,18 +120,27 @@ void RedeemUnblindedPaymentTokens::Redeem() {
const RedeemUnblindedPaymentTokensUserDataBuilder user_data_builder(
unblinded_payment_tokens);
user_data_builder.Build([=](const base::Value::Dict& user_data) {
RedeemUnblindedPaymentTokensUrlRequestBuilder url_request_builder(
wallet_, unblinded_payment_tokens, user_data);
mojom::UrlRequestInfoPtr url_request = url_request_builder.Build();
BLOG(6, UrlRequestToString(url_request));
BLOG(7, UrlRequestHeadersToString(url_request));
user_data_builder.Build(
base::BindOnce(&RedeemUnblindedPaymentTokens::
OnRedeemUnblindedPaymentTokensUserDataBuilt,
base::Unretained(this)));
}
AdsClientHelper::GetInstance()->UrlRequest(
std::move(url_request),
base::BindOnce(&RedeemUnblindedPaymentTokens::OnRedeem,
base::Unretained(this), unblinded_payment_tokens));
});
void RedeemUnblindedPaymentTokens::OnRedeemUnblindedPaymentTokensUserDataBuilt(
const base::Value::Dict& user_data) {
const privacy::UnblindedPaymentTokenList& unblinded_payment_tokens =
privacy::GetAllUnblindedPaymentTokens();
RedeemUnblindedPaymentTokensUrlRequestBuilder url_request_builder(
wallet_, unblinded_payment_tokens, user_data);
mojom::UrlRequestInfoPtr url_request = url_request_builder.Build();
BLOG(6, UrlRequestToString(url_request));
BLOG(7, UrlRequestHeadersToString(url_request));
AdsClientHelper::GetInstance()->UrlRequest(
std::move(url_request),
base::BindOnce(&RedeemUnblindedPaymentTokens::OnRedeem,
base::Unretained(this), unblinded_payment_tokens));
}
void RedeemUnblindedPaymentTokens::OnRedeem(
@@ -8,6 +8,7 @@
#include "base/check_op.h"
#include "base/memory/raw_ptr.h"
#include "base/values.h"
#include "bat/ads/internal/account/utility/redeem_unblinded_payment_tokens/redeem_unblinded_payment_tokens_delegate.h"
#include "bat/ads/internal/account/wallet/wallet_info.h"
#include "bat/ads/internal/common/timer/backoff_timer.h"
@@ -42,6 +43,8 @@ class RedeemUnblindedPaymentTokens final {
private:
void Redeem();
void OnRedeemUnblindedPaymentTokensUserDataBuilt(
const base::Value::Dict& user_data);
void OnRedeem(
const privacy::UnblindedPaymentTokenList& unblinded_payment_tokens,
const mojom::UrlResponseInfo& url_response);
@@ -8,6 +8,8 @@
#include <vector>
#include "base/check.h"
#include "base/functional/bind.h"
#include "base/strings/stringprintf.h"
#include "bat/ads/internal/account/utility/redeem_unblinded_payment_tokens/redeem_unblinded_payment_tokens_user_data_builder.h"
#include "bat/ads/internal/account/wallet/wallet_info.h"
#include "bat/ads/internal/account/wallet/wallet_unittest_util.h"
@@ -25,6 +27,41 @@ namespace ads {
namespace {
constexpr char kExpectedUrlRequestContent[] =
R"({"odyssey":"%s","payload":"{\"paymentId\":\"27a39b2f-9b2e-4eb0-bbb2-)"
R"(2f84447496e7\"}","paymentCredentials":[{"confirmationType":"view","cred)"
R"(ential":{"signature":"wQXvy7chZlrrVCe/RYIiL/siGUFYF0tCxx7M0xIOPvThR4TCB)"
R"(wmH9IDWQKyqQy9g2wUw5jcKszqBHEhPyidrlA==","t":"PLowz2WF2eGD5zfwZjk9p76HX)"
R"(BLDKMq/3EAZHeG/fE2XGQ48jyte+Ve50ZlasOuYL5mwA8CU2aFMlJrt3DDgCw=="},"publ)"
R"(icKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationTy)"
R"(pe":"view","credential":{"signature":"AemGBdoUXbp25pGZJuWv6yiImtfXC4Atb)"
R"(oJMGR1Z6nQm178ier7hLJDVCJ11HWEO1UdlAYFRrJqyuD5uUBxgug==","t":"hfrMEltWL)"
R"(uzbKQ02Qixh5C/DWiJbdOoaGaidKZ7Mv+cRq5fyxJqemE/MPlARPhl6NgXPHUeyaxzd6/Lk)"
R"(6YHlfQ=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},)"
R"({"confirmationType":"view","credential":{"signature":"krVZeadk/ElvsaYiU)"
R"(E4Ma/hkicRDjvS8O7QVkrWl0n2zsGYyAa/hodVb1aDn8tT3CMOV/l1JZdTVSXHrSHBHGg==)"
R"(","t":"bbpQ1DcxfDA+ycNg9WZvIwinjO0GKnCon1UFxDLoDOLZVnKG3ufruNZi/n8dO+G2)"
R"(AkTiWkUKbi78xCyKsqsXnA=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7g)"
R"(fRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"1)"
R"(HwlWbhUewzvEWfGlOhmEo8x4FR3w82iRan+ZyBl1h3laOiXTVHXe5EraDiUd3G6bZlLJ+x9)"
R"(snDXPcd4wI5tpA==","t":"OlDIXpWRR1/B+1pjPbLyc5sx0V+d7QzQb4NDGUI6F676jy8t)"
R"(L++u57SF4DQhvdEpBrKID+j27RLrbjsecXSjRw=="},"publicKey":"RJ2i/o/pZkrH+i0)"
R"(aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential")"
R"(:{"signature":"c9wbOwh7xT3Fx89HKh6D4isUU8ki9vTq+1MR81bRyPWCv0lDHYchd7Kk)"
R"(9EFtz3qNip4nZpSDUDDqV5Gu3ac2DA==","t":"Y579V5BUcCzAFj6qNX7YnIr+DvH0mugb)"
R"(/nnY5UINdjxziyDJlejJwi0kPaRGmqbVT3+B51lpErt8e66z0jTbAw=="},"publicKey":)"
R"("RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"vi)"
R"(ew","credential":{"signature":"PW8G57q6/hoj0GzBoiRPilmPyWSYrFfOpJJ9I0tL)"
R"(sNfNF+DNOASnBoRpUy6nGJLX1vWcJnUQGGVr9hfwBNTGfg==","t":"+MPQfSo6UcaZNWtf)"
R"(mbd5je9UIr+FVrCWHl6I5C1ZFD7y7bjP/yz7flTjV+l5mKulbCvsRna7++MhbBz6iC0FvQ=)"
R"(="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confi)"
R"(rmationType":"view","credential":{"signature":"Rn9mRKy6B0Sysx6+y3scWE+Z)"
R"(E6EWVA/pYTp1XqOLFZH3IVVh+WnIVP/FNA7GuexDmVaq8/an8+9Gv7puKpQPWA==","t":")"
R"(CRXUzo7S0X//u0RGsO534vCoIbrsXgbzLfWw8CLML0CkgMltEGxM6XwBTICl4dqqfhIcLhD)"
R"(0f1WFod7JpuEkjw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdN)"
R"(RnDDk="}],"platform":"windows","totals":[{"ad_format":"ad_notification")"
R"(,"view":"7"}]})";
privacy::UnblindedPaymentTokenList GetUnblindedPaymentTokens(const int count) {
const std::vector<std::string> unblinded_payment_tokens_base64 = {
R"(PLowz2WF2eGD5zfwZjk9p76HXBLDKMq/3EAZHeG/fE2XGQ48jyte+Ve50ZlasOuYL5mwA8CU2aFMlJrt3DDgC3B1+VD/uyHPfa/+bwYRrpVH5YwNSDEydVx8S4r+BYVY)",
@@ -38,7 +75,7 @@ privacy::UnblindedPaymentTokenList GetUnblindedPaymentTokens(const int count) {
R"(6tKJHOtQqpNzFjLGT0gvXlCF0GGKrqQlK82e2tc7gJvQkorg60Y21jEAg8JHbU8D3mBK/riZCILoi1cPCiBDAdhWJNVm003mZ0ShjmbESnKhL/NxRv/0/PB3GQ5iydoc)",
R"(ujGlRHnz+UF0h8i6gYDnfeZDUj7qZZz6o29ZJFa3XN2g+yVXgRTws1yv6RAtLCr39OQso6FAT12o8GAvHVEzmRqyzm2XU9gMK5WrNtT/fhr8gQ9RvupdznGKOqmVbuIc)"};
const int modulo = unblinded_payment_tokens_base64.size();
const size_t modulo = unblinded_payment_tokens_base64.size();
privacy::UnblindedPaymentTokenList unblinded_payment_tokens;
for (int i = 0; i < count; i++) {
@@ -86,12 +123,14 @@ TEST_F(BatAdsRedeemUnblindedPaymentTokensUrlRequestBuilderTest,
unblinded_payment_tokens);
// Act
user_data_builder.Build([&unblinded_payment_tokens](
const base::Value::Dict& user_data) {
RedeemUnblindedPaymentTokensUrlRequestBuilder url_request_builder(
GetWalletForTesting(), unblinded_payment_tokens, user_data);
user_data_builder.Build(base::BindOnce(
[](const privacy::UnblindedPaymentTokenList& unblinded_payment_tokens,
const base::Value::Dict& user_data) {
RedeemUnblindedPaymentTokensUrlRequestBuilder url_request_builder(
GetWalletForTesting(), unblinded_payment_tokens, user_data);
const mojom::UrlRequestInfoPtr url_request = url_request_builder.Build();
const mojom::UrlRequestInfoPtr url_request =
url_request_builder.Build();
mojom::UrlRequestInfoPtr expected_url_request =
mojom::UrlRequestInfo::New();
@@ -102,12 +141,13 @@ TEST_F(BatAdsRedeemUnblindedPaymentTokensUrlRequestBuilderTest,
"Via: 1.1 brave, 1.1 ads-serve.brave.com (Apache/1.1)",
"accept: application/json"};
expected_url_request->content =
R"({"odyssey":"guest","payload":"{\"paymentId\":\"27a39b2f-9b2e-4eb0-bbb2-2f84447496e7\"}","paymentCredentials":[{"confirmationType":"view","credential":{"signature":"H9HPNdEVJBvc9d8RZig/Gihlrcgug/n/rRaAJzeZI20gKPCivIj9Ig8StvqMSc5GfgLrBaJDibwBghnhRhqYRQ==","t":"PLowz2WF2eGD5zfwZjk9p76HXBLDKMq/3EAZHeG/fE2XGQ48jyte+Ve50ZlasOuYL5mwA8CU2aFMlJrt3DDgCw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"mfv+HJP5K/q9ogcGwD4uqOd98sb2fx96h+QnsdtGwJ4wdZfvrukbP4whyz46Ro3gm2FIMhPWZ5wM2Hhg9OGPtg==","t":"hfrMEltWLuzbKQ02Qixh5C/DWiJbdOoaGaidKZ7Mv+cRq5fyxJqemE/MPlARPhl6NgXPHUeyaxzd6/Lk6YHlfQ=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"acj3J7aaf/rN/uleCnaGTOzNceo9m9Dz/2D1+NDIVN4MnZG2BF1hYl5qHY/VRZNh5/uhnRbqgsuPn6SXvaTXVA==","t":"bbpQ1DcxfDA+ycNg9WZvIwinjO0GKnCon1UFxDLoDOLZVnKG3ufruNZi/n8dO+G2AkTiWkUKbi78xCyKsqsXnA=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"zETc7kPZQhzNaufsUiBHiBtnwEhk3oQYUh5HZeNbTOiHvm5pAzNl/TuR/fjQcusN5EqH7e1B+ycsO5CeF5FmAw==","t":"OlDIXpWRR1/B+1pjPbLyc5sx0V+d7QzQb4NDGUI6F676jy8tL++u57SF4DQhvdEpBrKID+j27RLrbjsecXSjRw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"d1oVe9XnwRs7bNcMzxp+/q7zL5hDHLD13f4tazz79a+ImszJfVRYIcf1fxvc7d2Pstciu1i11jRYGUWIDttYVg==","t":"Y579V5BUcCzAFj6qNX7YnIr+DvH0mugb/nnY5UINdjxziyDJlejJwi0kPaRGmqbVT3+B51lpErt8e66z0jTbAw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"rQkn3xdJu/GFfkGUREqvV69lQNQWsa5a9RQIXaig7CQtlS/PVLsUvM6plG4IeboK0E6gR8Do5Gg40OK59/ZyUQ==","t":"+MPQfSo6UcaZNWtfmbd5je9UIr+FVrCWHl6I5C1ZFD7y7bjP/yz7flTjV+l5mKulbCvsRna7++MhbBz6iC0FvQ=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"GohmRsNFp8Vd47PB5MzgFvM7o/8XjkY+9gjCOJY/MAcpmLBgoS6v373A0Tvkq3T/t0z9GYM0yrs6LikJggwnmg==","t":"CRXUzo7S0X//u0RGsO534vCoIbrsXgbzLfWw8CLML0CkgMltEGxM6XwBTICl4dqqfhIcLhD0f1WFod7JpuEkjw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="}],"platform":"windows","totals":[{"ad_format":"ad_notification","view":"7"}]})";
base::StringPrintf(kExpectedUrlRequestContent, "guest");
expected_url_request->content_type = "application/json";
expected_url_request->method = mojom::UrlRequestMethodType::kPut;
EXPECT_EQ(url_request, expected_url_request);
});
EXPECT_EQ(url_request, expected_url_request);
},
unblinded_payment_tokens));
// Assert
}
@@ -129,12 +169,14 @@ TEST_F(BatAdsRedeemUnblindedPaymentTokensUrlRequestBuilderTest,
unblinded_payment_tokens);
// Act
user_data_builder.Build([&unblinded_payment_tokens](
const base::Value::Dict& user_data) {
RedeemUnblindedPaymentTokensUrlRequestBuilder url_request_builder(
GetWalletForTesting(), unblinded_payment_tokens, user_data);
user_data_builder.Build(base::BindOnce(
[](const privacy::UnblindedPaymentTokenList& unblinded_payment_tokens,
const base::Value::Dict& user_data) {
RedeemUnblindedPaymentTokensUrlRequestBuilder url_request_builder(
GetWalletForTesting(), unblinded_payment_tokens, user_data);
const mojom::UrlRequestInfoPtr url_request = url_request_builder.Build();
const mojom::UrlRequestInfoPtr url_request =
url_request_builder.Build();
mojom::UrlRequestInfoPtr expected_url_request =
mojom::UrlRequestInfo::New();
@@ -145,12 +187,13 @@ TEST_F(BatAdsRedeemUnblindedPaymentTokensUrlRequestBuilderTest,
"Via: 1.0 brave, 1.1 ads-serve.brave.com (Apache/1.1)",
"accept: application/json"};
expected_url_request->content =
R"({"odyssey":"host","payload":"{\"paymentId\":\"27a39b2f-9b2e-4eb0-bbb2-2f84447496e7\"}","paymentCredentials":[{"confirmationType":"view","credential":{"signature":"H9HPNdEVJBvc9d8RZig/Gihlrcgug/n/rRaAJzeZI20gKPCivIj9Ig8StvqMSc5GfgLrBaJDibwBghnhRhqYRQ==","t":"PLowz2WF2eGD5zfwZjk9p76HXBLDKMq/3EAZHeG/fE2XGQ48jyte+Ve50ZlasOuYL5mwA8CU2aFMlJrt3DDgCw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"mfv+HJP5K/q9ogcGwD4uqOd98sb2fx96h+QnsdtGwJ4wdZfvrukbP4whyz46Ro3gm2FIMhPWZ5wM2Hhg9OGPtg==","t":"hfrMEltWLuzbKQ02Qixh5C/DWiJbdOoaGaidKZ7Mv+cRq5fyxJqemE/MPlARPhl6NgXPHUeyaxzd6/Lk6YHlfQ=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"acj3J7aaf/rN/uleCnaGTOzNceo9m9Dz/2D1+NDIVN4MnZG2BF1hYl5qHY/VRZNh5/uhnRbqgsuPn6SXvaTXVA==","t":"bbpQ1DcxfDA+ycNg9WZvIwinjO0GKnCon1UFxDLoDOLZVnKG3ufruNZi/n8dO+G2AkTiWkUKbi78xCyKsqsXnA=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"zETc7kPZQhzNaufsUiBHiBtnwEhk3oQYUh5HZeNbTOiHvm5pAzNl/TuR/fjQcusN5EqH7e1B+ycsO5CeF5FmAw==","t":"OlDIXpWRR1/B+1pjPbLyc5sx0V+d7QzQb4NDGUI6F676jy8tL++u57SF4DQhvdEpBrKID+j27RLrbjsecXSjRw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"d1oVe9XnwRs7bNcMzxp+/q7zL5hDHLD13f4tazz79a+ImszJfVRYIcf1fxvc7d2Pstciu1i11jRYGUWIDttYVg==","t":"Y579V5BUcCzAFj6qNX7YnIr+DvH0mugb/nnY5UINdjxziyDJlejJwi0kPaRGmqbVT3+B51lpErt8e66z0jTbAw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"rQkn3xdJu/GFfkGUREqvV69lQNQWsa5a9RQIXaig7CQtlS/PVLsUvM6plG4IeboK0E6gR8Do5Gg40OK59/ZyUQ==","t":"+MPQfSo6UcaZNWtfmbd5je9UIr+FVrCWHl6I5C1ZFD7y7bjP/yz7flTjV+l5mKulbCvsRna7++MhbBz6iC0FvQ=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="},{"confirmationType":"view","credential":{"signature":"GohmRsNFp8Vd47PB5MzgFvM7o/8XjkY+9gjCOJY/MAcpmLBgoS6v373A0Tvkq3T/t0z9GYM0yrs6LikJggwnmg==","t":"CRXUzo7S0X//u0RGsO534vCoIbrsXgbzLfWw8CLML0CkgMltEGxM6XwBTICl4dqqfhIcLhD0f1WFod7JpuEkjw=="},"publicKey":"RJ2i/o/pZkrH+i0aGEMY1G9FXtd7Q7gfRi3YdNRnDDk="}],"platform":"windows","totals":[{"ad_format":"ad_notification","view":"7"}]})";
base::StringPrintf(kExpectedUrlRequestContent, "host");
expected_url_request->content_type = "application/json";
expected_url_request->method = mojom::UrlRequestMethodType::kPut;
EXPECT_EQ(url_request, expected_url_request);
});
EXPECT_EQ(url_request, expected_url_request);
},
unblinded_payment_tokens));
// Assert
}
@@ -7,6 +7,7 @@
#include <utility>
#include "base/functional/callback.h"
#include "base/values.h"
#include "bat/ads/internal/account/user_data/odyssey_user_data.h"
#include "bat/ads/internal/account/user_data/platform_user_data.h"
@@ -29,7 +30,7 @@ void RedeemUnblindedPaymentTokensUserDataBuilder::Build(
user_data.Merge(user_data::GetPlatform());
user_data.Merge(user_data::GetTotals(unblinded_payment_tokens_));
callback(user_data);
std::move(callback).Run(user_data);
}
} // namespace ads
@@ -5,6 +5,7 @@
#include "bat/ads/internal/account/utility/redeem_unblinded_payment_tokens/redeem_unblinded_payment_tokens_user_data_builder.h"
#include "base/functional/bind.h"
#include "base/test/values_test_util.h"
#include "base/values.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
@@ -32,13 +33,14 @@ TEST_F(BatAdsRedeemUnblindedPaymentTokensUserDataBuilderTest, BuildUserData) {
unblinded_payment_tokens);
// Act
user_data_builder.Build([](const base::Value::Dict& user_data) {
user_data_builder.Build(base::BindOnce([](const base::Value::Dict&
user_data) {
const base::Value expected_user_data = base::test::ParseJson(
R"({"odyssey":"host","platform":"windows","totals":[{"ad_format":"ad_notification","view":"2"}]})");
ASSERT_TRUE(expected_user_data.is_dict());
EXPECT_EQ(expected_user_data, user_data);
});
}));
// Assert
}
@@ -82,20 +82,21 @@ void PurgeOrphanedAdEvents(const mojom::AdType ad_type,
void RebuildAdEventHistoryFromDatabase() {
const database::table::AdEvents database_table;
database_table.GetAll([](const bool success, const AdEventList& ad_events) {
if (!success) {
BLOG(1, "Failed to get ad events");
return;
}
database_table.GetAll(
base::BindOnce([](const bool success, const AdEventList& ad_events) {
if (!success) {
BLOG(1, "Failed to get ad events");
return;
}
const std::string& id = GetInstanceId();
const std::string& id = GetInstanceId();
AdsClientHelper::GetInstance()->ResetAdEventHistoryForId(id);
AdsClientHelper::GetInstance()->ResetAdEventHistoryForId(id);
for (const auto& ad_event : ad_events) {
RecordAdEvent(ad_event);
}
});
for (const auto& ad_event : ad_events) {
RecordAdEvent(ad_event);
}
}));
}
void RecordAdEvent(const AdEventInfo& ad_event) {
@@ -6,7 +6,6 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_AD_EVENTS_AD_EVENTS_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_AD_EVENTS_AD_EVENTS_H_
#include <functional>
#include <vector>
#include "base/functional/callback.h"
@@ -196,7 +196,7 @@ void AdEvents::LogEvent(const AdEventInfo& ad_event, ResultCallback callback) {
}
void AdEvents::GetIf(const std::string& condition,
const GetAdEventsCallbackDeprecated& callback) const {
GetAdEventsCallback callback) const {
const std::string query = base::StringPrintf(
"SELECT "
"ae.uuid, "
@@ -212,15 +212,10 @@ void AdEvents::GetIf(const std::string& condition,
"ORDER BY timestamp DESC ",
GetTableName().c_str(), condition.c_str());
RunTransaction(
query,
base::BindOnce(
[](const GetAdEventsCallbackDeprecated& callback, const bool success,
const AdEventList& ad_events) { callback(success, ad_events); },
callback));
RunTransaction(query, std::move(callback));
}
void AdEvents::GetAll(const GetAdEventsCallbackDeprecated& callback) const {
void AdEvents::GetAll(GetAdEventsCallback callback) const {
const std::string query = base::StringPrintf(
"SELECT "
"ae.uuid, "
@@ -235,22 +230,7 @@ void AdEvents::GetAll(const GetAdEventsCallbackDeprecated& callback) const {
"ORDER BY timestamp DESC",
GetTableName().c_str());
RunTransaction(
query,
base::BindOnce(
[](const GetAdEventsCallbackDeprecated& callback, const bool success,
const AdEventList& ad_events) { callback(success, ad_events); },
callback));
}
void AdEvents::GetForType(const mojom::AdType ad_type,
const GetAdEventsCallbackDeprecated& callback) const {
GetForType(ad_type, base::BindOnce(
[](const GetAdEventsCallbackDeprecated& callback,
const bool success, const AdEventList& ad_events) {
callback(success, ad_events);
},
callback));
RunTransaction(query, std::move(callback));
}
void AdEvents::GetForType(const mojom::AdType ad_type,
@@ -6,7 +6,6 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_AD_EVENTS_AD_EVENTS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_AD_EVENTS_AD_EVENTS_DATABASE_TABLE_H_
#include <functional>
#include <string>
#include "base/functional/callback.h"
@@ -17,9 +16,6 @@
namespace ads::database::table {
using GetAdEventsCallbackDeprecated =
std::function<void(const bool, const AdEventList&)>;
using GetAdEventsCallback =
base::OnceCallback<void(const bool, const AdEventList&)>;
@@ -27,13 +23,9 @@ class AdEvents final : public TableInterface {
public:
void LogEvent(const AdEventInfo& ad_event, ResultCallback callback);
void GetIf(const std::string& condition,
const GetAdEventsCallbackDeprecated& callback) const;
void GetIf(const std::string& condition, GetAdEventsCallback callback) const;
void GetAll(const GetAdEventsCallbackDeprecated& callback) const;
void GetForType(mojom::AdType ad_type,
const GetAdEventsCallbackDeprecated& callback) const;
void GetAll(GetAdEventsCallback callback) const;
void GetForType(mojom::AdType ad_type, GetAdEventsCallback callback) const;
@@ -6,8 +6,8 @@
#include "bat/ads/internal/ads/ad_events/inline_content_ads/inline_content_ad_event_handler.h"
#include "base/check.h"
#include "base/functional/bind.h"
#include "bat/ads/inline_content_ad_info.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/ads/ad_events/ad_event_util.h"
#include "bat/ads/internal/ads/ad_events/ad_events_database_table.h"
#include "bat/ads/internal/ads/ad_events/inline_content_ads/inline_content_ad_event_factory.h"
@@ -108,25 +108,31 @@ void EventHandler::FireEvent(const std::string& placement_id,
const database::table::CreativeInlineContentAds database_table;
database_table.GetForCreativeInstanceId(
creative_instance_id,
[=](const bool success, const std::string& creative_instance_id,
const CreativeInlineContentAdInfo& creative_ad) {
if (!success) {
BLOG(1,
"Failed to fire inline content ad event due to missing creative "
"instance id "
<< creative_instance_id);
return FailedToFireEvent(placement_id, creative_instance_id,
event_type);
}
const InlineContentAdInfo ad =
BuildInlineContentAd(creative_ad, placement_id);
FireEvent(ad, event_type);
});
base::BindOnce(&EventHandler::OnGetForCreativeInstanceId,
base::Unretained(this), placement_id, event_type));
}
///////////////////////////////////////////////////////////////////////////////
void EventHandler::OnGetForCreativeInstanceId(
const std::string& placement_id,
const mojom::InlineContentAdEventType event_type,
const bool success,
const std::string& creative_instance_id,
const CreativeInlineContentAdInfo& creative_ad) {
if (!success) {
BLOG(1,
"Failed to fire inline content ad event due to missing creative "
"instance id "
<< creative_instance_id);
return FailedToFireEvent(placement_id, creative_instance_id, event_type);
}
const InlineContentAdInfo ad =
BuildInlineContentAd(creative_ad, placement_id);
FireEvent(ad, event_type);
}
void EventHandler::FireEvent(const InlineContentAdInfo& ad,
const mojom::InlineContentAdEventType event_type) {
DCHECK(mojom::IsKnownEnumValue(event_type));
@@ -134,35 +140,41 @@ void EventHandler::FireEvent(const InlineContentAdInfo& ad,
const database::table::AdEvents database_table;
database_table.GetForType(
mojom::AdType::kInlineContentAd,
[=](const bool success, const AdEventList& ad_events) {
if (!success) {
BLOG(1, "Inline content ad: Failed to get ad events");
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
base::BindOnce(&EventHandler::OnGetAdEvents, base::Unretained(this), ad,
event_type));
}
if (!WasAdServed(ad, ad_events, event_type)) {
BLOG(1,
"Inline content ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
void EventHandler::OnGetAdEvents(
const InlineContentAdInfo& ad,
const mojom::InlineContentAdEventType event_type,
const bool success,
const AdEventList& ad_events) {
if (!success) {
BLOG(1, "Inline content ad: Failed to get ad events");
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "Inline content ad: Not allowed as debounced "
<< event_type << " event for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
if (!WasAdServed(ad, ad_events, event_type)) {
BLOG(1,
"Inline content ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
const auto ad_event = AdEventFactory::Build(event_type);
ad_event->FireEvent(ad);
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "Inline content ad: Not allowed as debounced "
<< event_type << " event for placement id " << ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
NotifyInlineContentAdEvent(ad, event_type);
});
const auto ad_event = AdEventFactory::Build(event_type);
ad_event->FireEvent(ad);
NotifyInlineContentAdEvent(ad, event_type);
}
void EventHandler::FailedToFireEvent(
@@ -9,15 +9,16 @@
#include <string>
#include "base/observer_list.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/ads/ad_events/inline_content_ads/inline_content_ad_event_handler_observer.h"
#include "bat/ads/public/interfaces/ads.mojom-shared.h"
namespace ads {
struct CreativeInlineContentAdInfo;
struct InlineContentAdInfo;
namespace inline_content_ads {
class EventHandler final : public EventHandlerObserver {
public:
EventHandler();
@@ -38,8 +39,19 @@ class EventHandler final : public EventHandlerObserver {
mojom::InlineContentAdEventType event_type);
private:
void OnGetForCreativeInstanceId(
const std::string& placement_id,
mojom::InlineContentAdEventType event_type,
bool success,
const std::string& creative_instance_id,
const CreativeInlineContentAdInfo& creative_ad);
void FireEvent(const InlineContentAdInfo& ad,
mojom::InlineContentAdEventType event_type);
void OnGetAdEvents(const InlineContentAdInfo& ad,
mojom::InlineContentAdEventType event_type,
bool success,
const AdEventList& ad_events);
void FailedToFireEvent(const std::string& placement_id,
const std::string& creative_instance_id,
mojom::InlineContentAdEventType event_type) const;
@@ -6,8 +6,8 @@
#include "bat/ads/internal/ads/ad_events/new_tab_page_ads/new_tab_page_ad_event_handler.h"
#include "base/check.h"
#include "base/functional/bind.h"
#include "bat/ads/internal/account/account_util.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/ads/ad_events/ad_event_util.h"
#include "bat/ads/internal/ads/ad_events/ad_events_database_table.h"
#include "bat/ads/internal/ads/ad_events/new_tab_page_ads/new_tab_page_ad_event_factory.h"
@@ -118,25 +118,30 @@ void EventHandler::FireEvent(const std::string& placement_id,
const database::table::CreativeNewTabPageAds database_table;
database_table.GetForCreativeInstanceId(
creative_instance_id,
[=](const bool success, const std::string& creative_instance_id,
const CreativeNewTabPageAdInfo& creative_ad) {
if (!success) {
BLOG(1,
"Failed to fire new tab page ad event due to missing creative "
"instance id "
<< creative_instance_id);
return FailedToFireEvent(placement_id, creative_instance_id,
event_type);
}
const NewTabPageAdInfo ad =
BuildNewTabPageAd(creative_ad, placement_id);
FireEvent(ad, event_type);
});
base::BindOnce(&EventHandler::OnGetForCreativeInstanceId,
base::Unretained(this), placement_id, event_type));
}
///////////////////////////////////////////////////////////////////////////////
void EventHandler::OnGetForCreativeInstanceId(
const std::string& placement_id,
const mojom::NewTabPageAdEventType event_type,
const bool success,
const std::string& creative_instance_id,
const CreativeNewTabPageAdInfo& creative_ad) {
if (!success) {
BLOG(1,
"Failed to fire new tab page ad event due to missing creative "
"instance id "
<< creative_instance_id);
return FailedToFireEvent(placement_id, creative_instance_id, event_type);
}
const NewTabPageAdInfo ad = BuildNewTabPageAd(creative_ad, placement_id);
FireEvent(ad, event_type);
}
void EventHandler::FireEvent(const NewTabPageAdInfo& ad,
const mojom::NewTabPageAdEventType event_type) {
DCHECK(mojom::IsKnownEnumValue(event_type));
@@ -144,35 +149,40 @@ void EventHandler::FireEvent(const NewTabPageAdInfo& ad,
const database::table::AdEvents database_table;
database_table.GetForType(
mojom::AdType::kNewTabPageAd,
[=](const bool success, const AdEventList& ad_events) {
if (!success) {
BLOG(1, "New tab page ad: Failed to get ad events");
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
base::BindOnce(&EventHandler::OnGetAdEvents, base::Unretained(this), ad,
event_type));
}
if (!WasAdServed(ad, ad_events, event_type)) {
BLOG(1,
"New tab page ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
void EventHandler::OnGetAdEvents(const NewTabPageAdInfo& ad,
const mojom::NewTabPageAdEventType event_type,
const bool success,
const AdEventList& ad_events) {
if (!success) {
BLOG(1, "New tab page ad: Failed to get ad events");
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "New tab page ad: Not allowed as debounced "
<< event_type << " event for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
if (!WasAdServed(ad, ad_events, event_type)) {
BLOG(1,
"New tab page ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
const auto ad_event = AdEventFactory::Build(event_type);
ad_event->FireEvent(ad);
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "New tab page ad: Not allowed as debounced "
<< event_type << " event for placement id " << ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
NotifyNewTabPageAdEvent(ad, event_type);
});
const auto ad_event = AdEventFactory::Build(event_type);
ad_event->FireEvent(ad);
NotifyNewTabPageAdEvent(ad, event_type);
}
void EventHandler::FailedToFireEvent(
@@ -9,11 +9,13 @@
#include <string>
#include "base/observer_list.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/ads/ad_events/new_tab_page_ads/new_tab_page_ad_event_handler_observer.h"
#include "bat/ads/public/interfaces/ads.mojom-shared.h"
namespace ads {
struct CreativeNewTabPageAdInfo;
struct NewTabPageAdInfo;
namespace new_tab_page_ads {
@@ -38,8 +40,18 @@ class EventHandler final : public EventHandlerObserver {
mojom::NewTabPageAdEventType event_type);
private:
void OnGetForCreativeInstanceId(const std::string& placement_id,
mojom::NewTabPageAdEventType event_type,
bool success,
const std::string& creative_instance_id,
const CreativeNewTabPageAdInfo& creative_ad);
void FireEvent(const NewTabPageAdInfo& ad,
mojom::NewTabPageAdEventType event_type);
void OnGetAdEvents(const NewTabPageAdInfo& ad,
mojom::NewTabPageAdEventType event_type,
bool success,
const AdEventList& ad_events);
void FailedToFireEvent(const std::string& placement_id,
const std::string& creative_instance_id,
mojom::NewTabPageAdEventType event_type) const;
@@ -6,7 +6,7 @@
#include "bat/ads/internal/ads/ad_events/promoted_content_ads/promoted_content_ad_event_handler.h"
#include "base/check.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "base/functional/bind.h"
#include "bat/ads/internal/ads/ad_events/ad_event_util.h"
#include "bat/ads/internal/ads/ad_events/ad_events_database_table.h"
#include "bat/ads/internal/ads/ad_events/promoted_content_ads/promoted_content_ad_event_factory.h"
@@ -117,21 +117,27 @@ void EventHandler::FireEvent(
const database::table::CreativePromotedContentAds database_table;
database_table.GetForCreativeInstanceId(
creative_instance_id,
[=](const bool success, const std::string& creative_instance_id,
const CreativePromotedContentAdInfo& creative_ad) {
if (!success) {
BLOG(1,
"Failed to fire promoted content ad event due to missing "
"creative instance id "
<< creative_instance_id);
return FailedToFireEvent(placement_id, creative_instance_id,
event_type);
}
base::BindOnce(&EventHandler::OnGetForCreativeInstanceId,
base::Unretained(this), placement_id, event_type));
}
const PromotedContentAdInfo ad =
BuildPromotedContentAd(creative_ad, placement_id);
FireEvent(ad, event_type);
});
void EventHandler::OnGetForCreativeInstanceId(
const std::string& placement_id,
const mojom::PromotedContentAdEventType event_type,
const bool success,
const std::string& creative_instance_id,
const CreativePromotedContentAdInfo& creative_ad) {
if (!success) {
BLOG(1,
"Failed to fire promoted content ad event due to missing "
"creative instance id "
<< creative_instance_id);
return FailedToFireEvent(placement_id, creative_instance_id, event_type);
}
const PromotedContentAdInfo ad =
BuildPromotedContentAd(creative_ad, placement_id);
FireEvent(ad, event_type);
}
///////////////////////////////////////////////////////////////////////////////
@@ -144,35 +150,41 @@ void EventHandler::FireEvent(
const database::table::AdEvents database_table;
database_table.GetForType(
mojom::AdType::kPromotedContentAd,
[=](const bool success, const AdEventList& ad_events) {
if (!success) {
BLOG(1, "Promoted content ad: Failed to get ad events");
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
base::BindOnce(&EventHandler::OnGetAdEvents, base::Unretained(this), ad,
event_type));
}
if (!WasAdServed(ad, ad_events, event_type)) {
BLOG(1,
"Promoted content ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
void EventHandler::OnGetAdEvents(
const PromotedContentAdInfo& ad,
const mojom::PromotedContentAdEventType event_type,
const bool success,
const AdEventList& ad_events) {
if (!success) {
BLOG(1, "Promoted content ad: Failed to get ad events");
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "Promoted content ad: Not allowed as debounced "
<< event_type << " event for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
if (!WasAdServed(ad, ad_events, event_type)) {
BLOG(1,
"Promoted content ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
const auto ad_event = AdEventFactory::Build(event_type);
ad_event->FireEvent(ad);
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "Promoted content ad: Not allowed as debounced "
<< event_type << " event for placement id " << ad.placement_id);
return FailedToFireEvent(ad.placement_id, ad.creative_instance_id,
event_type);
}
NotifyPromotedContentAdEvent(ad, event_type);
});
const auto ad_event = AdEventFactory::Build(event_type);
ad_event->FireEvent(ad);
NotifyPromotedContentAdEvent(ad, event_type);
}
void EventHandler::FailedToFireEvent(
@@ -9,11 +9,13 @@
#include <string>
#include "base/observer_list.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/ads/ad_events/promoted_content_ads/promoted_content_ad_event_handler_observer.h"
#include "bat/ads/public/interfaces/ads.mojom-shared.h"
namespace ads {
struct CreativePromotedContentAdInfo;
struct PromotedContentAdInfo;
namespace promoted_content_ads {
@@ -38,8 +40,19 @@ class EventHandler final : public EventHandlerObserver {
mojom::PromotedContentAdEventType event_type);
private:
void OnGetForCreativeInstanceId(
const std::string& placement_id,
mojom::PromotedContentAdEventType event_type,
bool success,
const std::string& creative_instance_id,
const CreativePromotedContentAdInfo& creative_ad);
void FireEvent(const PromotedContentAdInfo& ad,
mojom::PromotedContentAdEventType event_type);
void OnGetAdEvents(const PromotedContentAdInfo& ad,
mojom::PromotedContentAdEventType event_type,
bool success,
const AdEventList& ad_events);
void FailedToFireEvent(const std::string& placement_id,
const std::string& creative_instance_id,
mojom::PromotedContentAdEventType event_type) const;
@@ -9,11 +9,11 @@
#include "base/check.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "bat/ads/ad_info.h"
#include "bat/ads/internal/account/deposits/deposit_builder.h"
#include "bat/ads/internal/account/deposits/deposit_info.h"
#include "bat/ads/internal/account/deposits/deposits_database_table.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/ads/ad_events/ad_event_util.h"
#include "bat/ads/internal/ads/ad_events/ad_events_database_table.h"
#include "bat/ads/internal/ads/ad_events/search_result_ads/search_result_ad_event_factory.h"
@@ -99,7 +99,7 @@ void EventHandler::RemoveObserver(EventHandlerObserver* observer) {
void EventHandler::FireEvent(mojom::SearchResultAdInfoPtr ad_mojom,
const mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const {
FireAdEventHandlerCallback callback) const {
DCHECK(ad_mojom);
DCHECK(mojom::IsKnownEnumValue(event_type));
@@ -107,28 +107,28 @@ void EventHandler::FireEvent(mojom::SearchResultAdInfoPtr ad_mojom,
if (!ad.IsValid()) {
BLOG(1, "Failed to fire event due to an invalid search result ad");
return FailedToFireEvent(ad, event_type, callback);
return FailedToFireEvent(ad, event_type, std::move(callback));
}
if (event_type == mojom::SearchResultAdEventType::kServed &&
!PermissionRules::HasPermission()) {
BLOG(1, "Search result ad: Not allowed due to permission rules");
return FailedToFireEvent(ad, event_type, callback);
return FailedToFireEvent(ad, event_type, std::move(callback));
}
switch (event_type) {
case mojom::SearchResultAdEventType::kServed: {
FireEvent(ad, event_type, callback);
FireEvent(ad, event_type, std::move(callback));
break;
}
case mojom::SearchResultAdEventType::kViewed: {
FireViewedEvent(std::move(ad_mojom), callback);
FireViewedEvent(std::move(ad_mojom), std::move(callback));
break;
}
case mojom::SearchResultAdEventType::kClicked: {
FireClickedEvent(ad, callback);
FireClickedEvent(ad, std::move(callback));
break;
}
}
@@ -138,18 +138,17 @@ void EventHandler::FireEvent(mojom::SearchResultAdInfoPtr ad_mojom,
void EventHandler::FireEvent(const SearchResultAdInfo& ad,
const mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const {
FireAdEventHandlerCallback callback) const {
DCHECK(mojom::IsKnownEnumValue(event_type));
const auto ad_event = AdEventFactory::Build(event_type);
ad_event->FireEvent(ad);
NotifySearchResultAdEvent(ad, event_type, callback);
NotifySearchResultAdEvent(ad, event_type, std::move(callback));
}
void EventHandler::FireViewedEvent(
mojom::SearchResultAdInfoPtr ad_mojom,
const FireAdEventHandlerCallback& callback) const {
void EventHandler::FireViewedEvent(mojom::SearchResultAdInfoPtr ad_mojom,
FireAdEventHandlerCallback callback) const {
DCHECK(ad_mojom);
const DepositInfo deposit = BuildDeposit(ad_mojom);
@@ -158,11 +157,11 @@ void EventHandler::FireViewedEvent(
deposits_database_table.Save(
deposit,
base::BindOnce(&EventHandler::OnSaveDeposits, base::Unretained(this),
std::move(ad_mojom), callback));
std::move(ad_mojom), std::move(callback)));
}
void EventHandler::OnSaveDeposits(mojom::SearchResultAdInfoPtr ad_mojom,
const FireAdEventHandlerCallback& callback,
FireAdEventHandlerCallback callback,
const bool success) const {
DCHECK(ad_mojom);
@@ -171,7 +170,7 @@ void EventHandler::OnSaveDeposits(mojom::SearchResultAdInfoPtr ad_mojom,
if (!success) {
BLOG(0, "Failed to save deposits state");
return FailedToFireEvent(ad, mojom::SearchResultAdEventType::kViewed,
callback);
std::move(callback));
}
BLOG(3, "Successfully saved deposits state");
@@ -183,17 +182,18 @@ void EventHandler::OnSaveDeposits(mojom::SearchResultAdInfoPtr ad_mojom,
database::table::Conversions conversion_database_table;
conversion_database_table.Save(
conversions, base::BindOnce(&EventHandler::OnSaveConversions,
base::Unretained(this), ad, callback));
conversions,
base::BindOnce(&EventHandler::OnSaveConversions, base::Unretained(this),
ad, std::move(callback)));
}
void EventHandler::OnSaveConversions(const SearchResultAdInfo& ad,
const FireAdEventHandlerCallback& callback,
FireAdEventHandlerCallback callback,
const bool success) const {
if (!success) {
BLOG(0, "Failed to save conversions state");
return FailedToFireEvent(ad, mojom::SearchResultAdEventType::kViewed,
callback);
std::move(callback));
}
BLOG(3, "Successfully saved conversions state");
@@ -201,47 +201,60 @@ void EventHandler::OnSaveConversions(const SearchResultAdInfo& ad,
const database::table::AdEvents database_table;
database_table.GetForType(
mojom::AdType::kSearchResultAd,
[=](const bool success, const AdEventList& ad_events) {
const mojom::SearchResultAdEventType event_type =
mojom::SearchResultAdEventType::kViewed;
if (!success) {
BLOG(1, "Search result ad: Failed to get ad events");
return FailedToFireEvent(ad, event_type, callback);
}
if (!WasAdServed(ad, ad_events, event_type)) {
BLOG(1,
"Search result ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad, event_type, callback);
}
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "Search result ad: Not allowed as debounced "
<< event_type << " event for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad, event_type, callback);
}
FireEvent(ad, event_type, callback);
});
base::BindOnce(&EventHandler::OnGetAdEventsForViewedSearchResultAd,
base::Unretained(this), ad, std::move(callback)));
}
void EventHandler::FireClickedEvent(
void EventHandler::OnGetAdEventsForViewedSearchResultAd(
const SearchResultAdInfo& ad,
const FireAdEventHandlerCallback& callback) const {
FireAdEventHandlerCallback callback,
const bool success,
const AdEventList& ad_events) const {
const mojom::SearchResultAdEventType event_type =
mojom::SearchResultAdEventType::kViewed;
if (!success) {
BLOG(1, "Search result ad: Failed to get ad events");
return FailedToFireEvent(ad, event_type, std::move(callback));
}
if (!WasAdServed(ad, ad_events, event_type)) {
BLOG(1,
"Search result ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad, event_type, std::move(callback));
}
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "Search result ad: Not allowed as debounced "
<< event_type << " event for placement id " << ad.placement_id);
return FailedToFireEvent(ad, event_type, std::move(callback));
}
FireEvent(ad, event_type, std::move(callback));
}
void EventHandler::FireClickedEvent(const SearchResultAdInfo& ad,
FireAdEventHandlerCallback callback) const {
const database::table::AdEvents database_table;
database_table.GetForType(
mojom::AdType::kSearchResultAd,
[=](const bool success, const AdEventList& ad_events) {
const mojom::SearchResultAdEventType event_type =
mojom::SearchResultAdEventType::kClicked;
base::BindOnce(&EventHandler::OnGetAdEventsForClickedSearchResultAd,
base::Unretained(this), ad, std::move(callback)));
}
void EventHandler::OnGetAdEventsForClickedSearchResultAd(
const SearchResultAdInfo& ad,
FireAdEventHandlerCallback callback,
const bool success,
const AdEventList& ad_events) const {
const mojom::SearchResultAdEventType event_type =
mojom::SearchResultAdEventType::kClicked;
if (!success) {
BLOG(1, "Search result ad: Failed to get ad events");
return FailedToFireEvent(ad, event_type, callback);
return FailedToFireEvent(ad, event_type, std::move(callback));
}
if (!WasAdServed(ad, ad_events, event_type)) {
@@ -249,37 +262,36 @@ void EventHandler::FireClickedEvent(
"Search result ad: Not allowed because an ad was not served "
"for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad, event_type, callback);
return FailedToFireEvent(ad, event_type, std::move(callback));
}
if (ShouldDebounceAdEvent(ad, ad_events, event_type)) {
BLOG(1, "Search result ad: Not allowed as debounced "
<< event_type << " event for placement id "
<< ad.placement_id);
return FailedToFireEvent(ad, event_type, callback);
return FailedToFireEvent(ad, event_type, std::move(callback));
}
FireEvent(ad, event_type, callback);
});
FireEvent(ad, event_type, std::move(callback));
}
void EventHandler::FailedToFireEvent(
const SearchResultAdInfo& ad,
const mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const {
FireAdEventHandlerCallback callback) const {
DCHECK(mojom::IsKnownEnumValue(event_type));
BLOG(1, "Failed to fire search result ad "
<< event_type << " event for placement_id " << ad.placement_id
<< " and creative instance id " << ad.creative_instance_id);
NotifySearchResultAdEventFailed(ad, event_type, callback);
NotifySearchResultAdEventFailed(ad, event_type, std::move(callback));
}
void EventHandler::NotifySearchResultAdEvent(
const SearchResultAdInfo& ad,
const mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const {
FireAdEventHandlerCallback callback) const {
DCHECK(mojom::IsKnownEnumValue(event_type));
switch (event_type) {
@@ -299,7 +311,7 @@ void EventHandler::NotifySearchResultAdEvent(
}
}
callback(/*success*/ true, ad.placement_id, event_type);
std::move(callback).Run(/*success*/ true, ad.placement_id, event_type);
}
void EventHandler::NotifySearchResultAdServed(
@@ -326,14 +338,14 @@ void EventHandler::NotifySearchResultAdClicked(
void EventHandler::NotifySearchResultAdEventFailed(
const SearchResultAdInfo& ad,
const mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const {
FireAdEventHandlerCallback callback) const {
DCHECK(mojom::IsKnownEnumValue(event_type));
for (EventHandlerObserver& observer : observers_) {
observer.OnSearchResultAdEventFailed(ad, event_type);
}
callback(/*success*/ false, ad.placement_id, event_type);
std::move(callback).Run(/*success*/ false, ad.placement_id, event_type);
}
} // namespace ads::search_result_ads
@@ -6,10 +6,11 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_AD_EVENTS_SEARCH_RESULT_ADS_SEARCH_RESULT_AD_EVENT_HANDLER_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_AD_EVENTS_SEARCH_RESULT_ADS_SEARCH_RESULT_AD_EVENT_HANDLER_H_
#include <functional>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/observer_list.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/ads/ad_events/search_result_ads/search_result_ad_event_handler_observer.h"
#include "bat/ads/public/interfaces/ads.mojom-forward.h"
#include "bat/ads/public/interfaces/ads.mojom-shared.h"
@@ -20,10 +21,8 @@ struct SearchResultAdInfo;
namespace search_result_ads {
using FireAdEventHandlerCallback =
std::function<void(const bool,
const std::string&,
const mojom::SearchResultAdEventType event_type)>;
using FireAdEventHandlerCallback = base::OnceCallback<
void(const bool, const std::string&, const mojom::SearchResultAdEventType)>;
class EventHandler final : public EventHandlerObserver {
public:
@@ -42,40 +41,48 @@ class EventHandler final : public EventHandlerObserver {
void FireEvent(mojom::SearchResultAdInfoPtr ad_mojom,
mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const;
FireAdEventHandlerCallback callback) const;
private:
void FireEvent(const SearchResultAdInfo& ad,
mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const;
FireAdEventHandlerCallback callback) const;
void FireViewedEvent(mojom::SearchResultAdInfoPtr ad_mojom,
const FireAdEventHandlerCallback& callback) const;
FireAdEventHandlerCallback callback) const;
void OnSaveDeposits(mojom::SearchResultAdInfoPtr ad_mojom,
const FireAdEventHandlerCallback& callback,
FireAdEventHandlerCallback callback,
bool success) const;
void OnSaveConversions(const SearchResultAdInfo& ad,
const FireAdEventHandlerCallback& callback,
FireAdEventHandlerCallback callback,
bool success) const;
void OnGetAdEventsForViewedSearchResultAd(const SearchResultAdInfo& ad,
FireAdEventHandlerCallback callback,
bool success,
const AdEventList& ad_events) const;
void FireClickedEvent(const SearchResultAdInfo& ad,
const FireAdEventHandlerCallback& callback) const;
FireAdEventHandlerCallback callback) const;
void OnGetAdEventsForClickedSearchResultAd(
const SearchResultAdInfo& ad,
FireAdEventHandlerCallback callback,
bool success,
const AdEventList& ad_events) const;
void FailedToFireEvent(const SearchResultAdInfo& ad,
mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const;
FireAdEventHandlerCallback callback) const;
void NotifySearchResultAdEvent(
const SearchResultAdInfo& ad,
mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const;
void NotifySearchResultAdEvent(const SearchResultAdInfo& ad,
mojom::SearchResultAdEventType event_type,
FireAdEventHandlerCallback callback) const;
void NotifySearchResultAdServed(const SearchResultAdInfo& ad) const;
void NotifySearchResultAdViewed(const SearchResultAdInfo& ad) const;
void NotifySearchResultAdClicked(const SearchResultAdInfo& ad) const;
void NotifySearchResultAdEventFailed(
const SearchResultAdInfo& ad,
mojom::SearchResultAdEventType event_type,
const FireAdEventHandlerCallback& callback) const;
FireAdEventHandlerCallback callback) const;
base::ObserverList<EventHandlerObserver> observers_;
};
@@ -10,6 +10,7 @@
#include <utility>
#include "absl/types/optional.h"
#include "base/functional/bind.h"
#include "bat/ads/internal/account/deposits/deposit_info.h"
#include "bat/ads/internal/account/deposits/deposits_database_table.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
@@ -75,21 +76,24 @@ void ExpectDepositExistsForCreativeInstanceId(
const database::table::Deposits database_table;
database_table.GetForCreativeInstanceId(
creative_instance_id,
[](const bool success, const absl::optional<DepositInfo>& deposit) {
ASSERT_TRUE(success);
base::BindOnce(
[](const bool success, const absl::optional<DepositInfo>& deposit) {
ASSERT_TRUE(success);
EXPECT_TRUE(deposit);
});
EXPECT_TRUE(deposit);
}));
}
void ExpectConversionCountEquals(const size_t expected_count) {
const database::table::Conversions database_table;
database_table.GetAll(
[expected_count](const bool success, const ConversionList& conversions) {
database_table.GetAll(base::BindOnce(
[](const size_t expected_count, const bool success,
const ConversionList& conversions) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_count, conversions.size());
});
},
expected_count));
}
} // namespace
@@ -114,8 +118,8 @@ class BatAdsSearchResultAdEventHandlerTest : public EventHandlerObserver,
const mojom::SearchResultAdEventType event_type) {
event_handler_->FireEvent(
std::move(ad_mojom), event_type,
[](const bool success, const std::string& placement_id,
const mojom::SearchResultAdEventType event_type) {});
base::BindOnce([](const bool success, const std::string& placement_id,
const mojom::SearchResultAdEventType event_type) {}));
}
void OnSearchResultAdServed(const SearchResultAdInfo& ad) override {
@@ -9,6 +9,7 @@
#include <utility>
#include "base/check.h"
#include "base/functional/bind.h"
#include "bat/ads/confirmation_type.h"
#include "bat/ads/history_item_info.h"
#include "bat/ads/internal/account/account.h"
@@ -52,10 +53,10 @@ void SearchResultAd::TriggerEvent(
event_handler_->FireEvent(
std::move(ad_mojom), event_type,
[](const bool success, const std::string& placement_id,
const mojom::SearchResultAdEventType event_type) {
base::BindOnce([](const bool success, const std::string& placement_id,
const mojom::SearchResultAdEventType event_type) {
// Intentionally do nothing.
});
}));
}
// static
@@ -90,19 +91,25 @@ void SearchResultAd::MaybeTriggerAdViewedEventFromQueue() {
std::move(ad_viewed_event_queue_.back());
ad_viewed_event_queue_.pop_back();
event_handler_->FireEvent(
std::move(ad_mojom), mojom::SearchResultAdEventType::kViewed,
[=](const bool /*success*/, const std::string& /*placement_id*/,
const mojom::SearchResultAdEventType event_type) {
DCHECK(mojom::IsKnownEnumValue(event_type));
event_handler_->FireEvent(std::move(ad_mojom),
mojom::SearchResultAdEventType::kViewed,
base::BindOnce(&SearchResultAd::OnFireAdViewedEvent,
base::Unretained(this)));
}
if (g_defer_triggering_of_ad_viewed_event_for_testing) {
g_deferred_search_result_ad_for_testing = this;
return;
}
trigger_ad_viewed_event_in_progress_ = false;
MaybeTriggerAdViewedEventFromQueue();
});
void SearchResultAd::OnFireAdViewedEvent(
const bool /*success*/,
const std::string& /*placement_id*/,
const mojom::SearchResultAdEventType event_type) {
DCHECK(mojom::IsKnownEnumValue(event_type));
DCHECK_EQ(event_type, mojom::SearchResultAdEventType::kViewed);
if (g_defer_triggering_of_ad_viewed_event_for_testing) {
g_deferred_search_result_ad_for_testing = this;
return;
}
trigger_ad_viewed_event_in_progress_ = false;
MaybeTriggerAdViewedEventFromQueue();
}
void SearchResultAd::OnSearchResultAdViewed(const SearchResultAdInfo& ad) {
@@ -7,6 +7,7 @@
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_SEARCH_RESULT_AD_H_
#include <memory>
#include <string>
#include "base/containers/circular_deque.h"
#include "base/memory/raw_ptr.h"
@@ -44,6 +45,9 @@ class SearchResultAd final : public search_result_ads::EventHandlerObserver {
private:
void MaybeTriggerAdViewedEventFromQueue();
void OnFireAdViewedEvent(bool success,
const std::string& placement_id,
mojom::SearchResultAdEventType event_type);
// search_result_ads::EventHandlerObserver:
void OnSearchResultAdViewed(const SearchResultAdInfo& ad) override;
@@ -6,8 +6,6 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_SERVING_ELIGIBLE_ADS_ELIGIBLE_ADS_CALLBACK_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_ADS_SERVING_ELIGIBLE_ADS_ELIGIBLE_ADS_CALLBACK_H_
#include <functional>
#include "base/functional/callback.h"
namespace ads {
@@ -71,12 +71,12 @@ ConversionQueueItemInfo GetFromRecord(mojom::DBRecordInfo* record) {
return conversion_queue_item;
}
void OnGetAll(const GetConversionQueueCallback& callback,
void OnGetAll(GetConversionQueueCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get conversion queue");
callback(/*success*/ false, {});
std::move(callback).Run(/*success*/ false, {});
return;
}
@@ -88,17 +88,17 @@ void OnGetAll(const GetConversionQueueCallback& callback,
conversion_queue_items.push_back(conversion_queue_item);
}
callback(/*success*/ true, conversion_queue_items);
std::move(callback).Run(/*success*/ true, conversion_queue_items);
}
void OnGetForCreativeInstanceId(
const std::string& creative_instance_id,
const GetConversionQueueForCreativeInstanceIdCallback& callback,
GetConversionQueueForCreativeInstanceIdCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get conversion queue");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -110,7 +110,8 @@ void OnGetForCreativeInstanceId(
conversion_queue_items.push_back(conversion_queue_item);
}
callback(/*success*/ true, creative_instance_id, conversion_queue_items);
std::move(callback).Run(/*success*/ true, creative_instance_id,
conversion_queue_items);
}
void MigrateToV10(mojom::DBTransactionInfo* transaction) {
@@ -337,7 +338,7 @@ void ConversionQueue::GetAll(GetConversionQueueCallback callback) const {
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetAll, callback));
std::move(transaction), base::BindOnce(&OnGetAll, std::move(callback)));
}
void ConversionQueue::GetUnprocessed(
@@ -380,14 +381,14 @@ void ConversionQueue::GetUnprocessed(
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetAll, callback));
std::move(transaction), base::BindOnce(&OnGetAll, std::move(callback)));
}
void ConversionQueue::GetForCreativeInstanceId(
const std::string& creative_instance_id,
GetConversionQueueForCreativeInstanceIdCallback callback) const {
if (creative_instance_id.empty()) {
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -429,8 +430,9 @@ void ConversionQueue::GetForCreativeInstanceId(
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetForCreativeInstanceId,
creative_instance_id, callback));
std::move(transaction),
base::BindOnce(&OnGetForCreativeInstanceId, creative_instance_id,
std::move(callback)));
}
std::string ConversionQueue::GetTableName() const {
@@ -6,10 +6,10 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CONVERSIONS_CONVERSION_QUEUE_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CONVERSIONS_CONVERSION_QUEUE_DATABASE_TABLE_H_
#include <functional>
#include <string>
#include "base/check_op.h"
#include "base/functional/callback_forward.h"
#include "bat/ads/ads_client_callback.h"
#include "bat/ads/internal/conversions/conversion_queue_item_info.h"
#include "bat/ads/internal/database/database_table_interface.h"
@@ -18,12 +18,12 @@
namespace ads::database::table {
using GetConversionQueueCallback =
std::function<void(const bool, const ConversionQueueItemList&)>;
base::OnceCallback<void(const bool, const ConversionQueueItemList&)>;
using GetConversionQueueForCreativeInstanceIdCallback =
std::function<void(const bool,
const std::string& creative_instance_id,
const ConversionQueueItemList&)>;
base::OnceCallback<void(const bool,
const std::string& creative_instance_id,
const ConversionQueueItemList&)>;
class ConversionQueue final : public TableInterface {
public:
@@ -6,6 +6,7 @@
#include "bat/ads/internal/conversions/conversion_queue_database_table.h"
#include <memory>
#include <utility>
#include "base/functional/bind.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
@@ -66,13 +67,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest, SaveConversionQueue) {
const ConversionQueueItemList expected_conversion_queue_items =
conversion_queue_items;
database_table_->GetAll(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetAll(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest,
@@ -97,13 +99,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest,
// Assert
const ConversionQueueItemList expected_conversion_queue_items = {info, info};
database_table_->GetAll(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetAll(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest,
@@ -147,13 +150,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest,
const ConversionQueueItemList expected_conversion_queue_items =
conversion_queue_items;
database_table_->GetAll(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetAll(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest,
@@ -191,12 +195,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest,
database_table_->GetForCreativeInstanceId(
creative_instance_id,
[&expected_conversion_queue_items](
const bool success, const std::string& /*creative_instance_id*/,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success, const std::string& /*creative_instance_id*/,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest,
@@ -230,13 +236,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest,
// Assert
const ConversionQueueItemList expected_conversion_queue_items = {info_2};
database_table_->GetUnprocessed(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetUnprocessed(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest,
@@ -279,13 +286,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest,
const ConversionQueueItemList expected_conversion_queue_items = {
info_2, info_3, info_1};
database_table_->GetAll(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetAll(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest, DeleteConversionQueueItem) {
@@ -319,13 +327,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest, DeleteConversionQueueItem) {
// Assert
const ConversionQueueItemList expected_conversion_queue_items = {info_2};
database_table_->GetAll(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetAll(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest,
@@ -373,13 +382,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest,
const ConversionQueueItemList expected_conversion_queue_items =
conversion_queue_items;
database_table_->GetAll(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetAll(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest, UpdateConversionQueueItem) {
@@ -413,13 +423,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest, UpdateConversionQueueItem) {
// Assert
const ConversionQueueItemList expected_conversion_queue_items = {info_2};
database_table_->GetUnprocessed(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetUnprocessed(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest,
@@ -467,13 +478,14 @@ TEST_F(BatAdsConversionQueueDatabaseTableTest,
const ConversionQueueItemList expected_conversion_queue_items =
conversion_queue_items;
database_table_->GetAll(
[&expected_conversion_queue_items](
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
database_table_->GetAll(base::BindOnce(
[](const ConversionQueueItemList& expected_conversion_queue_items,
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
},
expected_conversion_queue_items));
}
TEST_F(BatAdsConversionQueueDatabaseTableTest, TableName) {
@@ -6,6 +6,7 @@
#include "bat/ads/internal/conversions/conversions.h"
#include <set>
#include <utility>
#include "base/check.h"
#include "base/functional/bind.h"
@@ -13,15 +14,12 @@
#include "base/ranges/algorithm.h"
#include "base/time/time.h"
#include "bat/ads/internal/account/account_util.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/ads/ad_events/ad_events.h"
#include "bat/ads/internal/ads/ad_events/ad_events_database_table.h"
#include "bat/ads/internal/common/logging_util.h"
#include "bat/ads/internal/common/time/time_formatting_util.h"
#include "bat/ads/internal/common/url/url_util.h"
#include "bat/ads/internal/conversions/conversion_info.h"
#include "bat/ads/internal/conversions/conversion_queue_database_table.h"
#include "bat/ads/internal/conversions/conversion_queue_item_info.h"
#include "bat/ads/internal/conversions/conversions_database_table.h"
#include "bat/ads/internal/conversions/conversions_features.h"
#include "bat/ads/internal/conversions/sorts/conversions_sort_factory.h"
@@ -252,28 +250,31 @@ void Conversions::MaybeConvert(
void Conversions::Process() {
const database::table::ConversionQueue database_table;
database_table.GetUnprocessed(
[=](const bool success,
const ConversionQueueItemList& conversion_queue_items) {
if (!success) {
BLOG(1, "Failed to get unprocessed conversions");
return;
}
if (conversion_queue_items.empty()) {
BLOG(1, "Conversion queue is empty");
return;
}
const ConversionQueueItemInfo& conversion_queue_item =
conversion_queue_items.front();
StartTimer(conversion_queue_item);
});
database_table.GetUnprocessed(base::BindOnce(
&Conversions::OnGetUnprocessedConversions, base::Unretained(this)));
}
///////////////////////////////////////////////////////////////////////////////
void Conversions::OnGetUnprocessedConversions(
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
if (!success) {
BLOG(1, "Failed to get unprocessed conversions");
return;
}
if (conversion_queue_items.empty()) {
BLOG(1, "Conversion queue is empty");
return;
}
const ConversionQueueItemInfo& conversion_queue_item =
conversion_queue_items.front();
StartTimer(conversion_queue_item);
}
void Conversions::CheckRedirectChain(
const std::vector<GURL>& redirect_chain,
const std::string& html,
@@ -281,72 +282,88 @@ void Conversions::CheckRedirectChain(
BLOG(1, "Checking URL for conversions");
const database::table::AdEvents ad_events_database_table;
ad_events_database_table.GetAll([=](const bool success,
const AdEventList& ad_events) {
if (!success) {
BLOG(1, "Failed to get ad events");
return;
ad_events_database_table.GetAll(
base::BindOnce(&Conversions::OnGetAllAdEvents, base::Unretained(this),
redirect_chain, html, conversion_id_patterns));
}
void Conversions::OnGetAllAdEvents(
std::vector<GURL> redirect_chain,
std::string html,
ConversionIdPatternMap conversion_id_patterns,
const bool success,
const AdEventList& ad_events) {
if (!success) {
BLOG(1, "Failed to get ad events");
return;
}
const database::table::Conversions conversions_database_table;
conversions_database_table.GetAll(
base::BindOnce(&Conversions::OnGetAllConversions, base::Unretained(this),
std::move(redirect_chain), std::move(html),
std::move(conversion_id_patterns), ad_events));
}
void Conversions::OnGetAllConversions(
const std::vector<GURL>& redirect_chain,
const std::string& html,
const ConversionIdPatternMap& conversion_id_patterns,
const AdEventList& ad_events,
const bool success,
const ConversionList& conversions) {
if (!success) {
BLOG(1, "Failed to get conversions");
return;
}
if (conversions.empty()) {
BLOG(1, "There are no conversions");
return;
}
// Filter conversions by url pattern
ConversionList filtered_conversions =
FilterConversions(redirect_chain, conversions);
// Sort conversions in descending order
filtered_conversions = SortConversions(filtered_conversions);
// Create list of creative set ids for already converted ads
std::set<std::string> creative_set_ids = GetConvertedCreativeSets(ad_events);
bool converted = false;
// Check for conversions
for (const auto& conversion : filtered_conversions) {
const AdEventList filtered_ad_events =
FilterAdEventsForConversion(ad_events, conversion);
for (const auto& ad_event : filtered_ad_events) {
if (creative_set_ids.find(conversion.creative_set_id) !=
creative_set_ids.cend()) {
// Creative set id has already been converted
continue;
}
creative_set_ids.insert(ad_event.creative_set_id);
VerifiableConversionInfo verifiable_conversion;
verifiable_conversion.id = ExtractConversionIdFromText(
html, redirect_chain, conversion.url_pattern, conversion_id_patterns);
verifiable_conversion.public_key = conversion.advertiser_public_key;
Convert(ad_event, verifiable_conversion);
converted = true;
}
}
const database::table::Conversions conversions_database_table;
conversions_database_table.GetAll([=](const bool success,
const ConversionList& conversions) {
if (!success) {
BLOG(1, "Failed to get conversions");
return;
}
if (conversions.empty()) {
BLOG(1, "There are no conversions");
return;
}
// Filter conversions by url pattern
ConversionList filtered_conversions =
FilterConversions(redirect_chain, conversions);
// Sort conversions in descending order
filtered_conversions = SortConversions(filtered_conversions);
// Create list of creative set ids for already converted ads
std::set<std::string> creative_set_ids =
GetConvertedCreativeSets(ad_events);
bool converted = false;
// Check for conversions
for (const auto& conversion : filtered_conversions) {
const AdEventList filtered_ad_events =
FilterAdEventsForConversion(ad_events, conversion);
for (const auto& ad_event : filtered_ad_events) {
if (creative_set_ids.find(conversion.creative_set_id) !=
creative_set_ids.cend()) {
// Creative set id has already been converted
continue;
}
creative_set_ids.insert(ad_event.creative_set_id);
VerifiableConversionInfo verifiable_conversion;
verifiable_conversion.id = ExtractConversionIdFromText(
html, redirect_chain, conversion.url_pattern,
conversion_id_patterns);
verifiable_conversion.public_key = conversion.advertiser_public_key;
Convert(ad_event, verifiable_conversion);
converted = true;
}
}
if (!converted) {
BLOG(1, "There were no conversion matches");
} else {
BLOG(1, "There was a conversion match");
}
});
});
if (!converted) {
BLOG(1, "There were no conversion matches");
} else {
BLOG(1, "There was a conversion match");
}
}
void Conversions::Convert(
@@ -457,24 +474,27 @@ void Conversions::ConvertedQueueItem(
void Conversions::ProcessQueue() {
const database::table::ConversionQueue database_table;
database_table.GetUnprocessed(
[=](const bool success,
const ConversionQueueItemList& conversion_queue_items) {
if (!success) {
BLOG(1, "Failed to get conversion queue");
return;
}
database_table.GetUnprocessed(base::BindOnce(
&Conversions::OnGetConversionQueue, base::Unretained(this)));
}
if (conversion_queue_items.empty()) {
BLOG(1, "Conversion queue is empty");
return;
}
void Conversions::OnGetConversionQueue(
const bool success,
const ConversionQueueItemList& conversion_queue_items) {
if (!success) {
BLOG(1, "Failed to get conversion queue");
return;
}
const ConversionQueueItemInfo& conversion_queue_item =
conversion_queue_items.front();
if (conversion_queue_items.empty()) {
BLOG(1, "Conversion queue is empty");
return;
}
ProcessQueueItem(conversion_queue_item);
});
const ConversionQueueItemInfo& conversion_queue_item =
conversion_queue_items.front();
ProcessQueueItem(conversion_queue_item);
}
void Conversions::RemoveInvalidQueueItem(
@@ -12,7 +12,10 @@
#include <vector>
#include "base/observer_list.h"
#include "bat/ads/internal/ads/ad_events/ad_event_info.h"
#include "bat/ads/internal/common/timer/timer.h"
#include "bat/ads/internal/conversions/conversion_info.h"
#include "bat/ads/internal/conversions/conversion_queue_item_info.h"
#include "bat/ads/internal/conversions/conversions_observer.h"
#include "bat/ads/internal/locale/locale_manager_observer.h"
#include "bat/ads/internal/resources/behavioral/conversions/conversion_id_pattern_info.h"
@@ -28,7 +31,6 @@ class Conversions;
} // namespace resource
struct AdEventInfo;
struct ConversionQueueItemInfo;
struct VerifiableConversionInfo;
class Conversions final : public LocaleManagerObserver,
@@ -57,9 +59,24 @@ class Conversions final : public LocaleManagerObserver,
void Process();
private:
void OnGetUnprocessedConversions(
bool success,
const ConversionQueueItemList& conversion_queue_items);
void CheckRedirectChain(const std::vector<GURL>& redirect_chain,
const std::string& html,
const ConversionIdPatternMap& conversion_id_patterns);
void OnGetAllAdEvents(std::vector<GURL> redirect_chain,
std::string html,
ConversionIdPatternMap conversion_id_patterns,
bool success,
const AdEventList& ad_events);
void OnGetAllConversions(const std::vector<GURL>& redirect_chain,
const std::string& html,
const ConversionIdPatternMap& conversion_id_patterns,
const AdEventList& ad_events,
bool success,
const ConversionList& conversions);
void Convert(const AdEventInfo& ad_event,
const VerifiableConversionInfo& verifiable_conversion);
@@ -69,6 +86,9 @@ class Conversions final : public LocaleManagerObserver,
void OnSaveConversionQueue(bool success);
void ProcessQueueItem(const ConversionQueueItemInfo& queue_item);
void OnGetConversionQueue(
bool success,
const ConversionQueueItemList& conversion_queue_items);
void ProcessQueue();
void RemoveInvalidQueueItem(
@@ -62,12 +62,12 @@ ConversionInfo GetFromRecord(mojom::DBRecordInfo* record) {
return conversion;
}
void OnGetConversions(const GetConversionsCallback& callback,
void OnGetConversions(GetConversionsCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get creative conversions");
callback(/*success*/ false, {});
std::move(callback).Run(/*success*/ false, {});
return;
}
@@ -78,7 +78,7 @@ void OnGetConversions(const GetConversionsCallback& callback,
conversions.push_back(conversion);
}
callback(/*success*/ true, conversions);
std::move(callback).Run(/*success*/ true, conversions);
}
void MigrateToV23(mojom::DBTransactionInfo* transaction) {
@@ -153,7 +153,8 @@ void Conversions::GetAll(GetConversionsCallback callback) const {
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetConversions, callback));
std::move(transaction),
base::BindOnce(&OnGetConversions, std::move(callback)));
}
void Conversions::PurgeExpired(ResultCallback callback) const {
@@ -6,9 +6,9 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CONVERSIONS_CONVERSIONS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CONVERSIONS_CONVERSIONS_DATABASE_TABLE_H_
#include <functional>
#include <string>
#include "base/functional/callback_forward.h"
#include "bat/ads/ads_client_callback.h"
#include "bat/ads/internal/conversions/conversion_info.h"
#include "bat/ads/internal/database/database_table_interface.h"
@@ -17,7 +17,7 @@
namespace ads::database::table {
using GetConversionsCallback =
std::function<void(const bool, const ConversionList&)>;
base::OnceCallback<void(const bool, const ConversionList&)>;
class Conversions final : public TableInterface {
public:
@@ -5,6 +5,7 @@
#include "bat/ads/internal/conversions/conversions_database_table.h"
#include "base/functional/bind.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
#include "bat/ads/internal/common/unittest/unittest_mock_util.h"
#include "net/http/http_status_code.h"
@@ -34,10 +35,11 @@ TEST_F(BatAdsConversionsDatabaseTableIntegrationTest,
// Assert
const database::table::Conversions conversions;
conversions.GetAll([](const bool success, const ConversionList& conversions) {
EXPECT_TRUE(success);
EXPECT_EQ(2UL, conversions.size());
});
conversions.GetAll(
base::BindOnce([](const bool success, const ConversionList& conversions) {
EXPECT_TRUE(success);
EXPECT_EQ(2UL, conversions.size());
}));
}
} // namespace ads
@@ -43,14 +43,13 @@ TEST_F(BatAdsConversionsDatabaseTableTest, EmptySave) {
SaveConversions(conversions);
// Assert
const ConversionList expected_conversions = conversions;
database_table_->GetAll(
[&expected_conversions](const bool success,
const ConversionList& conversions) {
database_table_->GetAll(base::BindOnce(
[](const ConversionList& expected_conversions, const bool success,
const ConversionList& conversions) {
ASSERT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_conversions, conversions));
});
EXPECT_TRUE(CompareAsSets(expected_conversions, conversions));
},
conversions));
}
TEST_F(BatAdsConversionsDatabaseTableTest, SaveConversions) {
@@ -79,12 +78,13 @@ TEST_F(BatAdsConversionsDatabaseTableTest, SaveConversions) {
// Assert
const ConversionList expected_conversions = conversions;
database_table_->GetAll(
[&expected_conversions](const bool success,
const ConversionList& conversions) {
database_table_->GetAll(base::BindOnce(
[](const ConversionList& expected_conversions, const bool success,
const ConversionList& conversions) {
ASSERT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_conversions, conversions));
});
EXPECT_TRUE(CompareAsSets(expected_conversions, conversions));
},
expected_conversions));
}
TEST_F(BatAdsConversionsDatabaseTableTest, DoNotSaveDuplicateConversion) {
@@ -107,12 +107,13 @@ TEST_F(BatAdsConversionsDatabaseTableTest, DoNotSaveDuplicateConversion) {
// Assert
const ConversionList expected_conversions = conversions;
database_table_->GetAll(
[&expected_conversions](const bool success,
const ConversionList& conversions) {
database_table_->GetAll(base::BindOnce(
[](const ConversionList& expected_conversions, const bool success,
const ConversionList& conversions) {
ASSERT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_conversions, conversions));
});
EXPECT_TRUE(CompareAsSets(expected_conversions, conversions));
},
expected_conversions));
}
TEST_F(BatAdsConversionsDatabaseTableTest, PurgeExpiredConversions) {
@@ -155,12 +156,13 @@ TEST_F(BatAdsConversionsDatabaseTableTest, PurgeExpiredConversions) {
expected_conversions.push_back(info_1);
expected_conversions.push_back(info_3);
database_table_->GetAll(
[&expected_conversions](const bool success,
const ConversionList& conversions) {
database_table_->GetAll(base::BindOnce(
[](const ConversionList& expected_conversions, const bool success,
const ConversionList& conversions) {
ASSERT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_conversions, conversions));
});
EXPECT_TRUE(CompareAsSets(expected_conversions, conversions));
},
expected_conversions));
}
TEST_F(BatAdsConversionsDatabaseTableTest,
@@ -193,12 +195,13 @@ TEST_F(BatAdsConversionsDatabaseTableTest,
ConversionList expected_conversions;
expected_conversions.push_back(info_2);
database_table_->GetAll(
[&expected_conversions](const bool success,
const ConversionList& conversions) {
database_table_->GetAll(base::BindOnce(
[](const ConversionList& expected_conversions, const bool success,
const ConversionList& conversions) {
ASSERT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_conversions, conversions));
});
EXPECT_TRUE(CompareAsSets(expected_conversions, conversions));
},
expected_conversions));
}
TEST_F(BatAdsConversionsDatabaseTableTest, TableName) {
@@ -5,6 +5,9 @@
#include "bat/ads/internal/conversions/conversions.h"
#include <utility>
#include "base/functional/bind.h"
#include "base/strings/stringprintf.h"
#include "bat/ads/internal/ads/ad_events/ad_event_unittest_util.h"
#include "bat/ads/internal/ads/ad_events/ad_events_database_table.h"
@@ -81,11 +84,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertViewedNotificationAdWhenAdsAreEnabled) {
@@ -116,15 +120,18 @@ TEST_F(BatAdsConversionsTest, ConvertViewedNotificationAdWhenAdsAreEnabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -159,11 +166,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertClickedNotificationAdWhenAdsAreEnabled) {
@@ -197,15 +205,18 @@ TEST_F(BatAdsConversionsTest, ConvertClickedNotificationAdWhenAdsAreEnabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -237,11 +248,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertViewedNewTabPageAdWhenAdsAreEnabled) {
@@ -272,15 +284,18 @@ TEST_F(BatAdsConversionsTest, ConvertViewedNewTabPageAdWhenAdsAreEnabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -315,11 +330,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertClickedNewTabPageAdWhenAdsAreEnabled) {
@@ -353,15 +369,18 @@ TEST_F(BatAdsConversionsTest, ConvertClickedNewTabPageAdWhenAdsAreEnabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -394,11 +413,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertViewedPromotedContentAdWhenAdsAreEnabled) {
@@ -430,15 +450,18 @@ TEST_F(BatAdsConversionsTest, ConvertViewedPromotedContentAdWhenAdsAreEnabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -475,11 +498,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest,
@@ -516,15 +540,18 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -556,11 +583,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest,
@@ -592,11 +620,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertClickedInlineContentAdWhenAdsAreDisabled) {
@@ -630,15 +659,18 @@ TEST_F(BatAdsConversionsTest, ConvertClickedInlineContentAdWhenAdsAreDisabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest, ConvertClickedInlineContentAdWhenAdsAreEnabled) {
@@ -672,15 +704,18 @@ TEST_F(BatAdsConversionsTest, ConvertClickedInlineContentAdWhenAdsAreEnabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -712,11 +747,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertViewedSearchResultAdWhenAdsAreEnabled) {
@@ -747,15 +783,18 @@ TEST_F(BatAdsConversionsTest, ConvertViewedSearchResultAdWhenAdsAreEnabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -790,11 +829,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertClickedSearchResultAdWhenAdsAreEnabled) {
@@ -828,15 +868,18 @@ TEST_F(BatAdsConversionsTest, ConvertClickedSearchResultAdWhenAdsAreEnabled) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest, ConvertMultipleAds) {
@@ -893,19 +936,22 @@ TEST_F(BatAdsConversionsTest, ConvertMultipleAds) {
ad_events_database_table_->GetIf(
condition,
[&conversions](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
base::BindOnce(
[](const ConversionList& conversions, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(2UL, ad_events.size());
EXPECT_EQ(2UL, ad_events.size());
const ConversionInfo& conversion_1 = conversions.at(0);
const AdEventInfo& ad_event_1 = ad_events.at(1);
EXPECT_EQ(conversion_1.creative_set_id, ad_event_1.creative_set_id);
const ConversionInfo& conversion_1 = conversions.at(0);
const AdEventInfo& ad_event_1 = ad_events.at(1);
EXPECT_EQ(conversion_1.creative_set_id, ad_event_1.creative_set_id);
const ConversionInfo& conversion_2 = conversions.at(1);
const AdEventInfo& ad_event_2 = ad_events.at(0);
EXPECT_EQ(conversion_2.creative_set_id, ad_event_2.creative_set_id);
});
const ConversionInfo& conversion_2 = conversions.at(1);
const AdEventInfo& ad_event_2 = ad_events.at(0);
EXPECT_EQ(conversion_2.creative_set_id, ad_event_2.creative_set_id);
},
std::move(conversions)));
}
TEST_F(BatAdsConversionsTest, ConvertViewedAdWhenAdWasDismissed) {
@@ -938,15 +984,18 @@ TEST_F(BatAdsConversionsTest, ConvertViewedAdWhenAdWasDismissed) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest, DoNotConvertNonViewedOrClickedAds) {
@@ -994,11 +1043,12 @@ TEST_F(BatAdsConversionsTest, DoNotConvertNonViewedOrClickedAds) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, DoNotConvertViewedAdForPostClick) {
@@ -1028,11 +1078,12 @@ TEST_F(BatAdsConversionsTest, DoNotConvertViewedAdForPostClick) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, DoNotConvertAdIfConversionDoesNotExist) {
@@ -1052,11 +1103,12 @@ TEST_F(BatAdsConversionsTest, DoNotConvertAdIfConversionDoesNotExist) {
"confirmation_type = 'conversion'";
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest,
@@ -1089,15 +1141,18 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest,
@@ -1128,11 +1183,12 @@ TEST_F(BatAdsConversionsTest,
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertAdWhenTheConversionIsOnTheCuspOfExpiring) {
@@ -1164,15 +1220,18 @@ TEST_F(BatAdsConversionsTest, ConvertAdWhenTheConversionIsOnTheCuspOfExpiring) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest, DoNotConvertAdWhenTheConversionHasExpired) {
@@ -1204,11 +1263,12 @@ TEST_F(BatAdsConversionsTest, DoNotConvertAdWhenTheConversionHasExpired) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition, [](const bool success, const AdEventList& ad_events) {
condition,
base::BindOnce([](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_TRUE(ad_events.empty());
});
}));
}
TEST_F(BatAdsConversionsTest, ConvertAdForRedirectChainIntermediateUrl) {
@@ -1241,15 +1301,18 @@ TEST_F(BatAdsConversionsTest, ConvertAdForRedirectChainIntermediateUrl) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest, ConvertAdForRedirectChainOriginalUrl) {
@@ -1282,15 +1345,18 @@ TEST_F(BatAdsConversionsTest, ConvertAdForRedirectChainOriginalUrl) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest, ConvertAdForRedirectChainUrl) {
@@ -1323,15 +1389,18 @@ TEST_F(BatAdsConversionsTest, ConvertAdForRedirectChainUrl) {
conversion.creative_set_id.c_str());
ad_events_database_table_->GetIf(
condition,
[&conversion](const bool success, const AdEventList& ad_events) {
ASSERT_TRUE(success);
condition, base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const AdEventList& ad_events) {
ASSERT_TRUE(success);
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(1UL, ad_events.size());
const AdEventInfo& ad_event = ad_events.front();
EXPECT_EQ(conversion.creative_set_id, ad_event.creative_set_id);
});
EXPECT_EQ(conversion.creative_set_id,
ad_event.creative_set_id);
},
std::move(conversion)));
}
TEST_F(BatAdsConversionsTest, ExtractConversionId) {
@@ -1365,9 +1434,9 @@ TEST_F(BatAdsConversionsTest, ExtractConversionId) {
resource.get()->id_patterns);
// Assert
conversion_queue_database_table_->GetAll(
[conversion](const bool success,
const ConversionQueueItemList& conversion_queue_items) {
conversion_queue_database_table_->GetAll(base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
ASSERT_EQ(1UL, conversion_queue_items.size());
@@ -1381,7 +1450,8 @@ TEST_F(BatAdsConversionsTest, ExtractConversionId) {
const std::string expected_conversion_id = "abc123";
EXPECT_EQ(expected_conversion_id, conversion_queue_item.conversion_id);
});
},
conversion));
}
TEST_F(BatAdsConversionsTest, ExtractConversionIdWithResourcePatternFromHtml) {
@@ -1417,9 +1487,9 @@ TEST_F(BatAdsConversionsTest, ExtractConversionIdWithResourcePatternFromHtml) {
resource.get()->id_patterns);
// Assert
conversion_queue_database_table_->GetAll(
[conversion](const bool success,
const ConversionQueueItemList& conversion_queue_items) {
conversion_queue_database_table_->GetAll(base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
ASSERT_EQ(1UL, conversion_queue_items.size());
@@ -1433,7 +1503,8 @@ TEST_F(BatAdsConversionsTest, ExtractConversionIdWithResourcePatternFromHtml) {
const std::string expected_conversion_id = "abc123";
EXPECT_EQ(expected_conversion_id, conversion_queue_item.conversion_id);
});
},
conversion));
}
TEST_F(BatAdsConversionsTest, ExtractConversionIdWithResourcePatternFromUrl) {
@@ -1470,9 +1541,9 @@ TEST_F(BatAdsConversionsTest, ExtractConversionIdWithResourcePatternFromUrl) {
resource.get()->id_patterns);
// Assert
conversion_queue_database_table_->GetAll(
[conversion](const bool success,
const ConversionQueueItemList& conversion_queue_items) {
conversion_queue_database_table_->GetAll(base::BindOnce(
[](const ConversionInfo& conversion, const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
ASSERT_EQ(1UL, conversion_queue_items.size());
@@ -1486,7 +1557,8 @@ TEST_F(BatAdsConversionsTest, ExtractConversionIdWithResourcePatternFromUrl) {
const std::string expected_conversion_id = "abc123";
EXPECT_EQ(expected_conversion_id, conversion_queue_item.conversion_id);
});
},
conversion));
}
} // namespace ads
@@ -11,6 +11,7 @@
#include "base/check.h"
#include "base/containers/contains.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/strings/stringprintf.h"
#include "bat/ads/internal/ads_client_helper.h"
#include "bat/ads/internal/common/database/database_bind_util.h"
@@ -121,12 +122,12 @@ CreativeAdList GetCreativeAdsFromResponse(
}
void OnGetForCreativeInstanceId(const std::string& creative_instance_id,
const GetCreativeAdCallback& callback,
GetCreativeAdCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get creative ad");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -135,13 +136,13 @@ void OnGetForCreativeInstanceId(const std::string& creative_instance_id,
if (creative_ads.size() != 1) {
BLOG(0, "Failed to get creative ad");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
const CreativeAdInfo& creative_ad = creative_ads.front();
callback(/*success*/ true, creative_instance_id, creative_ad);
std::move(callback).Run(/*success*/ true, creative_instance_id, creative_ad);
}
void MigrateToV24(mojom::DBTransactionInfo* transaction) {
@@ -202,7 +203,8 @@ void CreativeAds::GetForCreativeInstanceId(
const CreativeAdInfo creative_ad;
if (creative_instance_id.empty()) {
callback(/*success*/ false, creative_instance_id, creative_ad);
std::move(callback).Run(/*success*/ false, creative_instance_id,
creative_ad);
return;
}
@@ -242,8 +244,9 @@ void CreativeAds::GetForCreativeInstanceId(
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetForCreativeInstanceId,
creative_instance_id, callback));
std::move(transaction),
base::BindOnce(&OnGetForCreativeInstanceId, creative_instance_id,
std::move(callback)));
}
std::string CreativeAds::GetTableName() const {
@@ -6,9 +6,9 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_CREATIVE_ADS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_CREATIVE_ADS_DATABASE_TABLE_H_
#include <functional>
#include <string>
#include "base/functional/callback_forward.h"
#include "bat/ads/ads_client_callback.h"
#include "bat/ads/internal/creatives/creative_ad_info.h"
#include "bat/ads/internal/database/database_table_interface.h"
@@ -17,9 +17,9 @@
namespace ads::database::table {
using GetCreativeAdCallback =
std::function<void(const bool success,
const std::string& creative_instance_id,
const CreativeAdInfo& ad)>;
base::OnceCallback<void(const bool success,
const std::string& creative_instance_id,
const CreativeAdInfo& ad)>;
class CreativeAds final : public TableInterface {
public:
@@ -11,6 +11,7 @@
#include "base/containers/contains.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
@@ -156,14 +157,13 @@ CreativeInlineContentAdList GetCreativeAdsFromResponse(
return creative_ads;
}
void OnGetForCreativeInstanceId(
const std::string& creative_instance_id,
const GetCreativeInlineContentAdCallback& callback,
mojom::DBCommandResponseInfoPtr response) {
void OnGetForCreativeInstanceId(const std::string& creative_instance_id,
GetCreativeInlineContentAdCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get creative inline content ad");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -172,13 +172,13 @@ void OnGetForCreativeInstanceId(
if (creative_ads.size() != 1) {
BLOG(0, "Failed to get creative inline content ad");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
const CreativeInlineContentAdInfo& creative_ad = creative_ads.front();
callback(/*success*/ true, creative_instance_id, creative_ad);
std::move(callback).Run(/*success*/ true, creative_instance_id, creative_ad);
}
void OnGetForSegmentsAndDimensions(const SegmentList& segments,
@@ -316,7 +316,7 @@ void CreativeInlineContentAds::GetForCreativeInstanceId(
const std::string& creative_instance_id,
GetCreativeInlineContentAdCallback callback) const {
if (creative_instance_id.empty()) {
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -403,8 +403,9 @@ void CreativeInlineContentAds::GetForCreativeInstanceId(
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetForCreativeInstanceId,
creative_instance_id, callback));
std::move(transaction),
base::BindOnce(&OnGetForCreativeInstanceId, creative_instance_id,
std::move(callback)));
}
void CreativeInlineContentAds::GetForSegmentsAndDimensions(
@@ -6,11 +6,11 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_INLINE_CONTENT_ADS_CREATIVE_INLINE_CONTENT_ADS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_INLINE_CONTENT_ADS_CREATIVE_INLINE_CONTENT_ADS_DATABASE_TABLE_H_
#include <functional>
#include <memory>
#include <string>
#include "base/check_op.h"
#include "base/functional/callback_forward.h"
#include "bat/ads/ads_client_callback.h"
#include "bat/ads/internal/creatives/inline_content_ads/creative_inline_content_ad_info.h"
#include "bat/ads/internal/database/database_table_interface.h"
@@ -27,9 +27,9 @@ class GeoTargets;
class Segments;
using GetCreativeInlineContentAdCallback =
std::function<void(const bool success,
const std::string& creative_instance_id,
const CreativeInlineContentAdInfo& creative_ad)>;
base::OnceCallback<void(const bool success,
const std::string& creative_instance_id,
const CreativeInlineContentAdInfo& creative_ad)>;
using GetCreativeInlineContentAdsCallback =
base::OnceCallback<void(const bool success,
@@ -369,19 +369,19 @@ TEST_F(BatAdsCreativeInlineContentAdsDatabaseTableTest,
// Act
// Assert
const CreativeInlineContentAdInfo expected_creative_ad = info;
const std::string creative_instance_id =
"3519f52c-46a4-4c48-9c2b-c264c0067f04";
database_table_->GetForCreativeInstanceId(
creative_instance_id,
[&expected_creative_ad](const bool success,
const std::string& /*creative_instance_id*/,
const CreativeInlineContentAdInfo& creative_ad) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_creative_ad, creative_ad);
});
base::BindOnce(
[](const CreativeInlineContentAdInfo& expected_creative_ad,
const bool success, const std::string& /*creative_instance_id*/,
const CreativeInlineContentAdInfo& creative_ad) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_creative_ad, creative_ad);
},
info));
}
TEST_F(BatAdsCreativeInlineContentAdsDatabaseTableTest,
@@ -424,10 +424,11 @@ TEST_F(BatAdsCreativeInlineContentAdsDatabaseTableTest,
database_table_->GetForCreativeInstanceId(
creative_instance_id,
[](const bool success, const std::string& /*creative_instance_id*/,
const CreativeInlineContentAdInfo& /*creative_ad*/) {
base::BindOnce([](const bool success,
const std::string& /*creative_instance_id*/,
const CreativeInlineContentAdInfo& /*creative_ad*/) {
EXPECT_FALSE(success);
});
}));
}
TEST_F(BatAdsCreativeInlineContentAdsDatabaseTableTest,
@@ -10,6 +10,7 @@
#include "base/containers/contains.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
@@ -162,12 +163,12 @@ CreativeNewTabPageAdList GetCreativeAdsFromResponse(
}
void OnGetForCreativeInstanceId(const std::string& creative_instance_id,
const GetCreativeNewTabPageAdCallback& callback,
GetCreativeNewTabPageAdCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get creative new tab page ad");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -176,13 +177,13 @@ void OnGetForCreativeInstanceId(const std::string& creative_instance_id,
if (creative_ads.size() != 1) {
BLOG(0, "Failed to get creative new tab page ad");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
const CreativeNewTabPageAdInfo& creative_ad = creative_ads.front();
callback(/*success*/ true, creative_instance_id, creative_ad);
std::move(callback).Run(/*success*/ true, creative_instance_id, creative_ad);
}
void OnGetForSegments(const SegmentList& segments,
@@ -305,7 +306,7 @@ void CreativeNewTabPageAds::GetForCreativeInstanceId(
const std::string& creative_instance_id,
GetCreativeNewTabPageAdCallback callback) const {
if (creative_instance_id.empty()) {
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -398,8 +399,9 @@ void CreativeNewTabPageAds::GetForCreativeInstanceId(
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetForCreativeInstanceId,
creative_instance_id, callback));
std::move(transaction),
base::BindOnce(&OnGetForCreativeInstanceId, creative_instance_id,
std::move(callback)));
}
void CreativeNewTabPageAds::GetForSegments(
@@ -6,13 +6,12 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_NEW_TAB_PAGE_ADS_CREATIVE_NEW_TAB_PAGE_ADS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_NEW_TAB_PAGE_ADS_CREATIVE_NEW_TAB_PAGE_ADS_DATABASE_TABLE_H_
#include <functional>
#include <memory>
#include <string>
#include <vector>
#include "base/check_op.h"
#include "base/functional/callback.h"
#include "base/functional/callback_forward.h"
#include "bat/ads/ads_client_callback.h"
#include "bat/ads/internal/creatives/new_tab_page_ads/creative_new_tab_page_ad_info.h"
#include "bat/ads/internal/database/database_table_interface.h"
@@ -30,9 +29,9 @@ class GeoTargets;
class Segments;
using GetCreativeNewTabPageAdCallback =
std::function<void(const bool,
const std::string& creative_instance_id,
const CreativeNewTabPageAdInfo&)>;
base::OnceCallback<void(const bool,
const std::string& creative_instance_id,
const CreativeNewTabPageAdInfo&)>;
using GetCreativeNewTabPageAdsCallback =
base::OnceCallback<void(const bool,
@@ -162,12 +162,14 @@ TEST_F(BatAdsCreativeNewTabPageAdsDatabaseTableTest,
database_table_.GetForCreativeInstanceId(
expected_creative_ad.creative_instance_id,
[&expected_creative_ad](const bool success,
const std::string& /*creative_instance_id*/,
const CreativeNewTabPageAdInfo& creative_ad) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_creative_ad, creative_ad);
});
base::BindOnce(
[](const CreativeNewTabPageAdInfo& expected_creative_ad,
const bool success, const std::string& /*creative_instance_id*/,
const CreativeNewTabPageAdInfo& creative_ad) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_creative_ad, creative_ad);
},
expected_creative_ad));
}
TEST_F(BatAdsCreativeNewTabPageAdsDatabaseTableTest,
@@ -182,10 +184,11 @@ TEST_F(BatAdsCreativeNewTabPageAdsDatabaseTableTest,
// Assert
database_table_.GetForCreativeInstanceId(
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
[](const bool success, const std::string& /*creative_instance_id*/,
const CreativeNewTabPageAdInfo& /*creative_ad*/) {
base::BindOnce([](const bool success,
const std::string& /*creative_instance_id*/,
const CreativeNewTabPageAdInfo& /*creative_ad*/) {
EXPECT_FALSE(success);
});
}));
}
TEST_F(BatAdsCreativeNewTabPageAdsDatabaseTableTest,
@@ -6,7 +6,6 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_NOTIFICATION_ADS_CREATIVE_NOTIFICATION_ADS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_NOTIFICATION_ADS_CREATIVE_NOTIFICATION_ADS_DATABASE_TABLE_H_
#include <functional>
#include <memory>
#include <string>
#include <vector>
@@ -10,6 +10,7 @@
#include "base/containers/contains.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
@@ -148,14 +149,13 @@ CreativePromotedContentAdList GetCreativeAdsFromResponse(
return creative_ads;
}
void OnGetForCreativeInstanceId(
const std::string& creative_instance_id,
const GetCreativePromotedContentAdCallback& callback,
mojom::DBCommandResponseInfoPtr response) {
void OnGetForCreativeInstanceId(const std::string& creative_instance_id,
GetCreativePromotedContentAdCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get creative promoted content ad");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -164,37 +164,37 @@ void OnGetForCreativeInstanceId(
if (creative_ads.size() != 1) {
BLOG(0, "Failed to get creative promoted content ad");
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
const CreativePromotedContentAdInfo& creative_ad = creative_ads.front();
callback(/*success*/ true, creative_instance_id, creative_ad);
std::move(callback).Run(/*success*/ true, creative_instance_id, creative_ad);
}
void OnGetForSegments(const SegmentList& segments,
const GetCreativePromotedContentAdsCallback& callback,
GetCreativePromotedContentAdsCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get creative promoted content ads");
callback(/*success*/ false, segments, {});
std::move(callback).Run(/*success*/ false, segments, {});
return;
}
const CreativePromotedContentAdList creative_ads =
GetCreativeAdsFromResponse(std::move(response));
callback(/*success*/ true, segments, creative_ads);
std::move(callback).Run(/*success*/ true, segments, creative_ads);
}
void OnGetAll(const GetCreativePromotedContentAdsCallback& callback,
void OnGetAll(GetCreativePromotedContentAdsCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get all creative new tab page ads");
callback(/*success*/ false, {}, {});
std::move(callback).Run(/*success*/ false, {}, {});
return;
}
@@ -203,7 +203,7 @@ void OnGetAll(const GetCreativePromotedContentAdsCallback& callback,
const SegmentList segments = GetSegments(creative_ads);
callback(/*success*/ true, segments, creative_ads);
std::move(callback).Run(/*success*/ true, segments, creative_ads);
}
void MigrateToV24(mojom::DBTransactionInfo* transaction) {
@@ -289,7 +289,7 @@ void CreativePromotedContentAds::GetForCreativeInstanceId(
const std::string& creative_instance_id,
GetCreativePromotedContentAdCallback callback) const {
if (creative_instance_id.empty()) {
callback(/*success*/ false, creative_instance_id, {});
std::move(callback).Run(/*success*/ false, creative_instance_id, {});
return;
}
@@ -368,15 +368,16 @@ void CreativePromotedContentAds::GetForCreativeInstanceId(
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetForCreativeInstanceId,
creative_instance_id, callback));
std::move(transaction),
base::BindOnce(&OnGetForCreativeInstanceId, creative_instance_id,
std::move(callback)));
}
void CreativePromotedContentAds::GetForSegments(
const SegmentList& segments,
GetCreativePromotedContentAdsCallback callback) const {
if (segments.empty()) {
callback(/*success*/ true, segments, {});
std::move(callback).Run(/*success*/ true, segments, {});
return;
}
@@ -465,7 +466,7 @@ void CreativePromotedContentAds::GetForSegments(
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction),
base::BindOnce(&OnGetForSegments, segments, callback));
base::BindOnce(&OnGetForSegments, segments, std::move(callback)));
}
void CreativePromotedContentAds::GetAll(
@@ -545,7 +546,7 @@ void CreativePromotedContentAds::GetAll(
transaction->commands.push_back(std::move(command));
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction), base::BindOnce(&OnGetAll, callback));
std::move(transaction), base::BindOnce(&OnGetAll, std::move(callback)));
}
std::string CreativePromotedContentAds::GetTableName() const {
@@ -6,12 +6,12 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_PROMOTED_CONTENT_ADS_CREATIVE_PROMOTED_CONTENT_ADS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_CREATIVES_PROMOTED_CONTENT_ADS_CREATIVE_PROMOTED_CONTENT_ADS_DATABASE_TABLE_H_
#include <functional>
#include <memory>
#include <string>
#include <vector>
#include "base/check_op.h"
#include "base/functional/callback_forward.h"
#include "bat/ads/ads_client_callback.h"
#include "bat/ads/internal/creatives/promoted_content_ads/creative_promoted_content_ad_info.h"
#include "bat/ads/internal/database/database_table_interface.h"
@@ -28,14 +28,14 @@ class GeoTargets;
class Segments;
using GetCreativePromotedContentAdCallback =
std::function<void(const bool,
const std::string& creative_instance_id,
const CreativePromotedContentAdInfo&)>;
base::OnceCallback<void(const bool,
const std::string& creative_instance_id,
const CreativePromotedContentAdInfo&)>;
using GetCreativePromotedContentAdsCallback =
std::function<void(const bool,
const std::vector<std::string>&,
const CreativePromotedContentAdList&)>;
base::OnceCallback<void(const bool,
const std::vector<std::string>&,
const CreativePromotedContentAdList&)>;
class CreativePromotedContentAds final : public TableInterface {
public:
@@ -5,6 +5,7 @@
#include "bat/ads/internal/creatives/promoted_content_ads/creative_promoted_content_ads_database_table.h"
#include "base/functional/bind.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
#include "bat/ads/internal/common/unittest/unittest_mock_util.h"
#include "net/http/http_status_code.h"
@@ -40,11 +41,12 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableIntegrationTest,
creative_promoted_content_ads;
creative_promoted_content_ads.GetForSegments(
segments,
[](const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
base::BindOnce([](const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_EQ(1UL, creative_promoted_content_ads.size());
});
}));
}
} // namespace ads
@@ -99,13 +99,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -196,13 +200,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -247,13 +255,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest, GetForSegments) {
@@ -320,13 +332,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest, GetForSegments) {
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -380,13 +396,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForCreativeInstanceId(
creative_instance_id,
[&expected_creative_promoted_content_ad](
const bool success, const std::string& /*creative_instance_id*/,
const CreativePromotedContentAdInfo& creative_promoted_content_ad) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_creative_promoted_content_ad,
creative_promoted_content_ad);
});
base::BindOnce(
[](const CreativePromotedContentAdInfo&
expected_creative_promoted_content_ad,
const bool success, const std::string& /*creative_instance_id*/,
const CreativePromotedContentAdInfo&
creative_promoted_content_ad) {
ASSERT_TRUE(success);
EXPECT_EQ(expected_creative_promoted_content_ad,
creative_promoted_content_ad);
},
expected_creative_promoted_content_ad));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -428,9 +448,10 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForCreativeInstanceId(
creative_instance_id,
[](const bool success, const std::string& /*creative_instance_id*/,
const CreativePromotedContentAdInfo&
/*creative_promoted_content_ad*/) { EXPECT_FALSE(success); });
base::BindOnce(
[](const bool success, const std::string& /*creative_instance_id*/,
const CreativePromotedContentAdInfo&
/*creative_promoted_content_ad*/) { EXPECT_FALSE(success); }));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -474,13 +495,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -524,13 +549,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -622,13 +651,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -696,13 +729,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
@@ -769,13 +806,17 @@ TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest,
database_table_->GetForSegments(
segments,
[&expected_creative_promoted_content_ads](
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList& creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
});
base::BindOnce(
[](const CreativePromotedContentAdList&
expected_creative_promoted_content_ads,
const bool success, const SegmentList& /*segments*/,
const CreativePromotedContentAdList&
creative_promoted_content_ads) {
EXPECT_TRUE(success);
EXPECT_TRUE(ContainersEq(expected_creative_promoted_content_ads,
creative_promoted_content_ads));
},
expected_creative_promoted_content_ads));
}
TEST_F(BatAdsCreativePromotedContentAdsDatabaseTableTest, TableName) {
@@ -3,6 +3,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at https://mozilla.org/MPL/2.0/. */
#include "base/functional/bind.h"
#include "base/time/time.h"
#include "bat/ads/internal/common/unittest/unittest_base.h"
#include "bat/ads/internal/common/unittest/unittest_constants.h"
@@ -31,8 +32,8 @@ TEST_F(BatAdsDatabaseMigrationIssue17231Test, ConversionQueueDatabase) {
// Act
database_table.GetAll(
[](const bool success,
const ConversionQueueItemList& conversion_queue_items) {
base::BindOnce([](const bool success,
const ConversionQueueItemList& conversion_queue_items) {
ASSERT_TRUE(success);
ConversionQueueItemInfo conversion_queue_item;
@@ -53,7 +54,7 @@ TEST_F(BatAdsDatabaseMigrationIssue17231Test, ConversionQueueDatabase) {
expected_conversion_queue_items.push_back(conversion_queue_item);
EXPECT_EQ(expected_conversion_queue_items, conversion_queue_items);
});
}));
// Assert
}
@@ -65,8 +66,8 @@ TEST_F(BatAdsDatabaseMigrationIssue17231Test, ConversionsDatabase) {
AdvanceClockTo(TimeFromString("28 July 2021", /*is_local*/ false));
// Act
database_table.GetAll([](const bool success,
const ConversionList& conversions) {
database_table.GetAll(base::BindOnce([](const bool success,
const ConversionList& conversions) {
ASSERT_TRUE(success);
const std::vector<std::string> creative_set_ids = {
@@ -553,7 +554,7 @@ TEST_F(BatAdsDatabaseMigrationIssue17231Test, ConversionsDatabase) {
}
EXPECT_TRUE(ContainersEq(expected_conversions, conversions));
});
}));
// Assert
}
@@ -5,6 +5,9 @@
#include "bat/ads/internal/processors/contextual/text_embedding/text_embedding_html_events.h"
#include <utility>
#include "base/functional/callback.h"
#include "base/time/time.h"
#include "bat/ads/internal/common/logging_util.h"
#include "bat/ads/internal/processors/contextual/text_embedding/text_embedding_html_event_info.h"
@@ -32,33 +35,38 @@ void LogTextEmbeddingHtmlEvent(
database::table::TextEmbeddingHtmlEvents database_table;
database_table.LogEvent(
text_embedding_html_event,
base::BindOnce([](const TextEmbeddingHtmlEventCallback& callback,
const bool success) { callback(success); },
callback));
base::BindOnce(
[](TextEmbeddingHtmlEventCallback callback, const bool success) {
std::move(callback).Run(success);
},
std::move(callback)));
}
void PurgeStaleTextEmbeddingHtmlEvents(
TextEmbeddingHtmlEventCallback callback) {
const database::table::TextEmbeddingHtmlEvents database_table;
database_table.PurgeStale(
base::BindOnce([](const TextEmbeddingHtmlEventCallback& callback,
const bool success) { callback(success); },
callback));
database_table.PurgeStale(base::BindOnce(
[](TextEmbeddingHtmlEventCallback callback, const bool success) {
std::move(callback).Run(success);
},
std::move(callback)));
}
void GetTextEmbeddingHtmlEventsFromDatabase(
const database::table::GetTextEmbeddingHtmlEventsCallback& callback) {
database::table::GetTextEmbeddingHtmlEventsCallback callback) {
const database::table::TextEmbeddingHtmlEvents database_table;
database_table.GetAll(
[=](const bool success,
const TextEmbeddingHtmlEventList& text_embedding_html_events) {
database_table.GetAll(base::BindOnce(
[](database::table::GetTextEmbeddingHtmlEventsCallback callback,
const bool success,
const TextEmbeddingHtmlEventList& text_embedding_html_events) {
if (!success) {
BLOG(1, "Failed to get text embedding HTML events");
callback(success, /* text_embedding_html_events */ {});
std::move(callback).Run(success, /* text_embedding_html_events */ {});
return;
}
callback(success, text_embedding_html_events);
});
std::move(callback).Run(success, text_embedding_html_events);
},
std::move(callback)));
}
} // namespace ads
@@ -6,14 +6,13 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_PROCESSORS_CONTEXTUAL_TEXT_EMBEDDING_TEXT_EMBEDDING_HTML_EVENTS_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_PROCESSORS_CONTEXTUAL_TEXT_EMBEDDING_TEXT_EMBEDDING_HTML_EVENTS_H_
#include <functional>
#include "base/functional/callback_forward.h"
#include "bat/ads/internal/ml/pipeline/text_processing/embedding_info.h"
#include "bat/ads/internal/processors/contextual/text_embedding/text_embedding_html_events_database_table.h"
namespace ads {
using TextEmbeddingHtmlEventCallback = std::function<void(const bool)>;
using TextEmbeddingHtmlEventCallback = base::OnceCallback<void(const bool)>;
struct TextEmbeddingHtmlEventInfo;
@@ -27,7 +26,7 @@ void LogTextEmbeddingHtmlEvent(
void PurgeStaleTextEmbeddingHtmlEvents(TextEmbeddingHtmlEventCallback callback);
void GetTextEmbeddingHtmlEventsFromDatabase(
const database::table::GetTextEmbeddingHtmlEventsCallback& callback);
database::table::GetTextEmbeddingHtmlEventsCallback callback);
} // namespace ads
@@ -8,6 +8,7 @@
#include <utility>
#include "base/check.h"
#include "base/functional/callback.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
@@ -61,13 +62,13 @@ TextEmbeddingHtmlEventInfo GetFromRecord(mojom::DBRecordInfo* record) {
return text_embedding_html_event;
}
void OnGetTextEmbeddingHtmlEvents(
const GetTextEmbeddingHtmlEventsCallback& callback,
mojom::DBCommandResponseInfoPtr response) {
void OnGetTextEmbeddingHtmlEvents(GetTextEmbeddingHtmlEventsCallback callback,
mojom::DBCommandResponseInfoPtr response) {
if (!response || response->status !=
mojom::DBCommandResponseInfo::StatusType::RESPONSE_OK) {
BLOG(0, "Failed to get embeddings");
callback(/* success */ false, /* text_embedding_html_events */ {});
std::move(callback).Run(/* success */ false,
/* text_embedding_html_events */ {});
return;
}
@@ -79,7 +80,7 @@ void OnGetTextEmbeddingHtmlEvents(
text_embedding_html_events.push_back(text_embedding_html_event);
}
callback(/* success */ true, text_embedding_html_events);
std::move(callback).Run(/* success */ true, text_embedding_html_events);
}
void RunTransaction(const std::string& query,
@@ -101,7 +102,7 @@ void RunTransaction(const std::string& query,
AdsClientHelper::GetInstance()->RunDBTransaction(
std::move(transaction),
base::BindOnce(&OnGetTextEmbeddingHtmlEvents, callback));
base::BindOnce(&OnGetTextEmbeddingHtmlEvents, std::move(callback)));
}
void MigrateToV25(mojom::DBTransactionInfo* transaction) {
@@ -6,9 +6,9 @@
#ifndef BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_PROCESSORS_CONTEXTUAL_TEXT_EMBEDDING_TEXT_EMBEDDING_HTML_EVENTS_DATABASE_TABLE_H_
#define BRAVE_VENDOR_BAT_NATIVE_ADS_SRC_BAT_ADS_INTERNAL_PROCESSORS_CONTEXTUAL_TEXT_EMBEDDING_TEXT_EMBEDDING_HTML_EVENTS_DATABASE_TABLE_H_
#include <functional>
#include <string>
#include "base/functional/callback_forward.h"
#include "bat/ads/ads_client_callback.h"
#include "bat/ads/internal/database/database_table_interface.h"
#include "bat/ads/internal/processors/contextual/text_embedding/text_embedding_html_event_info.h"
@@ -17,7 +17,7 @@
namespace ads::database::table {
using GetTextEmbeddingHtmlEventsCallback =
std::function<void(const bool, const TextEmbeddingHtmlEventList&)>;
base::OnceCallback<void(const bool, const TextEmbeddingHtmlEventList&)>;
class TextEmbeddingHtmlEvents final : public TableInterface {
public:
@@ -38,19 +38,22 @@ TEST_F(BatAdsTextEmbeddingHtmlEventsTest, LogEvent) {
const ml::pipeline::TextEmbeddingInfo text_embedding = BuildTextEmbedding();
// Act
LogTextEmbeddingHtmlEvent(BuildTextEmbeddingHtmlEvent(text_embedding),
[=](const bool success) { ASSERT_TRUE(success); });
LogTextEmbeddingHtmlEvent(
BuildTextEmbeddingHtmlEvent(text_embedding),
base::BindOnce([](const bool success) { ASSERT_TRUE(success); }));
GetTextEmbeddingHtmlEventsFromDatabase(
[=](const bool success,
const TextEmbeddingHtmlEventList& text_embedding_html_events) {
GetTextEmbeddingHtmlEventsFromDatabase(base::BindOnce(
[](const ml::pipeline::TextEmbeddingInfo& text_embedding,
const bool success,
const TextEmbeddingHtmlEventList& text_embedding_html_events) {
ASSERT_TRUE(!text_embedding_html_events.empty());
ASSERT_TRUE(success);
// Assert
EXPECT_EQ(text_embedding.hashed_text_base64,
text_embedding_html_events.front().hashed_text_base64);
});
},
text_embedding));
}
TEST_F(BatAdsTextEmbeddingHtmlEventsTest, PurgeEvents) {
@@ -58,25 +61,27 @@ TEST_F(BatAdsTextEmbeddingHtmlEventsTest, PurgeEvents) {
for (int i = 0; i < targeting::features::GetTextEmbeddingsHistorySize() + 4;
i++) {
const ml::pipeline::TextEmbeddingInfo text_embedding = BuildTextEmbedding();
LogTextEmbeddingHtmlEvent(BuildTextEmbeddingHtmlEvent(text_embedding),
[](const bool success) { ASSERT_TRUE(success); });
LogTextEmbeddingHtmlEvent(
BuildTextEmbeddingHtmlEvent(text_embedding),
base::BindOnce([](const bool success) { ASSERT_TRUE(success); }));
}
// Act
PurgeStaleTextEmbeddingHtmlEvents(
[](const bool success) { ASSERT_TRUE(success); });
base::BindOnce([](const bool success) { ASSERT_TRUE(success); }));
// Assert
GetTextEmbeddingHtmlEventsFromDatabase(
GetTextEmbeddingHtmlEventsFromDatabase(base::BindOnce(
[](const bool success,
const TextEmbeddingHtmlEventList& text_embedding_html_events) {
ASSERT_TRUE(success);
const int text_embedding_html_event_count =
const size_t text_embedding_html_event_count =
text_embedding_html_events.size();
EXPECT_TRUE(text_embedding_html_event_count <=
targeting::features::GetTextEmbeddingsHistorySize());
});
EXPECT_LE(text_embedding_html_event_count,
static_cast<size_t>(
targeting::features::GetTextEmbeddingsHistorySize()));
}));
}
} // namespace ads
@@ -68,7 +68,8 @@ void TextEmbedding::Process(const std::string& html) {
}
LogTextEmbeddingHtmlEvent(
BuildTextEmbeddingHtmlEvent(text_embedding), [](const bool success) {
BuildTextEmbeddingHtmlEvent(text_embedding),
base::BindOnce([](const bool success) {
if (!success) {
BLOG(1, "Failed to log text embedding HTML event");
return;
@@ -76,15 +77,16 @@ void TextEmbedding::Process(const std::string& html) {
BLOG(3, "Successfully logged text embedding HTML event");
PurgeStaleTextEmbeddingHtmlEvents([](const bool success) {
if (!success) {
BLOG(1, "Failed to purge stale text embedding HTML events");
return;
}
PurgeStaleTextEmbeddingHtmlEvents(
base::BindOnce([](const bool success) {
if (!success) {
BLOG(1, "Failed to purge stale text embedding HTML events");
return;
}
BLOG(3, "Successfully purged stale text embedding HTML events");
});
});
BLOG(3, "Successfully purged stale text embedding HTML events");
}));
}));
}
///////////////////////////////////////////////////////////////////////////////