Migrate kBraveWalletCustomNetworks and kBraveWalletCurrentChainId
kBraveWalletCustomNetworks used to be a list now it is a dictionary keyed by different coins, old kBraveWalletCustomNetworksDeprecated list is migrated to a list under "ethereum" key. kBraveWalletCurrentChainId is deprecated and its is migrated to kBraveWalletSelectedNetworks under "ethereum" key
This commit is contained in:
@@ -513,7 +513,7 @@ class BraveWalletServiceUnitTest : public testing::Test {
|
||||
EXPECT_EQ(requests[0]->token, expected_token);
|
||||
|
||||
if (run_switch_network) {
|
||||
GetPrefs()->SetString(kBraveWalletCurrentChainId, mojom::kRopstenChainId);
|
||||
json_rpc_service_->SetNetwork(mojom::kRopstenChainId);
|
||||
} else {
|
||||
service_->NotifyAddSuggestTokenRequestsProcessed(
|
||||
approve, {suggested_token->contract_address});
|
||||
@@ -1046,8 +1046,8 @@ TEST_F(BraveWalletServiceUnitTest, NetworkListChangedEvent) {
|
||||
// Remove network.
|
||||
observer_->Reset();
|
||||
{
|
||||
ListPrefUpdate update(GetPrefs(), kBraveWalletCustomNetworks);
|
||||
base::Value* list = update.Get();
|
||||
DictionaryPrefUpdate update(GetPrefs(), kBraveWalletCustomNetworks);
|
||||
base::Value* list = update.Get()->FindKey(kEthereumPrefKey);
|
||||
list->EraseListValueIf([&](const base::Value& v) {
|
||||
auto* chain_id_value = v.FindStringKey("chainId");
|
||||
if (!chain_id_value)
|
||||
|
||||
@@ -1192,9 +1192,6 @@ TEST_F(KeyringServiceUnitTest, Reset) {
|
||||
EXPECT_TRUE(
|
||||
HasPrefForKeyring(kPasswordEncryptorNonce, mojom::kDefaultKeyringId));
|
||||
EXPECT_TRUE(HasPrefForKeyring(kEncryptedMnemonic, mojom::kDefaultKeyringId));
|
||||
GetPrefs()->Set(kBraveWalletCustomNetworks, base::ListValue());
|
||||
GetPrefs()->SetString(kBraveWalletCurrentChainId,
|
||||
brave_wallet::mojom::kMainnetChainId);
|
||||
EXPECT_TRUE(service.IsKeyringCreated(brave_wallet::mojom::kDefaultKeyringId));
|
||||
service.Reset();
|
||||
EXPECT_FALSE(
|
||||
|
||||
@@ -245,8 +245,8 @@ const PrefsUtil::TypedPrefMap& BravePrefsUtil::GetAllowlistedKeys() {
|
||||
settings_api::PrefType::PREF_TYPE_BOOLEAN;
|
||||
|
||||
// Brave Wallet pref
|
||||
(*s_brave_allowlist)[kBraveWalletCurrentChainId] =
|
||||
settings_api::PrefType::PREF_TYPE_STRING;
|
||||
(*s_brave_allowlist)[kBraveWalletSelectedNetworks] =
|
||||
settings_api::PrefType::PREF_TYPE_DICTIONARY;
|
||||
(*s_brave_allowlist)[kDefaultWallet2] =
|
||||
settings_api::PrefType::PREF_TYPE_NUMBER;
|
||||
(*s_brave_allowlist)[kDefaultBaseCurrency] =
|
||||
|
||||
@@ -77,7 +77,7 @@ class SettingsWalletNetworksSubpage extends SettingsWalletNetworksSubpageBase {
|
||||
|
||||
isDefaultNetwork(chainId) {
|
||||
return (chainId ===
|
||||
this.getPref('brave.wallet.wallet_current_chain_id').value)
|
||||
this.getPref('brave.wallet.selected_networks').value['ethereum'])
|
||||
}
|
||||
|
||||
hideNativeCurrencyInfo(item) {
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#include "base/values.h"
|
||||
#include "brave/browser/brave_wallet/json_rpc_service_factory.h"
|
||||
#include "brave/browser/ui/webui/settings/brave_wallet_handler.h"
|
||||
#include "brave/components/brave_wallet/browser/brave_wallet_constants.h"
|
||||
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
|
||||
#include "brave/components/brave_wallet/browser/json_rpc_service.h"
|
||||
#include "brave/components/brave_wallet/browser/pref_names.h"
|
||||
@@ -43,8 +44,15 @@ namespace {
|
||||
|
||||
void UpdateCustomNetworks(PrefService* prefs,
|
||||
std::vector<base::Value>* values) {
|
||||
ListPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* list = update.Get();
|
||||
DictionaryPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* dict = update.Get();
|
||||
ASSERT_TRUE(dict);
|
||||
base::Value* list = dict->FindKey(brave_wallet::kEthereumPrefKey);
|
||||
if (!list) {
|
||||
list = dict->SetKey(brave_wallet::kEthereumPrefKey,
|
||||
base::Value(base::Value::Type::LIST));
|
||||
}
|
||||
ASSERT_TRUE(list);
|
||||
list->ClearList();
|
||||
for (auto& it : *values) {
|
||||
list->Append(std::move(it));
|
||||
@@ -372,7 +380,10 @@ TEST(TestBraveWalletHandler, SetActiveNetwork) {
|
||||
brave_wallet::GetAllCustomChains(handler.prefs(), &result);
|
||||
EXPECT_EQ(result.size(), 2u);
|
||||
}
|
||||
handler.prefs()->SetString(kBraveWalletCurrentChainId, "chain_id");
|
||||
DictionaryPrefUpdate update(handler.prefs(), kBraveWalletSelectedNetworks);
|
||||
base::Value* dict = update.Get();
|
||||
DCHECK(dict);
|
||||
dict->SetStringKey(brave_wallet::kEthereumPrefKey, "chain_id");
|
||||
{
|
||||
auto args = base::ListValue();
|
||||
args.Append(base::Value("id"));
|
||||
@@ -383,8 +394,7 @@ TEST(TestBraveWalletHandler, SetActiveNetwork) {
|
||||
ASSERT_TRUE(data.arg3()->is_bool());
|
||||
EXPECT_EQ(data.arg3()->GetBool(), true);
|
||||
|
||||
EXPECT_EQ(handler.prefs()->GetString(kBraveWalletCurrentChainId),
|
||||
"chain_id2");
|
||||
EXPECT_EQ(brave_wallet::GetCurrentChainId(handler.prefs()), "chain_id2");
|
||||
}
|
||||
{
|
||||
auto args = base::ListValue();
|
||||
@@ -396,7 +406,6 @@ TEST(TestBraveWalletHandler, SetActiveNetwork) {
|
||||
ASSERT_TRUE(data.arg3()->is_bool());
|
||||
EXPECT_EQ(data.arg3()->GetBool(), false);
|
||||
|
||||
EXPECT_EQ(handler.prefs()->GetString(kBraveWalletCurrentChainId),
|
||||
"chain_id2");
|
||||
EXPECT_EQ(brave_wallet::GetCurrentChainId(handler.prefs()), "chain_id2");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#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/brave_wallet_utils.h"
|
||||
#include "brave/components/brave_wallet/browser/json_rpc_service.h"
|
||||
#include "brave/components/brave_wallet/browser/pref_names.h"
|
||||
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
|
||||
#include "components/prefs/pref_service.h"
|
||||
@@ -74,9 +75,12 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
|
||||
registry->RegisterTimePref(kBraveWalletP3AFirstReportTime, base::Time());
|
||||
registry->RegisterListPref(kBraveWalletP3AWeeklyStorage);
|
||||
registry->RegisterDictionaryPref(kBraveWalletKeyrings);
|
||||
registry->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
registry->RegisterStringPref(kBraveWalletCurrentChainId,
|
||||
brave_wallet::mojom::kMainnetChainId);
|
||||
registry->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
base::Value selected_networks(base::Value::Type::DICTIONARY);
|
||||
selected_networks.SetStringKey(kEthereumPrefKey,
|
||||
brave_wallet::mojom::kMainnetChainId);
|
||||
registry->RegisterDictionaryPref(kBraveWalletSelectedNetworks,
|
||||
std::move(selected_networks));
|
||||
registry->RegisterDictionaryPref(kBraveWalletUserAssets,
|
||||
GetDefaultUserAssets());
|
||||
registry->RegisterIntegerPref(kBraveWalletAutoLockMinutes, 5);
|
||||
@@ -110,12 +114,17 @@ void RegisterProfilePrefsForMigration(
|
||||
// Added 02/2022
|
||||
registry->RegisterBooleanPref(
|
||||
kBraveWalletEthereumTransactionsCoinTypeMigrated, false);
|
||||
|
||||
// Added 22/02/2022
|
||||
registry->RegisterListPref(kBraveWalletCustomNetworksDeprecated);
|
||||
registry->RegisterStringPref(kBraveWalletCurrentChainId,
|
||||
brave_wallet::mojom::kMainnetChainId);
|
||||
}
|
||||
|
||||
void ClearJsonRpcServiceProfilePrefs(PrefService* prefs) {
|
||||
DCHECK(prefs);
|
||||
prefs->ClearPref(kBraveWalletCustomNetworks);
|
||||
prefs->ClearPref(kBraveWalletCurrentChainId);
|
||||
prefs->ClearPref(kBraveWalletSelectedNetworks);
|
||||
prefs->ClearPref(kSupportEip1559OnLocalhostChain);
|
||||
}
|
||||
|
||||
@@ -142,6 +151,7 @@ void MigrateObsoleteProfilePrefs(PrefService* prefs) {
|
||||
// Added 10/2021 for migrating the contract address for eth in user asset
|
||||
// list from 'eth' to an empty string.
|
||||
BraveWalletService::MigrateUserAssetEthContractAddress(prefs);
|
||||
JsonRpcService::MigrateMultichainNetworks(prefs);
|
||||
|
||||
if (prefs->HasPrefPath(kBraveWalletWeb3ProviderDeprecated)) {
|
||||
mojom::DefaultWallet provider = static_cast<mojom::DefaultWallet>(
|
||||
|
||||
@@ -149,7 +149,7 @@ BraveWalletService::BraveWalletService(
|
||||
base::BindRepeating(&BraveWalletService::OnNetworkListChanged,
|
||||
base::Unretained(this)));
|
||||
pref_change_registrar_.Add(
|
||||
kBraveWalletCurrentChainId,
|
||||
kBraveWalletSelectedNetworks,
|
||||
base::BindRepeating(&BraveWalletService::OnNetworkChanged,
|
||||
weak_ptr_factory_.GetWeakPtr()));
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "base/strings/stringprintf.h"
|
||||
#include "base/time/time.h"
|
||||
#include "base/values.h"
|
||||
#include "brave/components/brave_wallet/browser/brave_wallet_constants.h"
|
||||
#include "brave/components/brave_wallet/browser/pref_names.h"
|
||||
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
|
||||
#include "brave/components/brave_wallet/common/features.h"
|
||||
@@ -215,11 +216,15 @@ std::string GetInfuraSubdomainForKnownChainId(const std::string& chain_id) {
|
||||
|
||||
void GetAllCustomChains(PrefService* prefs,
|
||||
std::vector<mojom::EthereumChainPtr>* result) {
|
||||
const base::Value* custom_networks_list =
|
||||
prefs->GetList(kBraveWalletCustomNetworks);
|
||||
if (!custom_networks_list)
|
||||
const base::Value* custom_networks =
|
||||
prefs->GetDictionary(kBraveWalletCustomNetworks);
|
||||
if (!custom_networks)
|
||||
return;
|
||||
for (const auto& it : custom_networks_list->GetList()) {
|
||||
const base::Value* eth_custom_networks_list =
|
||||
custom_networks->FindKey(kEthereumPrefKey);
|
||||
if (!eth_custom_networks_list)
|
||||
return;
|
||||
for (const auto& it : eth_custom_networks_list->GetList()) {
|
||||
absl::optional<mojom::EthereumChain> chain =
|
||||
brave_wallet::ValueToEthereumChain(it);
|
||||
if (chain)
|
||||
@@ -704,8 +709,15 @@ void AddCustomNetwork(PrefService* prefs, mojom::EthereumChainPtr chain) {
|
||||
return;
|
||||
|
||||
{ // Update needs to be done before GetNetworkId below.
|
||||
ListPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* list = update.Get();
|
||||
DictionaryPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* dict = update.Get();
|
||||
CHECK(dict);
|
||||
base::Value* list = dict->FindKey(kEthereumPrefKey);
|
||||
if (!list) {
|
||||
list =
|
||||
dict->SetKey(kEthereumPrefKey, base::Value(base::Value::Type::LIST));
|
||||
}
|
||||
CHECK(list);
|
||||
list->Append(std::move(value.value()));
|
||||
}
|
||||
|
||||
@@ -735,8 +747,10 @@ void RemoveCustomNetwork(PrefService* prefs,
|
||||
const std::string& chain_id_to_remove) {
|
||||
DCHECK(prefs);
|
||||
|
||||
ListPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* list = update.Get();
|
||||
DictionaryPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* dict = update.Get();
|
||||
CHECK(dict);
|
||||
base::Value* list = dict->FindKey(kEthereumPrefKey);
|
||||
list->EraseListValueIf([&](const base::Value& v) {
|
||||
auto* chain_id_value = v.FindStringKey("chainId");
|
||||
if (!chain_id_value)
|
||||
@@ -746,7 +760,15 @@ void RemoveCustomNetwork(PrefService* prefs,
|
||||
}
|
||||
|
||||
std::string GetCurrentChainId(PrefService* prefs) {
|
||||
return prefs->GetString(kBraveWalletCurrentChainId);
|
||||
const base::Value* selected_networks =
|
||||
prefs->GetDictionary(kBraveWalletSelectedNetworks);
|
||||
DCHECK(selected_networks);
|
||||
const std::string* eth_chain_id =
|
||||
selected_networks->FindStringKey(kEthereumPrefKey);
|
||||
if (!eth_chain_id)
|
||||
return std::string();
|
||||
|
||||
return *eth_chain_id;
|
||||
}
|
||||
|
||||
} // namespace brave_wallet
|
||||
|
||||
@@ -90,7 +90,7 @@ std::string GetUnstoppableDomainsProxyReaderContractAddress(
|
||||
const std::string& chain_id);
|
||||
std::string GetEnsRegistryContractAddress(const std::string& chain_id);
|
||||
|
||||
// Append chain value to kBraveWalletCustomNetworks list pref.
|
||||
// Append chain value to kBraveWalletCustomNetworks dictionary pref.
|
||||
void AddCustomNetwork(PrefService* prefs, mojom::EthereumChainPtr chain);
|
||||
|
||||
void RemoveCustomNetwork(PrefService* prefs,
|
||||
@@ -100,7 +100,7 @@ void RemoveCustomNetwork(PrefService* prefs,
|
||||
mojom::EthereumChainPtr GetChain(PrefService* prefs,
|
||||
const std::string& chain_id);
|
||||
|
||||
// Get the current chain ID from kBraveWalletCurrentChainId pref.
|
||||
// Get the current eth chain ID from kBraveWalletSelectedNetworks pref.
|
||||
std::string GetCurrentChainId(PrefService* prefs);
|
||||
|
||||
// Returns the first URL to use that:
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "base/strings/string_number_conversions.h"
|
||||
#include "base/strings/string_util.h"
|
||||
#include "base/values.h"
|
||||
#include "brave/components/brave_wallet/browser/brave_wallet_constants.h"
|
||||
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
|
||||
#include "brave/components/brave_wallet/browser/pref_names.h"
|
||||
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
|
||||
@@ -26,12 +27,20 @@
|
||||
#include "testing/gtest/include/gtest/gtest.h"
|
||||
#include "third_party/abseil-cpp/absl/types/optional.h"
|
||||
|
||||
namespace brave_wallet {
|
||||
|
||||
namespace {
|
||||
|
||||
void UpdateCustomNetworks(PrefService* prefs,
|
||||
std::vector<base::Value>* values) {
|
||||
ListPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* list = update.Get();
|
||||
DictionaryPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* dict = update.Get();
|
||||
ASSERT_TRUE(dict);
|
||||
base::Value* list = dict->FindKey(kEthereumPrefKey);
|
||||
if (!list) {
|
||||
list = dict->SetKey(kEthereumPrefKey, base::Value(base::Value::Type::LIST));
|
||||
}
|
||||
ASSERT_TRUE(list);
|
||||
list->ClearList();
|
||||
for (auto& it : *values) {
|
||||
list->Append(std::move(it));
|
||||
@@ -40,8 +49,6 @@ void UpdateCustomNetworks(PrefService* prefs,
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace brave_wallet {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, Mnemonic) {
|
||||
const struct {
|
||||
const char* entropy;
|
||||
@@ -643,7 +650,7 @@ TEST(BraveWalletUtilsUnitTest, TransactionReceiptAndValue) {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, GetAllCustomChainsTest) {
|
||||
TestingPrefServiceSimple prefs;
|
||||
prefs.registry()->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
std::vector<mojom::EthereumChainPtr> result;
|
||||
GetAllCustomChains(&prefs, &result);
|
||||
ASSERT_TRUE(result.empty());
|
||||
@@ -670,7 +677,7 @@ TEST(BraveWalletUtilsUnitTest, GetAllCustomChainsTest) {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, GetAllChainsTest) {
|
||||
TestingPrefServiceSimple prefs;
|
||||
prefs.registry()->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterBooleanPref(kSupportEip1559OnLocalhostChain, false);
|
||||
|
||||
std::vector<base::Value> values;
|
||||
@@ -703,7 +710,7 @@ TEST(BraveWalletUtilsUnitTest, GetAllChainsTest) {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, GetNetworkURLTest) {
|
||||
TestingPrefServiceSimple prefs;
|
||||
prefs.registry()->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterBooleanPref(kSupportEip1559OnLocalhostChain, false);
|
||||
|
||||
std::vector<base::Value> values;
|
||||
@@ -733,7 +740,7 @@ TEST(BraveWalletUtilsUnitTest, GetNetworkURLTest) {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, GetInfuraSubdomainForKnownChainId) {
|
||||
TestingPrefServiceSimple prefs;
|
||||
prefs.registry()->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterBooleanPref(kSupportEip1559OnLocalhostChain, false);
|
||||
|
||||
std::vector<mojom::EthereumChainPtr> known_chains;
|
||||
@@ -747,7 +754,7 @@ TEST(BraveWalletUtilsUnitTest, GetInfuraSubdomainForKnownChainId) {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, GetKnownChain) {
|
||||
TestingPrefServiceSimple prefs;
|
||||
prefs.registry()->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterBooleanPref(kSupportEip1559OnLocalhostChain, false);
|
||||
|
||||
auto known_chains = brave_wallet::GetAllKnownNetworksForTesting();
|
||||
@@ -774,7 +781,7 @@ TEST(BraveWalletUtilsUnitTest, GetKnownChain) {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, GetChain) {
|
||||
TestingPrefServiceSimple prefs;
|
||||
prefs.registry()->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterBooleanPref(kSupportEip1559OnLocalhostChain, false);
|
||||
|
||||
std::vector<base::Value> values;
|
||||
@@ -809,7 +816,7 @@ TEST(BraveWalletUtilsUnitTest, GetKnownNetworkId) {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, GetNetworkId) {
|
||||
TestingPrefServiceSimple prefs;
|
||||
prefs.registry()->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterBooleanPref(kSupportEip1559OnLocalhostChain, false);
|
||||
std::vector<mojom::EthereumChainPtr> result;
|
||||
GetAllCustomChains(&prefs, &result);
|
||||
@@ -838,7 +845,7 @@ TEST(BraveWalletUtilsUnitTest, GetNetworkId) {
|
||||
|
||||
TEST(BraveWalletUtilsUnitTest, AddCustomNetwork) {
|
||||
TestingPrefServiceSimple prefs;
|
||||
prefs.registry()->RegisterListPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletCustomNetworks);
|
||||
prefs.registry()->RegisterBooleanPref(kSupportEip1559OnLocalhostChain, false);
|
||||
prefs.registry()->RegisterDictionaryPref(kBraveWalletUserAssets);
|
||||
|
||||
|
||||
@@ -103,8 +103,7 @@ JsonRpcService::JsonRpcService(
|
||||
url_loader_factory)),
|
||||
prefs_(prefs),
|
||||
weak_ptr_factory_(this) {
|
||||
SetNetwork(prefs_->GetString(kBraveWalletCurrentChainId),
|
||||
base::BindOnce([](bool success) {
|
||||
SetNetwork(GetCurrentChainId(prefs_), base::BindOnce([](bool success) {
|
||||
if (!success)
|
||||
LOG(ERROR) << "Could not set netowrk from JsonRpcService()";
|
||||
}));
|
||||
@@ -118,6 +117,36 @@ void JsonRpcService::SetAPIRequestHelperForTesting(
|
||||
|
||||
JsonRpcService::~JsonRpcService() {}
|
||||
|
||||
// static
|
||||
void JsonRpcService::MigrateMultichainNetworks(PrefService* prefs) {
|
||||
{ // custom networks
|
||||
if (!prefs->HasPrefPath(kBraveWalletCustomNetworksDeprecated))
|
||||
return;
|
||||
const base::Value* custom_networks =
|
||||
prefs->GetList(kBraveWalletCustomNetworksDeprecated);
|
||||
if (!custom_networks)
|
||||
return;
|
||||
|
||||
base::Value new_custom_networks(base::Value::Type::DICTIONARY);
|
||||
new_custom_networks.SetKey(kEthereumPrefKey, custom_networks->Clone());
|
||||
|
||||
prefs->Set(kBraveWalletCustomNetworks, new_custom_networks);
|
||||
|
||||
prefs->ClearPref(kBraveWalletCustomNetworksDeprecated);
|
||||
}
|
||||
{ // selected networks
|
||||
if (!prefs->HasPrefPath(kBraveWalletCurrentChainId))
|
||||
return;
|
||||
const std::string chain_id = prefs->GetString(kBraveWalletCurrentChainId);
|
||||
base::Value selected_networks(base::Value::Type::DICTIONARY);
|
||||
selected_networks.SetStringKey(kEthereumPrefKey, chain_id);
|
||||
|
||||
prefs->Set(kBraveWalletSelectedNetworks, selected_networks);
|
||||
|
||||
prefs->ClearPref(kBraveWalletCurrentChainId);
|
||||
}
|
||||
}
|
||||
|
||||
mojo::PendingRemote<mojom::JsonRpcService> JsonRpcService::MakeRemote() {
|
||||
mojo::PendingRemote<mojom::JsonRpcService> remote;
|
||||
receivers_.Add(this, remote.InitWithNewPipeAndPassReceiver());
|
||||
@@ -329,7 +358,10 @@ bool JsonRpcService::SetNetwork(const std::string& chain_id) {
|
||||
|
||||
chain_id_ = chain_id;
|
||||
network_url_ = network_url;
|
||||
prefs_->SetString(kBraveWalletCurrentChainId, chain_id);
|
||||
DictionaryPrefUpdate update(prefs_, kBraveWalletSelectedNetworks);
|
||||
base::Value* dict = update.Get();
|
||||
DCHECK(dict);
|
||||
dict->SetStringKey(kEthereumPrefKey, chain_id);
|
||||
|
||||
FireNetworkChanged();
|
||||
MaybeUpdateIsEip1559(chain_id);
|
||||
@@ -370,8 +402,9 @@ void JsonRpcService::UpdateIsEip1559(const std::string& chain_id,
|
||||
changed = prefs_->GetBoolean(kSupportEip1559OnLocalhostChain) != is_eip1559;
|
||||
prefs_->SetBoolean(kSupportEip1559OnLocalhostChain, is_eip1559);
|
||||
} else {
|
||||
ListPrefUpdate update(prefs_, kBraveWalletCustomNetworks);
|
||||
for (base::Value& custom_network : update.Get()->GetList()) {
|
||||
DictionaryPrefUpdate update(prefs_, kBraveWalletCustomNetworks);
|
||||
for (base::Value& custom_network :
|
||||
update.Get()->FindKey(kEthereumPrefKey)->GetList()) {
|
||||
if (!custom_network.is_dict())
|
||||
continue;
|
||||
|
||||
@@ -1402,7 +1435,7 @@ bool JsonRpcService::AddSwitchEthereumChainRequest(
|
||||
|
||||
void JsonRpcService::Reset() {
|
||||
ClearJsonRpcServiceProfilePrefs(prefs_);
|
||||
SetNetwork(prefs_->GetString(kBraveWalletCurrentChainId));
|
||||
SetNetwork(GetCurrentChainId(prefs_));
|
||||
|
||||
add_chain_pending_requests_.clear();
|
||||
switch_chain_requests_.clear();
|
||||
|
||||
@@ -43,6 +43,8 @@ class JsonRpcService : public KeyedService, public mojom::JsonRpcService {
|
||||
PrefService* prefs);
|
||||
~JsonRpcService() override;
|
||||
|
||||
static void MigrateMultichainNetworks(PrefService* prefs);
|
||||
|
||||
struct EthereumChainRequest {
|
||||
EthereumChainRequest() {}
|
||||
EthereumChainRequest(const GURL& origin, mojom::EthereumChain request)
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "base/callback.h"
|
||||
#include "base/json/json_reader.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/test/bind.h"
|
||||
#include "base/test/task_environment.h"
|
||||
@@ -36,12 +37,20 @@
|
||||
#include "url/gurl.h"
|
||||
#include "url/origin.h"
|
||||
|
||||
namespace brave_wallet {
|
||||
|
||||
namespace {
|
||||
|
||||
void UpdateCustomNetworks(PrefService* prefs,
|
||||
std::vector<base::Value>* values) {
|
||||
ListPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* list = update.Get();
|
||||
DictionaryPrefUpdate update(prefs, kBraveWalletCustomNetworks);
|
||||
base::Value* dict = update.Get();
|
||||
ASSERT_TRUE(dict);
|
||||
base::Value* list = dict->FindKey(kEthereumPrefKey);
|
||||
if (!list) {
|
||||
list = dict->SetKey(kEthereumPrefKey, base::Value(base::Value::Type::LIST));
|
||||
}
|
||||
ASSERT_TRUE(list);
|
||||
list->ClearList();
|
||||
for (auto& it : *values) {
|
||||
list->Append(std::move(it));
|
||||
@@ -170,8 +179,6 @@ class TestJsonRpcServiceObserver
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace brave_wallet {
|
||||
|
||||
class JsonRpcServiceUnitTest : public testing::Test {
|
||||
public:
|
||||
JsonRpcServiceUnitTest()
|
||||
@@ -193,6 +200,7 @@ class JsonRpcServiceUnitTest : public testing::Test {
|
||||
}));
|
||||
|
||||
brave_wallet::RegisterProfilePrefs(prefs_.registry());
|
||||
brave_wallet::RegisterProfilePrefsForMigration(prefs_.registry());
|
||||
|
||||
json_rpc_service_.reset(
|
||||
new JsonRpcService(shared_url_loader_factory_, &prefs_));
|
||||
@@ -211,7 +219,9 @@ class JsonRpcServiceUnitTest : public testing::Test {
|
||||
if (chain_id == mojom::kLocalhostChainId)
|
||||
return prefs()->GetBoolean(kSupportEip1559OnLocalhostChain);
|
||||
const base::Value* custom_networks =
|
||||
prefs()->GetList(kBraveWalletCustomNetworks);
|
||||
prefs()
|
||||
->GetDictionary(kBraveWalletCustomNetworks)
|
||||
->FindKey(kEthereumPrefKey);
|
||||
if (!custom_networks)
|
||||
return false;
|
||||
|
||||
@@ -382,7 +392,10 @@ class JsonRpcServiceUnitTest : public testing::Test {
|
||||
|
||||
void ValidateStartWithNetwork(const std::string& chain_id,
|
||||
const std::string& expected_id) {
|
||||
prefs()->SetString(kBraveWalletCurrentChainId, chain_id);
|
||||
DictionaryPrefUpdate update(prefs(), kBraveWalletSelectedNetworks);
|
||||
base::Value* dict = update.Get();
|
||||
DCHECK(dict);
|
||||
dict->SetStringKey(kEthereumPrefKey, chain_id);
|
||||
JsonRpcService service(shared_url_loader_factory(), prefs());
|
||||
bool callback_is_called = false;
|
||||
service.GetChainId(base::BindLambdaForTesting(
|
||||
@@ -493,8 +506,7 @@ TEST_F(JsonRpcServiceUnitTest, SetNetwork) {
|
||||
bool callback_is_called = false;
|
||||
SetNetwork(network->chain_id);
|
||||
|
||||
EXPECT_EQ(network->chain_id,
|
||||
prefs()->GetString(kBraveWalletCurrentChainId));
|
||||
EXPECT_EQ(network->chain_id, GetCurrentChainId(prefs()));
|
||||
const std::string& expected_id = network->chain_id;
|
||||
json_rpc_service_->GetChainId(base::BindLambdaForTesting(
|
||||
[&callback_is_called, &expected_id](const std::string& chain_id) {
|
||||
@@ -1874,8 +1886,7 @@ TEST_F(JsonRpcServiceUnitTest, Reset) {
|
||||
SetNetwork(mojom::kLocalhostChainId);
|
||||
prefs()->SetBoolean(kSupportEip1559OnLocalhostChain, true);
|
||||
EXPECT_TRUE(prefs()->HasPrefPath(kBraveWalletCustomNetworks));
|
||||
EXPECT_EQ(prefs()->GetString(kBraveWalletCurrentChainId),
|
||||
mojom::kLocalhostChainId);
|
||||
EXPECT_EQ(GetCurrentChainId(prefs()), mojom::kLocalhostChainId);
|
||||
// This isn't valid data for these maps but we are just checking to make sure
|
||||
// it gets cleared
|
||||
json_rpc_service_->add_chain_pending_requests_["1"] =
|
||||
@@ -1890,8 +1901,7 @@ TEST_F(JsonRpcServiceUnitTest, Reset) {
|
||||
GetAllCustomChains(prefs(), &custom_chains);
|
||||
ASSERT_TRUE(custom_chains.empty());
|
||||
EXPECT_FALSE(prefs()->HasPrefPath(kBraveWalletCustomNetworks));
|
||||
EXPECT_EQ(prefs()->GetString(kBraveWalletCurrentChainId),
|
||||
mojom::kMainnetChainId);
|
||||
EXPECT_EQ(GetCurrentChainId(prefs()), mojom::kMainnetChainId);
|
||||
EXPECT_FALSE(prefs()->HasPrefPath(kSupportEip1559OnLocalhostChain));
|
||||
EXPECT_TRUE(json_rpc_service_->add_chain_pending_requests_.empty());
|
||||
EXPECT_TRUE(json_rpc_service_->switch_chain_requests_.empty());
|
||||
@@ -2018,4 +2028,70 @@ TEST_F(JsonRpcServiceUnitTest, GetSolanaLatestBlockhash) {
|
||||
l10n_util::GetStringUTF8(IDS_WALLET_INTERNAL_ERROR));
|
||||
}
|
||||
|
||||
TEST_F(JsonRpcServiceUnitTest, MigrateMultichainNetworks) {
|
||||
prefs()->ClearPref(kBraveWalletCustomNetworks);
|
||||
prefs()->ClearPref(kBraveWalletSelectedNetworks);
|
||||
|
||||
absl::optional<base::Value> old_custom_networks = base::JSONReader::Read(R"([
|
||||
{
|
||||
"blockExplorerUrls": [
|
||||
"https://thaichain.io"
|
||||
],
|
||||
"chainId": "0x7",
|
||||
"chainName": "ThaiChain",
|
||||
"iconUrls": [],
|
||||
"is_eip1559": false,
|
||||
"nativeCurrency": {
|
||||
"decimals": 18,
|
||||
"name": "ThaiChain Ether",
|
||||
"symbol": "TCH"
|
||||
},
|
||||
"rpcUrls": [
|
||||
"https://rpc.dome.cloud"
|
||||
]
|
||||
},
|
||||
{
|
||||
"blockExplorerUrls": [
|
||||
"https://ubiqscan.io"
|
||||
],
|
||||
"chainId": "0x8",
|
||||
"chainName": "Ubiq",
|
||||
"iconUrls": [],
|
||||
"is_eip1559": false,
|
||||
"nativeCurrency": {
|
||||
"decimals": 18,
|
||||
"name": "Ubiq Ether",
|
||||
"symbol": "UBQ"
|
||||
},
|
||||
"rpcUrls": [
|
||||
"https://rpc.octano.dev",
|
||||
"https://pyrus2.ubiqscan.io"
|
||||
]
|
||||
}
|
||||
])");
|
||||
prefs()->Set(kBraveWalletCustomNetworksDeprecated, *old_custom_networks);
|
||||
prefs()->SetString(kBraveWalletCurrentChainId, "0x3");
|
||||
|
||||
JsonRpcService::MigrateMultichainNetworks(prefs());
|
||||
|
||||
const base::Value* new_custom_networks =
|
||||
prefs()->GetDictionary(kBraveWalletCustomNetworks);
|
||||
ASSERT_TRUE(new_custom_networks);
|
||||
const base::Value* eth_custom_networks =
|
||||
new_custom_networks->FindKey(kEthereumPrefKey);
|
||||
ASSERT_TRUE(eth_custom_networks);
|
||||
EXPECT_EQ(*eth_custom_networks, *old_custom_networks);
|
||||
|
||||
const base::Value* selected_networks =
|
||||
prefs()->GetDictionary(kBraveWalletSelectedNetworks);
|
||||
ASSERT_TRUE(selected_networks);
|
||||
const std::string* eth_selected_networks =
|
||||
selected_networks->FindStringKey(kEthereumPrefKey);
|
||||
ASSERT_TRUE(eth_selected_networks);
|
||||
EXPECT_EQ(*eth_selected_networks, "0x3");
|
||||
|
||||
EXPECT_FALSE(prefs()->HasPrefPath(kBraveWalletCustomNetworksDeprecated));
|
||||
EXPECT_FALSE(prefs()->HasPrefPath(kBraveWalletCurrentChainId));
|
||||
}
|
||||
|
||||
} // namespace brave_wallet
|
||||
|
||||
@@ -22,9 +22,8 @@ const char kBraveWalletP3AFirstReportTime[] =
|
||||
"brave.wallet.wallet_p3a_first_report_time";
|
||||
const char kBraveWalletP3AWeeklyStorage[] =
|
||||
"brave.wallet.wallet_p3a_weekly_storage";
|
||||
const char kBraveWalletCustomNetworks[] = "brave.wallet.wallet_custom_networks";
|
||||
const char kBraveWalletCurrentChainId[] =
|
||||
"brave.wallet.wallet_current_chain_id";
|
||||
const char kBraveWalletCustomNetworks[] = "brave.wallet.custom_networks";
|
||||
const char kBraveWalletSelectedNetworks[] = "brave.wallet.selected_networks";
|
||||
const char kBraveWalletKeyrings[] = "brave.wallet.keyrings";
|
||||
const char kBraveWalletUserAssets[] = "brave.wallet.user_assets";
|
||||
const char kBraveWalletUserAssetEthContractAddressMigrated[] =
|
||||
@@ -48,3 +47,7 @@ const char kBraveWalletAccountNames[] = "brave.wallet.wallet_account_names";
|
||||
const char kBraveWalletBackupComplete[] = "brave.wallet.wallet_backup_complete";
|
||||
const char kBraveWalletWeb3ProviderDeprecated[] = "brave.wallet.web3_provider";
|
||||
const char kDefaultWalletDeprecated[] = "brave.wallet.default_wallet";
|
||||
const char kBraveWalletCustomNetworksDeprecated[] =
|
||||
"brave.wallet.wallet_custom_networks";
|
||||
const char kBraveWalletCurrentChainId[] =
|
||||
"brave.wallet.wallet_current_chain_id";
|
||||
|
||||
@@ -18,7 +18,7 @@ extern const char kBraveWalletP3AFirstReportTime[];
|
||||
extern const char kBraveWalletP3AWeeklyStorage[];
|
||||
extern const char kBraveWalletKeyrings[];
|
||||
extern const char kBraveWalletCustomNetworks[];
|
||||
extern const char kBraveWalletCurrentChainId[];
|
||||
extern const char kBraveWalletSelectedNetworks[];
|
||||
extern const char kBraveWalletUserAssets[];
|
||||
// Added 10/2021 to migrate contract address to an empty string for ETH.
|
||||
extern const char kBraveWalletUserAssetEthContractAddressMigrated[];
|
||||
@@ -38,5 +38,7 @@ extern const char kBraveWalletEncryptedMnemonic[];
|
||||
extern const char kBraveWalletDefaultKeyringAccountNum[];
|
||||
extern const char kBraveWalletAccountNames[];
|
||||
extern const char kBraveWalletBackupComplete[];
|
||||
extern const char kBraveWalletCustomNetworksDeprecated[];
|
||||
extern const char kBraveWalletCurrentChainId[];
|
||||
|
||||
#endif // BRAVE_COMPONENTS_BRAVE_WALLET_BROWSER_PREF_NAMES_H_
|
||||
|
||||
@@ -202,6 +202,7 @@ test("brave_unit_tests") {
|
||||
"//brave/components/brave_sync:unit_tests",
|
||||
"//brave/components/brave_today/browser/test:brave_news_unit_tests",
|
||||
"//brave/components/brave_wallet/browser",
|
||||
"//brave/components/brave_wallet/browser:constants",
|
||||
"//brave/components/brave_wallet/browser/test:brave_wallet_unit_tests",
|
||||
"//brave/components/brave_wallet/common",
|
||||
"//brave/components/brave_wallet/common:mojom",
|
||||
|
||||
Reference in New Issue
Block a user