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

Fixes estimated pending rewards for Ads resets to Zero in NTP after browser restart until ads has initialized - 1.22.x #8245

Merged
merged 1 commit into from
Mar 16, 2021
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
35 changes: 24 additions & 11 deletions browser/extensions/api/brave_rewards_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1123,12 +1123,11 @@ BraveRewardsGetAdsEnabledFunction::Run() {
return RespondNow(OneArgument(base::Value(enabled)));
}

BraveRewardsGetAdsEstimatedEarningsFunction::
~BraveRewardsGetAdsEstimatedEarningsFunction() {
}
BraveRewardsGetAdsAccountStatementFunction::
~BraveRewardsGetAdsAccountStatementFunction() {}

ExtensionFunction::ResponseAction
BraveRewardsGetAdsEstimatedEarningsFunction::Run() {
BraveRewardsGetAdsAccountStatementFunction::Run() {
Profile* profile = Profile::FromBrowserContext(browser_context());
AdsService* ads_service_ =
AdsServiceFactory::GetForProfile(profile);
Expand All @@ -1137,22 +1136,36 @@ BraveRewardsGetAdsEstimatedEarningsFunction::Run() {
return RespondNow(Error("Ads service is not initialized"));
}

AddRef(); // Balanced in OnAdsEstimatedEarnings().
AddRef(); // Balanced in OnGetAdsAccountStatement().

ads_service_->GetStatement(base::BindOnce(
&BraveRewardsGetAdsEstimatedEarningsFunction::OnAdsEstimatedEarnings,
ads_service_->GetAccountStatement(base::BindOnce(
&BraveRewardsGetAdsAccountStatementFunction::OnGetAdsAccountStatement,
this));
return RespondLater();
}

void BraveRewardsGetAdsEstimatedEarningsFunction::OnAdsEstimatedEarnings(
void BraveRewardsGetAdsAccountStatementFunction::OnGetAdsAccountStatement(
const bool success,
const double estimated_pending_rewards,
const uint64_t next_payment_date,
const uint64_t ads_received_this_month,
const int64_t next_payment_date,
const int ads_received_this_month,
const double earnings_this_month,
const double earnings_last_month) {
Respond(OneArgument(base::Value(estimated_pending_rewards)));
if (!success) {
Respond(OneArgument(base::Value(success)));
} else {
base::Value statement(base::Value::Type::DICTIONARY);
statement.SetDoubleKey("estimatedPendingRewards",
estimated_pending_rewards);
const std::string next_payment_date_as_string =
base::NumberToString(next_payment_date);
statement.SetStringKey("nextPaymentDate", next_payment_date_as_string);
statement.SetIntKey("adsReceivedThisMonth", ads_received_this_month);
statement.SetDoubleKey("earningsThisMonth", earnings_this_month);
statement.SetDoubleKey("earningsLastMonth", earnings_last_month);

Respond(TwoArguments(base::Value(success), std::move(statement)));
}

Release(); // Balanced in Run()
}
Expand Down
20 changes: 9 additions & 11 deletions browser/extensions/api/brave_rewards_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -406,24 +406,22 @@ class BraveRewardsGetAdsEnabledFunction : public ExtensionFunction {
ResponseAction Run() override;
};

class BraveRewardsGetAdsEstimatedEarningsFunction
: public ExtensionFunction {
class BraveRewardsGetAdsAccountStatementFunction : public ExtensionFunction {
public:
DECLARE_EXTENSION_FUNCTION("braveRewards.getAdsEstimatedEarnings", UNKNOWN)
DECLARE_EXTENSION_FUNCTION("braveRewards.getAdsAccountStatement", UNKNOWN)

protected:
~BraveRewardsGetAdsEstimatedEarningsFunction() override;
~BraveRewardsGetAdsAccountStatementFunction() override;

ResponseAction Run() override;

private:
void OnAdsEstimatedEarnings(
const bool success,
const double estimated_pending_rewards,
const uint64_t next_payment_date,
const uint64_t ads_received_this_month,
const double earnings_this_month,
const double earnings_last_month);
void OnGetAdsAccountStatement(const bool success,
const double estimated_pending_rewards,
const int64_t next_payment_date,
const int ads_received_this_month,
const double earnings_this_month,
const double earnings_last_month);
};

class BraveRewardsGetAdsSupportedFunction : public ExtensionFunction {
Expand Down
40 changes: 18 additions & 22 deletions browser/ui/webui/brave_rewards_page_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -121,13 +121,12 @@ class RewardsDOMHandler : public WebUIMessageHandler,
void GetStatement(const base::ListValue* args);
void GetExcludedSites(const base::ListValue* args);

void OnGetStatement(
const bool success,
const double estimated_pending_rewards,
const uint64_t next_payment_date,
const uint64_t ads_received_this_month,
const double earnings_this_month,
const double earnings_last_month);
void OnGetStatement(const bool success,
const double estimated_pending_rewards,
const int64_t next_payment_date,
const int ads_received_this_month,
const double earnings_this_month,
const double earnings_last_month);

void OnGetRecurringTips(ledger::type::PublisherInfoList list);

Expand Down Expand Up @@ -1363,18 +1362,16 @@ void RewardsDOMHandler::OnPublisherListNormalized(

void RewardsDOMHandler::GetStatement(
const base::ListValue* args) {
ads_service_->GetStatement(base::Bind(
&RewardsDOMHandler::OnGetStatement,
weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnGetStatement(
const bool success,
const double estimated_pending_rewards,
const uint64_t next_payment_date,
const uint64_t ads_received_this_month,
const double earnings_this_month,
const double earnings_last_month) {
ads_service_->GetAccountStatement(base::Bind(
&RewardsDOMHandler::OnGetStatement, weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnGetStatement(const bool success,
const double estimated_pending_rewards,
const int64_t next_payment_date,
const int ads_received_this_month,
const double earnings_this_month,
const double earnings_last_month) {
if (!success) {
return;
}
Expand Down Expand Up @@ -1411,9 +1408,8 @@ void RewardsDOMHandler::OnStatementChanged(
}

void RewardsDOMHandler::OnAdRewardsChanged() {
ads_service_->GetStatement(base::Bind(
&RewardsDOMHandler::OnGetStatement,
weak_factory_.GetWeakPtr()));
ads_service_->GetAccountStatement(base::Bind(
&RewardsDOMHandler::OnGetStatement, weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnRecurringTipSaved(
Expand Down
56 changes: 39 additions & 17 deletions common/extensions/api/brave_rewards.json
Original file line number Diff line number Diff line change
Expand Up @@ -838,23 +838,6 @@
}
]
},
{
"name": "getAdsEstimatedEarnings",
"type": "function",
"description": "Gets estimated ads earnings for the current month",
"parameters": [
{
"type": "function",
"name": "callback",
"parameters": [
{
"name": "amount",
"type": "number"
}
]
}
]
},
{
"name": "getACEnabled",
"type": "function",
Expand Down Expand Up @@ -1157,6 +1140,45 @@
}
]
},
{
"name": "getAdsAccountStatement",
"type": "function",
"description": "Get ads account statement",
"parameters": [
{
"type": "function",
"name": "callback",
"parameters": [
{
"name": "success",
"type": "boolean"
},
{
"name": "adsAccountStatement",
"type": "object",
"optional": true,
"properties": {
"estimatedPendingRewards": {
"type": "number"
},
"nextPaymentDate": {
"type": "string"
},
"adsReceivedThisMonth": {
"type": "integer"
},
"earningsThisMonth": {
"type": "number"
},
"earningsLastMonth": {
"type": "number"
}
}
}
]
}
]
},
{
"name": "getAnonWalletStatus",
"type": "function",
Expand Down
14 changes: 7 additions & 7 deletions components/brave_ads/browser/ads_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@ using OnToggleSaveAdCallback =
using OnToggleFlagAdCallback =
base::OnceCallback<void(const std::string&, bool)>;

using GetStatementCallback = base::OnceCallback<void(const bool,
const double,
const uint64_t,
const uint64_t,
const double,
const double)>;
using GetAccountStatementCallback = base::OnceCallback<void(const bool,
const double,
const int64_t,
const int,
const double,
const double)>;

class AdsService : public KeyedService {
public:
Expand Down Expand Up @@ -121,7 +121,7 @@ class AdsService : public KeyedService {
const uint64_t to_timestamp,
OnGetAdsHistoryCallback callback) = 0;

virtual void GetStatement(GetStatementCallback callback) = 0;
virtual void GetAccountStatement(GetAccountStatementCallback callback) = 0;

virtual void ToggleAdThumbUp(const std::string& creative_instance_id,
const std::string& creative_set_id,
Expand Down
13 changes: 7 additions & 6 deletions components/brave_ads/browser/ads_service_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -391,14 +391,15 @@ void AdsServiceImpl::GetAdsHistory(const uint64_t from_timestamp,
AsWeakPtr(), std::move(callback)));
}

void AdsServiceImpl::GetStatement(GetStatementCallback callback) {
void AdsServiceImpl::GetAccountStatement(GetAccountStatementCallback callback) {
if (!connected()) {
std::move(callback).Run(/* success */ false, 0.0, 0, 0, 0.0, 0.0);
return;
}

bat_ads_->GetStatement(base::BindOnce(&AdsServiceImpl::OnGetStatement,
AsWeakPtr(), std::move(callback)));
bat_ads_->GetAccountStatement(
base::BindOnce(&AdsServiceImpl::OnGetAccountStatement, AsWeakPtr(),
std::move(callback)));
}

void AdsServiceImpl::ToggleAdThumbUp(const std::string& creative_instance_id,
Expand Down Expand Up @@ -1187,9 +1188,9 @@ bool AdsServiceImpl::CanShowBackgroundNotifications() const {
return NotificationHelper::GetInstance()->CanShowBackgroundNotifications();
}

void AdsServiceImpl::OnGetStatement(GetStatementCallback callback,
const bool success,
const std::string& json) {
void AdsServiceImpl::OnGetAccountStatement(GetAccountStatementCallback callback,
const bool success,
const std::string& json) {
if (!success) {
std::move(callback).Run(success, 0.0, 0, 0, 0.0, 0.0);
return;
Expand Down
8 changes: 4 additions & 4 deletions components/brave_ads/browser/ads_service_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class AdsServiceImpl : public AdsService,
const uint64_t to_timestamp,
OnGetAdsHistoryCallback callback) override;

void GetStatement(GetStatementCallback callback) override;
void GetAccountStatement(GetAccountStatementCallback callback) override;

void ToggleAdThumbUp(const std::string& creative_instance_id,
const std::string& creative_set_id,
Expand Down Expand Up @@ -236,9 +236,9 @@ class AdsServiceImpl : public AdsService,
void OnGetAdsHistory(OnGetAdsHistoryCallback callback,
const std::string& json);

void OnGetStatement(GetStatementCallback callback,
const bool success,
const std::string& json);
void OnGetAccountStatement(GetAccountStatementCallback callback,
const bool success,
const std::string& json);

void OnRemoveAllHistory(const int32_t result);

Expand Down
8 changes: 4 additions & 4 deletions components/brave_new_tab_ui/actions/rewards_actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,6 @@ export const onAdsEnabled = (enabled: boolean) => action(types.ON_ADS_ENABLED, {
enabled
})

export const onAdsEstimatedEarnings = (amount: number) => action(types.ON_ADS_ESTIMATED_EARNINGS, {
amount
})

export const onBalanceReport = (properties: {month: number, year: number, report: NewTab.RewardsBalanceReport}) => action(types.ON_BALANCE_REPORT, {
month: properties.month,
year: properties.year,
Expand All @@ -34,6 +30,10 @@ export const onBalance = (balance: NewTab.RewardsBalance) => action(types.ON_BAL
balance
})

export const onAdsAccountStatement = (adsAccountStatement: NewTab.AdsAccountStatement) => action(types.ON_ADS_ACCOUNT_STATEMENT, {
adsAccountStatement
})

export const setInitialRewardsData = (initialRewardsData: InitialRewardsData) => action(types.SET_INITIAL_REWARDS_DATA, initialRewardsData)

export const setPreInitialRewardsData = (preInitialRewardsData: PreInitialRewardsData) => action(types.SET_PRE_INITIAL_REWARDS_DATA, preInitialRewardsData)
Expand Down
10 changes: 5 additions & 5 deletions components/brave_new_tab_ui/api/initialData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ export type PreInitialRewardsData = {
}

export type InitialRewardsData = {
adsEstimatedEarnings: number
report: NewTab.RewardsBalanceReport
balance: NewTab.RewardsBalance
adsAccountStatement: NewTab.AdsAccountStatement
parameters: NewTab.RewardsParameters
}

Expand Down Expand Up @@ -130,13 +130,13 @@ export async function getRewardsPreInitialData (): Promise<PreInitialRewardsData
export async function getRewardsInitialData (): Promise<InitialRewardsData> {
try {
const [
adsEstimatedEarnings,
adsAccountStatement,
report,
balance,
parameters
] = await Promise.all([
new Promise(resolve => chrome.braveRewards.getAdsEstimatedEarnings((adsEstimatedEarnings: number) => {
resolve(adsEstimatedEarnings)
new Promise(resolve => chrome.braveRewards.getAdsAccountStatement((success: boolean, adsAccountStatement: NewTab.AdsAccountStatement) => {
resolve(success ? adsAccountStatement : undefined)
})),
new Promise(resolve => chrome.braveRewards.getBalanceReport(new Date().getMonth() + 1, new Date().getFullYear(),(report: NewTab.RewardsBalanceReport) => {
resolve(report)
Expand All @@ -153,7 +153,7 @@ export async function getRewardsInitialData (): Promise<InitialRewardsData> {
})
])
return {
adsEstimatedEarnings,
adsAccountStatement,
report,
balance,
parameters
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ import { BatColorIcon, CloseStrokeIcon } from 'brave-ui/components/icons'
export interface RewardsProps {
enabledAds: boolean
balance: NewTab.RewardsBalance
adsAccountStatement: NewTab.AdsAccountStatement
parameters: NewTab.RewardsParameters
promotions: NewTab.Promotion[]
totalContribution: number
adsEstimatedEarnings: number
onlyAnonWallet?: boolean
adsSupported?: boolean
isShowingBrandedWallpaper: boolean
Expand All @@ -61,14 +61,14 @@ class Rewards extends React.PureComponent<RewardsProps, {}> {
const {
parameters,
enabledAds,
adsEstimatedEarnings,
adsAccountStatement,
onlyAnonWallet,
adsSupported
} = this.props

const rate = parameters.rate || 0.0
const showEnableAds = !enabledAds && adsSupported
const amount = adsEstimatedEarnings
const amount = adsAccountStatement ? adsAccountStatement.estimatedPendingRewards : 0
const converted = convertBalance(amount, rate)
const batFormatString = onlyAnonWallet ? getLocale('rewardsWidgetBap') : getLocale('rewardsWidgetBat')

Expand Down
Loading