-
Notifications
You must be signed in to change notification settings - Fork 822
/
wallet_page_ui.cc
141 lines (130 loc) · 6.66 KB
/
wallet_page_ui.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* Copyright (c) 2021 The Brave Authors. All rights reserved.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "brave/browser/ui/webui/brave_wallet/wallet_page_ui.h"
#include <string>
#include <utility>
#include "base/files/file_path.h"
#include "brave/browser/brave_wallet/asset_ratio_service_factory.h"
#include "brave/browser/brave_wallet/brave_wallet_service_factory.h"
#include "brave/browser/brave_wallet/json_rpc_service_factory.h"
#include "brave/browser/brave_wallet/keyring_service_factory.h"
#include "brave/browser/brave_wallet/swap_service_factory.h"
#include "brave/browser/brave_wallet/tx_service_factory.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"
#include "brave/components/brave_wallet/browser/blockchain_registry.h"
#include "brave/components/brave_wallet/browser/brave_wallet_constants.h"
#include "brave/components/brave_wallet/browser/brave_wallet_service.h"
#include "brave/components/brave_wallet/browser/json_rpc_service.h"
#include "brave/components/brave_wallet/browser/keyring_service.h"
#include "brave/components/brave_wallet/browser/swap_service.h"
#include "brave/components/brave_wallet/browser/tx_service.h"
#include "brave/components/brave_wallet_page/resources/grit/brave_wallet_page_generated_map.h"
#include "brave/components/constants/webui_url_constants.h"
#include "brave/components/l10n/common/locale_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/sanitized_image_source.h"
#include "chrome/browser/ui/webui/webui_util.h"
#include "components/grit/brave_components_resources.h"
#include "components/grit/brave_components_strings.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "content/public/common/url_constants.h"
#include "ui/base/accelerators/accelerator.h"
#include "ui/base/webui/web_ui_util.h"
WalletPageUI::WalletPageUI(content::WebUI* web_ui)
: ui::MojoWebUIController(web_ui,
true /* Needed for webui browser tests */) {
content::WebUIDataSource* source =
content::WebUIDataSource::Create(kWalletPageHost);
web_ui->AddRequestableScheme(content::kChromeUIUntrustedScheme);
for (const auto& str : brave_wallet::kLocalizedStrings) {
std::u16string l10n_str =
brave_l10n::GetLocalizedResourceUTF16String(str.id);
source->AddString(str.name, l10n_str);
}
NavigationBarDataProvider::Initialize(source);
webui::SetupWebUIDataSource(
source,
base::make_span(kBraveWalletPageGenerated, kBraveWalletPageGeneratedSize),
IDR_WALLET_PAGE_HTML);
source->AddString("braveWalletLedgerBridgeUrl", kUntrustedLedgerURL);
source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::FrameSrc,
std::string("frame-src ") + kUntrustedTrezorURL + " " +
kUntrustedLedgerURL + ";");
source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::FrameSrc,
std::string("frame-src ") + kUntrustedNftURL + ";");
source->AddString("braveWalletTrezorBridgeUrl", kUntrustedTrezorURL);
source->AddString("braveWalletNftBridgeUrl", kUntrustedNftURL);
auto* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource::Add(profile, source);
content::URLDataSource::Add(profile,
std::make_unique<SanitizedImageSource>(profile));
brave_wallet::AddBlockchainTokenImageSource(profile);
}
WalletPageUI::~WalletPageUI() = default;
WEB_UI_CONTROLLER_TYPE_IMPL(WalletPageUI)
void WalletPageUI::BindInterface(
mojo::PendingReceiver<brave_wallet::mojom::PageHandlerFactory> receiver) {
page_factory_receiver_.reset();
page_factory_receiver_.Bind(std::move(receiver));
}
void WalletPageUI::CreatePageHandler(
mojo::PendingRemote<brave_wallet::mojom::Page> page,
mojo::PendingReceiver<brave_wallet::mojom::PageHandler> page_receiver,
mojo::PendingReceiver<brave_wallet::mojom::WalletHandler> wallet_receiver,
mojo::PendingReceiver<brave_wallet::mojom::JsonRpcService>
json_rpc_service_receiver,
mojo::PendingReceiver<brave_wallet::mojom::SwapService>
swap_service_receiver,
mojo::PendingReceiver<brave_wallet::mojom::AssetRatioService>
asset_ratio_service_receiver,
mojo::PendingReceiver<brave_wallet::mojom::KeyringService>
keyring_service_receiver,
mojo::PendingReceiver<brave_wallet::mojom::BlockchainRegistry>
blockchain_registry_receiver,
mojo::PendingReceiver<brave_wallet::mojom::TxService> tx_service_receiver,
mojo::PendingReceiver<brave_wallet::mojom::EthTxManagerProxy>
eth_tx_manager_proxy_receiver,
mojo::PendingReceiver<brave_wallet::mojom::SolanaTxManagerProxy>
solana_tx_manager_proxy_receiver,
mojo::PendingReceiver<brave_wallet::mojom::FilTxManagerProxy>
filecoin_tx_manager_proxy_receiver,
mojo::PendingReceiver<brave_wallet::mojom::BraveWalletService>
brave_wallet_service_receiver) {
DCHECK(page);
auto* profile = Profile::FromWebUI(web_ui());
DCHECK(profile);
page_handler_ =
std::make_unique<WalletPageHandler>(std::move(page_receiver), profile);
wallet_handler_ =
std::make_unique<WalletHandler>(std::move(wallet_receiver), profile);
brave_wallet::JsonRpcServiceFactory::BindForContext(
profile, std::move(json_rpc_service_receiver));
brave_wallet::SwapServiceFactory::BindForContext(
profile, std::move(swap_service_receiver));
brave_wallet::AssetRatioServiceFactory::BindForContext(
profile, std::move(asset_ratio_service_receiver));
brave_wallet::KeyringServiceFactory::BindForContext(
profile, std::move(keyring_service_receiver));
brave_wallet::TxServiceFactory::BindForContext(
profile, std::move(tx_service_receiver));
brave_wallet::TxServiceFactory::BindEthTxManagerProxyForContext(
profile, std::move(eth_tx_manager_proxy_receiver));
brave_wallet::TxServiceFactory::BindSolanaTxManagerProxyForContext(
profile, std::move(solana_tx_manager_proxy_receiver));
brave_wallet::TxServiceFactory::BindFilTxManagerProxyForContext(
profile, std::move(filecoin_tx_manager_proxy_receiver));
brave_wallet::BraveWalletServiceFactory::BindForContext(
profile, std::move(brave_wallet_service_receiver));
auto* blockchain_registry = brave_wallet::BlockchainRegistry::GetInstance();
if (blockchain_registry) {
blockchain_registry->Bind(std::move(blockchain_registry_receiver));
}
}