Refactor std::function usages from Brave Ads.
fix https://github.com/brave/brave-browser/issues/26589
This commit is contained in:
+49
-33
@@ -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
|
||||
|
||||
|
||||
+4
-4
@@ -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
|
||||
}
|
||||
|
||||
Vendored
+22
-15
@@ -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
|
||||
|
||||
Vendored
+3
@@ -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;
|
||||
|
||||
+7
-4
@@ -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
|
||||
|
||||
+38
-31
@@ -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);
|
||||
}
|
||||
|
||||
+7
-1
@@ -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;
|
||||
|
||||
+18
-12
@@ -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
-4
@@ -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
|
||||
|
||||
+3
-2
@@ -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:
|
||||
|
||||
+8
-7
@@ -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 {
|
||||
|
||||
+3
-3
@@ -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
-1
@@ -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
|
||||
|
||||
+3
-2
@@ -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
|
||||
}
|
||||
|
||||
+8
-8
@@ -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
|
||||
|
||||
+2
-3
@@ -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
-4
@@ -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(
|
||||
|
||||
+12
-6
@@ -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
|
||||
|
||||
+3
-4
@@ -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
|
||||
|
||||
Vendored
+41
-35
@@ -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
|
||||
|
||||
Vendored
+3
-3
@@ -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
|
||||
|
||||
|
||||
+25
-20
@@ -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
|
||||
}
|
||||
|
||||
Vendored
+5
-4
@@ -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
|
||||
}
|
||||
|
||||
+3
-3
@@ -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:
|
||||
|
||||
+21
-11
@@ -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(
|
||||
|
||||
+3
@@ -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);
|
||||
|
||||
+60
-17
@@ -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
|
||||
}
|
||||
|
||||
+2
-1
@@ -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
|
||||
|
||||
+4
-2
@@ -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"
|
||||
|
||||
+4
-24
@@ -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,
|
||||
|
||||
+2
-10
@@ -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;
|
||||
|
||||
|
||||
+53
-41
@@ -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(
|
||||
|
||||
+13
-1
@@ -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;
|
||||
|
||||
+51
-41
@@ -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(
|
||||
|
||||
+12
@@ -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;
|
||||
|
||||
+52
-40
@@ -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(
|
||||
|
||||
+13
@@ -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;
|
||||
|
||||
+73
-61
@@ -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
|
||||
|
||||
+24
-17
@@ -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_;
|
||||
};
|
||||
|
||||
+13
-9
@@ -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;
|
||||
|
||||
Vendored
-2
@@ -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 {
|
||||
|
||||
+13
-11
@@ -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 {
|
||||
|
||||
+5
-5
@@ -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:
|
||||
|
||||
Vendored
+63
-51
@@ -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) {
|
||||
|
||||
+120
-100
@@ -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(
|
||||
|
||||
+5
-4
@@ -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 {
|
||||
|
||||
+2
-2
@@ -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:
|
||||
|
||||
+6
-4
@@ -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
|
||||
|
||||
Vendored
+30
-27
@@ -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) {
|
||||
|
||||
+236
-164
@@ -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
|
||||
|
||||
+10
-7
@@ -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 {
|
||||
|
||||
+4
-4
@@ -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
-10
@@ -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(
|
||||
|
||||
+4
-4
@@ -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,
|
||||
|
||||
+12
-11
@@ -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,
|
||||
|
||||
+9
-7
@@ -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(
|
||||
|
||||
+4
-5
@@ -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,
|
||||
|
||||
+12
-9
@@ -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,
|
||||
|
||||
-1
@@ -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>
|
||||
|
||||
+20
-19
@@ -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 {
|
||||
|
||||
+7
-7
@@ -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
-3
@@ -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
|
||||
|
||||
+114
-73
@@ -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) {
|
||||
|
||||
+7
-6
@@ -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
|
||||
}
|
||||
|
||||
+22
-14
@@ -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
|
||||
|
||||
+3
-4
@@ -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
|
||||
|
||||
|
||||
+7
-6
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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:
|
||||
|
||||
+19
-14
@@ -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
|
||||
|
||||
+11
-9
@@ -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");
|
||||
}));
|
||||
}));
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Reference in New Issue
Block a user