[Rewards] Migrate wallet UI from Rewards extention API to mojo (#30614)
This commit is contained in:
@@ -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_;
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user