Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Jason Sadler committed Jun 18, 2019
1 parent 3b92d00 commit cdb70b6
Show file tree
Hide file tree
Showing 16 changed files with 236 additions and 229 deletions.
147 changes: 78 additions & 69 deletions browser/extensions/api/brave_rewards_api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -81,17 +81,19 @@ ExtensionFunction::ResponseAction BraveRewardsTipSiteFunction::Run() {
return RespondNow(NoArguments());
}

BraveRewardsTipTwitterUserFunction::BraveRewardsTipTwitterUserFunction()
BraveRewardsTipTwitterInlineMediaFunction::
BraveRewardsTipTwitterInlineMediaFunction()
: weak_factory_(this) {
}

BraveRewardsTipTwitterUserFunction::~BraveRewardsTipTwitterUserFunction() {
BraveRewardsTipTwitterInlineMediaFunction::
~BraveRewardsTipTwitterInlineMediaFunction() {
}

ExtensionFunction::ResponseAction
BraveRewardsTipTwitterUserFunction::Run() {
std::unique_ptr<brave_rewards::TipTwitterUser::Params> params(
brave_rewards::TipTwitterUser::Params::Create(*args_));
BraveRewardsTipTwitterInlineMediaFunction::Run() {
std::unique_ptr<brave_rewards::TipTwitterInlineMedia::Params> params(
brave_rewards::TipTwitterInlineMedia::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get());

// Sanity check: don't allow tips in private / tor contexts,
Expand All @@ -106,60 +108,65 @@ BraveRewardsTipTwitterUserFunction::Run() {
if (rewards_service) {
AddRef();
std::map<std::string, std::string> args;
args["user_id"] = params->tweet_meta_data.user_id;
args["name"] = params->tweet_meta_data.name;
args["screen_name"] = params->tweet_meta_data.screen_name;
rewards_service->SaveTwitterPublisherInfo(
args["user_id"] = params->media_meta_data.user_id;
args["twitter_name"] = params->media_meta_data.twitter_name;
args["screen_name"] = params->media_meta_data.screen_name;
rewards_service->SaveInlineMediaInfo(
params->media_meta_data.media_type,
args,
base::Bind(&BraveRewardsTipTwitterUserFunction::
OnTwitterPublisherInfoSaved,
base::Bind(&BraveRewardsTipTwitterInlineMediaFunction::
OnTwitterInlineMediaInfoSaved,
weak_factory_.GetWeakPtr()));
}

return RespondNow(NoArguments());
}

BraveRewardsTipRedditUserFunction::BraveRewardsTipRedditUserFunction()
BraveRewardsTipRedditInlineMediaFunction::
BraveRewardsTipRedditInlineMediaFunction()
: weak_factory_(this) {
}

BraveRewardsTipRedditUserFunction::~BraveRewardsTipRedditUserFunction() {
BraveRewardsTipRedditInlineMediaFunction::
~BraveRewardsTipRedditInlineMediaFunction() {
}

ExtensionFunction::ResponseAction BraveRewardsTipRedditUserFunction::Run() {
std::unique_ptr<brave_rewards::TipRedditUser::Params> params(
brave_rewards::TipRedditUser::Params::Create(*args_));
ExtensionFunction::ResponseAction
BraveRewardsTipRedditInlineMediaFunction::Run() {
std::unique_ptr<brave_rewards::TipRedditInlineMedia::Params> params(
brave_rewards::TipRedditInlineMedia::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get());

// Sanity check: don't allow tips in private / tor contexts,
// although the command should not have been enabled in the first place.
Profile* profile = Profile::FromBrowserContext(browser_context());
if (profile->IsOffTheRecord()) {
return RespondNow(
Error("Cannot tip Reddit user in a private context"));
}

RewardsService* rewards_service = RewardsServiceFactory::GetForProfile(
profile);

auto* rewards_service = RewardsServiceFactory::GetForProfile(profile);
if (rewards_service) {
AddRef();
std::map<std::string, std::string> args;
args["user_name"] = params->reddit_meta_data.user_name;
args["post_text"] = params->reddit_meta_data.post_text;
args["post_rel_date"] = params->reddit_meta_data.post_rel_date;
rewards_service->SaveRedditPublisherInfo(
args["user_name"] = params->media_meta_data.user_name;
args["post_text"] = params->media_meta_data.post_text;
args["post_rel_date"] = params->media_meta_data.post_rel_date;
rewards_service->SaveInlineMediaInfo(
params->media_meta_data.media_type,
args,
base::Bind(
&BraveRewardsTipRedditUserFunction::OnRedditPublisherInfoSaved,
weak_factory_.GetWeakPtr()));
base::Bind(&BraveRewardsTipRedditInlineMediaFunction::
OnRedditInlineMediaInfoSaved,
weak_factory_.GetWeakPtr()));
}

return RespondNow(NoArguments());
}

void BraveRewardsTipTwitterUserFunction::OnTwitterPublisherInfoSaved(
void BraveRewardsTipTwitterInlineMediaFunction::OnTwitterInlineMediaInfoSaved(
std::unique_ptr<::brave_rewards::ContentSite> publisher_info) {
std::unique_ptr<brave_rewards::TipTwitterUser::Params> params(
brave_rewards::TipTwitterUser::Params::Create(*args_));
std::unique_ptr<brave_rewards::TipTwitterInlineMedia::Params> params(
brave_rewards::TipTwitterInlineMedia::Params::Create(*args_));

if (!publisher_info) {
// TODO(nejczdovc): what should we do in this case?
Expand All @@ -184,64 +191,66 @@ void BraveRewardsTipTwitterUserFunction::OnTwitterPublisherInfoSaved(
params_dict->SetString("publisherKey", publisher_info->id);
params_dict->SetString("url", publisher_info->url);

auto tweet_meta_data_dict = std::make_unique<base::DictionaryValue>();
tweet_meta_data_dict->SetString("name", publisher_info->name);
tweet_meta_data_dict->SetString("screenName",
params->tweet_meta_data.screen_name);
tweet_meta_data_dict->SetString("userId", params->tweet_meta_data.user_id);
tweet_meta_data_dict->SetString("tweetId", params->tweet_meta_data.tweet_id);
tweet_meta_data_dict->SetInteger("tweetTimestamp",
params->tweet_meta_data.tweet_timestamp);
tweet_meta_data_dict->SetString("tweetText",
params->tweet_meta_data.tweet_text);
params_dict->SetDictionary("tweetMetaData", std::move(tweet_meta_data_dict));
auto media_meta_data_dict = std::make_unique<base::DictionaryValue>();
media_meta_data_dict->SetString("twitter_name", publisher_info->name);
media_meta_data_dict->SetString("mediaType",
params->media_meta_data.media_type);
media_meta_data_dict->SetString("screenName",
params->media_meta_data.screen_name);
media_meta_data_dict->SetString("userId", params->media_meta_data.user_id);
media_meta_data_dict->SetString("tweetId",
params->media_meta_data.tweet_id);
media_meta_data_dict->SetInteger("tweetTimestamp",
params->media_meta_data.tweet_timestamp);
media_meta_data_dict->SetString("tweetText",
params->media_meta_data.tweet_text);
params_dict->SetDictionary("mediaMetaData", std::move(media_meta_data_dict));

::brave_rewards::OpenTipDialog(contents, std::move(params_dict));

Release();
}

void BraveRewardsTipRedditUserFunction::OnRedditPublisherInfoSaved(
void BraveRewardsTipRedditInlineMediaFunction::OnRedditInlineMediaInfoSaved(
std::unique_ptr<::brave_rewards::ContentSite> publisher_info) {
std::unique_ptr<brave_rewards::TipRedditUser::Params> params(
brave_rewards::TipRedditUser::Params::Create(*args_));
std::unique_ptr<brave_rewards::TipRedditInlineMedia::Params> params(
brave_rewards::TipRedditInlineMedia::Params::Create(*args_));

if (!publisher_info) {
// TODO(nejczdovc): what should we do in this case?
Release();
return;
}

// Get web contents for this tab
content::WebContents* contents = nullptr;
if (!ExtensionTabUtil::GetTabById(
params->tab_id,
Profile::FromBrowserContext(browser_context()),
false,
nullptr,
nullptr,
&contents,
nullptr)) {
return;
}

std::unique_ptr<base::DictionaryValue> params_dict =
std::make_unique<base::DictionaryValue>();
params->tab_id,
Profile::FromBrowserContext(browser_context()),
false,
nullptr,
nullptr,
&contents,
nullptr)) {
return;
}

auto params_dict = std::make_unique<base::DictionaryValue>();
params_dict->SetString("publisherKey", publisher_info->id);
params_dict->SetString("url", publisher_info->url);

std::unique_ptr<base::DictionaryValue> reddit_meta_data_dict =
std::make_unique<base::DictionaryValue>();
reddit_meta_data_dict->SetString("name", publisher_info->name);
reddit_meta_data_dict->SetString(
"userName", params->reddit_meta_data.user_name);
reddit_meta_data_dict->SetString(
"postText", params->reddit_meta_data.post_text);
reddit_meta_data_dict->SetString(
"postRelDate", params->reddit_meta_data.post_rel_date);
params_dict->SetDictionary(
"redditMetaData", std::move(reddit_meta_data_dict));

::brave_rewards::OpenTipDialog(
contents, std::move(params_dict));
auto media_meta_data_dict = std::make_unique<base::DictionaryValue>();
media_meta_data_dict->SetString("mediaType",
params->media_meta_data.media_type);
media_meta_data_dict->SetString("userName",
params->media_meta_data.user_name);
media_meta_data_dict->SetString("postText",
params->media_meta_data.post_text);
media_meta_data_dict->SetString("postRelDate",
params->media_meta_data.post_rel_date);
params_dict->SetDictionary("mediaMetaData", std::move(media_meta_data_dict));

::brave_rewards::OpenTipDialog(contents, std::move(params_dict));

Release();
}
Expand Down
25 changes: 13 additions & 12 deletions browser/extensions/api/brave_rewards_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,37 +37,38 @@ class BraveRewardsTipSiteFunction : public UIThreadExtensionFunction {
ResponseAction Run() override;
};

class BraveRewardsTipTwitterUserFunction
class BraveRewardsTipTwitterInlineMediaFunction
: public UIThreadExtensionFunction {
public:
BraveRewardsTipTwitterUserFunction();
DECLARE_EXTENSION_FUNCTION("braveRewards.tipTwitterUser", UNKNOWN)
BraveRewardsTipTwitterInlineMediaFunction();
DECLARE_EXTENSION_FUNCTION("braveRewards.tipTwitterInlineMedia", UNKNOWN)

protected:
~BraveRewardsTipTwitterUserFunction() override;
~BraveRewardsTipTwitterInlineMediaFunction() override;

ResponseAction Run() override;

private:
base::WeakPtrFactory<BraveRewardsTipTwitterUserFunction> weak_factory_;
void OnTwitterPublisherInfoSaved(
void OnTwitterInlineMediaInfoSaved(
std::unique_ptr<brave_rewards::ContentSite> publisher_info);
base::WeakPtrFactory<BraveRewardsTipTwitterInlineMediaFunction> weak_factory_;
};

class BraveRewardsTipRedditUserFunction : public UIThreadExtensionFunction {
class BraveRewardsTipRedditInlineMediaFunction
: public UIThreadExtensionFunction {
public:
BraveRewardsTipRedditUserFunction();
DECLARE_EXTENSION_FUNCTION("braveRewards.tipRedditUser", UNKNOWN)
BraveRewardsTipRedditInlineMediaFunction();
DECLARE_EXTENSION_FUNCTION("braveRewards.tipRedditInlineMedia", UNKNOWN)

protected:
~BraveRewardsTipRedditUserFunction() override;
~BraveRewardsTipRedditInlineMediaFunction() override;

ResponseAction Run() override;

private:
base::WeakPtrFactory<BraveRewardsTipRedditUserFunction> weak_factory_;
void OnRedditPublisherInfoSaved(
void OnRedditInlineMediaInfoSaved(
std::unique_ptr<brave_rewards::ContentSite> publisher_info);
base::WeakPtrFactory<BraveRewardsTipRedditInlineMediaFunction> weak_factory_;
};

class BraveRewardsGetPublisherDataFunction : public UIThreadExtensionFunction {
Expand Down
40 changes: 24 additions & 16 deletions common/extensions/api/brave_rewards.json
Original file line number Diff line number Diff line change
Expand Up @@ -366,70 +366,78 @@
]
},
{
"name": "tipTwitterUser",
"name": "tipTwitterInlineMedia",
"type": "function",
"description": "Allow the user to perform a donation to a Twitter user",
"description": "Allow the user to perform a donation to a Media publisher",
"parameters": [
{
"name": "tabID",
"type": "integer"
},
{
"name": "tweetMetaData",
"name": "mediaMetaData",
"type": "object",
"properties": {
"mediaType": {
"type": "string",
"description": "description used in UI to identify the media type"
},
"userId": {
"type": "string",
"description": "User ID of tweet author"
"description": "User ID of tweet author for Twitter"
},
"name": {
"twitterName": {
"type": "string",
"description": "Name of tweet author"
"description": "Name of tweet author for Twitter"
},
"screenName": {
"type": "string",
"description": "Twitter handle of tweet author"
"description": "Twitter handle of tweet author for Twitter"
},
"tweetId": {
"type": "string",
"description": "Unique tweet ID"
"description": "Unique tweet ID for Twitter"
},
"tweetTimestamp": {
"type": "number",
"description": "Timestamp (in milliseconds) of tweet"
"description": "Timestamp (in milliseconds) of tweet for Twitter"
},
"tweetText": {
"type": "string",
"description": "Textual contents of tweet"
"description": "Textual contents of tweet for Twitter"
}
}
}
]
},
{
"name": "tipRedditUser",
"name": "tipRedditInlineMedia",
"type": "function",
"description": "Allow the user to perform a donation to a Reddit user",
"description": "Allow the user to perform a donation to a Media publisher",
"parameters": [
{
"name": "tabID",
"type": "integer"
},
{
"name": "redditMetaData",
"name": "mediaMetaData",
"type": "object",
"properties": {
"mediaType": {
"type": "string",
"description": "description used in UI to identify the media type"
},
"userName": {
"type": "string",
"description": "User name of the Reddit post/comment author"
"description": "User name of the Reddit post/comment author for Reddit"
},
"postText": {
"type": "string",
"description": "Textual contents of comment/post"
"description": "Textual contents of comment/post for Reddit"
},
"postRelDate": {
"type": "string",
"description": "Date of post relative to current date"
"description": "Date of post relative to current date for Reddit"
}
}
}
Expand Down
5 changes: 3 additions & 2 deletions components/brave_ads/browser/ads_service_impl_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,9 @@ class MockRewardsService : public RewardsService {
brave_rewards::RefreshPublisherCallback));
MOCK_METHOD0(GetAllNotifications,
const brave_rewards::RewardsNotificationService::RewardsNotificationsMap&());
MOCK_METHOD2(SaveTwitterPublisherInfo,
void(const std::map<std::string, std::string>&,
MOCK_METHOD3(SaveInlineMediaInfo,
void(const std::string&,
const std::map<std::string, std::string>&,
brave_rewards::SaveMediaInfoCallback));
MOCK_METHOD2(SetInlineTipSetting,
void(const std::string& key, bool enabled));
Expand Down
6 changes: 2 additions & 4 deletions components/brave_rewards/browser/rewards_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,10 +220,8 @@ class RewardsService : public KeyedService {
virtual const RewardsNotificationService::RewardsNotificationsMap&
GetAllNotifications() = 0;

virtual void SaveTwitterPublisherInfo(
const std::map<std::string, std::string>& args,
SaveMediaInfoCallback callback) = 0;
virtual void SaveRedditPublisherInfo(
virtual void SaveInlineMediaInfo(
const std::string& media_type,
const std::map<std::string, std::string>& args,
SaveMediaInfoCallback callback) = 0;

Expand Down

0 comments on commit cdb70b6

Please sign in to comment.