From 8d1957d2e86c8f0bfd77d740fbc1d753f44557ef Mon Sep 17 00:00:00 2001 From: Terry Mancey Date: Tue, 7 Apr 2026 21:45:12 -0500 Subject: [PATCH] [ads] Add confirmation_tokens and payment_tokens database tables (#35341) --- components/brave_ads/core/internal/BUILD.gn | 4 + .../confirmation_tokens_database_table.cc | 233 +++++++++++++++ .../confirmation_tokens_database_table.h | 52 ++++ ...irmation_tokens_database_table_unittest.cc | 147 ++++++++++ .../payment_tokens_database_table.cc | 265 ++++++++++++++++++ .../payment_tokens_database_table.h | 49 ++++ .../payment_tokens_database_table_unittest.cc | 193 +++++++++++++ .../internal/database/database_manager.cc | 1 + .../database/database_constants.h | 4 +- .../database/database_creation.cc | 8 + .../database/database_migration.cc | 8 + components/brave_ads/core/test/BUILD.gn | 2 + .../migration/database_schema_1.sqlite | Bin 57344 -> 57344 bytes .../migration/database_schema_10.sqlite | Bin 110592 -> 110592 bytes .../migration/database_schema_11.sqlite | Bin 114688 -> 114688 bytes .../migration/database_schema_12.sqlite | Bin 114688 -> 114688 bytes .../migration/database_schema_13.sqlite | Bin 114688 -> 114688 bytes .../migration/database_schema_14.sqlite | Bin 114688 -> 114688 bytes .../migration/database_schema_15.sqlite | Bin 122880 -> 122880 bytes .../migration/database_schema_16.sqlite | Bin 122880 -> 122880 bytes .../migration/database_schema_17.sqlite | Bin 126976 -> 126976 bytes .../migration/database_schema_18.sqlite | Bin 139264 -> 139264 bytes .../migration/database_schema_19.sqlite | Bin 147456 -> 147456 bytes .../migration/database_schema_2.sqlite | Bin 57344 -> 57344 bytes .../migration/database_schema_20.sqlite | Bin 143360 -> 143360 bytes .../migration/database_schema_21.sqlite | Bin 139264 -> 139264 bytes .../migration/database_schema_22.sqlite | Bin 147456 -> 147456 bytes .../migration/database_schema_23.sqlite | Bin 147456 -> 147456 bytes .../migration/database_schema_24.sqlite | Bin 147456 -> 147456 bytes .../migration/database_schema_25.sqlite | Bin 155648 -> 155648 bytes .../migration/database_schema_26.sqlite | Bin 155648 -> 155648 bytes .../migration/database_schema_27.sqlite | Bin 163840 -> 163840 bytes .../migration/database_schema_28.sqlite | Bin 159744 -> 159744 bytes .../migration/database_schema_29.sqlite | Bin 155648 -> 155648 bytes .../migration/database_schema_3.sqlite | Bin 86016 -> 86016 bytes .../migration/database_schema_30.sqlite | Bin 155648 -> 155648 bytes .../migration/database_schema_31.sqlite | Bin 155648 -> 155648 bytes .../migration/database_schema_32.sqlite | Bin 155648 -> 155648 bytes .../migration/database_schema_33.sqlite | Bin 155648 -> 155648 bytes .../migration/database_schema_34.sqlite | Bin 155648 -> 155648 bytes .../migration/database_schema_35.sqlite | Bin 196608 -> 196608 bytes .../migration/database_schema_36.sqlite | Bin 204800 -> 204800 bytes .../migration/database_schema_37.sqlite | Bin 184320 -> 184320 bytes .../migration/database_schema_38.sqlite | Bin 172032 -> 172032 bytes .../migration/database_schema_39.sqlite | Bin 172032 -> 172032 bytes .../migration/database_schema_4.sqlite | Bin 98304 -> 98304 bytes .../migration/database_schema_40.sqlite | Bin 172032 -> 172032 bytes .../migration/database_schema_41.sqlite | Bin 172032 -> 172032 bytes .../migration/database_schema_42.sqlite | Bin 184320 -> 184320 bytes .../migration/database_schema_43.sqlite | Bin 225280 -> 225280 bytes .../migration/database_schema_44.sqlite | Bin 225280 -> 225280 bytes .../migration/database_schema_45.sqlite | Bin 225280 -> 225280 bytes .../migration/database_schema_46.sqlite | Bin 225280 -> 225280 bytes .../migration/database_schema_47.sqlite | Bin 217088 -> 217088 bytes .../migration/database_schema_48.sqlite | Bin 217088 -> 217088 bytes .../migration/database_schema_49.sqlite | Bin 217088 -> 217088 bytes .../migration/database_schema_5.sqlite | Bin 106496 -> 106496 bytes .../migration/database_schema_50.sqlite | Bin 221184 -> 221184 bytes .../migration/database_schema_51.sqlite | Bin 233472 -> 233472 bytes .../migration/database_schema_52.sqlite | Bin 233472 -> 233472 bytes .../migration/database_schema_53.sqlite | Bin 217088 -> 217088 bytes .../migration/database_schema_54.sqlite | Bin 217088 -> 217088 bytes .../migration/database_schema_55.sqlite | Bin 167936 -> 167936 bytes .../migration/database_schema_56.sqlite | Bin 0 -> 184320 bytes .../migration/database_schema_6.sqlite | Bin 106496 -> 106496 bytes .../migration/database_schema_7.sqlite | Bin 90112 -> 90112 bytes .../migration/database_schema_8.sqlite | Bin 90112 -> 90112 bytes .../migration/database_schema_9.sqlite | Bin 98304 -> 98304 bytes .../data/database/migration/mock_database.py | 42 +++ 69 files changed, 1006 insertions(+), 2 deletions(-) create mode 100644 components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.cc create mode 100644 components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.h create mode 100644 components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table_unittest.cc create mode 100644 components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.cc create mode 100644 components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.h create mode 100644 components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table_unittest.cc create mode 100644 components/brave_ads/core/test/data/database/migration/database_schema_56.sqlite diff --git a/components/brave_ads/core/internal/BUILD.gn b/components/brave_ads/core/internal/BUILD.gn index 3a124ef6676..e976fc979ba 100644 --- a/components/brave_ads/core/internal/BUILD.gn +++ b/components/brave_ads/core/internal/BUILD.gn @@ -129,6 +129,8 @@ static_library("internal") { "account/tokens/confirmation_tokens/confirmation_token_info.h", "account/tokens/confirmation_tokens/confirmation_tokens.cc", "account/tokens/confirmation_tokens/confirmation_tokens.h", + "account/tokens/confirmation_tokens/confirmation_tokens_database_table.cc", + "account/tokens/confirmation_tokens/confirmation_tokens_database_table.h", "account/tokens/confirmation_tokens/confirmation_tokens_util.cc", "account/tokens/confirmation_tokens/confirmation_tokens_util.h", "account/tokens/confirmation_tokens/confirmation_tokens_value_util.cc", @@ -141,6 +143,8 @@ static_library("internal") { "account/tokens/payment_tokens/payment_token_value_util.h", "account/tokens/payment_tokens/payment_tokens.cc", "account/tokens/payment_tokens/payment_tokens.h", + "account/tokens/payment_tokens/payment_tokens_database_table.cc", + "account/tokens/payment_tokens/payment_tokens_database_table.h", "account/tokens/token_generator.cc", "account/tokens/token_generator.h", "account/tokens/token_generator_interface.h", diff --git a/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.cc b/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.cc new file mode 100644 index 00000000000..925edc6c9c6 --- /dev/null +++ b/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.cc @@ -0,0 +1,233 @@ +/* Copyright (c) 2026 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 "brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.h" + +#include +#include +#include + +#include "base/check.h" +#include "base/functional/bind.h" +#include "base/location.h" +#include "base/strings/string_util.h" +#include "brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_token_info.h" +#include "brave/components/brave_ads/core/internal/common/challenge_bypass_ristretto/public_key.h" +#include "brave/components/brave_ads/core/internal/common/challenge_bypass_ristretto/unblinded_token.h" +#include "brave/components/brave_ads/core/internal/common/database/database_column_util.h" +#include "brave/components/brave_ads/core/internal/common/database/database_table_util.h" +#include "brave/components/brave_ads/core/internal/common/database/database_transaction_util.h" +#include "brave/components/brave_ads/core/internal/common/logging_util.h" +#include "brave/components/brave_ads/core/mojom/brave_ads.mojom.h" + +namespace brave_ads::database::table { + +namespace { + +constexpr char kTableName[] = "confirmation_tokens"; + +void BindColumnTypes(const mojom::DBActionInfoPtr& mojom_db_action) { + CHECK(mojom_db_action); + + mojom_db_action->bind_column_types = { + mojom::DBBindColumnType::kString, // unblinded_token + mojom::DBBindColumnType::kString, // public_key + mojom::DBBindColumnType::kString // signature + }; +} + +size_t BindColumns(const mojom::DBActionInfoPtr& mojom_db_action, + const ConfirmationTokenList& confirmation_tokens) { + CHECK(mojom_db_action); + CHECK(!confirmation_tokens.empty()); + + size_t row_count = 0; + + int32_t index = 0; + for (const auto& confirmation_token : confirmation_tokens) { + BindColumnString( + mojom_db_action, index++, + confirmation_token.unblinded_token.EncodeBase64().value_or("")); + BindColumnString(mojom_db_action, index++, + confirmation_token.public_key.EncodeBase64().value_or("")); + BindColumnString(mojom_db_action, index++, + confirmation_token.signature_base64); + + ++row_count; + } + + return row_count; +} + +ConfirmationTokenInfo FromMojomRow(const mojom::DBRowInfoPtr& mojom_db_row) { + CHECK(mojom_db_row); + + ConfirmationTokenInfo confirmation_token; + confirmation_token.unblinded_token = + cbr::UnblindedToken(ColumnString(mojom_db_row, 0)); + confirmation_token.public_key = cbr::PublicKey(ColumnString(mojom_db_row, 1)); + confirmation_token.signature_base64 = ColumnString(mojom_db_row, 2); + return confirmation_token; +} + +void GetAllCallback( + GetConfirmationTokensCallback callback, + mojom::DBTransactionResultInfoPtr mojom_db_transaction_result) { + if (!IsTransactionSuccessful(mojom_db_transaction_result)) { + BLOG(0, "Failed to get confirmation tokens"); + return std::move(callback).Run(/*success=*/false, + /*confirmation_tokens=*/{}); + } + + CHECK(mojom_db_transaction_result->rows_union); + + ConfirmationTokenList confirmation_tokens; + for (auto& mojom_db_row : + mojom_db_transaction_result->rows_union->get_rows()) { + confirmation_tokens.push_back(FromMojomRow(mojom_db_row)); + } + + std::move(callback).Run(/*success=*/true, std::move(confirmation_tokens)); +} + +} // namespace + +void ConfirmationTokens::Save(const ConfirmationTokenList& confirmation_tokens, + ResultCallback callback) { + if (confirmation_tokens.empty()) { + return std::move(callback).Run(/*success=*/true); + } + + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + + Insert(mojom_db_transaction, confirmation_tokens); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + std::move(callback)); +} + +void ConfirmationTokens::Insert( + const mojom::DBTransactionInfoPtr& mojom_db_transaction, + const ConfirmationTokenList& confirmation_tokens) { + CHECK(mojom_db_transaction); + + if (confirmation_tokens.empty()) { + return; + } + + mojom::DBActionInfoPtr mojom_db_action = mojom::DBActionInfo::New(); + mojom_db_action->type = mojom::DBActionInfo::Type::kExecuteWithBindings; + mojom_db_action->sql = BuildInsertSql(mojom_db_action, confirmation_tokens); + mojom_db_transaction->actions.push_back(std::move(mojom_db_action)); +} + +void ConfirmationTokens::Delete(const ConfirmationTokenInfo& confirmation_token, + ResultCallback callback) { + const std::optional unblinded_token_base64 = + confirmation_token.unblinded_token.EncodeBase64(); + if (!unblinded_token_base64) { + BLOG(0, "Failed to delete confirmation token"); + return std::move(callback).Run(/*success=*/false); + } + + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + Execute(mojom_db_transaction, R"( + DELETE FROM + $1 + WHERE + unblinded_token = '$2')", + {kTableName, *unblinded_token_base64}); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + std::move(callback)); +} + +void ConfirmationTokens::DeleteAll(ResultCallback callback) { + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + Execute(mojom_db_transaction, R"( + DELETE FROM + $1)", + {kTableName}); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + std::move(callback)); +} + +void ConfirmationTokens::GetAll(GetConfirmationTokensCallback callback) const { + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + mojom::DBActionInfoPtr mojom_db_action = mojom::DBActionInfo::New(); + mojom_db_action->type = mojom::DBActionInfo::Type::kExecuteQueryWithBindings; + mojom_db_action->sql = base::ReplaceStringPlaceholders( + R"( + SELECT + unblinded_token, + public_key, + signature + FROM + $1)", + {kTableName}, nullptr); + BindColumnTypes(mojom_db_action); + mojom_db_transaction->actions.push_back(std::move(mojom_db_action)); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + base::BindOnce(&GetAllCallback, std::move(callback))); +} + +void ConfirmationTokens::Create( + const mojom::DBTransactionInfoPtr& mojom_db_transaction) { + CHECK(mojom_db_transaction); + + Execute(mojom_db_transaction, R"( + CREATE TABLE confirmation_tokens ( + unblinded_token TEXT NOT NULL PRIMARY KEY ON CONFLICT REPLACE, + public_key TEXT NOT NULL, + signature TEXT NOT NULL + ))"); +} + +void ConfirmationTokens::Migrate( + const mojom::DBTransactionInfoPtr& mojom_db_transaction, + int to_version) { + CHECK(mojom_db_transaction); + + switch (to_version) { + case 56: { + Create(mojom_db_transaction); + break; + } + + default: { + // No migration needed. + break; + } + } +} + +/////////////////////////////////////////////////////////////////////////////// + +std::string ConfirmationTokens::BuildInsertSql( + const mojom::DBActionInfoPtr& mojom_db_action, + const ConfirmationTokenList& confirmation_tokens) const { + CHECK(mojom_db_action); + CHECK(!confirmation_tokens.empty()); + + const size_t row_count = BindColumns(mojom_db_action, confirmation_tokens); + + return base::ReplaceStringPlaceholders( + R"( + INSERT INTO $1 ( + unblinded_token, + public_key, + signature + ) VALUES $2)", + {kTableName, BuildBindColumnPlaceholders(/*column_count=*/3U, row_count)}, + nullptr); +} + +} // namespace brave_ads::database::table diff --git a/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.h b/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.h new file mode 100644 index 00000000000..d08377d4eeb --- /dev/null +++ b/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.h @@ -0,0 +1,52 @@ +/* Copyright (c) 2026 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * 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/. */ + +#ifndef BRAVE_COMPONENTS_BRAVE_ADS_CORE_INTERNAL_ACCOUNT_TOKENS_CONFIRMATION_TOKENS_CONFIRMATION_TOKENS_DATABASE_TABLE_H_ +#define BRAVE_COMPONENTS_BRAVE_ADS_CORE_INTERNAL_ACCOUNT_TOKENS_CONFIRMATION_TOKENS_CONFIRMATION_TOKENS_DATABASE_TABLE_H_ + +#include + +#include "base/functional/callback.h" +#include "brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_token_info.h" +#include "brave/components/brave_ads/core/internal/database/database_table_interface.h" +#include "brave/components/brave_ads/core/mojom/brave_ads.mojom-forward.h" +#include "brave/components/brave_ads/core/public/ads_callback.h" + +namespace brave_ads::database::table { + +using GetConfirmationTokensCallback = + base::OnceCallback; + +// Persists unspent confirmation tokens that are pending assignment to an ad +// confirmation. Tokens are loaded from this table on startup to populate the +// in-memory cache, and written here on every add or removal. +class ConfirmationTokens final : public TableInterface { + public: + void Save(const ConfirmationTokenList& confirmation_tokens, + ResultCallback callback); + + void Insert(const mojom::DBTransactionInfoPtr& mojom_db_transaction, + const ConfirmationTokenList& confirmation_tokens); + + void Delete(const ConfirmationTokenInfo& confirmation_token, + ResultCallback callback); + void DeleteAll(ResultCallback callback); + + void GetAll(GetConfirmationTokensCallback callback) const; + + void Create(const mojom::DBTransactionInfoPtr& mojom_db_transaction) override; + void Migrate(const mojom::DBTransactionInfoPtr& mojom_db_transaction, + int to_version) override; + + private: + std::string BuildInsertSql( + const mojom::DBActionInfoPtr& mojom_db_action, + const ConfirmationTokenList& confirmation_tokens) const; +}; + +} // namespace brave_ads::database::table + +#endif // BRAVE_COMPONENTS_BRAVE_ADS_CORE_INTERNAL_ACCOUNT_TOKENS_CONFIRMATION_TOKENS_CONFIRMATION_TOKENS_DATABASE_TABLE_H_ diff --git a/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table_unittest.cc b/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table_unittest.cc new file mode 100644 index 00000000000..cd40794d4fe --- /dev/null +++ b/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table_unittest.cc @@ -0,0 +1,147 @@ +/* Copyright (c) 2026 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 "brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.h" + +#include "base/test/test_future.h" +#include "brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_token_info.h" +#include "brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/test/confirmation_tokens_test_util.h" +#include "brave/components/brave_ads/core/internal/common/test/test_base.h" +#include "testing/gmock/include/gmock/gmock.h" + +// npm run test -- brave_unit_tests --filter=BraveAds* + +namespace brave_ads::database::table { + +class BraveAdsConfirmationTokensDatabaseTableTest : public test::TestBase { + protected: + ConfirmationTokens database_table_; +}; + +TEST_F(BraveAdsConfirmationTokensDatabaseTableTest, + SaveEmptyConfirmationTokens) { + // Act + base::test::TestFuture save_test_future; + database_table_.Save({}, save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, confirmation_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_THAT(confirmation_tokens, ::testing::IsEmpty()); +} + +TEST_F(BraveAdsConfirmationTokensDatabaseTableTest, SaveConfirmationTokens) { + // Act + base::test::TestFuture save_test_future; + database_table_.Save(test::BuildConfirmationTokens(/*count=*/7), + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, confirmation_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_EQ(test::BuildConfirmationTokens(/*count=*/7), confirmation_tokens); +} + +TEST_F(BraveAdsConfirmationTokensDatabaseTableTest, + SaveDuplicateConfirmationTokens) { + // Arrange + base::test::TestFuture save_test_future; + database_table_.Save(test::BuildConfirmationTokens(/*count=*/1), + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Act + base::test::TestFuture duplicate_test_future; + database_table_.Save(test::BuildConfirmationTokens(/*count=*/1), + duplicate_test_future.GetCallback()); + ASSERT_TRUE(duplicate_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, confirmation_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_EQ(test::BuildConfirmationTokens(/*count=*/1), confirmation_tokens); +} + +TEST_F(BraveAdsConfirmationTokensDatabaseTableTest, DeleteConfirmationToken) { + // Arrange + base::test::TestFuture save_test_future; + database_table_.Save(test::BuildConfirmationTokens(/*count=*/2), + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Act + base::test::TestFuture delete_test_future; + database_table_.Delete(test::BuildConfirmationTokens(/*count=*/2).front(), + delete_test_future.GetCallback()); + ASSERT_TRUE(delete_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, confirmation_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_EQ((ConfirmationTokenList{ + test::BuildConfirmationTokens(/*count=*/2).back()}), + confirmation_tokens); +} + +TEST_F(BraveAdsConfirmationTokensDatabaseTableTest, + DoNotDeleteMissingConfirmationToken) { + // Arrange + base::test::TestFuture save_test_future; + database_table_.Save(test::BuildConfirmationTokens(/*count=*/1), + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Act + base::test::TestFuture delete_test_future; + database_table_.Delete(test::BuildConfirmationTokens(/*count=*/2).back(), + delete_test_future.GetCallback()); + ASSERT_TRUE(delete_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, confirmation_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_EQ(test::BuildConfirmationTokens(/*count=*/1), confirmation_tokens); +} + +TEST_F(BraveAdsConfirmationTokensDatabaseTableTest, + DeleteAllConfirmationTokens) { + // Arrange + base::test::TestFuture save_test_future; + database_table_.Save(test::BuildConfirmationTokens(/*count=*/7), + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Act + base::test::TestFuture delete_all_test_future; + database_table_.DeleteAll(delete_all_test_future.GetCallback()); + ASSERT_TRUE(delete_all_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, confirmation_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_THAT(confirmation_tokens, ::testing::IsEmpty()); +} + +} // namespace brave_ads::database::table diff --git a/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.cc b/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.cc new file mode 100644 index 00000000000..e77b5cee04b --- /dev/null +++ b/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.cc @@ -0,0 +1,265 @@ +/* Copyright (c) 2026 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 "brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.h" + +#include +#include +#include +#include + +#include "base/check.h" +#include "base/functional/bind.h" +#include "base/location.h" +#include "base/strings/string_util.h" +#include "brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_token_info.h" +#include "brave/components/brave_ads/core/internal/common/challenge_bypass_ristretto/public_key.h" +#include "brave/components/brave_ads/core/internal/common/challenge_bypass_ristretto/unblinded_token.h" +#include "brave/components/brave_ads/core/internal/common/database/database_column_util.h" +#include "brave/components/brave_ads/core/internal/common/database/database_table_util.h" +#include "brave/components/brave_ads/core/internal/common/database/database_transaction_util.h" +#include "brave/components/brave_ads/core/internal/common/logging_util.h" +#include "brave/components/brave_ads/core/mojom/brave_ads.mojom.h" +#include "brave/components/brave_ads/core/public/account/confirmations/confirmation_type.h" +#include "brave/components/brave_ads/core/public/ad_units/ad_type.h" + +namespace brave_ads::database::table { + +namespace { + +constexpr char kTableName[] = "payment_tokens"; + +void BindColumnTypes(const mojom::DBActionInfoPtr& mojom_db_action) { + CHECK(mojom_db_action); + + mojom_db_action->bind_column_types = { + mojom::DBBindColumnType::kString, // transaction_id + mojom::DBBindColumnType::kString, // unblinded_token + mojom::DBBindColumnType::kString, // public_key + mojom::DBBindColumnType::kString, // confirmation_type + mojom::DBBindColumnType::kString // ad_type + }; +} + +size_t BindColumns(const mojom::DBActionInfoPtr& mojom_db_action, + const PaymentTokenList& payment_tokens) { + CHECK(mojom_db_action); + CHECK(!payment_tokens.empty()); + + size_t row_count = 0; + + int32_t index = 0; + for (const auto& payment_token : payment_tokens) { + BindColumnString(mojom_db_action, index++, payment_token.transaction_id); + BindColumnString(mojom_db_action, index++, + payment_token.unblinded_token.EncodeBase64().value_or("")); + BindColumnString(mojom_db_action, index++, + payment_token.public_key.EncodeBase64().value_or("")); + BindColumnString(mojom_db_action, index++, + ToString(payment_token.confirmation_type)); + BindColumnString(mojom_db_action, index++, ToString(payment_token.ad_type)); + + ++row_count; + } + + return row_count; +} + +PaymentTokenInfo FromMojomRow(const mojom::DBRowInfoPtr& mojom_db_row) { + CHECK(mojom_db_row); + + PaymentTokenInfo payment_token; + payment_token.transaction_id = ColumnString(mojom_db_row, 0); + payment_token.unblinded_token = + cbr::UnblindedToken(ColumnString(mojom_db_row, 1)); + payment_token.public_key = cbr::PublicKey(ColumnString(mojom_db_row, 2)); + payment_token.confirmation_type = + ToMojomConfirmationType(ColumnString(mojom_db_row, 3)); + payment_token.ad_type = ToMojomAdType(ColumnString(mojom_db_row, 4)); + return payment_token; +} + +void GetAllCallback( + GetPaymentTokensCallback callback, + mojom::DBTransactionResultInfoPtr mojom_db_transaction_result) { + if (!IsTransactionSuccessful(mojom_db_transaction_result)) { + BLOG(0, "Failed to get payment tokens"); + return std::move(callback).Run(/*success=*/false, /*payment_tokens=*/{}); + } + + CHECK(mojom_db_transaction_result->rows_union); + + PaymentTokenList payment_tokens; + for (auto& mojom_db_row : + mojom_db_transaction_result->rows_union->get_rows()) { + payment_tokens.push_back(FromMojomRow(mojom_db_row)); + } + + std::move(callback).Run(/*success=*/true, std::move(payment_tokens)); +} + +} // namespace + +void PaymentTokens::Save(const PaymentTokenList& payment_tokens, + ResultCallback callback) { + if (payment_tokens.empty()) { + return std::move(callback).Run(/*success=*/true); + } + + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + + Insert(mojom_db_transaction, payment_tokens); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + std::move(callback)); +} + +void PaymentTokens::Insert( + const mojom::DBTransactionInfoPtr& mojom_db_transaction, + const PaymentTokenList& payment_tokens) { + CHECK(mojom_db_transaction); + + if (payment_tokens.empty()) { + return; + } + + mojom::DBActionInfoPtr mojom_db_action = mojom::DBActionInfo::New(); + mojom_db_action->type = mojom::DBActionInfo::Type::kExecuteWithBindings; + mojom_db_action->sql = BuildInsertSql(mojom_db_action, payment_tokens); + mojom_db_transaction->actions.push_back(std::move(mojom_db_action)); +} + +void PaymentTokens::Delete(const PaymentTokenInfo& payment_token, + ResultCallback callback) { + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + Execute(mojom_db_transaction, R"( + DELETE FROM + $1 + WHERE + transaction_id = '$2')", + {kTableName, payment_token.transaction_id}); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + std::move(callback)); +} + +void PaymentTokens::Delete(const PaymentTokenList& payment_tokens, + ResultCallback callback) { + if (payment_tokens.empty()) { + return std::move(callback).Run(/*success=*/true); + } + + std::vector transaction_ids; + transaction_ids.reserve(payment_tokens.size()); + for (const auto& payment_token : payment_tokens) { + transaction_ids.push_back("'" + payment_token.transaction_id + "'"); + } + + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + Execute(mojom_db_transaction, R"( + DELETE FROM + $1 + WHERE + transaction_id IN ($2))", + {kTableName, base::JoinString(transaction_ids, ", ")}); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + std::move(callback)); +} + +void PaymentTokens::DeleteAll(ResultCallback callback) { + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + Execute(mojom_db_transaction, R"( + DELETE FROM + $1)", + {kTableName}); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + std::move(callback)); +} + +void PaymentTokens::GetAll(GetPaymentTokensCallback callback) const { + mojom::DBTransactionInfoPtr mojom_db_transaction = + mojom::DBTransactionInfo::New(); + mojom::DBActionInfoPtr mojom_db_action = mojom::DBActionInfo::New(); + mojom_db_action->type = mojom::DBActionInfo::Type::kExecuteQueryWithBindings; + mojom_db_action->sql = base::ReplaceStringPlaceholders( + R"( + SELECT + transaction_id, + unblinded_token, + public_key, + confirmation_type, + ad_type + FROM + $1)", + {kTableName}, nullptr); + BindColumnTypes(mojom_db_action); + mojom_db_transaction->actions.push_back(std::move(mojom_db_action)); + + RunTransaction(FROM_HERE, std::move(mojom_db_transaction), + base::BindOnce(&GetAllCallback, std::move(callback))); +} + +void PaymentTokens::Create( + const mojom::DBTransactionInfoPtr& mojom_db_transaction) { + CHECK(mojom_db_transaction); + + Execute(mojom_db_transaction, R"( + CREATE TABLE payment_tokens ( + transaction_id TEXT NOT NULL PRIMARY KEY ON CONFLICT REPLACE, + unblinded_token TEXT NOT NULL, + public_key TEXT NOT NULL, + confirmation_type TEXT NOT NULL, + ad_type TEXT NOT NULL + ))"); +} + +void PaymentTokens::Migrate( + const mojom::DBTransactionInfoPtr& mojom_db_transaction, + int to_version) { + CHECK(mojom_db_transaction); + + switch (to_version) { + case 56: { + Create(mojom_db_transaction); + break; + } + + default: { + // No migration needed. + break; + } + } +} + +/////////////////////////////////////////////////////////////////////////////// + +std::string PaymentTokens::BuildInsertSql( + const mojom::DBActionInfoPtr& mojom_db_action, + const PaymentTokenList& payment_tokens) const { + CHECK(mojom_db_action); + CHECK(!payment_tokens.empty()); + + const size_t row_count = BindColumns(mojom_db_action, payment_tokens); + + return base::ReplaceStringPlaceholders( + R"( + INSERT INTO $1 ( + transaction_id, + unblinded_token, + public_key, + confirmation_type, + ad_type + ) VALUES $2)", + {kTableName, BuildBindColumnPlaceholders(/*column_count=*/5U, row_count)}, + nullptr); +} + +} // namespace brave_ads::database::table diff --git a/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.h b/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.h new file mode 100644 index 00000000000..4395d72fda6 --- /dev/null +++ b/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.h @@ -0,0 +1,49 @@ +/* Copyright (c) 2026 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * 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/. */ + +#ifndef BRAVE_COMPONENTS_BRAVE_ADS_CORE_INTERNAL_ACCOUNT_TOKENS_PAYMENT_TOKENS_PAYMENT_TOKENS_DATABASE_TABLE_H_ +#define BRAVE_COMPONENTS_BRAVE_ADS_CORE_INTERNAL_ACCOUNT_TOKENS_PAYMENT_TOKENS_PAYMENT_TOKENS_DATABASE_TABLE_H_ + +#include + +#include "base/functional/callback.h" +#include "brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_token_info.h" +#include "brave/components/brave_ads/core/internal/database/database_table_interface.h" +#include "brave/components/brave_ads/core/mojom/brave_ads.mojom-forward.h" +#include "brave/components/brave_ads/core/public/ads_callback.h" + +namespace brave_ads::database::table { + +using GetPaymentTokensCallback = + base::OnceCallback; + +// Persists unspent payment tokens that have been earned via ad confirmations +// and are awaiting redemption. Tokens are loaded from this table on startup to +// populate the in-memory cache, and written here on every add or removal. +class PaymentTokens final : public TableInterface { + public: + void Save(const PaymentTokenList& payment_tokens, ResultCallback callback); + + void Insert(const mojom::DBTransactionInfoPtr& mojom_db_transaction, + const PaymentTokenList& payment_tokens); + + void Delete(const PaymentTokenInfo& payment_token, ResultCallback callback); + void Delete(const PaymentTokenList& payment_tokens, ResultCallback callback); + void DeleteAll(ResultCallback callback); + + void GetAll(GetPaymentTokensCallback callback) const; + + void Create(const mojom::DBTransactionInfoPtr& mojom_db_transaction) override; + void Migrate(const mojom::DBTransactionInfoPtr& mojom_db_transaction, + int to_version) override; + + private: + std::string BuildInsertSql(const mojom::DBActionInfoPtr& mojom_db_action, + const PaymentTokenList& payment_tokens) const; +}; + +} // namespace brave_ads::database::table + +#endif // BRAVE_COMPONENTS_BRAVE_ADS_CORE_INTERNAL_ACCOUNT_TOKENS_PAYMENT_TOKENS_PAYMENT_TOKENS_DATABASE_TABLE_H_ diff --git a/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table_unittest.cc b/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table_unittest.cc new file mode 100644 index 00000000000..a3e0061bdeb --- /dev/null +++ b/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table_unittest.cc @@ -0,0 +1,193 @@ +/* Copyright (c) 2026 The Brave Authors. All rights reserved. + * This Source Code Form is subject to the terms of the Mozilla Public + * 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 "brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.h" + +#include "base/test/test_future.h" +#include "brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_token_info.h" +#include "brave/components/brave_ads/core/internal/account/tokens/payment_tokens/test/payment_tokens_test_util.h" +#include "brave/components/brave_ads/core/internal/common/test/test_base.h" +#include "testing/gmock/include/gmock/gmock.h" + +// npm run test -- brave_unit_tests --filter=BraveAds* + +namespace brave_ads::database::table { + +class BraveAdsPaymentTokensDatabaseTableTest : public test::TestBase { + protected: + PaymentTokens database_table_; +}; + +TEST_F(BraveAdsPaymentTokensDatabaseTableTest, SaveEmptyPaymentTokens) { + // Act + base::test::TestFuture save_test_future; + database_table_.Save({}, save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, payment_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_THAT(payment_tokens, ::testing::IsEmpty()); +} + +TEST_F(BraveAdsPaymentTokensDatabaseTableTest, SavePaymentTokens) { + // Arrange + PaymentTokenInfo payment_token_1 = test::BuildPaymentToken(); + payment_token_1.transaction_id = "foo"; + PaymentTokenInfo payment_token_2 = test::BuildPaymentToken(); + payment_token_2.transaction_id = "bar"; + + // Act + base::test::TestFuture save_test_future; + database_table_.Save({payment_token_1, payment_token_2}, + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, payment_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_EQ((PaymentTokenList{payment_token_1, payment_token_2}), + payment_tokens); +} + +TEST_F(BraveAdsPaymentTokensDatabaseTableTest, SaveDuplicatePaymentTokens) { + // Arrange + const PaymentTokenInfo payment_token = test::BuildPaymentToken(); + base::test::TestFuture save_test_future; + database_table_.Save({payment_token}, save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Act + base::test::TestFuture duplicate_test_future; + database_table_.Save({payment_token}, duplicate_test_future.GetCallback()); + ASSERT_TRUE(duplicate_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, payment_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_THAT(payment_tokens, ::testing::SizeIs(1U)); +} + +TEST_F(BraveAdsPaymentTokensDatabaseTableTest, DeletePaymentToken) { + // Arrange + PaymentTokenInfo payment_token_1 = test::BuildPaymentToken(); + payment_token_1.transaction_id = "foo"; + PaymentTokenInfo payment_token_2 = test::BuildPaymentToken(); + payment_token_2.transaction_id = "bar"; + base::test::TestFuture save_test_future; + database_table_.Save({payment_token_1, payment_token_2}, + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Act + base::test::TestFuture delete_test_future; + database_table_.Delete(payment_token_1, delete_test_future.GetCallback()); + ASSERT_TRUE(delete_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, payment_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_EQ((PaymentTokenList{payment_token_2}), payment_tokens); +} + +TEST_F(BraveAdsPaymentTokensDatabaseTableTest, DeletePaymentTokens) { + // Arrange + PaymentTokenInfo payment_token_1 = test::BuildPaymentToken(); + payment_token_1.transaction_id = "foo"; + PaymentTokenInfo payment_token_2 = test::BuildPaymentToken(); + payment_token_2.transaction_id = "bar"; + PaymentTokenInfo payment_token_3 = test::BuildPaymentToken(); + payment_token_3.transaction_id = "baz"; + base::test::TestFuture save_test_future; + database_table_.Save({payment_token_1, payment_token_2, payment_token_3}, + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Act + base::test::TestFuture delete_test_future; + database_table_.Delete({payment_token_1, payment_token_2}, + delete_test_future.GetCallback()); + ASSERT_TRUE(delete_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, payment_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_EQ((PaymentTokenList{payment_token_3}), payment_tokens); +} + +TEST_F(BraveAdsPaymentTokensDatabaseTableTest, DeleteEmptyPaymentTokens) { + // Act & Assert + base::test::TestFuture delete_test_future; + database_table_.Delete(PaymentTokenList{}, delete_test_future.GetCallback()); + EXPECT_TRUE(delete_test_future.Take()); +} + +TEST_F(BraveAdsPaymentTokensDatabaseTableTest, DoNotDeleteMissingPaymentToken) { + // Arrange + PaymentTokenInfo payment_token = test::BuildPaymentToken(); + payment_token.transaction_id = "foo"; + base::test::TestFuture save_test_future; + database_table_.Save({payment_token}, save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + PaymentTokenInfo missing_payment_token = test::BuildPaymentToken(); + missing_payment_token.transaction_id = "bar"; + + // Act + base::test::TestFuture delete_test_future; + database_table_.Delete(missing_payment_token, + delete_test_future.GetCallback()); + ASSERT_TRUE(delete_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, payment_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_EQ((PaymentTokenList{payment_token}), payment_tokens); +} + +TEST_F(BraveAdsPaymentTokensDatabaseTableTest, DeleteAllPaymentTokens) { + // Arrange + PaymentTokenInfo payment_token_1 = test::BuildPaymentToken(); + payment_token_1.transaction_id = "foo"; + PaymentTokenInfo payment_token_2 = test::BuildPaymentToken(); + payment_token_2.transaction_id = "bar"; + base::test::TestFuture save_test_future; + database_table_.Save({payment_token_1, payment_token_2}, + save_test_future.GetCallback()); + ASSERT_TRUE(save_test_future.Take()); + + // Act + base::test::TestFuture delete_all_test_future; + database_table_.DeleteAll(delete_all_test_future.GetCallback()); + ASSERT_TRUE(delete_all_test_future.Take()); + + // Assert + base::test::TestFuture get_all_test_future; + database_table_.GetAll( + get_all_test_future.GetCallback()); + const auto [success, payment_tokens] = get_all_test_future.Take(); + EXPECT_TRUE(success); + EXPECT_THAT(payment_tokens, ::testing::IsEmpty()); +} + +} // namespace brave_ads::database::table diff --git a/components/brave_ads/core/internal/database/database_manager.cc b/components/brave_ads/core/internal/database/database_manager.cc index 00e87460059..b8af7e00a0a 100644 --- a/components/brave_ads/core/internal/database/database_manager.cc +++ b/components/brave_ads/core/internal/database/database_manager.cc @@ -10,6 +10,7 @@ #include "base/check.h" #include "base/check_op.h" #include "base/debug/crash_logging.h" +#include "base/files/file_path.h" #include "base/functional/bind.h" #include "base/notreached.h" #include "base/task/task_traits.h" diff --git a/components/brave_ads/core/internal/legacy_migration/database/database_constants.h b/components/brave_ads/core/internal/legacy_migration/database/database_constants.h index cfb83143208..52543ae6f8e 100644 --- a/components/brave_ads/core/internal/legacy_migration/database/database_constants.h +++ b/components/brave_ads/core/internal/legacy_migration/database/database_constants.h @@ -8,8 +8,8 @@ namespace brave_ads::database { -inline constexpr int kVersionNumber = 55; -inline constexpr int kCompatibleVersionNumber = 55; +inline constexpr int kVersionNumber = 56; +inline constexpr int kCompatibleVersionNumber = 56; // If the database version number is less than or equal to this value, the // database will be razed and recreated during migration. This should be updated diff --git a/components/brave_ads/core/internal/legacy_migration/database/database_creation.cc b/components/brave_ads/core/internal/legacy_migration/database/database_creation.cc index 141e3e09565..01bee23487c 100644 --- a/components/brave_ads/core/internal/legacy_migration/database/database_creation.cc +++ b/components/brave_ads/core/internal/legacy_migration/database/database_creation.cc @@ -11,6 +11,8 @@ #include "base/location.h" #include "brave/components/brave_ads/core/internal/account/confirmations/queue/confirmation_queue_database_table.h" #include "brave/components/brave_ads/core/internal/account/deposits/deposits_database_table.h" +#include "brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.h" +#include "brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.h" #include "brave/components/brave_ads/core/internal/account/transactions/transactions_database_table.h" #include "brave/components/brave_ads/core/internal/common/database/database_transaction_util.h" #include "brave/components/brave_ads/core/internal/creatives/campaigns_database_table.h" @@ -37,6 +39,12 @@ void Create(const mojom::DBTransactionInfoPtr& mojom_db_transaction) { table::ConfirmationQueue confirmation_queue_database_table; confirmation_queue_database_table.Create(mojom_db_transaction); + table::ConfirmationTokens confirmation_tokens_database_table; + confirmation_tokens_database_table.Create(mojom_db_transaction); + + table::PaymentTokens payment_tokens_database_table; + payment_tokens_database_table.Create(mojom_db_transaction); + table::AdEvents ad_events_database_table; ad_events_database_table.Create(mojom_db_transaction); diff --git a/components/brave_ads/core/internal/legacy_migration/database/database_migration.cc b/components/brave_ads/core/internal/legacy_migration/database/database_migration.cc index 26bab8a8efa..4f93fe8f685 100644 --- a/components/brave_ads/core/internal/legacy_migration/database/database_migration.cc +++ b/components/brave_ads/core/internal/legacy_migration/database/database_migration.cc @@ -12,6 +12,8 @@ #include "base/location.h" #include "brave/components/brave_ads/core/internal/account/confirmations/queue/confirmation_queue_database_table.h" #include "brave/components/brave_ads/core/internal/account/deposits/deposits_database_table.h" +#include "brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table.h" +#include "brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table.h" #include "brave/components/brave_ads/core/internal/account/transactions/transactions_database_table.h" #include "brave/components/brave_ads/core/internal/common/database/database_table_util.h" #include "brave/components/brave_ads/core/internal/common/database/database_transaction_util.h" @@ -114,6 +116,12 @@ void MigrateToVersion(const mojom::DBTransactionInfoPtr& mojom_db_transaction, table::ConfirmationQueue confirmation_queue_database_table; confirmation_queue_database_table.Migrate(mojom_db_transaction, to_version); + table::ConfirmationTokens confirmation_tokens_database_table; + confirmation_tokens_database_table.Migrate(mojom_db_transaction, to_version); + + table::PaymentTokens payment_tokens_database_table; + payment_tokens_database_table.Migrate(mojom_db_transaction, to_version); + table::AdEvents ad_events_database_table; ad_events_database_table.Migrate(mojom_db_transaction, to_version); diff --git a/components/brave_ads/core/test/BUILD.gn b/components/brave_ads/core/test/BUILD.gn index e6bf13a608e..e5a6c01d3a1 100644 --- a/components/brave_ads/core/test/BUILD.gn +++ b/components/brave_ads/core/test/BUILD.gn @@ -73,6 +73,7 @@ source_set("brave_ads_unit_tests") { "//brave/components/brave_ads/core/internal/account/statement/statement_util_unittest.cc", "//brave/components/brave_ads/core/internal/account/test/account_observer_mock.cc", "//brave/components/brave_ads/core/internal/account/test/account_observer_mock.h", + "//brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_database_table_unittest.cc", "//brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_unittest.cc", "//brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_util_unittest.cc", "//brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/confirmation_tokens_value_util_unittest.cc", @@ -80,6 +81,7 @@ source_set("brave_ads_unit_tests") { "//brave/components/brave_ads/core/internal/account/tokens/confirmation_tokens/test/confirmation_tokens_test_util.h", "//brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_token_util_unittest.cc", "//brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_token_value_util_unittest.cc", + "//brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_database_table_unittest.cc", "//brave/components/brave_ads/core/internal/account/tokens/payment_tokens/payment_tokens_unittest.cc", "//brave/components/brave_ads/core/internal/account/tokens/payment_tokens/test/payment_tokens_test_util.cc", "//brave/components/brave_ads/core/internal/account/tokens/payment_tokens/test/payment_tokens_test_util.h", diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_1.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_1.sqlite index 5dc2b589c9d1a7dd208cb745aaeb87bf47276024..6e3cedc27696b8416a6137f31e244c2b5f1fc690 100644 GIT binary patch literal 57344 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 literal 57344 zcmeI*O^o8!9RP3`n2+6AhD1s_hgBnXH&S<^X%_Q6+CyTD0fRrV&3C0z0|pGXF}C@< z%_@hgx2jUB9;#j{_0UUCRh3?QNR_I+w1=p@q-qb5qMmzbr9NP1f!UoB?P!zj>Tij` z_Osu6{=H|zdk@VMd0Me$U#o9wlI;sRUUN8|j`w{&hr{_(hr@A%UKfiGt++2X(7SVO z{fbo-$GhKq!{hyz!?X8uhqvwhqvsRvJGZ{&`Pt1s-Fo}rotx+TKiI#Ef?xpw5C8!X z0D)%-Og;O@;O%-v0NaF$uG)x86G<&)wj#cg0a-e}yX-eCov-`HB)--9dCAQ@aSR0z^ z)7G|PtMb#k>-{E5eNl=R_9y(!y<_=3r(;pqt$~WZjn<^0-Cu04YU|}%R>Q8WKZlQ) z{r%&6_naR{i<-K+m#wwcgN@p_7O+FAUCH$9 z>s(|jLDD38ZW6di;0f|1e6V*+-MgxY*63>3+QyAX$=&_qJ9nHPl$H;SCr{4RQ*Uph z5LWx2owv)<7f;N~`~PPNT%7cO4%?KYr=~dFqoVhGI@v z&*Eo3iZ7S)GJB`Kd4^7XYgxFWq}M)2R(H|Wk(@kq?;Ud|SCzu1S`FLW-fcPekKcUL zdH!H=D`+zMgh8*J4fy$<`#pK;Tl*APeQGQ(cm31v)HjmUp}ct z)Uf$q7y6QQF#n?EK`)p0w+`<=y`Q2tSU>;-KmY_l00ck)1V8`;KmY_l00drAf!n*T zhh9~(Y&1}S`nYWcbq7_&`00ck)1V8`;KmY_l00ck)1VG>m3AEgM48t58R6=&e$g-0$ zi=}96NYw}90yE=nW|R_#6OzE%%}8Bm#Q-@7nln{vO|TIeFT^TMqnK{RsbGlC%{VHc zaH^c=({^9NxL}mjBjZ_bHlQP#Yo3mCSK?bC){^8wnnC9!Bkfo&iQDB^X~d-25hFI` zTp)u@hkh+k7BiJ#B$4W;rB*Yk$dN`>4HPB~EYb3J3iWBM7q$mwIjd)ye52ECnPy`! z${+sFUkVx=F^<)o%gdT+Hc_calHKe2 zE2*??sl!CKr3*|nl1vnOQv*xW+3tW$rY#%K`^9R4!G}U1Q5Vo9H+qTwfHYH9wGkRu z*kS}{iVD}V#%71erXrLOk`E96@a>=c?U(cMfA^8>@c!5vIQkf^zybmw00JNY0w4ea zAOHd&00JNY0?#WT@1mCajThabZOv10zUcP(&N7)7-Rt05Ci9{@QQXV%|IZ!X-*`t} z?CA67En+wi1V8`;KmY_l00ck)1V8`;KmY_@76HQTVwiH<;0AroY6S+7Tp3fEVkMLf z4mwh#BNQ|IFpx}{WICG-a*g&N(2kVHVSVTy(-r27>hcAXaG^-rc#b5xVlz`@wW(Uq zgfqio*k4SwnwZ#YQfItBKF;%G2R9}Z(~jaXLC%$@6&dS{F>cbJh#eG3iN~|Sp4J}F zu>oTiB5a1v>C~9^mnF0T2KI5C8!X009sH0T2KI5CDPa5=gkwPY|x#S|(8>&g(Y* zU5i+*+YjMh#B$v}gdG_Ff3DgDCxHM6fB*=900@8p2!H?xfB*=*!~%=)|6a797x{je z6;cf`F$fb>;H;S!iprpikBnl^Pg^|Oh^C`r+~y0pBwuQkdT7ShkQAx+XT|hl{C`#* zYG!=QozZwYpGjrJT&1DYf$TUE8wPa=&5qmQT4cGAKC>c>iA9^aP`Pzxm(DWrbdl+1 z7vulIB#Cp4eg-?UG2GwMw6L7$D|A2EXd1?>+sd^p!w%(Jp=p|pWfGZEGNI!=B|vwE zN%S)YZ882&=gNa#TNJsZF$uDx201GVgMk)pk)>cRNm)H}JeCbS8wriihyq_P@Yypy zZdL6h!Dldfx;Fkl^ge*`|ChM>Le@Y41V8`;KmY_l00ck)1V8`;zKFnLxcs{9_T|w1 zb-NJUi{Bz#x8=ULpzHP_EXV&nKXM%X_2?I#kI)J%AOHd&00JNY0w4eaAOHd&00Lj8 zzyr6J@pujn4jkxp;PH6!+2O3{x9VnYkeqQnX==sFv7ld-GBYZGRqgZdxV-4!-|g-? z9Zs~MRe{vVc8u$Uta!9N?sY9DlO-iA&IT+OPV7tYuS#u9oz(CGE3nK0;RA#s8o;`Zys`-h)=y8EAB6W-WcZx8L6 zN@lzItlw>yh#A(eki%%QCkvHnF*OJbBPDY%p>hcf&zaM4v{Rgnayf2lbY!*>q|VqD zgY&G??U{uUUyioxA*!2;lh{O44F62%#vklFHkrH3O>n{N*-4BPggT$5yZ%&XG$^FF zf*Oc*Izl%4=#KNXrOCPHF^X9r0xF;7J@dPy^#|yU(QRXv}{w>Qc?T zI%2e_5Nwl`0%2GsNy!WYcyKb))hWZ$vR~BghG_+h-IVUfWSR7Hf$(Dd->W&ifARhb z%>k%=nUx&U0s#;J0T2KI5C8!X009sH0T2LzS5n}fi@C9_2jXoPhR^Gk$IhlRjWbXvSI66c}qamX+p)OrFaG2@3U%R^Q)eUCSUDb8JcXxGH ziF5+ulMkcgiy}*Dh7h6|G?PYCntoQbFxn|{-EEQ^;_Tf zt@_sbtv5b+=8X@Y`N7wpch1hvzJB;UJTLy)x8Q;Ex3B-pclN-X3PPG#PMyB3W*e-t z{BbIRGpi(x2~Bs6G+M0dnMALqSRKtbk))t^DFEilW@RduG#ENUgoX$mwlJ*9INTCL4W^*xextjDvIwkv0<|NWQ2z z)>wIxH!Gls@njilRWA$Ua>?Yf1EnJc*5qz8qOmcd;;2^vR8t$s)xSf3L%$uKAMd-o ze73VGdy~?g-tpib0d4R7e({^@XkdD!R6yGKEv zgn9oIpq~nJaJ**l_^SDwqS=4Js=0V@&;Q$J@X8augFDY2KE6BGKR&y0ZshBqUjO*- zo`3E~*FXG|*M4R1SxgS^rj=Cb9#=Zb$is0;!M83qw*6V|OG#7!B*v|_yki0OTuDZ8 zLIZr}gj<(zL(fSo|zL`8qC(U6%y< zn$)MMGjmeQR_Aj$_ZB(g!*k21!X9aJk!s3xl6QD55=(B=w(8tM76|BpqY9}4J>bSI ziGVBD9_t74^4jn40Uw2qk+0~A-cl{Gx!*}ei+SKs>K5B{^t zmwr6|K7_pU`pEn#@4K+0%|;;<6zGA z-PQBLFaPsjf9*kaeROv7)=hi!)$5NA)%E`M{*^nI2P?dM_VO~Z)s88qghx#Qaa_26-D*M&UkQZZ2?WE?F?|$^|@%-cc=LYr7 z{x+N!FI_12Zp+}eFOf%CC0&*2tvt$O${WQ1G9Fv=t z6?DvI4_#xlR$-t`nJMq%{SbkA77O&epYy`7wD%MsQXog2AEHPj#FsG($I(DQERh{0 z4Y`$41N70{R=q`r^FdvQK!!IXw3wGWi4})+fN_M{4R--g4Guw!ZrMknBql5051VwZ zN=rM;FqiL;g}b$QO`p*!FGo{%)@q{kJTz5Sy@4+&pIw>LI0x=e2LJVo({hKobLb^s znwP!(fR_vU5a!+&#PkTHQ!ZbK-4`B1@A*4F3$FJmX!4jH8_Cq>W^)4RrbJg&bpt8F zfpTK?=F1n)oQzD7P(Ypyw~Kj3G}E=^6DIEk3k{#O+iA{^;{_WTx-}{Ec zLF+n7!@|JI+;G@KYkGi)oNL9NfoHVTYPP6%%dRn!p;Seq9YS`ls}Xg?&zKZ(*7kfs zjw6}YTaDZe4M^1Js<(X3TO!~tz`2}VgWw_`IjblVC!Dc~rLG@=s8`rNF(=tc5h$BZ z!nH|F4q?hFYye+!y4-x*C!isx8%B@?sU{|zHnU?^F@dgJN`|6cJuztPj3GF zCO>%cAKdJZZg87yC(F1^vWsJ++vqw!y4aDbhfKZjII2#yl*bKi2mU&oug0SVKb#s& z=|nMH0;-g=EBupMf`xdRYS_3-{7lxE(YiHS*l8N2L3EG`B^&h^VAd_#1eGUHg06SX zj$8DRlyW15*2vIlU42RO;p$)_-DXD4?DZDgBYH-xC+H+xYl0S$ZicvVSOxe_Qo?9d z%3)wE+O7{Ms}q)iwk$*r1l3|?l5oOKfwhM_=&BSWaQ(2B#!@(J(F_2qu^Sa(vsRL6 zsI;AmMr9R4{3o>(cwM@0mzm4s>sXsHOkpqd!jX)yn(Mm^@VTI<#ALoMCX1-6D_WE? zV}tWLY-xV1_KJd*E*(aW8%-g0N=qf`9a8FKO9&I8OlX;;OTL)<5f#uQYGxzu5S)&J zwrRHo(<*o`*e?bkria9Y$paE1Q-OBEowoAIe2h0P_Mm6oCefXv+D9;-hvir{w=r{m z{L>>kKld4-FHUt+Fq;%RJWJ3tSRpuVtXEAj)~$ugwWbRC_9u0-m{5w;u^14mf(e)! z>iX@fWX6m}PA2})fntv)RfbCiXuIUpnkZK>U{5!M*wk?VA6}fEI}2T3og)!Zc*&H& zS75nsYHeH*ORd^q6F*qejA;68#gM?PXGd`b>g}|zp`gMr3C6=%XJXeu%`I70P>4x< zOS4X*sYI_?598#9SX!7 zDbE5{ol$5qR{Bg+HsghR9%hQT6doSd zg+oI_Fz1*$YDRLu5_&u+SE_kb`#2m+N#;yCo8zGrD)n(O8bV~wo9m>9{C=XQJK@lA zj(0)`S0)w6g$re=I=fI1*$y z*ukG8$1Q+POy9=NNwZJmc^sSva(oKQ3y%YH8b?91+2RAcnnw;v(i?Z^{`y6 zTpV4`qPTFe5(uZLWQ|0cN%@L*)q>KTC|idHbQ(uT3ltn`#a8stEZdZAL;7VmUsu-g#!0SfoP!Y^saqU}#0%gc5`5!4$(KNvW!$hlo; zMk7;>%riqdTNtt3(YVxEq?q*nc%Di!VNRIQk~)o}wLhB%e9~++PVZN9u531OoJ)v2 zk`&PH<^=D?S)?B=I8>zh}vKRmSb_pbM+ zvG5DVekAm1Ec{X^_n(4!ehTyDDSyED#VN|us{gA`lK;;A*9ZT0z0Wt*&`gtHF?PaA zGjTF&{ixXZa5mQu%LBu189kV;>7LQ!5|D^pwnki8T`ydL;b*hod4;<;?1BaZIp^1# z?SwZQT5QUmpkl@dM6fQBfb8|rCdwveAPR7f7lfdfg9^>3Q_u9x5ZILu>oW@On#^FO0DHKIQN_;;>iKIxhsY&roiWEul zxv1<#19Vfw^{UAtU3S-Wj5(*zFzjwaRz4nLjNc)GE|LubhD&dT$JsEShy8h~0IR-B=18*z#%JH7TYw=wjES{BBP1K}1Wk`QMs zL%G(qmFbr$~pV)3sj|L`7q5K;8TL|NM;nesFd= z@8Ve$VDSzk5oA&-rJ1KFT@juD@ff3^7-)gK*e>z#uo9{zxLHS;Iff)h+z2fz+s$&N ziH=?t@M^MaBxKC)aTsV@G8^-gwsA#A9i&$;N7qMtq%z`W+lAa-5<@?S~#LVcA+UsR!RkE)P%U`PWDDxp(K7 z_1&lCeE1Maf2f@O>tjYAPQ}MWJbXkI&mNxhYr6(te#$+#{p|7b-M;+Rt*e)=zIgfC z<+t8={<-Gz^}qk-Zyw@gw$R4LJ{C-#Oih6)n@Ek9GleHhWiLvuOVJCt0(_T@q9qg{ z__AI4ld^OQi?J|dt;s>(CV{4U_ku0xu{D!jy zRBGoeASBuDklb_s^55_N`0m-=ThCs97tg*bkM7<&(l3g4#0A*GT$j?Js3USYv*E3@ zGGGd{-MK4-el7{NEAQgajFwo$iH(javv%J=^B+3)`F8yh8zD2)I^D_Q%9XbB}0h7;Qz`Z%)fVEW+Yw?BWF%;kdB(M1E} zy`frwQ3LWIlEp6ZOCEM*C-mIOWXMg4E>gD#lTC047F8>i52M`Q3kHF3v6< z5%uazql-s8VWu!$u)bR9>&2Ev20C*Ya@g$5GF06P+NvQg9EzqKtb}p%aR#jg5gT}y zn9=)CYzCd1O)!}XUE7+0gFW}OjkubT5Y`7hT}V;vVyfefF}_8j%^G%1H)P^+%gPSe zf(kw@d8~=CeoX@;hlLP5sB6BZeFZk#y&G4%$-RI1&S%cQ(mk}{FK%7^-PNC8eg5(n zM;re1^7a4vt4|+nFxu!l$&mnfk}c&ckYbD(WkHo-ozEZ zFNg^xw`(!?=P(Wy0WWB)WSe96{xyHY`q{k~Xj@fenF4%~CCR z%3aY4clL7dd9HKX4uBmNtz>S)GRBq*L<+t48>1h+{#*C{;-9{B|9^o-bwmo3=h3mR z#l8{O1UuEBtrr6JvcJE93+&U^m-K3T>*_zQesJ~ISKA{ye|mNJ{c~}26Qr~2Kix#( z?Ju5-H$uJ+^e%?)KY`-&2Y>s2mj}NMCRM3d6y)hr-~n)%o9>h@5yB>8%;_o#kthik zU^O!MeJC*Tys2_FKel_o)~3Pi{9F_pc~wrw z1WQN(1&CFt+WfH*S_Ep<2TJD|l%Jg)qvSXT2T0EHtY6N-W*F9%5zhv60WVpDLpXW~ zdA7U*41Zk4`k0gUVQpe%r{#>kG<|V4ItD3s`P8aKcx+Te>+K7mh6PHcrc5I{tvNH@ zc1CA9#rq3)ETrZaVgjAE8yhnF$j3K!K%exx{Q0e`A71URzIOTZqkeB)9?09rPV({7 ze3<3={21l#M?`o6cz7J)3CkxX>+BTe!>a$=Pm}-lgCF~shh`1p(Tc$66~JPXL{}}r zgaIR1qSJ9C%fhQKok%g);1cC8)%~3`$}cl%|5qXo`drm!(vKG2@O^NH!SBF&T2WA z3j4gtEZ%iIbrnH#6R;#1*R3M`Dg{g9aspN0W?}V0vWmQDGGDvns1a7+(+ko~vfaL} zBR4T|c3qIJS@<9lt^>VG`}5|(1P)hKMNX3?joa{U zD$9XDjgO|NQ!S85~d36(Uc1-u~)* zhUhC`$&CLOx-f3>9mUP7aLC~)qaFetrzuhG3`E{gs zQTmxDaQepEKMF1nqU!T{>7_1jY__41YyzKIcy%^`db{^`{4c%a*C;#=Jo-3)jSTc6!yHzd!%1i!YrX55a;k@Gum()2m zuM`z8dUB)AGSldZxl*J2un8kiF6xRtK9C!upCSD=k(F{B4HRQ!07R@6Xi9RV=l3&6 z1=W(~5XD*3aFEMbFJ^;^mGOE{u#PFrd!JBf+weEr+5-3)@H=HNEF6|HI+qVh<=PQ95px=@-sgws-eZW{Z~orsg{uQZyDsYk z*nYhgISP$emC&0EARz`g*Ys}39!t<@G!i{H_q2XUe0Q!U6)1^fs zAgUFU1$%5b*JsM4zzpWfUhOJfo&W+x2QIcDann*DdD&|d>rX(S+G?vF*m%cQ+D8@< zXG3ToLDhC@FnIRZEq>34`Z$UwfjF^vQ`RTVZi0EO*}G`I{{)_IpGMSUrSq85u?9y+ zDUNr%Na@Tyx?az$T~9Z*KoctmA$Zxr^<*6=zh6W;QG*ye3+UwQziQ5mSC<9lCbOxyWfmgl9j8#|K~>xk|83CVa%@Y$}v}$3IHRfC8P+a5f$0uYXk1~ zW#>V!30_hod#@{!2B{{(i=-h6rV)5`-bx!o?=E2$`n(a`5; zLQ@^IosH!wIA4$?jFXUMC)m7>^tMhpQ#0pNa-WYG!k0DhSi{bbi=)wq)QB2jwMN=m zo5o6eIIEXiey;BHm_a*Ywsm6#k*WZwdL9mDHbe%X$?pz+psPwiCEnLQN1vS{X|iDC z3RgfiYRa4|#}JbbW1m@?lu;j7H6@VZl+%d=Plr3VHL@-oQVr8`3ttSXt-u0(+z}oj z$>cO^%P47Dfu5AG>ic3S;-R1>xeSBaa$&T?OWfRMCZee=(k2lhD49;?eI2YSYwBHjHkNPh+N@Fb*oA0bQuS?)f%gIy0ecxvB>OC9wAH4m&(dfDV E2Z(5(jQ{`u diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_11.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_11.sqlite index a1b14f3c043b37b49b2bed3f41ac00d2495b4c46..28e533901579f5d5cffd99567c301ce22d4606da 100644 GIT binary patch delta 6170 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 diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_12.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_12.sqlite index 0b54ad2c54f7d8f9de0b523b2a219bbb5c8021fe..aa6169d0040764256e8211c0c048cb9743accdf9 100644 GIT binary patch delta 6258 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 N+$O*N>i=8U{s$5Qm@mI*Q2Yts_Xr3 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 E1!k4uF#rGn delta 6249 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 Y*TeIfbK~Qu&hhu2{P47C|Gy>m-|#8mWB>pF diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_14.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_14.sqlite index 7926856e3088d1be741888c68ac5f2015194e6cd..f75676de83be5de807fcb3e97df90439053dee9c 100644 GIT binary patch delta 6267 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 delta 7071 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

;|&eN09fdF!cPxjxQ-lYPO&hp)dugF0;R0 z$%?|LIeeEUbD5E}S!Lm?!PDK@X^~geEep<;BE}&!QjFZ%G6}EW;e)JVN;f~EN#6M3 z^-3lesE`V?f~SVEX?(8D0oT~i6eWgYs$^U;<y>PFShS*b2!wo?31(SlJ5XFfAxg^yk?kOV)h=ShHL8f*j>a7P>4V~$Si<$Yupgn` zK5%icm&fb1=7+`V_O+LH1J>~=T2H}xy6^q4Xgyu` zzE8N`{|v7e;Ck};v#-B$gm<$8U``-`1qi9Y`ci08InL7pvNc8C4x%NpYfV_K4`wZp zUb?9f62qZ>eL8f50EqtB$C-=MLG$bkSt<+4!RfMX*Rp%6mke&o2NIf~lGg2NZd-#% z?q@{MR=cen=yAji)^LTI%qK-bPmPU9 zce2{^8%j)t$k*nuZSR*|6V-sstF6ZX26oPzT{{{)09b`?+F_uz4ssCd_H&kl#Abk0 zwuTL(I(*O%A#}`Cm`?d9CfCgxm$c2&6w*Cl)TH<156`}KdHg;c-Qb5iEr+Kv`tDLY zerImy-*)xx@cvG?FTU;RMhX1PjT*T9_}@;m(M>ORuFKmy9rB;u@vr;WO;`Bqiu?Qt N{n7L9LH=I`^*@CF-!uRK delta 6989 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

=3ZLZ>w&j+vE-aI%vLOz337uP)d+(@ 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 KFuHg1b^hN5B?5f_ diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_18.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_18.sqlite index c8841382c68539ae06cb4bbb63dec3d2f47422fa..3b02f3b9aa36b80a0b00c03b3d89d3c7b67999cf 100644 GIT binary patch delta 7626 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 D5QLcq delta 7775 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 Li|e0VoSywRePGVS diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_19.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_19.sqlite index 2a46dbee35cd7ef1b836a69ef4281ff6654ff6ff..8b3e847edc8a0dc843be655e3b46ce5b09fb4641 100644 GIT binary patch delta 8211 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 literal 57344 zcmeI*&yV8P9RP3`m|r_P!=_3!k@muBD>V~M6Kn%BXb)Rs%ui#3ZGKiNHO2;mjg4(E z(9>>HDQXXudfVJ0Rs926wNaWLdg!H6q#n{9s`OH+henEe?y&}TW?*(_i89(~yZg1| z#o*`no0YeZUrF}j_e&eh(!5w1eCsT_qX)0= zZ6B77ybn(1DGIHIsP{*bX(@W&P1TeHTNz0WOR^hEYmxYBn42pZSY7w@?Pqye4d>=( zHKC)2`Q7cqyLY|s3AWHwr3)czY4OJ6q*Iaz`|Wu#T$zz8SM015(UrlT zz9W~5<$Uu+ZG2+2pc#VF?mwld-8x{}4Z&{MiYB>VG$Y7o@+8OO`NC3-kov9lfm(v1 zPTb~YxJ{iWQzYwJC-D-+2SZCy2`#q~*@`8Zv+Pg|ohsujk;d8MpkXR*o3rh9-=k8Pnnr*BF}WWmj9VRq67NO}#a_{F`B$!30y9 zHO41)2{{fH*i0U0YqLuK)TVWGRNUD*lx}{QmzOL9nf@!_=KC%jR6oEsXQ!?T55)`|#-K zOn>#LzxvI;QVOfBmd&j|9hK_?vS-9f=il?@Tt0OtO=ifSHj;<<&Rka4P`h8ROZXdq! zhWEj{^QNFl?s3qaH&)t!jmZsWbI#LREa%!iClL)73T~@V=B;%+9IbP|CS}IhY&^3)PBT8bVMYDA-P7XuL zv`i)ox@b*x`DB=|awYjBRqRCCc1QEg((!KU9VLT@ErAjxyg8mCNz90hB2HhAMzyiU zcau0`O#5vsBr%-P$Js7hM7R?j6}nS;)O1>6yB)OJK+QeP7;K>{hsqM#y4!5OQ!*Hgk;06JgpRoN=hiCNfQ{RqM+crcmq+q#`Rc zk*sM)xZVh(9UN=Nc&4Y-B&SJ|6)A)i@K7%|tyQ#0h~R|;iks20>Yb;viB3<*X^|@**zeFdp0u!xRBeYke zG7+>Tw(v?flQ!`LBlYEGJZ)0KUeFQF5U$&A_swIuZpVEi z;pS!cx;^)KR<1jm;h&%X-~X}a;Io4d_kZgyzytyy00JNY0w4eaAOHd&00JQJyaYo2 zTlxL{ot+(zJMZkfi&cv=P*n-rDKgq`(UQ=nC*=;6Y{wW)%~r4nitmN z*Xu5B8#02L+PGJwxQHI>^lG>h#k0LoId7KDGL~sErqx2n?4UrPe7$N~Os}579IRKs z)7eO8k}r(%Xe);*VTnX53Nj?vu^>pE{01Z zhh+JTJgDfWIujm-hnx}VcFa<25<*d-X;w>kUkJAaniFYxQkC!)Ekwd`riXTGNSscF za^uQ^g(FjvCd3rt`iCka_K{u<_Fj{O5W9?pDY)0E!1}kXOW?S6r zG=B4;XHS1b?_RbIaI?ZTd{e+T)=2X-v=_E2uqZ5>6v9vHfDIuo_Gs3t`g6d;w zF2*D(ZuJKBeOPbl4GewYUKUTu=zAU{~ypi zfzJcKbDsgIJ+Dd*@qz#dfB*=900@8p2!H?xfB*=9z$+v0ZC~EIZlK0@*O%X2H(W7` zXx$)@e->!nSjh(5|NqL=KG;zZ009sH0T2KI5C8!X009tqWd!E;|6@dq(8q;d*d~xJ z9nDo!eCo88;tQ1AKS@sp(|om-9iK$2YN*5IN~hw8srK!%WwhCOiz(v7%L-P|^g;*{D5L@N8G7#|a7VRYH@36C2y}`~U3$ zl`G}3({2ozl=|FM&sS8cB6PH@Ii(5eG%_9NQYWsC>{L7>W@3($6YKV*EY+itDqA1V z@Bg>*+;~`UUlSm+wFs&YlCeRYWIMx(o@^Rg1hdkqi5jAdRL_i1j8;k_Xnk-Ruh(=v zZ#kB^bpO8%_y4~#O#yZk1V8`;KmY_l00ck)1V8`;US5Iu?ef>{axd=OziyvQ-$o;3u{#JkI4PSs#^i}G?GVm5RAm#HrnNDapF{uu8>|VC z6bOI-2!H?xfB*=900@8p2!O!LEHLZZuY0TC#w^gfmk|1AUHf&f_M1ht?nQ*YrT#xW z|LON{L3RqpD(H`DiaZucDpq>NCK36pmi;%C_B-E7 zU+Pk+Rdwq7zwh|`-#P#1UOxTY%cn2=%9GX6(a|&g-z)3mU;H(AP<`bypZ(-v!!{+j zD;zO!hfp5Itz7KHD%9!_g*W`Dl|!cgSLg$3X3uybF{+u0tQI9nsN0U)7-!F}zIgWM zcaHBI-Md<+&(8*Tj>M~VdpUFsD6KGzCR@Eonz|g0C2GWgk|cvH=z#mfbVMXBwDJw4 zB<*C1@K_O&mb+}QeQeL?bz0*f?ZN48WaO1+TU=AnS_a5tJa8mt<@@$lv-dd|P%JM2 z4Yp8JwFP%{LPVvurj;P(i^5GdKw(+x6iQNo7iLmSahn!`RriB5icT;QQ(H!29C)T z0H)}Z%8S<6tmeDSkoR$`+QqKpD0vpO9*9m{Z%S^8#*JpFx|iL>VRH7Ve|zu$zI^xi z?j!o|oj%VE?jDKHzW-8z+hxqNkW%i9SqvhQ$1H^m5#3T<$(S^>t4ZNnxf49d-J;r* z53IG5CVMw8!Zb;kg|yoVaY%6;B^VpL5IrTX#96c>)OA}fjNODhR0Kh0!epApkdh06 z5sv*BOW6w7_*z->5+1GA`D_g@X?#Bmz`22qeE^3cWX${C&KA~_)Ci@C3R~7@Pbx)E zp=g180dB;zFFZ*9`@E&B{on^q#KBF(-MakHO`M%ve(0Ks$B4N98YYe(e(p!-2fH?A7Rjo%BnX%__aJ@M1f| z9oLbNxC(iW3-^LQ#^xiT>-DSIX(MlVi#$0I#nfS2V#&5xv6zfe9aN@Of376JqQR*E zO<`v#n?5=kNi9loV|do^d%OWXr*IB#XNud9Jno|`D;xG}f}2OpmPy%3x1;Cw+Cp{; zz`0DbcCoN5tB&b9Y`uh_(lJKzGO!#*9U>7|^V;)7Aovt~NKW|jw;a~py`QaCg^12|CTcS94+pL^i zg?YQQ9A8EGg>?R!Z-11Ae?LxzLZ%dHVc^PTp~4 z31-Y#m~7h}K}_YEO_$WnSqkDLUAjxOz~SvwHJz>?hC9PNr-wmSggx@ZDzo0rnqcQAo7F}#eeX@c%UJ(`Z~H6M@W;+*GD zct?7UCQ&O3)q@2Hjt@*oRx$$4}$^GiR4*6Sf&a(!0Ce!y-aJx}do#9%BrTM|1aT#d0I zk)zfI1j8h*KqyVHm4I&|WVBjMx`oU_CL~1KWY{32y>Ppbov4IApU=k$Ia$u^m1|iE z#?}*mEvv(&48A9%@l@R5wFSY!e7T%CZ38Z#j=>C`EUpiOOPoIs=4ElXY13Dw=q3rT z4ujVv#QoP~#I1)ffBD{FK6J$;z_#mx1B|`6nl9%mJKCfvP7cvHpgw=+F;%#9rtS!H9C>wUOIEtTChXqVDclwra%7ZV ziYiLWE3*TM3MnONoJp!0XDI=XjmUfkW{t407hU0_FgJE_-?MT%rKyh|-?_@oK0PH9 z?Q7R$Cdx?$j(`Zkzzx3*)|i0Frry<`zccs=anl*(5}oav1|p)U40}WfL|cf2kV7QP zOxyu(4rYRnpn&LjI=U}ABotR&4kJs>-bli*#>))|P&C41Eyzj@)}|D+QyDaidEv{6Ay<9 zfhOmoT@nan;?2y|XRxH0{v@&QdIE0B#FNXz__eIx|0(U)tbcXz z%=rQHv{Iqg)sC%skCs6h*iDwBR=`RIXPLNso<4cv`T;1sGG6Zz#Xw?*?gT%R_7u9s zO%{lR)l68hWGOHC7^$E<7Ak2^Ix8=sqHMe}>!liPioH=}3fgLXzK`sA&d&B!eQ+R6 z8&-)f;fOY@w|!ydbd8v>wWNCX2o9D$IP&L==+ljf%-KDeQj4U{3bD)at%_#QID$Hh zkKm0iT1-ipY%bWkvH|mzutc>rV=R}Xh^1S(`S9@**V(Jbke?7ZkUPL(R@Ej!W%)1+ z+BTv4q$aoY^Yq}+rsb_H*N!6j9=PtHZWxhOTBy=^h;KC6DCYJYLZK{;S0icxd(nzv z^J3V|6GiT@h~OtCAL_t}K{?h@rhCw`D5P+=G_^%?k#LF0XW~4_w=s%{EI$G^vw&__ zB}s;}#`1HqD(Vc;=2)o66|Mm5ESi$GH<~fQ)&)9;sd*Bk76ojhrR)STK%(ol*6pw; z&9+{vj(HAv_(FbhxIwwAg83LJZ^+5^oE)`{4}4w!v9m4rDtEc1F~O(8dPeT@#_bm&l;$gTkM2fzLjFnIa=@b(cMv%O6i3cf;l$VY*Sd_rIZZ zk1O}$kH6uc9|Et2B*il3h@We#O;hmfW|^tuxZU+eoYa0||I{&)3wl@;V$+X5c$mQ4 zy*XKED{O6Twt34hhGFHdAUCMA;UuZVFdOQA0&4}+rE3tZR(S41@Ef7q2 zP&XBK2j@`miv45EloJ*x0^@)Xskuq?qZpHcI?szSWsmfR_L2Sb_8@pDidCChUQAf~ zDIa-UHJla;9#q5$=*0{iP)*qwu(F?TjRHgaCWRk*Knoa_xVIwJ1uzm^DSj$TA!By1 z&4&D9iGrzJ@mrIs6JoqtE<}|oR{nOcs+`tobmp$?5iKcp?a{?QUc7Yidl%b&diC2Ehs#oNlWbQ_<>dx{-u^BF-6ZQ( zg?kmHA9w>!kFSS4-#xncor~YPI6nVwkMwWP|M2_C;GGA-47!f$>x#S$hRP)ET`|FI z1dzg~426P;escHnDH{x)I1-5&KSDDVUN<{jGDmq$an*7$+-6C+_4CDqLGHeneD0sU ztHtTFY?3+jco>h?mO_nul+DvT1J)|J$0_M!$9Kik)5B@M?%mrJe!bbRF+e8xDn%<@ zujnB?kry+!H8zf04_-mhcbq9Nws-^Q)B+MWG3hZ*lk=t-q2fyF*zqr8zwycQM?;A( zA?#upx3o3hnigcwC;48iy0qnG(p~Voh57VSA!|Y?;|AywiAL--Ve!08Bod3#hzANU zWrMT(Upu=$@GcHF{qm(^H|^xg=iEg4m1BAx+xK5X_sL5y4F2=I2Wh75c|GmgXtiKA zBi9ng;iT^t4K=7^0Wpha*}Khj>2(g+%%-D?nqzbaPxJ=KK(xA^CKLSi2I2cvh?2 zC@(&7{=+`ozjuDP>dN0Pz+G!$B|lb*XhiO`aA!&GS^;#vVTzRB`?a3wiSE#B7)4fz1`RpO<~GM< z_=88T#n728B}paIkK1MmU^QFFn5eBdYxjtQLMb2ZK7ps4pYt=1lFL=ppPGWfRYU;c&(RrBcrH6r!iQINJ2rOR9q4UIQTuFY^VnB4t~hJ}C9LQ3L}vPF1d?D;TfzNYW4+W&P+A8$+xO0>#EwRj)tT^D+*5x> z_nlSWTAiLMc^gl#An1mB$<$YiDOH9^f*QKR-eH+?OSrYPrnaS3kn ziD`#HvuEBj%CQV5)U(lvA7nqNl7D?sy{1aOHF|%_?sa8)D{3Dem;2ULnS8s{UzhAR z$@)`2llHG3f92xAO}D0(2H>W9-IH4<_Xf8vU;4YnO9T0Xql^E!_|e6`Ui{!|Pu@TN k&c)M5cTR5KxxS^ldvbeleG}P#?ey|%r-S4FpLbCI2j~O}G6lk9VLpS@2c2Dw6kgg`o-Mzrm6`7t5bF1uWQKgzE{3Y6`#%Xazw zwuCB|NizY0m;h451c@o!pi4JB0ST!mEs-HTN>EFnNC*J~)QACHyY?a62hC3IWx$fE zMtiUN|L^xd2CK8Z~6V#-1A+OElAd{PF=_gEg~O1v^Qj^^e3g}_YS)Rq?ysU#&DcqEr_$Gkt8up zU`TKnb6rzYrX7}x88F~|G$%pOOm@35#Va7lmM+>4gS_JxhG!Nkf#kGibZQMuyx9yZ z5@rInvcB;SWj40F7XSnY!0@M%c82u*YR{mJ zz701@vf(!JdU-qh$^V;v?VX?c#Os&t#r>=M%e(B({l=$WYj?l;3txHbm@~0dM-G*=AmhbS|+_*|_R>{E!BNobRo>x~PsbfT4Sctfen$*BLo8=r= ztfI8Z>=;|}x!t*4&_hZAE3<8(svXm!Ylv#YJYP+>J;LuQ;0VTM2yZR zqRb4y-BMOe+$3q30Jv(#04-m>{R5Y$7{wb=d=8|NA!)j~>DIww0>T=OP(2RgU6}5- z@j<)&xw~JP|5~xjnv|L*Qsce3b~9LAAFTM6SroHl9aC}6HH4~Pa9 zUwI(?`K5UINwo??c#(IN>{(1L01=WTjZU{dBao{(2i-!#A5Qz*Tzv71*pEoGK@mml z^bPM&qc%$k&{Xi;h=!13rio?0{O7^LItFKQZ%*{yY|_ew#bRb6+nK5wU@*6ITg!P1 zUKT=TL0@^`_8f|BYxB*JdbV4|hF=1Ockl{7Sulo?uj(GW9skES{@XWizw)_1Sbg;^ zVn<-O%FcnJoD32zQOMpVa)o&c$$S5S+c-b-<^TRzsPDeMtnQCb0CFbasZh@ZJQd{w zlOG24?)|8K;~#(XZ|{y=28RxeaO-*%@ESd-S>>+B0hZ%tTxBOv^_m!6H}N!76;~9% zHgcBkcX=o`-L|qg>iSv~0md>=mY}pU2WuRHIxdNZz|Uuq#<}_3kSxbXijblS8{2*!=1gc7H~NS zu)zh@G_a5(3)W) zCxM^zgI8D#(`{(q*|1y|q<+w)3vq-;1D&lxq%+iH+!(N63@|5kabc04=`((= zP9u?+Ipf64ysgWgfg>%fR9HLrf~WGidbk{(qVaqcJw@U5Loawh<-MT1{vayveEaLK zj*6>D%PJPVbg>vLJfYT_ggM9n2?ECvF7op)u3tQgR#Dt=ecUKojtnGz*cbzdF**nLR=gT2vFuAn45n<(QGSS)jXYFGXEl$HwFri-bL@4q$Lf2e{#G zTZ_zA$@bjL&p>k&x|rP26g^R}s0~}Mo+ajgx_WUg%~N$+DQbvS2C!|tmTM2ineD=I zaj(tyGp(NVpMP=rUEshvUZhoA&l|!jJH%L(q-fZ7$hXHsxMowO-B1RSU@&hpi-_zF zG=rvU)y z<}woIl7ZVeRu#3eCYF%crKAM$3d<{6=_qLwh7$o$fDP)t?@?2(tu)kABcXS7=v3+~ z#>2Z{+&1gBm$y|0Z%n<|PA(@-C2ZHAjikF>=5FLvH8$E#+s4aH0v-U;RP-6xRZyT- z2RXu5*!ciFRX=Aj^c1e=Q}R^RK6^L-A4L82Kg0fr`tMzS{_ePAmz6sg{4LVT3scOj z#wOY_&Xn@hNO9JDdwG45zYj||fgLo#z$^0H2@#4L_s+tMq#o3P>C}CLDwpdSaGD9( z5Xt-ix5YJS1(qm-ivv1rU1b_)EGq_J&N9lf@<>TSj}wi1W$M#4pO7`aA6+IJ@B+jl zOU27P34zCgPR_X!1Bj6X>4?sA+Aiik*GvTcoAlUS7UQde>yd zX7Xla6r~7WmMcY+!eIuxS!AyrI@WT>EdyT`^QGvzDh5)9r!1IQl^L~TbvF}44HY@`J(SO?0ix? zaXn-c*zX*l^X;vPq*j2`-8OUe4tH0h2JN>?2Iy>iw}#pl*#T^1vTjgDC^IpMA_K=f?YFdU3>I{QFR#u!8R1sZB%%Gp(mY3&^6gQ^Kb>zWaKw}WS z7&TE+29c>Hra?F3;LfBU=1|3+7(TYR!)`x8L8}DOOe!aFpI6PN7w-a>-~P7%>DlTe z6D}_=KT>YT_a%45p0|4OJ!JPpa&KaKlDQxG7pZ$MbC2>5lM^c)HrbWj`-<5x+yWRJ*QcNd|8(7_RAO-XX1hrkuDdDVvyaO(;mb;}?NCVerTTju# zZI~WN2%EUR0y=?O34&D4_|~X|m9FCln>w~*rUdE`yU94yw^MgAL^y70baJh$*>4n`EY7t za$kyg<-=(!e^>t5YEK-OYPKo>TRxPAl*qNUo@++12CTsLO-ylpeM3@&lSowTc>^Hr zB{YxFwM??4Hg@!!!9;HC0o2!1q7aScsP1IBQ9Wf^`O+Tr@C4rB2##|VBg3N05}E|s zy3(qqIvOggex`z4Xr(G0p9Y}Sz#}>j44UZU4oJn>`3`yr^Iwbd;SPF=ob&ba6foxw z`JsCF><0?s*`qb|t&98rdjHe+w|CzU>nVY#;r4QYnmuM5G&d1#U1``ae4dt z8@FEz?vGDpedg;a7|&wmsT3Zn<3o_V{s1Od?|$v_Z+_@Fv4Ijh4!UFIR8p5BQgXrKc$$|HrrDzU3;=x-N zBX!F0gN8b=a$)5&39e?-NCTwRIG<~@u&x&;U*g60ndpb|eDo8(N66p$|6%?{og_)mDsXt} z#%kK+V*vFAx$v8uTgJp)u#pUQP_0|BOLF`~x`Rc&&Grz&f5{Gu$2c+WSw(hX8)*2g8BYJIdw)JcE&MxFG_ z9;u7vSTh)0eNd06y>^a;yw=kqG| zhawgC%`W5p^}MlEL)8=5=M(SXpTtJ(k*WbJ4qok5J7i4BY7g0w@=O*%oZcx|wAeSk zOF{-dO&4C{h>H#OI@ z3EI&Lg6NJqu}XXLCf5DRPRDW{Y-j;*f=!F7JEWAm03WF}>gs5NJ47l2oM)a6#Ihwr zFG?q_o|Ys>Wu#njMoSGU(_xIZK6HGrPUCtwRErvj%5MFc#-S=leCzhN#=kYOf8{#- zxY<5hnjeMj<9q3TcD@cjE?(#B@Ov$ox87ed|6DNFzjyV!_doO0gX=?oe(Fj1`q}lX z%V!T?r)SC2yWIVsUEKe}{omdH<^7-i{-<7Fee?da7cZ}$Up_uvUcb10{^Icw@7eXu O!@u2JUj4g#Q~G~fwIqiC diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_21.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_21.sqlite index ecfd94bda730c2aa7cd982ef92537f16e7bd23ab..a1a2c95dd33b39c5a108e7474f5f87e1c5798e1b 100644 GIT binary patch delta 7840 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 delta 7986 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 a@aS#}e0BNo{Ob14#s3#u&L_`qIsY#%WMuvT delta 8330 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 diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_23.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_23.sqlite index 06ad341149a8010d03766d3cd1761563ad8b17a2..d84562f1cbe8b709f42734e6e3bebdbf6127d3ed 100644 GIT binary patch delta 8204 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 diff --git a/components/brave_ads/core/test/data/database/migration/database_schema_24.sqlite b/components/brave_ads/core/test/data/database/migration/database_schema_24.sqlite index 34bab70a0c25881601714f6e88dadf8e6c1bec04..ba43da6fd5d07927a06ce022c3b24b698b78f247 100644 GIT binary patch delta 8289 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 b@#x~=qr1WIgNw`2gWIp;)cgOJdFTHHg!5YZ delta 8474 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