[Rewards] Migrate wallet UI from Rewards extention API to mojo (#30614)

This commit is contained in:
Kevin Smith
2025-08-28 15:39:36 -04:00
committed by GitHub
parent 685995b8a4
commit fabe4faf5e
9 changed files with 101 additions and 136 deletions
+8 -4
View File
@@ -611,6 +611,14 @@ void BraveContentBrowserClient::RegisterWebUIInterfaceBrokers(
.Add<brave_rewards::mojom::RewardsPageHandler>();
#if !BUILDFLAG(IS_ANDROID)
registry.ForWebUI<WalletPageUI>()
.Add<brave_wallet::mojom::PageHandlerFactory>()
.Add<brave_rewards::mojom::RewardsPageHandler>();
registry.ForWebUI<WalletPanelUI>()
.Add<brave_wallet::mojom::PanelHandlerFactory>()
.Add<brave_rewards::mojom::RewardsPageHandler>();
auto ntp_refresh_registration =
registry.ForWebUI<BraveNewTabPageUI>()
.Add<brave_new_tab_page_refresh::mojom::NewTabPageHandler>()
@@ -826,10 +834,6 @@ void BraveContentBrowserClient::RegisterBrowserInterfaceBindersForFrame(
#endif
#if !BUILDFLAG(IS_ANDROID)
content::RegisterWebUIControllerInterfaceBinder<
brave_wallet::mojom::PageHandlerFactory, WalletPageUI>(map);
content::RegisterWebUIControllerInterfaceBinder<
brave_wallet::mojom::PanelHandlerFactory, WalletPanelUI>(map);
content::RegisterWebUIControllerInterfaceBinder<
brave_private_new_tab::mojom::PageHandler, BravePrivateNewTabUI>(map);
content::RegisterWebUIControllerInterfaceBinder<
@@ -79,6 +79,9 @@ AndroidWalletPageUI::AndroidWalletPageUI(content::WebUI* web_ui,
base::CommandLine::ForCurrentProcess()->HasSwitch(
brave_wallet::mojom::kP3ACountTestNetworksSwitch));
// Rewards UI features are not currently supported on Android.
source->AddBoolean("rewardsFeatureEnabled", false);
content::URLDataSource::Add(profile,
std::make_unique<SanitizedImageSource>(profile));
brave_wallet::AddBlockchainTokenImageSource(profile);
@@ -11,12 +11,16 @@
#include "base/check.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "brave/browser/brave_ads/ads_service_factory.h"
#include "brave/browser/brave_rewards/rewards_service_factory.h"
#include "brave/browser/brave_rewards/rewards_util.h"
#include "brave/browser/brave_wallet/asset_ratio_service_factory.h"
#include "brave/browser/brave_wallet/brave_wallet_context_utils.h"
#include "brave/browser/brave_wallet/brave_wallet_ipfs_service_factory.h"
#include "brave/browser/brave_wallet/brave_wallet_service_factory.h"
#include "brave/browser/brave_wallet/meld_integration_service_factory.h"
#include "brave/browser/brave_wallet/swap_service_factory.h"
#include "brave/browser/ui/webui/brave_rewards/rewards_page_handler.h"
#include "brave/browser/ui/webui/brave_wallet/wallet_common_ui.h"
#include "brave/browser/ui/webui/navigation_bar_data_provider.h"
#include "brave/components/brave_wallet/browser/asset_ratio_service.h"
@@ -86,6 +90,8 @@ WalletPageUI::WalletPageUI(content::WebUI* web_ui)
source->AddBoolean(brave_wallet::mojom::kP3ACountTestNetworksLoadTimeKey,
base::CommandLine::ForCurrentProcess()->HasSwitch(
brave_wallet::mojom::kP3ACountTestNetworksSwitch));
source->AddBoolean("rewardsFeatureEnabled",
brave_rewards::IsSupportedForProfile(profile));
content::URLDataSource::Add(profile,
std::make_unique<SanitizedImageSource>(profile));
content::URLDataSource::Add(profile, std::make_unique<ThemeSource>(profile));
@@ -101,6 +107,18 @@ void WalletPageUI::BindInterface(
page_factory_receiver_.Bind(std::move(receiver));
}
void WalletPageUI::BindInterface(
mojo::PendingReceiver<brave_rewards::mojom::RewardsPageHandler> receiver) {
auto* profile = Profile::FromWebUI(web_ui());
CHECK(profile);
rewards_handler_ = std::make_unique<brave_rewards::RewardsPageHandler>(
std::move(receiver), nullptr,
brave_rewards::RewardsServiceFactory::GetForProfile(profile),
brave_ads::AdsServiceFactory::GetForProfile(profile), nullptr,
profile->GetPrefs());
}
void WalletPageUI::CreatePageHandler(
mojo::PendingReceiver<brave_wallet::mojom::PageHandler> page_receiver,
mojo::PendingReceiver<brave_wallet::mojom::WalletHandler> wallet_receiver,
@@ -10,6 +10,7 @@
#include "brave/browser/ui/webui/brave_wallet/common_handler/wallet_handler.h"
#include "brave/browser/ui/webui/brave_wallet/page_handler/wallet_page_handler.h"
#include "brave/components/brave_rewards/core/mojom/rewards_page.mojom.h"
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
#include "chrome/browser/ui/webui/top_chrome/top_chrome_webui_config.h"
#include "content/public/browser/web_ui_controller.h"
@@ -32,6 +33,9 @@ class WalletPageUI : public ui::MojoWebUIController,
void BindInterface(
mojo::PendingReceiver<brave_wallet::mojom::PageHandlerFactory> receiver);
void BindInterface(
mojo::PendingReceiver<brave_rewards::mojom::RewardsPageHandler> receiver);
private:
// brave_wallet::mojom::PageHandlerFactory:
void CreatePageHandler(
@@ -72,6 +76,7 @@ class WalletPageUI : public ui::MojoWebUIController,
std::unique_ptr<WalletPageHandler> page_handler_;
std::unique_ptr<brave_wallet::WalletHandler> wallet_handler_;
std::unique_ptr<brave_rewards::mojom::RewardsPageHandler> rewards_handler_;
mojo::Receiver<brave_wallet::mojom::PageHandlerFactory>
page_factory_receiver_{this};
@@ -12,6 +12,9 @@
#include "base/command_line.h"
#include "base/strings/strcat.h"
#include "base/strings/string_util.h"
#include "brave/browser/brave_ads/ads_service_factory.h"
#include "brave/browser/brave_rewards/rewards_service_factory.h"
#include "brave/browser/brave_rewards/rewards_util.h"
#include "brave/browser/brave_wallet/asset_ratio_service_factory.h"
#include "brave/browser/brave_wallet/brave_wallet_context_utils.h"
#include "brave/browser/brave_wallet/brave_wallet_ipfs_service_factory.h"
@@ -19,6 +22,7 @@
#include "brave/browser/brave_wallet/meld_integration_service_factory.h"
#include "brave/browser/brave_wallet/simulation_service_factory.h"
#include "brave/browser/brave_wallet/swap_service_factory.h"
#include "brave/browser/ui/webui/brave_rewards/rewards_page_handler.h"
#include "brave/browser/ui/webui/brave_wallet/wallet_common_ui.h"
#include "brave/components/brave_wallet/browser/asset_ratio_service.h"
#include "brave/components/brave_wallet/browser/blockchain_registry.h"
@@ -95,6 +99,8 @@ WalletPanelUI::WalletPanelUI(content::WebUI* web_ui)
source->AddBoolean(brave_wallet::mojom::kP3ACountTestNetworksLoadTimeKey,
base::CommandLine::ForCurrentProcess()->HasSwitch(
brave_wallet::mojom::kP3ACountTestNetworksSwitch));
source->AddBoolean("rewardsFeatureEnabled",
brave_rewards::IsSupportedForProfile(profile));
content::URLDataSource::Add(profile,
std::make_unique<SanitizedImageSource>(profile));
content::URLDataSource::Add(profile, std::make_unique<ThemeSource>(profile));
@@ -112,6 +118,18 @@ void WalletPanelUI::BindInterface(
panel_factory_receiver_.Bind(std::move(receiver));
}
void WalletPanelUI::BindInterface(
mojo::PendingReceiver<brave_rewards::mojom::RewardsPageHandler> receiver) {
auto* profile = Profile::FromWebUI(web_ui());
CHECK(profile);
rewards_handler_ = std::make_unique<brave_rewards::RewardsPageHandler>(
std::move(receiver), nullptr,
brave_rewards::RewardsServiceFactory::GetForProfile(profile),
brave_ads::AdsServiceFactory::GetForProfile(profile), nullptr,
profile->GetPrefs());
}
void WalletPanelUI::SetDeactivationCallback(
base::RepeatingCallback<void(bool)> deactivation_callback) {
deactivation_callback_ = std::move(deactivation_callback);
@@ -12,6 +12,7 @@
#include "base/memory/raw_ptr.h"
#include "brave/browser/ui/webui/brave_wallet/common_handler/wallet_handler.h"
#include "brave/browser/ui/webui/brave_wallet/panel_handler/wallet_panel_handler.h"
#include "brave/components/brave_rewards/core/mojom/rewards_page.mojom.h"
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
#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"
@@ -36,6 +37,10 @@ class WalletPanelUI : public TopChromeWebUIController,
// interface passing the pending receiver that will be internally bound.
void BindInterface(
mojo::PendingReceiver<brave_wallet::mojom::PanelHandlerFactory> receiver);
void BindInterface(
mojo::PendingReceiver<brave_rewards::mojom::RewardsPageHandler> receiver);
// The bubble disappears by default when Trezor opens a popup window
// from the wallet panel bubble. In order to prevent it we set a callback
// to modify panel deactivation flag when necessary.
@@ -86,6 +91,7 @@ class WalletPanelUI : public TopChromeWebUIController,
std::unique_ptr<WalletPanelHandler> panel_handler_;
std::unique_ptr<brave_wallet::WalletHandler> wallet_handler_;
std::unique_ptr<brave_rewards::mojom::RewardsPageHandler> rewards_handler_;
raw_ptr<content::WebContents> active_web_contents_ = nullptr;
base::RepeatingCallback<void(bool)> deactivation_callback_;
+1 -5
View File
@@ -25,11 +25,7 @@
"channel": "stable",
"contexts": ["webui"],
"matches": [
"chrome://newtab/*",
"chrome://rewards-panel.top-chrome/*",
"chrome://settings/*",
"chrome://wallet-panel.top-chrome/*",
"chrome://wallet/*"
"chrome://newtab/*"
]
}
],
@@ -3,142 +3,57 @@
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// You can obtain one at https://mozilla.org/MPL/2.0/.
import {
UserType,
userTypeFromString,
} from '../../../brave_rewards/resources/shared/lib/user_type'
import { loadTimeData } from '$web-common/loadTimeData'
import {
externalWalletFromExtensionData, //
} from '../../../brave_rewards/resources/shared/lib/external_wallet'
import { RewardsExternalWallet, WalletStatus } from '../../constants/types'
import { BraveRewardsProxyOverrides } from '../../constants/testing_types'
import { RewardsPageProxy } from '../../../brave_rewards/resources/rewards_page/webui/rewards_page_proxy'
export class BraveRewardsProxy {
getRewardsEnabled = () => {
return new Promise<boolean>((resolve) =>
chrome.braveRewards.getRewardsEnabled((enabled) => {
resolve(enabled)
}),
private rewardsPageProxy: RewardsPageProxy | null = null
constructor() {
if (loadTimeData.getBoolean('rewardsFeatureEnabled')) {
this.rewardsPageProxy = RewardsPageProxy.getInstance()
}
}
getRewardsEnabled = async () => {
if (!this.rewardsPageProxy) {
return false
}
const { paymentId } =
await this.rewardsPageProxy.handler.getRewardsPaymentId()
return Boolean(paymentId)
}
getExternalWallet = async () => {
if (!this.rewardsPageProxy) {
return null
}
const result = await this.rewardsPageProxy.handler.getExternalWallet()
const externalWallet = externalWalletFromExtensionData(
result?.externalWallet,
)
if (!externalWallet) {
return null
}
return <RewardsExternalWallet>{
...externalWallet,
status: externalWallet.authenticated
? WalletStatus.kConnected
: WalletStatus.kLoggedOut,
}
}
fetchBalance = () => {
return new Promise<number | undefined>((resolve) =>
chrome.braveRewards.fetchBalance((balance) => {
resolve(balance)
}),
)
}
getBalanceReport = (month: number, year: number) => {
return new Promise<RewardsExtension.BalanceReport>((resolve) =>
chrome.braveRewards.getBalanceReport(month, year, (report) => {
resolve(report)
}),
)
}
getUserType = () => {
return new Promise<UserType>((resolve) => {
chrome.braveRewards.getUserType((userType) => {
resolve(userTypeFromString(userType))
})
})
}
getWalletExists = () => {
return new Promise<boolean>((resolve) => {
chrome.braveRewards.getWalletExists((exists) => {
resolve(exists)
})
})
}
getExternalWallet = () => {
return new Promise<RewardsExternalWallet | null>((resolve) => {
chrome.braveRewards.getExternalWallet((data) => {
const externalWallet = externalWalletFromExtensionData(data)
const rewardsWallet: RewardsExternalWallet | null = externalWallet
? {
...externalWallet,
status: externalWallet.authenticated
? WalletStatus.kConnected
: WalletStatus.kLoggedOut,
}
: null
resolve(rewardsWallet)
})
})
}
isInitialized = () => {
return new Promise<boolean>((resolve) => {
chrome.braveRewards.isInitialized((initialized) => {
resolve(initialized)
})
})
}
isSupported = () => {
return new Promise<boolean>((resolve) => {
chrome.braveRewards.isSupported((isSupported) => {
resolve(isSupported)
})
})
}
onCompleteReset = chrome.braveRewards.onCompleteReset.addListener
onExternalWalletConnected =
chrome.braveRewards.onExternalWalletConnected.addListener
onExternalWalletLoggedOut =
chrome.braveRewards.onExternalWalletLoggedOut.addListener
onPublisherData = chrome.braveRewards.onPublisherData.addListener
onPublisherListNormalized =
chrome.braveRewards.onPublisherListNormalized.addListener
onReconcileComplete = chrome.braveRewards.onReconcileComplete.addListener
onRewardsWalletCreated =
chrome.braveRewards.onRewardsWalletCreated.addListener
openRewardsPanel = chrome.braveRewards.openRewardsPanel
onInitialized = (callback: () => any) =>
chrome.braveRewards.initialized.addListener((error) => {
if (error === RewardsExtension.Result.OK) {
callback()
} else {
console.error(`rewards onInitialized error: ${error}`)
}
})
getAvailableCountries = () => {
return new Promise<string[]>((resolve) =>
chrome.braveRewards.getAvailableCountries((countries) => {
resolve(countries)
}),
)
}
getRewardsParameters = () => {
return new Promise<RewardsExtension.RewardsParameters>((resolve) =>
chrome.braveRewards.getRewardsParameters((params) => {
resolve(params)
}),
)
}
getAllNotifications = () => {
return new Promise<RewardsExtension.Notification[]>((resolve) => {
chrome.braveRewards.getAllNotifications((notifications) => {
resolve(notifications)
})
})
fetchBalance = async () => {
if (!this.rewardsPageProxy) {
return 0
}
const result = await this.rewardsPageProxy.handler.getAvailableBalance()
return result?.balance ?? undefined
}
}
@@ -172,7 +172,7 @@ export const getRewardsBATToken = (
contractAddress: BatRewardsContractAddress,
name: 'Basic Attention Token',
symbol: 'BAT',
logo: 'chrome://erc-token-images/bat.png',
logo: 'bat.png',
isCompressed: false,
isErc20: true,
isErc721: false,