Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BAT Confirmations should not be started if Rewards is disabled #5424

Merged
merged 1 commit into from
May 4, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -950,10 +950,9 @@ void ConfirmationsImpl::UpdateAdsRewards(const bool should_refresh) {
if (!state_has_loaded_) {
BLOG(ERROR) <<
"Unable to update ads rewards as Confirmations state is not ready";
return;
}

DCHECK(wallet_info_.IsValid());
Copy link
Collaborator Author

@tmancey tmancey Apr 30, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This DCHECK was causing issues when resolving this ticket as is not required as ads_rewards_->Update(wallet_info_, should_refresh); validates if the wallet is valid


ads_rewards_->Update(wallet_info_, should_refresh);
}

Expand Down
101 changes: 99 additions & 2 deletions vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#include "bat/ledger/internal/media/helper.h"
#include "bat/ledger/internal/sku/sku_factory.h"
#include "bat/ledger/internal/sku/sku_merchant.h"
#include "bat/ledger/internal/state_keys.h"
#include "bat/ledger/internal/static_values.h"
#include "net/http/http_status_code.h"

Expand Down Expand Up @@ -134,15 +135,30 @@ void LedgerImpl::Initialize(

initializing_ = true;

InitializeConfirmations(execute_create_script, callback);
MaybeInitializeConfirmations(execute_create_script, callback);
}

void LedgerImpl::InitializeConfirmations(
void LedgerImpl::MaybeInitializeConfirmations(
const bool execute_create_script,
ledger::ResultCallback callback) {
confirmations::_environment = ledger::_environment;
confirmations::_is_debug = ledger::is_debug;

const bool is_enabled = GetBooleanState(ledger::kStateEnabled);

const bool is_enabled_migrated =
GetBooleanState(ledger::kStateEnabledMigrated);

if (is_enabled || !is_enabled_migrated) {
InitializeConfirmations(execute_create_script, callback);
} else {
InitializeDatabase(execute_create_script, callback);
}
}

void LedgerImpl::InitializeConfirmations(
const bool execute_create_script,
ledger::ResultCallback callback) {
bat_confirmations_.reset(
confirmations::Confirmations::CreateInstance(ledger_client_));

Expand All @@ -159,10 +175,18 @@ void LedgerImpl::OnConfirmationsInitialized(
const bool execute_create_script,
ledger::ResultCallback callback) {
if (!success) {
// If confirmations fail, we should fall-through and continue initializing
// ledger
BLOG(this, ledger::LogLevel::LOG_ERROR) <<
"Failed to initialize confirmations";
}

InitializeDatabase(execute_create_script, callback);
}

void LedgerImpl::InitializeDatabase(
const bool execute_create_script,
ledger::ResultCallback callback) {
ledger::ResultCallback finish_callback =
std::bind(&LedgerImpl::OnWalletInitializedInternal,
this,
Expand All @@ -176,6 +200,49 @@ void LedgerImpl::OnConfirmationsInitialized(
bat_database_->Initialize(execute_create_script, database_callback);
}

void LedgerImpl::StartConfirmations() {
if (IsConfirmationsRunning()) {
return;
}

bat_confirmations_.reset(
confirmations::Confirmations::CreateInstance(ledger_client_));

const auto callback = std::bind(&LedgerImpl::OnConfirmationsStarted,
this,
_1);
bat_confirmations_->Initialize(callback);
}

void LedgerImpl::OnConfirmationsStarted(
const bool success) {
if (!success) {
BLOG(this, ledger::LogLevel::LOG_ERROR) << "Failed to start confirmations";
return;
}

BLOG(this, ledger::LogLevel::LOG_INFO)
<< "Successfully started confirmations";
}

void LedgerImpl::ShutdownConfirmations() {
if (!IsConfirmationsRunning()) {
return;
}

BLOG(this, ledger::LogLevel::LOG_INFO) <<
"Successfully shutdown confirmations";
bat_confirmations_.release();
}

bool LedgerImpl::IsConfirmationsRunning() {
if (!bat_confirmations_) {
return false;
}

return true;
}

void LedgerImpl::CreateWallet(ledger::ResultCallback callback) {
if (initializing_) {
return;
Expand Down Expand Up @@ -359,6 +426,10 @@ void LedgerImpl::OnLedgerStateLoaded(

void LedgerImpl::SetConfirmationsWalletInfo(
const ledger::WalletInfoProperties& wallet_info_properties) {
if (!IsConfirmationsRunning()) {
return;
}

if (wallet_info_properties.key_info_seed.size() != SEED_LENGTH) {
BLOG(this, ledger::LogLevel::LOG_ERROR) << "Failed to initialize "
"confirmations due to invalid wallet";
Expand Down Expand Up @@ -627,6 +698,12 @@ void LedgerImpl::GetExcludedList(ledger::PublisherInfoListCallback callback) {
void LedgerImpl::SetRewardsMainEnabled(bool enabled) {
bat_state_->SetRewardsMainEnabled(enabled);
bat_publisher_->SetPublisherServerListTimer(enabled);

if (enabled) {
StartConfirmations();
} else {
ShutdownConfirmations();
}
}

void LedgerImpl::SetPublisherMinVisitTime(uint64_t duration) { // In seconds
Expand Down Expand Up @@ -950,6 +1027,10 @@ void LedgerImpl::LogResponse(
}

void LedgerImpl::UpdateAdsRewards() {
if (!IsConfirmationsRunning()) {
return;
}

bat_confirmations_->UpdateAdsRewards(false);
}

Expand Down Expand Up @@ -1102,6 +1183,10 @@ void LedgerImpl::SaveNormalizedPublisherList(ledger::PublisherInfoList list) {
}

void LedgerImpl::SetCatalogIssuers(const std::string& info) {
if (!IsConfirmationsRunning()) {
return;
}

ads::IssuersInfo issuers_info_ads;
if (issuers_info_ads.FromJson(info) != ads::Result::SUCCESS)
return;
Expand All @@ -1121,6 +1206,10 @@ void LedgerImpl::SetCatalogIssuers(const std::string& info) {
void LedgerImpl::ConfirmAd(
const std::string& json,
const std::string& confirmation_type) {
if (!IsConfirmationsRunning()) {
return;
}

ads::AdInfo ad_info;
if (ad_info.FromJson(json) != ads::Result::SUCCESS) {
return;
Expand All @@ -1141,12 +1230,20 @@ void LedgerImpl::ConfirmAction(
const std::string& creative_instance_id,
const std::string& creative_set_id,
const std::string& confirmation_type) {
if (!IsConfirmationsRunning()) {
return;
}

bat_confirmations_->ConfirmAction(creative_instance_id, creative_set_id,
confirmations::ConfirmationType(confirmation_type));
}

void LedgerImpl::GetTransactionHistory(
ledger::GetTransactionHistoryCallback callback) {
if (!IsConfirmationsRunning()) {
return;
}

bat_confirmations_->GetTransactionHistory(callback);
}

Expand Down
17 changes: 17 additions & 0 deletions vendor/bat-native-ledger/src/bat/ledger/internal/ledger_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -733,6 +733,10 @@ class LedgerImpl : public ledger::Ledger {
ledger::GetUnblindedTokenListCallback callback);

private:
void MaybeInitializeConfirmations(
const bool execute_create_script,
ledger::ResultCallback callback);

void InitializeConfirmations(
const bool execute_create_script,
ledger::ResultCallback callback);
Expand All @@ -742,6 +746,19 @@ class LedgerImpl : public ledger::Ledger {
const bool execute_create_script,
ledger::ResultCallback callback);

void InitializeDatabase(
const bool execute_create_script,
ledger::ResultCallback callback);

void StartConfirmations();

void OnConfirmationsStarted(
const bool success);

void ShutdownConfirmations();

bool IsConfirmationsRunning();

void OnLoad(ledger::VisitDataPtr visit_data,
const uint64_t& current_time) override;

Expand Down
2 changes: 2 additions & 0 deletions vendor/bat-native-ledger/src/bat/ledger/internal/state_keys.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include <string>

namespace ledger {
const char kStateEnabled[] = "enabled";
const char kStateEnabledMigrated[] = "enabled_migrated";
const char kStateServerPublisherListStamp[] = "server_publisher_list_stamp";
const char kStateUpholdAnonAddress[] = "uphold_anon_address";
const char kStatePromotionLastFetchStamp[] = "promotion_last_fetch_stamp";
Expand Down
4 changes: 4 additions & 0 deletions vendor/brave-ios/Ledger/BATBraveLedger.mm
Original file line number Diff line number Diff line change
Expand Up @@ -1293,6 +1293,10 @@ - (void)setBooleanState:(const std::string&)name value:(bool)value
- (bool)getBooleanState:(const std::string&)name
{
const auto key = [NSString stringWithUTF8String:name.c_str()];
if (![self.prefs objectForKey:key]) {
Copy link
Collaborator Author

@tmancey tmancey Apr 30, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kylehickinson default to NO for unknown keys to support kStateEnabled and kStateEnabledMigrated boolean state from the desktop which are not supported on iOS

return NO;
}

return [self.prefs[key] boolValue];
}

Expand Down