Skip to content

Commit

Permalink
Add support for ads history
Browse files Browse the repository at this point in the history
  • Loading branch information
emerick committed Jul 2, 2019
1 parent f392dea commit 564242c
Show file tree
Hide file tree
Showing 46 changed files with 2,683 additions and 197 deletions.
1 change: 1 addition & 0 deletions browser/ui/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ source_set("ui") {
deps += [
"//brave/components/brave_rewards/resources:tip_generated_resources",
"//brave/components/brave_rewards/resources:ui_generated_resources",
"//brave/vendor/bat-native-ads",
]
}
}
286 changes: 277 additions & 9 deletions browser/ui/webui/brave_rewards_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,29 +14,30 @@
#include <map>

#include "base/base64.h"
#include "base/i18n/time_formatting.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
#include "base/i18n/time_formatting.h"
#include "bat/ads/ad_history_detail.h"
#include "bat/ads/ads_history.h"
#include "brave/common/webui_url_constants.h"
#include "brave/components/brave_ads/browser/ads_service.h"
#include "brave/components/brave_ads/browser/ads_service_factory.h"
#include "brave/components/brave_ads/browser/buildflags/buildflags.h"
#include "brave/components/brave_rewards/browser/rewards_service.h"
#include "brave/components/brave_rewards/browser/wallet_properties.h"
#include "brave/components/brave_rewards/browser/balance_report.h"
#include "brave/components/brave_rewards/browser/rewards_notification_service.h"
#include "brave/components/brave_rewards/browser/rewards_notification_service_observer.h"
#include "brave/components/brave_rewards/browser/rewards_service.h"
#include "brave/components/brave_rewards/browser/rewards_service_factory.h"
#include "brave/components/brave_rewards/browser/rewards_service_observer.h"
#include "brave/common/webui_url_constants.h"
#include "brave/components/brave_rewards/browser/wallet_properties.h"
#include "brave/components/brave_rewards/resources/grit/brave_rewards_generated_map.h"
#include "brave/components/brave_rewards/resources/grit/brave_rewards_resources.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui_data_source.h"
#include "content/public/browser/web_ui_message_handler.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/common/bindings_policy.h"
#include "brave/components/brave_rewards/resources/grit/brave_rewards_resources.h"
#include "brave/components/brave_rewards/resources/grit/brave_rewards_generated_map.h"


using content::WebUIMessageHandler;

Expand Down Expand Up @@ -88,6 +89,21 @@ class RewardsDOMHandler : public WebUIMessageHandler,
void GetContributionList(const base::ListValue* args);
void CheckImported(const base::ListValue* args);
void GetAdsData(const base::ListValue* args);
void GetAdsHistory(const base::ListValue* args);
void OnGetAdsHistory(
const std::map<std::string, std::vector<ads::AdsHistory>>& ads_history);
void ToggleAdThumbUp(const base::ListValue* args);
void OnToggleAdThumbUp(const std::string& id, int action);
void ToggleAdThumbDown(const base::ListValue* args);
void OnToggleAdThumbDown(const std::string& id, int action);
void ToggleAdOptInAction(const base::ListValue* args);
void OnToggleAdOptInAction(const std::string& category, int action);
void ToggleAdOptOutAction(const base::ListValue* args);
void OnToggleAdOptOutAction(const std::string& category, int action);
void ToggleSaveAd(const base::ListValue* args);
void OnToggleSaveAd(const std::string& id, bool saved);
void ToggleFlagAd(const base::ListValue* args);
void OnToggleFlagAd(const std::string& id, bool flagged);
void SaveAdsSetting(const base::ListValue* args);
void SetBackupCompleted(const base::ListValue* args);
void OnGetWalletPassphrase(const std::string& pass);
Expand Down Expand Up @@ -300,6 +316,27 @@ void RewardsDOMHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback("brave_rewards.getAdsData",
base::BindRepeating(&RewardsDOMHandler::GetAdsData,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("brave_rewards.getAdsHistory",
base::BindRepeating(&RewardsDOMHandler::GetAdsHistory,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("brave_rewards.toggleAdThumbUp",
base::BindRepeating(&RewardsDOMHandler::ToggleAdThumbUp,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("brave_rewards.toggleAdThumbDown",
base::BindRepeating(&RewardsDOMHandler::ToggleAdThumbDown,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("brave_rewards.toggleAdOptInAction",
base::BindRepeating(&RewardsDOMHandler::ToggleAdOptInAction,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("brave_rewards.toggleAdOptOutAction",
base::BindRepeating(&RewardsDOMHandler::ToggleAdOptOutAction,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("brave_rewards.toggleSaveAd",
base::BindRepeating(&RewardsDOMHandler::ToggleSaveAd,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("brave_rewards.toggleFlagAd",
base::BindRepeating(&RewardsDOMHandler::ToggleFlagAd,
base::Unretained(this)));
web_ui()->RegisterMessageCallback("brave_rewards.saveAdsSetting",
base::BindRepeating(&RewardsDOMHandler::SaveAdsSetting,
base::Unretained(this)));
Expand Down Expand Up @@ -1004,6 +1041,237 @@ void RewardsDOMHandler::GetAdsData(const base::ListValue *args) {
web_ui()->CallJavascriptFunctionUnsafe("brave_rewards.adsData", ads_data);
}

void RewardsDOMHandler::GetAdsHistory(const base::ListValue* args) {
if (!ads_service_) {
return;
}

ads_service_->GetAdsHistory(base::Bind(&RewardsDOMHandler::OnGetAdsHistory,
weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnGetAdsHistory(
const std::map<std::string, std::vector<ads::AdsHistory>>& ads_history) {
if (!web_ui()->CanCallJavascript()) {
return;
}

base::Value ads_history_list(base::Value::Type::LIST);
int id = 0;

for (const auto& entry : ads_history) {
base::Value ads_history_dict(base::Value::Type::DICTIONARY);
ads_history_dict.SetKey("id", base::Value(std::to_string(id++)));
ads_history_dict.SetKey("date", base::Value(entry.first));

base::Value ad_history_details(base::Value::Type::LIST);

for (const auto& ads_history_entry : entry.second) {
for (const auto& detail : ads_history_entry.details) {
base::Value ad_content(base::Value::Type::DICTIONARY);
ad_content.SetKey("uuid", base::Value(detail.ad_content.uuid));
ad_content.SetKey("creativeSetId",
base::Value(detail.ad_content.creative_set_id));
ad_content.SetKey("brand", base::Value(detail.ad_content.brand));
ad_content.SetKey("brandInfo",
base::Value(detail.ad_content.brand_info));
ad_content.SetKey("brandLogo",
base::Value(detail.ad_content.brand_logo));
ad_content.SetKey("brandDisplayUrl",
base::Value(detail.ad_content.brand_display_url));
ad_content.SetKey("brandUrl", base::Value(detail.ad_content.brand_url));
ad_content.SetKey("likeAction",
base::Value(detail.ad_content.like_action));
ad_content.SetKey(
"adAction", base::Value(std::string(detail.ad_content.ad_action)));
ad_content.SetKey("savedAd", base::Value(detail.ad_content.saved_ad));
ad_content.SetKey("flaggedAd",
base::Value(detail.ad_content.flagged_ad));

base::Value category_content(base::Value::Type::DICTIONARY);
category_content.SetKey("category",
base::Value(detail.category_content.category));
category_content.SetKey(
"optAction", base::Value(detail.category_content.opt_action));

base::Value ad_history_detail(base::Value::Type::DICTIONARY);
ad_history_detail.SetKey("id", base::Value(detail.uuid));
ad_history_detail.SetPath("adContent", std::move(ad_content));
ad_history_detail.SetPath("categoryContent",
std::move(category_content));

ad_history_details.GetList().emplace_back(std::move(ad_history_detail));
}
}

ads_history_dict.SetPath("adDetailRows", std::move(ad_history_details));
ads_history_list.GetList().emplace_back(std::move(ads_history_dict));
}

web_ui()->CallJavascriptFunctionUnsafe("brave_rewards.adsHistory",
ads_history_list);
}

void RewardsDOMHandler::ToggleAdThumbUp(const base::ListValue* args) {
CHECK_EQ(3U, args->GetSize());
if (!ads_service_) {
return;
}

const std::string id = args->GetList()[0].GetString();
const std::string creative_set_id = args->GetList()[1].GetString();
const int action = args->GetList()[2].GetInt();
ads_service_->ToggleAdThumbUp(
id, creative_set_id, action,
base::BindOnce(&RewardsDOMHandler::OnToggleAdThumbUp,
weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnToggleAdThumbUp(const std::string& id, int action) {
if (!web_ui()->CanCallJavascript()) {
return;
}

base::Value result(base::Value::Type::DICTIONARY);
result.SetKey("uuid", base::Value(id));
result.SetKey("action", base::Value(action));
web_ui()->CallJavascriptFunctionUnsafe("brave_rewards.onToggleAdThumbUp",
result);
}

void RewardsDOMHandler::ToggleAdThumbDown(const base::ListValue* args) {
CHECK_EQ(3U, args->GetSize());
if (!ads_service_) {
return;
}

const std::string id = args->GetList()[0].GetString();
const std::string creative_set_id = args->GetList()[1].GetString();
const int action = args->GetList()[2].GetInt();
ads_service_->ToggleAdThumbDown(
id, creative_set_id, action,
base::BindOnce(&RewardsDOMHandler::OnToggleAdThumbDown,
weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnToggleAdThumbDown(const std::string& id, int action) {
if (!web_ui()->CanCallJavascript()) {
return;
}

base::Value result(base::Value::Type::DICTIONARY);
result.SetKey("uuid", base::Value(id));
result.SetKey("action", base::Value(action));
web_ui()->CallJavascriptFunctionUnsafe("brave_rewards.onToggleAdThumbDown",
result);
}

void RewardsDOMHandler::ToggleAdOptInAction(const base::ListValue* args) {
CHECK_EQ(2U, args->GetSize());
if (!ads_service_) {
return;
}

const std::string category = args->GetList()[0].GetString();
const int action = args->GetList()[1].GetInt();
ads_service_->ToggleAdOptInAction(
category, action,
base::BindOnce(&RewardsDOMHandler::OnToggleAdOptInAction,
weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnToggleAdOptInAction(const std::string& category,
int action) {
if (!web_ui()->CanCallJavascript()) {
return;
}

base::Value result(base::Value::Type::DICTIONARY);
result.SetKey("category", base::Value(category));
result.SetKey("action", base::Value(action));
web_ui()->CallJavascriptFunctionUnsafe("brave_rewards.onToggleAdOptInAction",
result);
}

void RewardsDOMHandler::ToggleAdOptOutAction(const base::ListValue* args) {
CHECK_EQ(2U, args->GetSize());
if (!ads_service_) {
return;
}

const std::string category = args->GetList()[0].GetString();
const int action = args->GetList()[1].GetInt();
ads_service_->ToggleAdOptOutAction(
category, action,
base::BindOnce(&RewardsDOMHandler::OnToggleAdOptOutAction,
weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnToggleAdOptOutAction(const std::string& category,
int action) {
if (!web_ui()->CanCallJavascript()) {
return;
}

base::Value result(base::Value::Type::DICTIONARY);
result.SetKey("category", base::Value(category));
result.SetKey("action", base::Value(action));
web_ui()->CallJavascriptFunctionUnsafe("brave_rewards.onToggleAdOptOutAction",
result);
}

void RewardsDOMHandler::ToggleSaveAd(const base::ListValue* args) {
CHECK_EQ(3U, args->GetSize());
if (!ads_service_) {
return;
}

const std::string id = args->GetList()[0].GetString();
const std::string creative_set_id = args->GetList()[1].GetString();
const bool saved = args->GetList()[2].GetBool();
ads_service_->ToggleSaveAd(id, creative_set_id, saved,
base::BindOnce(&RewardsDOMHandler::OnToggleSaveAd,
weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnToggleSaveAd(const std::string& id, bool saved) {
if (!web_ui()->CanCallJavascript()) {
return;
}

base::Value result(base::Value::Type::DICTIONARY);
result.SetKey("uuid", base::Value(id));
result.SetKey("saved", base::Value(saved));
web_ui()->CallJavascriptFunctionUnsafe("brave_rewards.onToggleSaveAd",
result);
}

void RewardsDOMHandler::ToggleFlagAd(const base::ListValue* args) {
CHECK_EQ(3U, args->GetSize());
if (!ads_service_) {
return;
}

const std::string id = args->GetList()[0].GetString();
const std::string creative_set_id = args->GetList()[1].GetString();
const bool flagged = args->GetList()[2].GetBool();
ads_service_->ToggleFlagAd(id, creative_set_id, flagged,
base::BindOnce(&RewardsDOMHandler::OnToggleFlagAd,
weak_factory_.GetWeakPtr()));
}

void RewardsDOMHandler::OnToggleFlagAd(const std::string& id, bool flagged) {
if (!web_ui()->CanCallJavascript()) {
return;
}

base::Value result(base::Value::Type::DICTIONARY);
result.SetKey("uuid", base::Value(id));
result.SetKey("flagged", base::Value(flagged));
web_ui()->CallJavascriptFunctionUnsafe("brave_rewards.onToggleFlagAd",
result);
}

void RewardsDOMHandler::SaveAdsSetting(const base::ListValue* args) {
CHECK_EQ(2U, args->GetSize());
if (!ads_service_) {
Expand Down
7 changes: 6 additions & 1 deletion browser/ui/webui/brave_webui_source.cc
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,11 @@ void CustomizeWebUIHTMLSource(const std::string &name,
{ "walletCorruptedNow", IDS_BRAVE_REWARDS_LOCAL_WALLET_CORRUPTED_NOW },
{ "grantAlreadyClaimedText", IDS_BRAVE_REWARDS_LOCAL_GRANT_ALREADY_CLAIMED_TEXT }, // NOLINT

{ "click", IDS_BRAVE_REWARDS_LOCAL_ADS_CONFIRMATION_TYPE_CLICK },
{ "dismiss", IDS_BRAVE_REWARDS_LOCAL_ADS_CONFIRMATION_TYPE_DISMISS },
{ "landed", IDS_BRAVE_REWARDS_LOCAL_ADS_CONFIRMATION_TYPE_LANDED },
{ "view", IDS_BRAVE_REWARDS_LOCAL_ADS_CONFIRMATION_TYPE_VIEW },

{ "about", IDS_BRAVE_UI_ABOUT },
{ "accept", IDS_BRAVE_UI_ACCEPT },
{ "activityCopy", IDS_BRAVE_UI_ACTIVITY_COPY },
Expand Down Expand Up @@ -362,7 +367,7 @@ void CustomizeWebUIHTMLSource(const std::string &name,
{ "makeMonthly", IDS_BRAVE_UI_MAKE_MONTHLY },
{ "manageWallet", IDS_BRAVE_UI_MANAGE_WALLET },
{ "markAsInappropriate", IDS_BRAVE_UI_ADS_MARK_AS_INAPPROPRIATE },
{ "markAsInappropriateChecked", IDS_BRAVE_UI_ADS_MARK_AS_INAPPROPRIATE_CHECKED },
{ "markAsInappropriateChecked", IDS_BRAVE_UI_ADS_MARK_AS_INAPPROPRIATE_CHECKED }, // NOLINT
{ "monthApr", IDS_BRAVE_UI_MONTH_APR },
{ "monthAug", IDS_BRAVE_UI_MONTH_AUG },
{ "monthDec", IDS_BRAVE_UI_MONTH_DEC },
Expand Down
Loading

0 comments on commit 564242c

Please sign in to comment.