Skip to content

Commit 6b1db58

Browse files
authored
Revise the behavior of "Extensions (Brave Wallet fallback)" setting (uplift to 1.51.x) (#18228)
Uplift of #18172 (squashed) to beta
1 parent f7f8042 commit 6b1db58

13 files changed

+212
-4
lines changed

browser/brave_wallet/brave_wallet_ethereum_chain_browsertest.cc

+3
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ class BraveWalletEthereumChainTest : public InProcessBrowserTest {
172172
}
173173

174174
void SetUpOnMainThread() override {
175+
brave_wallet::SetDefaultEthereumWallet(
176+
browser()->profile()->GetPrefs(),
177+
brave_wallet::mojom::DefaultWallet::BraveWallet);
175178
InProcessBrowserTest::SetUpOnMainThread();
176179
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
177180
host_resolver()->AddRule("*", "127.0.0.1");

browser/brave_wallet/brave_wallet_event_emitter_browsertest.cc

+3
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ class BraveWalletEventEmitterTest : public InProcessBrowserTest {
7575
}
7676

7777
void SetUpOnMainThread() override {
78+
brave_wallet::SetDefaultEthereumWallet(
79+
browser()->profile()->GetPrefs(),
80+
brave_wallet::mojom::DefaultWallet::BraveWallet);
7881
InProcessBrowserTest::SetUpOnMainThread();
7982
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
8083
host_resolver()->AddRule("*", "127.0.0.1");

browser/brave_wallet/brave_wallet_sign_message_browsertest.cc

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "brave/browser/brave_wallet/brave_wallet_tab_helper.h"
1414
#include "brave/browser/brave_wallet/keyring_service_factory.h"
1515
#include "brave/components/brave_wallet/browser/brave_wallet_service.h"
16+
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
1617
#include "brave/components/brave_wallet/browser/keyring_service.h"
1718
#include "brave/components/brave_wallet/common/features.h"
1819
#include "brave/components/constants/brave_paths.h"
@@ -77,6 +78,9 @@ class BraveWalletSignMessageBrowserTest : public InProcessBrowserTest {
7778
}
7879

7980
void SetUpOnMainThread() override {
81+
brave_wallet::SetDefaultEthereumWallet(
82+
browser()->profile()->GetPrefs(),
83+
brave_wallet::mojom::DefaultWallet::BraveWallet);
8084
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
8185
host_resolver()->AddRule("*", "127.0.0.1");
8286

browser/brave_wallet/brave_wallet_tab_helper_browsertest.cc

+4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "brave/browser/brave_wallet/brave_wallet_tab_helper.h"
1313
#include "brave/browser/brave_wallet/json_rpc_service_factory.h"
1414
#include "brave/browser/ui/webui/brave_wallet/wallet_common_ui.h"
15+
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
1516
#include "brave/components/brave_wallet/common/features.h"
1617
#include "brave/components/constants/brave_paths.h"
1718
#include "brave/components/constants/webui_url_constants.h"
@@ -108,6 +109,9 @@ class BraveWalletTabHelperBrowserTest : public InProcessBrowserTest {
108109
}
109110

110111
void SetUpOnMainThread() override {
112+
brave_wallet::SetDefaultEthereumWallet(
113+
browser()->profile()->GetPrefs(),
114+
brave_wallet::mojom::DefaultWallet::BraveWallet);
111115
InProcessBrowserTest::SetUpOnMainThread();
112116
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
113117
host_resolver()->AddRule("*", "127.0.0.1");

browser/brave_wallet/ethereum_provider_browsertest.cc

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "base/path_service.h"
99
#include "base/test/bind.h"
1010
#include "brave/browser/brave_wallet/keyring_service_factory.h"
11+
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
1112
#include "brave/components/brave_wallet/browser/keyring_service.h"
1213
#include "brave/components/constants/brave_paths.h"
1314
#include "chrome/browser/profiles/profile.h"
@@ -64,6 +65,9 @@ class EthereumProviderBrowserTest : public InProcessBrowserTest {
6465
}
6566

6667
void SetUpOnMainThread() override {
68+
brave_wallet::SetDefaultEthereumWallet(
69+
browser()->profile()->GetPrefs(),
70+
brave_wallet::mojom::DefaultWallet::BraveWallet);
6771
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
6872
host_resolver()->AddRule("*", "127.0.0.1");
6973

browser/brave_wallet/send_or_sign_transaction_browsertest.cc

+3
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,9 @@ class SendOrSignTransactionBrowserTest : public InProcessBrowserTest {
147147
}
148148

149149
void SetUpOnMainThread() override {
150+
brave_wallet::SetDefaultEthereumWallet(
151+
browser()->profile()->GetPrefs(),
152+
brave_wallet::mojom::DefaultWallet::BraveWallet);
150153
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
151154
host_resolver()->AddRule("*", "127.0.0.1");
152155

browser/brave_wallet/solana_provider_browsertest.cc

+3
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,9 @@ class SolanaProviderTest : public InProcessBrowserTest {
285285
~SolanaProviderTest() override = default;
286286

287287
void SetUpOnMainThread() override {
288+
brave_wallet::SetDefaultSolanaWallet(
289+
browser()->profile()->GetPrefs(),
290+
brave_wallet::mojom::DefaultWallet::BraveWallet);
288291
host_resolver()->AddRule("*", "127.0.0.1");
289292

290293
https_server_for_files_.SetSSLConfig(

browser/brave_wallet/solana_provider_renderer_browsertest.cc

+43
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
#include "base/strings/string_number_conversions.h"
1313
#include "base/test/scoped_feature_list.h"
1414
#include "brave/browser/brave_content_browser_client.h"
15+
#include "brave/browser/brave_wallet/keyring_service_factory.h"
16+
#include "brave/browser/profiles/brave_renderer_updater.h"
17+
#include "brave/browser/profiles/brave_renderer_updater_factory.h"
1518
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
19+
#include "brave/components/brave_wallet/browser/keyring_service.h"
1620
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
1721
#include "brave/components/brave_wallet/common/brave_wallet_constants.h"
1822
#include "brave/components/brave_wallet/common/features.h"
@@ -525,6 +529,9 @@ class SolanaProviderRendererTest : public InProcessBrowserTest {
525529

526530
void SetUpOnMainThread() override {
527531
InProcessBrowserTest::SetUpOnMainThread();
532+
brave_wallet::SetDefaultSolanaWallet(
533+
browser()->profile()->GetPrefs(),
534+
brave_wallet::mojom::DefaultWallet::BraveWallet);
528535
content::SetBrowserClientForTesting(&test_content_browser_client_);
529536
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
530537
host_resolver()->AddRule("*", "127.0.0.1");
@@ -630,6 +637,42 @@ IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, ExtensionOverwrite) {
630637
"test");
631638
}
632639

640+
IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest,
641+
DoNotAttachIfNoWalletCreated) {
642+
auto* keyring_service =
643+
brave_wallet::KeyringServiceFactory::GetServiceForContext(
644+
browser()->profile());
645+
keyring_service->Reset(false);
646+
647+
brave_wallet::SetDefaultSolanaWallet(
648+
browser()->profile()->GetPrefs(),
649+
brave_wallet::mojom::DefaultWallet::BraveWalletPreferExtension);
650+
ReloadAndWaitForLoadStop(browser());
651+
652+
std::string command = "window.solana.isBraveWallet";
653+
EXPECT_TRUE(content::EvalJs(web_contents(browser()), command)
654+
.error.find("Cannot read properties of undefined") !=
655+
std::string::npos);
656+
EXPECT_EQ(browser()->tab_strip_model()->GetTabCount(), 1);
657+
}
658+
659+
IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, AttachIfWalletCreated) {
660+
auto* keyring_service =
661+
brave_wallet::KeyringServiceFactory::GetServiceForContext(
662+
browser()->profile());
663+
keyring_service->CreateWallet("password", base::DoNothing());
664+
665+
brave_wallet::SetDefaultSolanaWallet(
666+
browser()->profile()->GetPrefs(),
667+
brave_wallet::mojom::DefaultWallet::BraveWalletPreferExtension);
668+
ReloadAndWaitForLoadStop(browser());
669+
670+
constexpr char kEvalIsBraveWallet[] = "window.solana.isBraveWallet";
671+
EXPECT_TRUE(content::EvalJs(web_contents(browser())->GetPrimaryMainFrame(),
672+
kEvalIsBraveWallet)
673+
.ExtractBool());
674+
EXPECT_EQ(browser()->tab_strip_model()->GetTabCount(), 1);
675+
}
633676
IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, NonWritable) {
634677
for (const std::string& provider : {"braveSolana", "solana"}) {
635678
// window.braveSolana.* and window.solana.* (methods)

browser/brave_wallet/wallet_watch_asset_browsertest.cc

+3
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ class WalletWatchAssetBrowserTest : public InProcessBrowserTest {
5555
}
5656

5757
void SetUpOnMainThread() override {
58+
brave_wallet::SetDefaultEthereumWallet(
59+
browser()->profile()->GetPrefs(),
60+
brave_wallet::mojom::DefaultWallet::BraveWallet);
5861
mock_cert_verifier_.mock_cert_verifier()->set_default_result(net::OK);
5962
host_resolver()->AddRule("*", "127.0.0.1");
6063

browser/profiles/BUILD.gn

+10
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
1+
# Copyright (c) 2018 The Brave Authors. All rights reserved.
2+
# This Source Code Form is subject to the terms of the Mozilla Public
3+
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
4+
# You can obtain one at https://mozilla.org/MPL/2.0/.
5+
16
import("//brave/components/tor/buildflags/buildflags.gni")
27
import("//components/gcm_driver/config.gni")
8+
import("//extensions/buildflags/buildflags.gni")
39

410
source_set("profiles") {
511
# Remove when https://github.com/brave/brave-browser/issues/10648 is resolved
@@ -42,6 +48,10 @@ source_set("profiles") {
4248
"//ui/base",
4349
]
4450

51+
if (enable_extensions) {
52+
deps += [ "//extensions/common" ]
53+
}
54+
4555
if (use_gcm_from_platform) {
4656
deps += [ "//brave/browser/gcm_driver" ]
4757
}

browser/profiles/brave_renderer_updater.cc

+33-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,11 @@
99

1010
#include "base/functional/bind.h"
1111
#include "brave/browser/brave_wallet/brave_wallet_context_utils.h"
12+
#include "brave/browser/brave_wallet/keyring_service_factory.h"
13+
#include "brave/browser/ethereum_remote_client/ethereum_remote_client_constants.h"
1214
#include "brave/common/brave_renderer_configuration.mojom.h"
1315
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
16+
#include "brave/components/brave_wallet/browser/keyring_service.h"
1417
#include "brave/components/brave_wallet/browser/pref_names.h"
1518
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
1619
#include "brave/components/de_amp/browser/de_amp_util.h"
@@ -20,9 +23,14 @@
2023
#include "components/prefs/pref_service.h"
2124
#include "content/public/browser/browser_thread.h"
2225
#include "content/public/browser/render_process_host.h"
26+
#include "extensions/buildflags/buildflags.h"
2327
#include "ipc/ipc_channel_proxy.h"
2428
#include "mojo/public/cpp/bindings/pending_receiver.h"
2529

30+
#if BUILDFLAG(ENABLE_EXTENSIONS)
31+
#include "extensions/browser/extension_registry.h"
32+
#endif
33+
2634
BraveRendererUpdater::BraveRendererUpdater(Profile* profile)
2735
: profile_(profile), is_wallet_allowed_for_context_(false) {
2836
PrefService* pref_service = profile->GetPrefs();
@@ -99,12 +107,32 @@ void BraveRendererUpdater::UpdateAllRenderers() {
99107
void BraveRendererUpdater::UpdateRenderer(
100108
mojo::AssociatedRemote<brave::mojom::BraveRendererConfiguration>*
101109
renderer_configuration) {
110+
#if BUILDFLAG(ENABLE_EXTENSIONS)
111+
extensions::ExtensionRegistry* registry =
112+
extensions::ExtensionRegistry::Get(profile_);
113+
bool has_installed_metamask =
114+
registry &&
115+
registry->enabled_extensions().Contains(metamask_extension_id);
116+
#else
117+
bool has_installed_metamask = false;
118+
#endif
119+
120+
brave_wallet::KeyringService* keyring_service =
121+
brave_wallet::KeyringServiceFactory::GetServiceForContext(profile_);
122+
bool wallet_created =
123+
keyring_service &&
124+
keyring_service->IsKeyringCreated(brave_wallet::mojom::kDefaultKeyringId);
125+
bool should_ignore_brave_wallet_for_eth =
126+
!wallet_created || has_installed_metamask;
127+
bool should_ignore_brave_wallet_for_sol = !wallet_created;
128+
102129
auto default_ethereum_wallet =
103130
static_cast<brave_wallet::mojom::DefaultWallet>(
104131
brave_wallet_ethereum_provider_.GetValue());
105132
bool brave_use_native_ethereum_wallet =
106-
(default_ethereum_wallet ==
107-
brave_wallet::mojom::DefaultWallet::BraveWalletPreferExtension ||
133+
((default_ethereum_wallet ==
134+
brave_wallet::mojom::DefaultWallet::BraveWalletPreferExtension &&
135+
!should_ignore_brave_wallet_for_eth) ||
108136
default_ethereum_wallet ==
109137
brave_wallet::mojom::DefaultWallet::BraveWallet) &&
110138
is_wallet_allowed_for_context_ && brave_wallet::IsDappsSupportEnabled();
@@ -115,8 +143,9 @@ void BraveRendererUpdater::UpdateRenderer(
115143
auto default_solana_wallet = static_cast<brave_wallet::mojom::DefaultWallet>(
116144
brave_wallet_solana_provider_.GetValue());
117145
bool brave_use_native_solana_wallet =
118-
(default_solana_wallet ==
119-
brave_wallet::mojom::DefaultWallet::BraveWalletPreferExtension ||
146+
((default_solana_wallet ==
147+
brave_wallet::mojom::DefaultWallet::BraveWalletPreferExtension &&
148+
!should_ignore_brave_wallet_for_sol) ||
120149
default_solana_wallet ==
121150
brave_wallet::mojom::DefaultWallet::BraveWallet) &&
122151
is_wallet_allowed_for_context_ && brave_wallet::IsDappsSupportEnabled();

renderer/test/BUILD.gn

+11
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
44
# You can obtain one at http://mozilla.org/MPL/2.0/.
55

6+
import("//extensions/buildflags/buildflags.gni")
67
import("//testing/test.gni")
78

89
source_set("browser_tests") {
@@ -22,6 +23,7 @@ source_set("browser_tests") {
2223
deps = [
2324
"//base/test:test_support",
2425
"//brave/browser/brave_wallet",
26+
"//brave/browser/profiles:profiles",
2527
"//brave/common",
2628
"//brave/components/brave_wallet/browser",
2729
"//brave/components/brave_wallet/browser:utils",
@@ -34,4 +36,13 @@ source_set("browser_tests") {
3436
"//content/test:test_support",
3537
"//net:test_support",
3638
]
39+
40+
if (enable_extensions) {
41+
deps += [
42+
"//brave/browser/ethereum_remote_client:ethereum_remote_client",
43+
"//chrome/browser/extensions",
44+
"//extensions:test_support",
45+
"//extensions/browser",
46+
]
47+
}
3748
}

0 commit comments

Comments
 (0)