From 5994a10b2e3839dc9a9bb723f99ff43b69d7ac4d Mon Sep 17 00:00:00 2001 From: "Brian R. Bondy" Date: Thu, 10 Sep 2020 13:43:40 -0400 Subject: [PATCH] Force select MetaMask when installed No longer prompt about selecting a web3 provider --- app/brave_generated_resources.grd | 9 -- browser/brave_profile_prefs.cc | 9 -- browser/brave_wallet/BUILD.gn | 2 - browser/brave_wallet/brave_wallet_utils.cc | 72 ---------- browser/brave_wallet/brave_wallet_utils.h | 23 --- .../brave_wallet_utils_unittest.cc | 136 ------------------ browser/extensions/api/brave_wallet_api.cc | 27 ++-- .../api/brave_wallet_api_browsertest.cc | 76 ++++++---- .../crypto_wallets_infobar_delegate.cc | 34 +---- .../crypto_wallets_infobar_delegate.h | 3 +- .../chrome/browser/prefs/browser_prefs.cc | 12 -- .../browser/brave_wallet_service.cc | 78 ++++++++-- .../browser/brave_wallet_service.h | 11 +- test/BUILD.gn | 1 - 14 files changed, 142 insertions(+), 351 deletions(-) delete mode 100644 browser/brave_wallet/brave_wallet_utils.cc delete mode 100644 browser/brave_wallet/brave_wallet_utils.h delete mode 100644 browser/brave_wallet/brave_wallet_utils_unittest.cc diff --git a/app/brave_generated_resources.grd b/app/brave_generated_resources.grd index dc57769c923..47ea58aea04 100644 --- a/app/brave_generated_resources.grd +++ b/app/brave_generated_resources.grd @@ -870,9 +870,6 @@ By installing this extension, you are agreeing to the Google Widevine Terms of U This anonymous info only lets Brave estimate the overall usage of certain features. - - Would you like to use Brave's Crypto Wallets or MetaMask for Dapps? - Would you like to start Crypto Wallets for web3 support on this page? @@ -881,12 +878,6 @@ By installing this extension, you are agreeing to the Google Widevine Terms of U Setup Crypto Wallets - - - Use MetaMask - - - SETUP Start Crypto Wallets and reload diff --git a/browser/brave_profile_prefs.cc b/browser/brave_profile_prefs.cc index 1c940057026..0c673f503f6 100644 --- a/browser/brave_profile_prefs.cc +++ b/browser/brave_profile_prefs.cc @@ -16,7 +16,6 @@ #include "brave/components/brave_shields/browser/brave_shields_web_contents_observer.h" #include "brave/components/brave_sync/brave_sync_prefs.h" #include "brave/components/brave_rewards/common/pref_names.h" -#include "brave/components/brave_wallet/browser/buildflags/buildflags.h" #include "brave/components/brave_wayback_machine/buildflags.h" #include "brave/components/brave_webtorrent/browser/buildflags/buildflags.h" #include "brave/components/ipfs/browser/buildflags/buildflags.h" @@ -53,10 +52,6 @@ #include "brave/browser/ipfs/ipfs_service.h" #endif -#if BUILDFLAG(BRAVE_WALLET_ENABLED) -#include "brave/browser/brave_wallet/brave_wallet_utils.h" -#endif - #if BUILDFLAG(GEMINI_ENABLED) #include "brave/components/gemini/browser/pref_names.h" #endif @@ -92,10 +87,6 @@ void RegisterProfilePrefsForMigration( dark_mode::RegisterBraveDarkModePrefsForMigration(registry); -#if BUILDFLAG(BRAVE_WALLET_ENABLED) - brave_wallet::RegisterBraveWalletProfilePrefsForMigration(registry); -#endif - // Restore "Other Bookmarks" migration registry->RegisterBooleanPref(kOtherBookmarksMigrated, false); } diff --git a/browser/brave_wallet/BUILD.gn b/browser/brave_wallet/BUILD.gn index fc22dedec86..77c79f86fcc 100644 --- a/browser/brave_wallet/BUILD.gn +++ b/browser/brave_wallet/BUILD.gn @@ -10,8 +10,6 @@ source_set("brave_wallet") { "brave_wallet_delegate_impl.h", "brave_wallet_service_factory.cc", "brave_wallet_service_factory.h", - "brave_wallet_utils.cc", - "brave_wallet_utils.h", ] deps = [ "//brave/browser/extensions", diff --git a/browser/brave_wallet/brave_wallet_utils.cc b/browser/brave_wallet/brave_wallet_utils.cc deleted file mode 100644 index 5e8acdf02f5..00000000000 --- a/browser/brave_wallet/brave_wallet_utils.cc +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (c) 2020 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/brave_wallet/brave_wallet_utils.h" - -#include "brave/common/brave_wallet_constants.h" -#include "brave/common/extensions/extension_constants.h" -#include "brave/common/pref_names.h" -#include "chrome/browser/profiles/profile.h" -#include "components/prefs/pref_registry_simple.h" -#include "components/pref_registry/pref_registry_syncable.h" -#include "extensions/browser/extension_prefs.h" - -namespace { - -void MigrateBraveWalletPrefs_V0_V1(Profile* profile) { - PrefService* prefs = profile->GetPrefs(); - bool wallet_was_enabled = true; // true was the default - if (prefs->HasPrefPath(kBraveWalletEnabledDeprecated)) { - wallet_was_enabled = prefs->GetBoolean(kBraveWalletEnabledDeprecated); - } - - bool has_crypto_wallets = extensions::ExtensionPrefs::Get(profile)-> - HasPrefForExtension(ethereum_remote_client_extension_id); - bool has_metamask = extensions::ExtensionPrefs::Get(profile)-> - HasPrefForExtension(metamask_extension_id); - - BraveWalletWeb3ProviderTypes provider = - BraveWalletWeb3ProviderTypes::ASK; - if (!wallet_was_enabled&& has_metamask) { - // If Crypto Wallets was disabled and MetaMask is installed, set to MetaMask - provider = BraveWalletWeb3ProviderTypes::METAMASK; - } else if (!wallet_was_enabled && !has_metamask) { - // If Crypto Wallets is diabled, and MetaMask not installed, set None - provider = BraveWalletWeb3ProviderTypes::NONE; - } else if (wallet_was_enabled && has_metamask) { - // If Crypto Wallets is enabled, and MetaMask is installed, set - // to Crypto Wallets - provider = BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS; - } else if (has_crypto_wallets && wallet_was_enabled) { - // If CryptoWallets is enabled and installed, but MetaMask is not - // installed, set Crypto Wallets. - provider = BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS; - } else if (!has_crypto_wallets && wallet_was_enabled) { - // If CryptoWallets is enabled and not installed yet, and MetaMask is not - // installed, set Ask - provider = BraveWalletWeb3ProviderTypes::ASK; - } - prefs->SetInteger(kBraveWalletWeb3Provider, static_cast(provider)); - prefs->ClearPref(kBraveWalletEnabledDeprecated); - prefs->SetInteger(kBraveWalletPrefVersion, 1); -} - -} // namespace - -namespace brave_wallet { - -void RegisterBraveWalletProfilePrefsForMigration( - user_prefs::PrefRegistrySyncable* registry) { - registry->RegisterBooleanPref(kBraveWalletEnabledDeprecated, true); -} - -void MigrateBraveWalletPrefs(Profile* profile) { - PrefService* prefs = profile->GetPrefs(); - if (prefs->GetInteger(kBraveWalletPrefVersion) == 0) { - MigrateBraveWalletPrefs_V0_V1(profile); - } -} - -} // namespace brave_wallet diff --git a/browser/brave_wallet/brave_wallet_utils.h b/browser/brave_wallet/brave_wallet_utils.h deleted file mode 100644 index a0fd740d201..00000000000 --- a/browser/brave_wallet/brave_wallet_utils.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (c) 2020 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/. */ - -#ifndef BRAVE_BROWSER_BRAVE_WALLET_BRAVE_WALLET_UTILS_H_ -#define BRAVE_BROWSER_BRAVE_WALLET_BRAVE_WALLET_UTILS_H_ - -class Profile; - -namespace user_prefs { -class PrefRegistrySyncable; -} - -namespace brave_wallet { - -void MigrateBraveWalletPrefs(Profile* profile); -void RegisterBraveWalletProfilePrefsForMigration( - user_prefs::PrefRegistrySyncable* registry); - -} // namespace brave_wallet - -#endif // BRAVE_BROWSER_BRAVE_WALLET_BRAVE_WALLET_UTILS_H_ diff --git a/browser/brave_wallet/brave_wallet_utils_unittest.cc b/browser/brave_wallet/brave_wallet_utils_unittest.cc deleted file mode 100644 index f836b7551e7..00000000000 --- a/browser/brave_wallet/brave_wallet_utils_unittest.cc +++ /dev/null @@ -1,136 +0,0 @@ -/* Copyright (c) 2020 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/brave_wallet/brave_wallet_utils.h" - -#include -#include -#include - -#include "brave/common/brave_wallet_constants.h" -#include "brave/common/pref_names.h" -#include "brave/common/extensions/extension_constants.h" -#include "chrome/browser/prefs/browser_prefs.h" -#include "chrome/test/base/testing_profile.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" -#include "content/public/test/browser_task_environment.h" -#include "extensions/browser/extension_prefs.h" -#include "extensions/browser/extension_registry.h" -#include "extensions/common/extension_builder.h" -#include "testing/gtest/include/gtest/gtest.h" - -class BraveWalletUtilsUnitTest : public testing::Test { - public: - void SetUp() override { - profile_ = CreateProfile(); - } - - Profile* profile() { - return profile_.get(); - } - - void AddCryptoWallets() { - AddExtension(ethereum_remote_client_extension_id, - &crypto_wallets_extension); - } - - void AddMetaMask() { - AddExtension(metamask_extension_id, &metamask_extension); - } - - private: - void AddExtension(const std::string& extension_id, - scoped_refptr *extension) { - extensions::DictionaryBuilder manifest; - manifest.Set("name", "ext") - .Set("version", "0.1") - .Set("manifest_version", 2); - *extension = extensions::ExtensionBuilder() - .SetManifest(manifest.Build()) - .SetID(extension_id) - .Build(); - ASSERT_TRUE(extension->get()); - extensions::ExtensionPrefs::Get(profile())->UpdateExtensionPref( - extension_id, "test", std::make_unique("")); - extensions::ExtensionRegistry::Get(profile())->AddEnabled(extension->get()); - } - - std::unique_ptr CreateProfile() { - TestingProfile::Builder builder; - auto prefs = - std::make_unique(); - RegisterUserProfilePrefs(prefs->registry()); - builder.SetPrefService(std::move(prefs)); - return builder.Build(); - } - - content::BrowserTaskEnvironment task_environment_; - std::unique_ptr profile_; - scoped_refptr metamask_extension; - scoped_refptr crypto_wallets_extension; -}; - -// If Crypto Wallets was disabled and MetaMask is installed, set to MetaMask -TEST_F(BraveWalletUtilsUnitTest, TestPrefMigrationMMCryptoWalletsDisabled) { - AddMetaMask(); - profile()->GetPrefs()->SetBoolean(kBraveWalletEnabledDeprecated, false); - - brave_wallet::MigrateBraveWalletPrefs(profile()); - - auto provider = static_cast( - profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); - ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::METAMASK); -} - -// If Crypto Wallets is diabled, and MetaMask not installed, set None -TEST_F(BraveWalletUtilsUnitTest, TestPrefMigrationCryptoWalletsDisabled) { - AddCryptoWallets(); - profile()->GetPrefs()->SetBoolean(kBraveWalletEnabledDeprecated, false); - - brave_wallet::MigrateBraveWalletPrefs(profile()); - - auto provider = static_cast( - profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); - ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::NONE); -} - -// If Crypto Wallets is enabled, and MetaMask is installed, set -// to Crypto Wallets -TEST_F(BraveWalletUtilsUnitTest, TestPrefMigrationCryptoWalletsAndMMInstalled) { - profile()->GetPrefs()->SetBoolean(kBraveWalletEnabledDeprecated, true); - AddCryptoWallets(); - AddMetaMask(); - - brave_wallet::MigrateBraveWalletPrefs(profile()); - - auto provider = static_cast( - profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); - ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS); -} - -// If CryptoWallets is enabled and installed, but MetaMask is not -// installed, set Crypto Wallets. -TEST_F(BraveWalletUtilsUnitTest, TestPrefMigrationCryptoWalletsInstalled) { - profile()->GetPrefs()->SetBoolean(kBraveWalletEnabledDeprecated, true); - AddCryptoWallets(); - - brave_wallet::MigrateBraveWalletPrefs(profile()); - - auto provider = static_cast( - profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); - ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS); -} - -// If CryptoWallets is enabled and not installed yet, and MetaMask is not -// installed, set Ask -TEST_F(BraveWalletUtilsUnitTest, TestPrefMigrationNothingInstalled) { - profile()->GetPrefs()->SetBoolean(kBraveWalletEnabledDeprecated, true); - - brave_wallet::MigrateBraveWalletPrefs(profile()); - - auto provider = static_cast( - profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); - ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::ASK); -} diff --git a/browser/extensions/api/brave_wallet_api.cc b/browser/extensions/api/brave_wallet_api.cc index 0f1df8c804d..957582a1b42 100644 --- a/browser/extensions/api/brave_wallet_api.cc +++ b/browser/extensions/api/brave_wallet_api.cc @@ -10,6 +10,7 @@ #include "base/json/json_writer.h" #include "base/values.h" +#include "brave/browser/extensions/brave_wallet_util.h" #include "brave/browser/infobars/crypto_wallets_infobar_delegate.h" #include "brave/browser/profiles/profile_util.h" #include "brave/common/brave_wallet_constants.h" @@ -27,7 +28,6 @@ #include "extensions/browser/extension_util.h" #include "brave/browser/brave_wallet/brave_wallet_service_factory.h" #include "brave/components/brave_wallet/browser/brave_wallet_service.h" -#include "brave/browser/extensions/brave_wallet_util.h" #include "ui/base/l10n/l10n_util.h" namespace { @@ -82,13 +82,9 @@ BraveWalletPromptToEnableWalletFunction::Run() { CryptoWalletsInfoBarDelegate::InfobarSubType subtype = CryptoWalletsInfoBarDelegate::InfobarSubType::GENERIC_SETUP; auto* service = GetBraveWalletService(browser_context()); - auto* registry = extensions::ExtensionRegistry::Get(profile); if (service->ShouldShowLazyLoadInfobar()) { subtype = CryptoWalletsInfoBarDelegate::InfobarSubType:: LOAD_CRYPTO_WALLETS; - } else if (registry->ready_extensions().Contains(metamask_extension_id)) { - subtype = CryptoWalletsInfoBarDelegate::InfobarSubType:: - CRYPTO_WALLETS_METAMASK; } CryptoWalletsInfoBarDelegate::Create(infobar_service, subtype); } @@ -147,15 +143,22 @@ BraveWalletShouldPromptForSetupFunction::Run() { ExtensionFunction::ResponseAction BraveWalletShouldCheckForDappsFunction::Run() { Profile* profile = Profile::FromBrowserContext(browser_context()); + if (brave::IsTorProfile(profile)) { + return RespondNow(OneArgument( + std::make_unique(false))); + } auto provider = static_cast( profile->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); - bool dappDetection = !brave::IsTorProfile(profile); - if (provider != BraveWalletWeb3ProviderTypes::ASK) { - auto* service = GetBraveWalletService(browser_context()); - dappDetection = provider == BraveWalletWeb3ProviderTypes::ASK || - (provider == BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS && - !service->IsCryptoWalletsReady()); - } + auto* registry = extensions::ExtensionRegistry::Get(profile); + bool has_metamask = + registry->ready_extensions().Contains(metamask_extension_id); + + auto* service = GetBraveWalletService(browser_context()); + bool dappDetection = ( + provider == BraveWalletWeb3ProviderTypes::ASK && !has_metamask) || + (provider == BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS && + !service->IsCryptoWalletsReady()); + return RespondNow(OneArgument( std::make_unique(dappDetection))); } diff --git a/browser/extensions/api/brave_wallet_api_browsertest.cc b/browser/extensions/api/brave_wallet_api_browsertest.cc index ffb6797e9a7..72981c2af64 100644 --- a/browser/extensions/api/brave_wallet_api_browsertest.cc +++ b/browser/extensions/api/brave_wallet_api_browsertest.cc @@ -68,7 +68,7 @@ class BraveWalletAPIBrowserTest : public InProcessBrowserTest, ASSERT_TRUE(embedded_test_server()->Start()); } - void AddFakeMetaMaskExtension() { + void AddFakeMetaMaskExtension(bool is_update) { DictionaryBuilder manifest; manifest.Set("name", "ext") .Set("version", "0.1") @@ -78,9 +78,25 @@ class BraveWalletAPIBrowserTest : public InProcessBrowserTest, .SetID(metamask_extension_id) .Build(); ASSERT_TRUE(extension_); - ExtensionRegistry::Get(browser()->profile())->AddReady(extension_.get()); + if (!is_update) { + ExtensionRegistry::Get(browser()->profile())->AddEnabled( + extension_.get()); + } + ExtensionRegistry::Get(browser()->profile())->TriggerOnInstalled( + extension_.get(), is_update); + if (!is_update) { + ExtensionRegistry::Get(browser()->profile())->AddReady(extension_.get()); + } } + void RemoveFakeMetaMaskExtension() { + ExtensionRegistry::Get(browser()->profile())->RemoveReady( + metamask_extension_id); + ExtensionRegistry::Get(browser()->profile())->RemoveEnabled( + metamask_extension_id); + ExtensionRegistry::Get(browser()->profile())->TriggerOnUninstalled( + extension_.get(), extensions::UNINSTALL_REASON_FOR_TESTING); + } ~BraveWalletAPIBrowserTest() override { } @@ -175,38 +191,40 @@ IN_PROC_BROWSER_TEST_F(BraveWalletAPIBrowserTest, DappDetectionTestAccept) { } IN_PROC_BROWSER_TEST_F(BraveWalletAPIBrowserTest, - DappDetectionWithMetaMaskTestAccept) { + FakeInstallMetaMask) { WaitForBraveExtensionAdded(); - AddFakeMetaMaskExtension(); - InfoBarService* infobar_service = - InfoBarService::FromWebContents(active_contents()); - AddInfoBarObserver(infobar_service); - EXPECT_TRUE( - NavigateToURLUntilLoadStop("a.com", "/dapp.html")); - WaitForCryptoWalletsInfobarAdded(); - CryptoWalletsInfoBarAccept(ConfirmInfoBarDelegate::BUTTON_OK | - ConfirmInfoBarDelegate::BUTTON_CANCEL); - WaitForTabCount(2); - RemoveInfoBarObserver(infobar_service); -} - -IN_PROC_BROWSER_TEST_F(BraveWalletAPIBrowserTest, - DappDetectionWithMetaMaskTestCancel) { - WaitForBraveExtensionAdded(); - AddFakeMetaMaskExtension(); - InfoBarService* infobar_service = - InfoBarService::FromWebContents(active_contents()); - AddInfoBarObserver(infobar_service); - EXPECT_TRUE( - NavigateToURLUntilLoadStop("a.com", "/dapp.html")); - WaitForCryptoWalletsInfobarAdded(); - CryptoWalletsInfoBarCancel(ConfirmInfoBarDelegate::BUTTON_OK | - ConfirmInfoBarDelegate::BUTTON_CANCEL); + AddFakeMetaMaskExtension(false); + // Should auto select MetaMask auto provider = static_cast( browser()->profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::METAMASK); - RemoveInfoBarObserver(infobar_service); } +IN_PROC_BROWSER_TEST_F(BraveWalletAPIBrowserTest, + FakeUninstallMetaMask) { + WaitForBraveExtensionAdded(); + AddFakeMetaMaskExtension(false); + RemoveFakeMetaMaskExtension(); + // Should revert back to Ask + auto provider = static_cast( + browser()->profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); + ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS); +} + +IN_PROC_BROWSER_TEST_F(BraveWalletAPIBrowserTest, + UpdatesDoNotChangeSettings) { + WaitForBraveExtensionAdded(); + // User installs MetaMask + AddFakeMetaMaskExtension(false); + // Then if the user explicitly manually sets it to Crypto Wallets + browser()->profile()->GetPrefs()->SetInteger(kBraveWalletWeb3Provider, + static_cast(BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS)); + // Then the user updates MetaMask + AddFakeMetaMaskExtension(true); + // It should not toggle the setting + auto provider = static_cast( + browser()->profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider)); + ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS); +} } // namespace extensions diff --git a/browser/infobars/crypto_wallets_infobar_delegate.cc b/browser/infobars/crypto_wallets_infobar_delegate.cc index 60433c48d02..bd1ee9ed0f2 100644 --- a/browser/infobars/crypto_wallets_infobar_delegate.cc +++ b/browser/infobars/crypto_wallets_infobar_delegate.cc @@ -28,7 +28,6 @@ #include "ui/base/l10n/l10n_util.h" #include "ui/views/vector_icons.h" - // static void CryptoWalletsInfoBarDelegate::Create(InfoBarService* infobar_service, CryptoWalletsInfoBarDelegate::InfobarSubType subtype) { @@ -60,16 +59,11 @@ base::string16 CryptoWalletsInfoBarDelegate::GetMessageText() const { if (subtype_ == InfobarSubType::LOAD_CRYPTO_WALLETS) { return l10n_util::GetStringUTF16(IDS_BRAVE_CRYPTO_WALLETS_LAZY_LOAD_TEXT); } - if (subtype_ == InfobarSubType::CRYPTO_WALLETS_METAMASK) { - return l10n_util::GetStringUTF16( - IDS_BRAVE_CRYPTO_WALLETS_METAMASK_INFOBAR_TEXT); - } return l10n_util::GetStringUTF16(IDS_BRAVE_CRYPTO_WALLETS_INFOBAR_TEXT); } int CryptoWalletsInfoBarDelegate::GetButtons() const { - if (subtype_ == InfobarSubType::LOAD_CRYPTO_WALLETS || - subtype_ == InfobarSubType::CRYPTO_WALLETS_METAMASK) { + if (subtype_ == InfobarSubType::LOAD_CRYPTO_WALLETS) { return BUTTON_OK | BUTTON_CANCEL; } return BUTTON_OK; @@ -85,13 +79,8 @@ base::string16 CryptoWalletsInfoBarDelegate::GetButtonLabel( IDS_BRAVE_CRYPTO_WALLETS_START_AND_RELOAD); } - if (button == BUTTON_CANCEL) { - return l10n_util::GetStringUTF16(IDS_BRAVE_CRYPTO_WALLETS_USE_METAMASK); - } - - return subtype_ == InfobarSubType::CRYPTO_WALLETS_METAMASK ? - l10n_util::GetStringUTF16(IDS_BRAVE_CRYPTO_WALLETS_SETUP_CRYPTO_WALLETS) : - l10n_util::GetStringUTF16(IDS_BRAVE_CRYPTO_WALLETS_SETUP); + return l10n_util::GetStringUTF16( + IDS_BRAVE_CRYPTO_WALLETS_SETUP_CRYPTO_WALLETS); } base::string16 CryptoWalletsInfoBarDelegate::GetLinkText() const { @@ -132,22 +121,11 @@ bool CryptoWalletsInfoBarDelegate::Accept() { } bool CryptoWalletsInfoBarDelegate::Cancel() { - if (subtype_ == InfobarSubType::LOAD_CRYPTO_WALLETS) { - content::WebContents* web_contents = - InfoBarService::WebContentsFromInfoBar(infobar()); - if (web_contents) { - Browser* browser = chrome::FindBrowserWithWebContents(web_contents); - brave::ShowExtensionSettings(browser); - } - return true; - } - content::WebContents* web_contents = - InfoBarService::WebContentsFromInfoBar(infobar()); + InfoBarService::WebContentsFromInfoBar(infobar()); if (web_contents) { - user_prefs::UserPrefs::Get(web_contents->GetBrowserContext())-> - SetInteger(kBraveWalletWeb3Provider, - static_cast(BraveWalletWeb3ProviderTypes::METAMASK)); + Browser* browser = chrome::FindBrowserWithWebContents(web_contents); + brave::ShowExtensionSettings(browser); } return true; } diff --git a/browser/infobars/crypto_wallets_infobar_delegate.h b/browser/infobars/crypto_wallets_infobar_delegate.h index eb3eeca27a4..ff964587050 100644 --- a/browser/infobars/crypto_wallets_infobar_delegate.h +++ b/browser/infobars/crypto_wallets_infobar_delegate.h @@ -24,8 +24,7 @@ class CryptoWalletsInfoBarDelegate : public ConfirmInfoBarDelegate { public: enum class InfobarSubType { LOAD_CRYPTO_WALLETS, - GENERIC_SETUP, - CRYPTO_WALLETS_METAMASK + GENERIC_SETUP }; static void Create(InfoBarService* infobar_service, InfobarSubType subtype); diff --git a/chromium_src/chrome/browser/prefs/browser_prefs.cc b/chromium_src/chrome/browser/prefs/browser_prefs.cc index 7b0a93c964f..a264502340b 100644 --- a/chromium_src/chrome/browser/prefs/browser_prefs.cc +++ b/chromium_src/chrome/browser/prefs/browser_prefs.cc @@ -7,7 +7,6 @@ #include "brave/browser/brave_profile_prefs.h" #include "brave/browser/themes/brave_dark_mode_utils.h" #include "brave/components/brave_sync/brave_sync_prefs.h" -#include "brave/components/brave_wallet/browser/buildflags/buildflags.h" #include "chrome/browser/profiles/profile.h" #include "components/gcm_driver/gcm_buildflags.h" #include "third_party/widevine/cdm/buildflags.h" @@ -20,12 +19,6 @@ #include "../../../../../chrome/browser/prefs/browser_prefs.cc" #undef MigrateObsoleteProfilePrefs -#if BUILDFLAG(BRAVE_WALLET_ENABLED) -#include "brave/common/extensions/extension_constants.h" -#include "extensions/browser/extension_prefs.h" -#include "brave/browser/brave_wallet/brave_wallet_utils.h" -#endif - #if !BUILDFLAG(USE_GCM_FROM_PLATFORM) #include "brave/browser/gcm_driver/brave_gcm_utils.h" #endif @@ -49,9 +42,4 @@ void MigrateObsoleteProfilePrefs(Profile* profile) { // Added 12/2019. dark_mode::MigrateBraveDarkModePrefs(profile); - -#if BUILDFLAG(BRAVE_WALLET_ENABLED) - // Added 1/2020 - brave_wallet::MigrateBraveWalletPrefs(profile); -#endif } diff --git a/components/brave_wallet/browser/brave_wallet_service.cc b/components/brave_wallet/browser/brave_wallet_service.cc index b371368ab01..1084716555e 100644 --- a/components/brave_wallet/browser/brave_wallet_service.cc +++ b/components/brave_wallet/browser/brave_wallet_service.cc @@ -253,32 +253,43 @@ void BraveWalletService::RemoveUnusedWeb3ProviderContentScripts() { PrefService* prefs = user_prefs::UserPrefs::Get(context_); auto* shared_user_script_manager = extensions::ExtensionSystem::Get(context_)->shared_user_script_manager(); + if (!shared_user_script_manager) { + return; + } auto* registry = extensions::ExtensionRegistry::Get(context_); - auto* metamask_extension = - registry->enabled_extensions().GetByID(metamask_extension_id); - auto* erc_extension = - registry->enabled_extensions().GetByID( - ethereum_remote_client_extension_id); auto provider = static_cast( prefs->GetInteger(kBraveWalletWeb3Provider)); - if (metamask_extension) { - shared_user_script_manager->OnExtensionUnloaded( - context_, metamask_extension, - extensions::UnloadedExtensionReason::DISABLE); - } + + auto* erc_extension = + registry->enabled_extensions().GetByID( + ethereum_remote_client_extension_id); if (erc_extension) { shared_user_script_manager->OnExtensionUnloaded( context_, erc_extension, extensions::UnloadedExtensionReason::DISABLE); } + auto* metamask_extension = + registry->enabled_extensions().GetByID(metamask_extension_id); + if (metamask_extension) { + shared_user_script_manager->OnExtensionUnloaded( + context_, metamask_extension, + extensions::UnloadedExtensionReason::DISABLE); + } + + // If the user has not manually gone into settings and selected + // they want to use Crypto Wallets. Then we prefer MetaMask. + // MetaMask is the default if it is installed. + // We can't have 2 web3 providers, we: + // 1) Check if MetaMask content scripts are disabled, if so, enable them. + // 2) Check if CryptoWallets content scripts are enabled, if so, disable them. if (provider == BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS) { if (erc_extension) { shared_user_script_manager->OnExtensionLoaded(context_, erc_extension); } - } else if (provider == BraveWalletWeb3ProviderTypes::METAMASK) { + } else if (provider != BraveWalletWeb3ProviderTypes::NONE) { if (metamask_extension) { - shared_user_script_manager->OnExtensionLoaded( - context_, metamask_extension); + shared_user_script_manager->OnExtensionLoaded(context_, + metamask_extension); } } } @@ -287,10 +298,49 @@ void BraveWalletService::OnPreferenceChanged() { RemoveUnusedWeb3ProviderContentScripts(); } +void BraveWalletService::OnExtensionInstalled( + content::BrowserContext* browser_context, + const extensions::Extension* extension, bool is_update) { + if (extension->id() == metamask_extension_id && !is_update) { + PrefService* prefs = user_prefs::UserPrefs::Get(context_); + prefs->SetInteger(kBraveWalletWeb3Provider, + static_cast(BraveWalletWeb3ProviderTypes::METAMASK)); + RemoveUnusedWeb3ProviderContentScripts(); + } +} + void BraveWalletService::OnExtensionLoaded( content::BrowserContext* browser_context, const extensions::Extension* extension) { - RemoveUnusedWeb3ProviderContentScripts(); + if (extension->id() == metamask_extension_id || + extension->id() == ethereum_remote_client_extension_id) { + RemoveUnusedWeb3ProviderContentScripts(); + } +} + +void BraveWalletService::OnExtensionUnloaded( + content::BrowserContext* browser_context, + const extensions::Extension* extension, + extensions::UnloadedExtensionReason reason) { + if (extension->id() == metamask_extension_id || + extension->id() == ethereum_remote_client_extension_id) { + RemoveUnusedWeb3ProviderContentScripts(); + } +} + +void BraveWalletService::OnExtensionUninstalled( + content::BrowserContext* browser_context, + const extensions::Extension* extension, + extensions::UninstallReason reason) { + if (extension->id() == metamask_extension_id) { + PrefService* prefs = user_prefs::UserPrefs::Get(context_); + auto provider = static_cast( + prefs->GetInteger(kBraveWalletWeb3Provider)); + if (provider == BraveWalletWeb3ProviderTypes::METAMASK) + prefs->SetInteger(kBraveWalletWeb3Provider, + static_cast(BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS)); + RemoveUnusedWeb3ProviderContentScripts(); + } } bool BraveWalletService::IsCryptoWalletsSetup() const { diff --git a/components/brave_wallet/browser/brave_wallet_service.h b/components/brave_wallet/browser/brave_wallet_service.h index 30f127b5832..62a5596e2fc 100644 --- a/components/brave_wallet/browser/brave_wallet_service.h +++ b/components/brave_wallet/browser/brave_wallet_service.h @@ -77,9 +77,16 @@ class BraveWalletService : public KeyedService, bool LoadRootSeedInfo(std::vector key, std::string* seed); void RemoveUnusedWeb3ProviderContentScripts(); void OnPreferenceChanged(); - // ExtensionRegistryObserver implementation. + void OnExtensionInstalled(content::BrowserContext* browser_context, + const extensions::Extension* extension, bool is_update) override; void OnExtensionLoaded(content::BrowserContext* browser_context, - const extensions::Extension* extension) override; + const extensions::Extension* extension) override; + void OnExtensionUnloaded(content::BrowserContext* browser_context, + const extensions::Extension* extension, + extensions::UnloadedExtensionReason reason) override; + void OnExtensionUninstalled(content::BrowserContext* browser_context, + const extensions::Extension* extension, + extensions::UninstallReason reason) override; content::BrowserContext* context_; std::unique_ptr pref_change_registrar_; diff --git a/test/BUILD.gn b/test/BUILD.gn index 03a9478b464..54c6e9be54c 100644 --- a/test/BUILD.gn +++ b/test/BUILD.gn @@ -333,7 +333,6 @@ test("brave_unit_tests") { if (brave_wallet_enabled) { sources += [ "//brave/browser/extensions/brave_wallet_unittest.cc", - "//brave/browser/brave_wallet/brave_wallet_utils_unittest.cc", ] }