Skip to content

Commit

Permalink
[Rewards 3.0] Simplify RewardsPage interface binding (#27460)
Browse files Browse the repository at this point in the history
  • Loading branch information
zenparsing authored Feb 3, 2025
1 parent 0a7e63b commit b37a0fe
Show file tree
Hide file tree
Showing 9 changed files with 26 additions and 62 deletions.
4 changes: 2 additions & 2 deletions browser/brave_content_browser_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -656,7 +656,7 @@ void BraveContentBrowserClient::RegisterWebUIInterfaceBrokers(
}

registry.ForWebUI<brave_rewards::RewardsPageUI>()
.Add<brave_rewards::mojom::RewardsPageHandlerFactory>();
.Add<brave_rewards::mojom::RewardsPageHandler>();

#if !BUILDFLAG(IS_ANDROID)
auto ntp_registration =
Expand Down Expand Up @@ -867,7 +867,7 @@ void BraveContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
CookieListOptInUI>(map);
}
content::RegisterWebUIControllerInterfaceBinder<
brave_rewards::mojom::RewardsPageHandlerFactory,
brave_rewards::mojom::RewardsPageHandler,
brave_rewards::RewardsPageTopUI>(map);
content::RegisterWebUIControllerInterfaceBinder<
brave_rewards::mojom::PanelHandlerFactory, brave_rewards::RewardsPanelUI>(
Expand Down
12 changes: 9 additions & 3 deletions browser/ui/webui/brave_rewards/rewards_page_handler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -185,15 +185,13 @@ class RewardsPageHandler::UpdateObserver
};

RewardsPageHandler::RewardsPageHandler(
mojo::PendingRemote<mojom::RewardsPage> page,
mojo::PendingReceiver<mojom::RewardsPageHandler> receiver,
std::unique_ptr<BubbleDelegate> bubble_delegate,
RewardsService* rewards_service,
brave_ads::AdsService* ads_service,
brave_adaptive_captcha::BraveAdaptiveCaptchaService* captcha_service,
PrefService* prefs)
: receiver_(this, std::move(receiver)),
page_(std::move(page)),
bubble_delegate_(std::move(bubble_delegate)),
rewards_service_(rewards_service),
ads_service_(ads_service),
Expand All @@ -212,6 +210,12 @@ RewardsPageHandler::RewardsPageHandler(

RewardsPageHandler::~RewardsPageHandler() = default;

void RewardsPageHandler::SetRewardsPage(
mojo::PendingRemote<mojom::RewardsPage> page) {
page_.reset();
page_.Bind(std::move(page));
}

void RewardsPageHandler::OnPageReady() {
if (bubble_delegate_) {
bubble_delegate_->ShowUI();
Expand Down Expand Up @@ -690,7 +694,9 @@ void RewardsPageHandler::ResetRewards(ResetRewardsCallback callback) {
}

void RewardsPageHandler::OnUpdate(UpdateSource update_source) {
page_->OnRewardsStateUpdated();
if (page_) {
page_->OnRewardsStateUpdated();
}
}

} // namespace brave_rewards
2 changes: 1 addition & 1 deletion browser/ui/webui/brave_rewards/rewards_page_handler.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ class RewardsPageHandler : public mojom::RewardsPageHandler {
};

RewardsPageHandler(
mojo::PendingRemote<mojom::RewardsPage> page,
mojo::PendingReceiver<mojom::RewardsPageHandler> receiver,
std::unique_ptr<BubbleDelegate> bubble_delegate,
RewardsService* rewards_service,
Expand All @@ -55,6 +54,7 @@ class RewardsPageHandler : public mojom::RewardsPageHandler {
~RewardsPageHandler() override;

// mojom::RewardsPageHandler:
void SetRewardsPage(mojo::PendingRemote<mojom::RewardsPage> page) override;
void OnPageReady() override;
void OpenTab(const std::string& url) override;
void GetPluralString(const std::string& key,
Expand Down
13 changes: 2 additions & 11 deletions browser/ui/webui/brave_rewards/rewards_page_top_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -76,24 +76,15 @@ RewardsPageTopUI::RewardsPageTopUI(content::WebUI* web_ui)
RewardsPageTopUI::~RewardsPageTopUI() = default;

void RewardsPageTopUI::BindInterface(
mojo::PendingReceiver<RewardsPageHandlerFactory> receiver) {
factory_receiver_.reset();
factory_receiver_.Bind(std::move(receiver));
}

void RewardsPageTopUI::CreatePageHandler(
mojo::PendingRemote<mojom::RewardsPage> page,
mojo::PendingReceiver<mojom::RewardsPageHandler> handler) {
DCHECK(page);

mojo::PendingReceiver<mojom::RewardsPageHandler> receiver) {
auto* profile = Profile::FromWebUI(web_ui());
CHECK(profile);

auto bubble_delegate = std::make_unique<RewardsPageBubbleDelegate>(
profile->GetWeakPtr(), embedder());

handler_ = std::make_unique<RewardsPageHandler>(
std::move(page), std::move(handler), std::move(bubble_delegate),
std::move(receiver), std::move(bubble_delegate),
RewardsServiceFactory::GetForProfile(profile),
brave_ads::AdsServiceFactory::GetForProfile(profile),
BraveAdaptiveCaptchaServiceFactory::GetForProfile(profile),
Expand Down
14 changes: 2 additions & 12 deletions browser/ui/webui/brave_rewards/rewards_page_top_ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
#include "chrome/browser/ui/webui/top_chrome/top_chrome_web_ui_controller.h"
#include "chrome/browser/ui/webui/top_chrome/top_chrome_webui_config.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"

namespace content {
class BrowserContext;
Expand All @@ -23,25 +21,17 @@ class BrowserContext;
namespace brave_rewards {

// The WebUI controller for the Rewards page when embedded in the Rewards panel.
class RewardsPageTopUI : public TopChromeWebUIController,
public mojom::RewardsPageHandlerFactory {
class RewardsPageTopUI : public TopChromeWebUIController {
public:
explicit RewardsPageTopUI(content::WebUI* web_ui);
~RewardsPageTopUI() override;

void BindInterface(
mojo::PendingReceiver<mojom::RewardsPageHandlerFactory> receiver);
void BindInterface(mojo::PendingReceiver<mojom::RewardsPageHandler> receiver);

static constexpr std::string GetWebUIName() { return "RewardsPanel"; }

private:
// mojom::RewardsPageHandlerFactory:
void CreatePageHandler(
mojo::PendingRemote<mojom::RewardsPage> page,
mojo::PendingReceiver<mojom::RewardsPageHandler> handler) override;

std::unique_ptr<mojom::RewardsPageHandler> handler_;
mojo::Receiver<RewardsPageHandlerFactory> factory_receiver_{this};

WEB_UI_CONTROLLER_TYPE_DECL();
};
Expand Down
13 changes: 2 additions & 11 deletions browser/ui/webui/brave_rewards/rewards_page_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -60,21 +60,12 @@ RewardsPageUI::RewardsPageUI(content::WebUI* web_ui, const std::string& host)
RewardsPageUI::~RewardsPageUI() = default;

void RewardsPageUI::BindInterface(
mojo::PendingReceiver<RewardsPageHandlerFactory> receiver) {
factory_receiver_.reset();
factory_receiver_.Bind(std::move(receiver));
}

void RewardsPageUI::CreatePageHandler(
mojo::PendingRemote<mojom::RewardsPage> page,
mojo::PendingReceiver<mojom::RewardsPageHandler> handler) {
DCHECK(page);

mojo::PendingReceiver<mojom::RewardsPageHandler> receiver) {
auto* profile = Profile::FromWebUI(web_ui());
CHECK(profile);

handler_ = std::make_unique<RewardsPageHandler>(
std::move(page), std::move(handler), MakeBubbleDelegate(),
std::move(receiver), MakeBubbleDelegate(),
RewardsServiceFactory::GetForProfile(profile),
brave_ads::AdsServiceFactory::GetForProfile(profile),
BraveAdaptiveCaptchaServiceFactory::GetForProfile(profile),
Expand Down
14 changes: 2 additions & 12 deletions browser/ui/webui/brave_rewards/rewards_page_ui.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,19 @@
#include "brave/components/brave_rewards/core/mojom/rewards_page.mojom.h"
#include "content/public/browser/web_ui_controller.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"

namespace brave_rewards {

// The WebUI controller for the Rewards page when viewed in a tab.
class RewardsPageUI : public content::WebUIController,
public mojom::RewardsPageHandlerFactory {
class RewardsPageUI : public content::WebUIController {
public:
explicit RewardsPageUI(content::WebUI* web_ui, const std::string& host);
~RewardsPageUI() override;

void BindInterface(
mojo::PendingReceiver<mojom::RewardsPageHandlerFactory> receiver);
void BindInterface(mojo::PendingReceiver<mojom::RewardsPageHandler> receiver);

private:
// mojom::RewardsPageHandlerFactory:
void CreatePageHandler(
mojo::PendingRemote<mojom::RewardsPage> page,
mojo::PendingReceiver<mojom::RewardsPageHandler> handler) override;

std::unique_ptr<mojom::RewardsPageHandler> handler_;
mojo::Receiver<RewardsPageHandlerFactory> factory_receiver_{this};

WEB_UI_CONTROLLER_TYPE_DECL();
};
Expand Down
10 changes: 4 additions & 6 deletions components/brave_rewards/core/mojom/rewards_page.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,6 @@ import "brave/components/brave_ads/core/mojom/brave_ads.mojom";
import "brave/components/brave_rewards/core/mojom/rewards.mojom";
import "mojo/public/mojom/base/time.mojom";

// Initializes messaging between the browser and the page.
interface RewardsPageHandlerFactory {
CreatePageHandler(pending_remote<RewardsPage> page,
pending_receiver<RewardsPageHandler> receiver);
};

// Page-side handler for notifications from the browser.
interface RewardsPage {
// Notifies the page that Rewards state has changed and updated information
Expand Down Expand Up @@ -83,6 +77,10 @@ struct RewardsNotification {

// Browser-side handler for requests from WebUI page.
interface RewardsPageHandler {

// Sets the remote that will receive notifications from the browser.
SetRewardsPage(pending_remote<RewardsPage> page);

// Notifies the browser that that Rewards page has rendered and is ready to be
// displayed to the user.
OnPageReady();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,8 @@ export class RewardsPageProxy {
static getInstance(): RewardsPageProxy {
if (!instance) {
const callbackRouter = new mojom.RewardsPageCallbackRouter()
const handler = new mojom.RewardsPageHandlerRemote()
mojom.RewardsPageHandlerFactory.getRemote().createPageHandler(
callbackRouter.$.bindNewPipeAndPassRemote(),
handler.$.bindNewPipeAndPassReceiver())
const handler = mojom.RewardsPageHandler.getRemote()
handler.setRewardsPage(callbackRouter.$.bindNewPipeAndPassRemote())
instance = new RewardsPageProxy(callbackRouter, handler)
}
return instance
Expand Down

0 comments on commit b37a0fe

Please sign in to comment.