Force select MetaMask when installed

No longer prompt about selecting a web3 provider
This commit is contained in:
Brian R. Bondy
2020-09-11 11:42:53 -04:00
parent fd026bd4cb
commit 5994a10b2e
14 changed files with 142 additions and 351 deletions
-9
View File
@@ -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.
</message>
<!-- Web3 detection -->
<message name="IDS_BRAVE_CRYPTO_WALLETS_METAMASK_INFOBAR_TEXT" desc="Text that shows on the info bar when a Dapp is detected">
Would you like to use Brave's Crypto Wallets or MetaMask for Dapps?
</message>
<message name="IDS_BRAVE_CRYPTO_WALLETS_LAZY_LOAD_TEXT" desc="Text that shows on the info bar when a Dapp is detected">
Would you like to start Crypto Wallets for web3 support on this page?
</message>
@@ -881,12 +878,6 @@ By installing this extension, you are agreeing to the Google Widevine Terms of U
</message>
<message name="IDS_BRAVE_CRYPTO_WALLETS_SETUP_CRYPTO_WALLETS" desc="Setup Crypto Wallets">
Setup Crypto Wallets
</message>
<message name="IDS_BRAVE_CRYPTO_WALLETS_USE_METAMASK" desc="Use MetaMask and don't use Crypto Wallets">
Use MetaMask
</message>
<message name="IDS_BRAVE_CRYPTO_WALLETS_SETUP" desc="Use Crypto Wallets">
SETUP
</message>
<message name="IDS_BRAVE_CRYPTO_WALLETS_START_AND_RELOAD" desc="Start Crypto Wallets and reload">
Start Crypto Wallets and reload
-9
View File
@@ -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);
}
-2
View File
@@ -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",
@@ -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<int>(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
-23
View File
@@ -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_
@@ -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 <memory>
#include <string>
#include <utility>
#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<const extensions::Extension> *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<base::Value>(""));
extensions::ExtensionRegistry::Get(profile())->AddEnabled(extension->get());
}
std::unique_ptr<TestingProfile> CreateProfile() {
TestingProfile::Builder builder;
auto prefs =
std::make_unique<sync_preferences::TestingPrefServiceSyncable>();
RegisterUserProfilePrefs(prefs->registry());
builder.SetPrefService(std::move(prefs));
return builder.Build();
}
content::BrowserTaskEnvironment task_environment_;
std::unique_ptr<TestingProfile> profile_;
scoped_refptr<const extensions::Extension> metamask_extension;
scoped_refptr<const extensions::Extension> 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<BraveWalletWeb3ProviderTypes>(
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<BraveWalletWeb3ProviderTypes>(
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<BraveWalletWeb3ProviderTypes>(
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<BraveWalletWeb3ProviderTypes>(
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<BraveWalletWeb3ProviderTypes>(
profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider));
ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::ASK);
}
+15 -12
View File
@@ -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<base::Value>(false)));
}
auto provider = static_cast<BraveWalletWeb3ProviderTypes>(
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<base::Value>(dappDetection)));
}
@@ -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<BraveWalletWeb3ProviderTypes>(
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<BraveWalletWeb3ProviderTypes>(
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<int>(BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS));
// Then the user updates MetaMask
AddFakeMetaMaskExtension(true);
// It should not toggle the setting
auto provider = static_cast<BraveWalletWeb3ProviderTypes>(
browser()->profile()->GetPrefs()->GetInteger(kBraveWalletWeb3Provider));
ASSERT_EQ(provider, BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS);
}
} // namespace extensions
@@ -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<int>(BraveWalletWeb3ProviderTypes::METAMASK));
Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
brave::ShowExtensionSettings(browser);
}
return true;
}
@@ -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);
@@ -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
}
@@ -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<BraveWalletWeb3ProviderTypes>(
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<int>(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<BraveWalletWeb3ProviderTypes>(
prefs->GetInteger(kBraveWalletWeb3Provider));
if (provider == BraveWalletWeb3ProviderTypes::METAMASK)
prefs->SetInteger(kBraveWalletWeb3Provider,
static_cast<int>(BraveWalletWeb3ProviderTypes::CRYPTO_WALLETS));
RemoveUnusedWeb3ProviderContentScripts();
}
}
bool BraveWalletService::IsCryptoWalletsSetup() const {
@@ -77,9 +77,16 @@ class BraveWalletService : public KeyedService,
bool LoadRootSeedInfo(std::vector<uint8_t> 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<PrefChangeRegistrar> pref_change_registrar_;
-1
View File
@@ -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",
]
}