Skip to content

Commit

Permalink
Merge pull request #15135 from brave/brave_25432_1.44.x_uplift
Browse files Browse the repository at this point in the history
Create default solana acc when create\restore the wallet (Uplift to 1.44.x)
  • Loading branch information
kjozwiak committed Sep 20, 2022
2 parents a1a1142 + 46f709f commit c4a9a21
Show file tree
Hide file tree
Showing 10 changed files with 240 additions and 32 deletions.
12 changes: 12 additions & 0 deletions browser/brave_wallet/brave_wallet_p3a_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
#include "brave/browser/brave_wallet/brave_wallet_service_factory.h"
#include "brave/browser/brave_wallet/keyring_service_factory.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/keyring_service.h"
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
#include "brave/components/brave_wallet/common/features.h"
#include "chrome/test/base/testing_profile_manager.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
Expand Down Expand Up @@ -105,6 +107,16 @@ TEST_F(BraveWalletP3AUnitTest, DefaultSolanaWalletSetting) {
}

TEST_F(BraveWalletP3AUnitTest, KeyringCreated) {
base::test::ScopedFeatureList feature_list;
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams> enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);

feature_list.InitWithFeaturesAndParameters(enabled_features, {});

histogram_tester_->ExpectBucketCount("Brave.Wallet.KeyringCreated", 0, 1);
keyring_service_->CreateWallet("testing123", base::DoNothing());
WaitForResponse();
Expand Down
147 changes: 132 additions & 15 deletions browser/brave_wallet/keyring_service_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1260,6 +1260,7 @@ TEST_F(KeyringServiceUnitTest, LockAndUnlock) {
{brave_wallet::features::kBraveWalletFilecoinFeature,
brave_wallet::features::kBraveWalletSolanaFeature},
{});

{
KeyringService service(json_rpc_service(), GetPrefs());
// No encryptor
Expand Down Expand Up @@ -1445,6 +1446,16 @@ TEST_F(KeyringServiceUnitTest, AccountMetasForKeyring) {
}

TEST_F(KeyringServiceUnitTest, CreateAndRestoreWallet) {
base::test::ScopedFeatureList feature_list;
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams> enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);

feature_list.InitWithFeaturesAndParameters(enabled_features, {});

KeyringService service(json_rpc_service(), GetPrefs());

TestKeyringServiceObserver observer;
Expand All @@ -1466,6 +1477,12 @@ TEST_F(KeyringServiceUnitTest, CreateAndRestoreWallet) {
std::vector<mojom::AccountInfoPtr> account_infos =
service.GetAccountInfosForKeyring(mojom::kDefaultKeyringId);
EXPECT_EQ(account_infos.size(), 1u);
EXPECT_EQ(account_infos[0]->address,
service.GetSelectedAccount(mojom::CoinType::ETH).value());
EXPECT_FALSE(service.GetSelectedAccount(mojom::CoinType::SOL));
EXPECT_FALSE(service.GetFilecoinSelectedAccount(mojom::kFilecoinMainnet));
EXPECT_FALSE(service.GetFilecoinSelectedAccount(mojom::kFilecoinTestnet));

EXPECT_FALSE(account_infos[0]->address.empty());
const std::string address0 = account_infos[0]->address;
EXPECT_EQ(account_infos[0]->name, "Account 1");
Expand All @@ -1476,11 +1493,39 @@ TEST_F(KeyringServiceUnitTest, CreateAndRestoreWallet) {
[&mnemonic_to_be_restored, &service, &address0]() {
EXPECT_TRUE(
RestoreWallet(&service, *mnemonic_to_be_restored, "brave1", false));
std::vector<mojom::AccountInfoPtr> account_infos =
service.GetAccountInfosForKeyring(mojom::kDefaultKeyringId);
EXPECT_EQ(account_infos.size(), 1u);
EXPECT_EQ(account_infos[0]->address, address0);
EXPECT_EQ(account_infos[0]->name, "Account 1");
{
std::vector<mojom::AccountInfoPtr> account_infos =
service.GetAccountInfosForKeyring(mojom::kDefaultKeyringId);
EXPECT_EQ(account_infos.size(), 1u);
EXPECT_EQ(account_infos[0]->address,
service.GetSelectedAccount(mojom::CoinType::ETH).value());
EXPECT_EQ(account_infos[0]->address, address0);
EXPECT_EQ(account_infos[0]->name, "Account 1");
}

{
std::vector<mojom::AccountInfoPtr> account_infos =
service.GetAccountInfosForKeyring(
mojom::kFilecoinTestnetKeyringId);
EXPECT_EQ(account_infos.size(), 0u);
EXPECT_FALSE(
service.GetFilecoinSelectedAccount(mojom::kFilecoinTestnet));
}

{
std::vector<mojom::AccountInfoPtr> account_infos =
service.GetAccountInfosForKeyring(mojom::kFilecoinKeyringId);
EXPECT_EQ(account_infos.size(), 0u);
EXPECT_FALSE(
service.GetFilecoinSelectedAccount(mojom::kFilecoinMainnet));
}

{
std::vector<mojom::AccountInfoPtr> account_infos =
service.GetAccountInfosForKeyring(mojom::kSolanaKeyringId);
EXPECT_EQ(account_infos.size(), 0u);
EXPECT_FALSE(service.GetSelectedAccount(mojom::CoinType::SOL));
}
});
verify_restore_wallet.Run();

Expand All @@ -1504,6 +1549,28 @@ TEST_F(KeyringServiceUnitTest, CreateAndRestoreWallet) {
EXPECT_FALSE(observer.IsKeyringRestored(mojom::kSolanaKeyringId));
}

TEST_F(KeyringServiceUnitTest, DefaultSolanaAccountCreated) {
KeyringService service(json_rpc_service(), GetPrefs());
ASSERT_NE(CreateWallet(&service, "brave"), absl::nullopt);

std::vector<mojom::AccountInfoPtr> account_infos =
service.GetAccountInfosForKeyring(mojom::kSolanaKeyringId);
EXPECT_EQ(account_infos.size(), 1u);
EXPECT_FALSE(account_infos[0]->address.empty());
EXPECT_EQ(account_infos[0]->name, "Solana Account 1");
}

TEST_F(KeyringServiceUnitTest, DefaultSolanaAccountRestored) {
KeyringService service(json_rpc_service(), GetPrefs());
ASSERT_TRUE(RestoreWallet(&service, kMnemonic1, "brave", false));

std::vector<mojom::AccountInfoPtr> account_infos =
service.GetAccountInfosForKeyring(mojom::kSolanaKeyringId);
EXPECT_EQ(account_infos.size(), 1u);
EXPECT_FALSE(account_infos[0]->address.empty());
EXPECT_EQ(account_infos[0]->name, "Solana Account 1");
}

TEST_F(KeyringServiceUnitTest, AddAccount) {
KeyringService service(json_rpc_service(), GetPrefs());
ASSERT_NE(CreateWallet(&service, "brave"), absl::nullopt);
Expand Down Expand Up @@ -1791,8 +1858,15 @@ TEST_F(KeyringServiceUnitTest, ImportedAccountFromJson) {

TEST_F(KeyringServiceUnitTest, GetPrivateKeyForKeyringAccount) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(
brave_wallet::features::kBraveWalletSolanaFeature);
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams> enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);

feature_list.InitWithFeaturesAndParameters(enabled_features, {});

KeyringService service(json_rpc_service(), GetPrefs());
ASSERT_TRUE(RestoreWallet(&service, kMnemonic1, "brave", false));

Expand Down Expand Up @@ -2364,6 +2438,16 @@ TEST_F(KeyringServiceUnitTest, NotifyUserInteraction) {
}

TEST_F(KeyringServiceUnitTest, SelectAddedAccount) {
base::test::ScopedFeatureList feature_list;
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams> enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);

feature_list.InitWithFeaturesAndParameters(enabled_features, {});

KeyringService service(json_rpc_service(), GetPrefs());
ASSERT_TRUE(CreateWallet(&service, "brave"));

Expand Down Expand Up @@ -3324,6 +3408,16 @@ TEST_F(KeyringServiceUnitTest, ImportFilecoinAccounts) {
}

TEST_F(KeyringServiceUnitTest, PreCreateEncryptors) {
base::test::ScopedFeatureList feature_list;
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams> enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);

feature_list.InitWithFeaturesAndParameters(enabled_features, {});

{
// Create default wallet with disabled filecoin feature.
// Solana feature is enabled on desktop and disabled on Android.
Expand Down Expand Up @@ -3395,10 +3489,19 @@ TEST_F(KeyringServiceUnitTest, PreCreateEncryptors) {
#endif

base::test::ScopedFeatureList feature_list;
feature_list.InitWithFeatures(
{brave_wallet::features::kBraveWalletFilecoinFeature,
brave_wallet::features::kBraveWalletSolanaFeature},
{});
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams>
enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletFilecoinFeature,
base::FieldTrialParams());

feature_list.InitWithFeaturesAndParameters(enabled_features, {});

service.Reset();
ASSERT_TRUE(
RestoreWallet(&service, *mnemonic_to_be_restored, "brave", false));
Expand All @@ -3419,8 +3522,15 @@ TEST_F(KeyringServiceUnitTest, PreCreateEncryptors) {

TEST_F(KeyringServiceUnitTest, SolanaKeyring) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(
brave_wallet::features::kBraveWalletSolanaFeature);
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams> enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);

feature_list.InitWithFeaturesAndParameters(enabled_features, {});

{
KeyringService service(json_rpc_service(), GetPrefs());
TestKeyringServiceObserver observer;
Expand Down Expand Up @@ -3588,8 +3698,15 @@ TEST_F(KeyringServiceUnitTest, SolanaKeyring) {

TEST_F(KeyringServiceUnitTest, SignMessage) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(
brave_wallet::features::kBraveWalletSolanaFeature);
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams> enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);

feature_list.InitWithFeaturesAndParameters(enabled_features, {});

KeyringService service(json_rpc_service(), GetPrefs());
ASSERT_TRUE(RestoreWallet(&service, kMnemonic1, "brave", false));
base::RunLoop().RunUntilIdle();
Expand Down
15 changes: 11 additions & 4 deletions browser/brave_wallet/solana_provider_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -215,10 +215,17 @@ class SolanaProviderTest : public InProcessBrowserTest {
SolanaProviderTest()
: https_server_for_files_(net::EmbeddedTestServer::TYPE_HTTPS),
https_server_for_rpc_(net::EmbeddedTestServer::TYPE_HTTPS) {
feature_list_.InitWithFeatures(
{brave_wallet::features::kBraveWalletSolanaFeature,
brave_wallet::features::kBraveWalletSolanaProviderFeature},
{});
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";

std::vector<base::test::ScopedFeatureList::FeatureAndParams>
enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaProviderFeature,
base::FieldTrialParams());
feature_list_.InitWithFeaturesAndParameters(enabled_features, {});
}

~SolanaProviderTest() override = default;
Expand Down
6 changes: 6 additions & 0 deletions components/brave_wallet/browser/brave_wallet_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include "base/environment.h"
#include "base/feature_list.h"
#include "base/logging.h"
#include "base/metrics/field_trial_params.h"
#include "base/no_destructor.h"
#include "base/notreached.h"
#include "base/strings/strcat.h"
Expand Down Expand Up @@ -699,6 +700,11 @@ bool IsSolanaEnabled() {
brave_wallet::features::kBraveWalletSolanaFeature);
}

bool ShouldCreateDefaultSolanaAccount() {
return IsSolanaEnabled() &&
brave_wallet::features::kCreateDefaultSolanaAccount.Get();
}

std::vector<brave_wallet::mojom::NetworkInfoPtr>
GetAllKnownNetworksForTesting() {
std::vector<brave_wallet::mojom::NetworkInfoPtr> result;
Expand Down
1 change: 1 addition & 0 deletions components/brave_wallet/browser/brave_wallet_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ namespace brave_wallet {
bool IsNativeWalletEnabled();
bool IsFilecoinEnabled();
bool IsSolanaEnabled();
bool ShouldCreateDefaultSolanaAccount();
bool IsDappsSupportEnabled();

// Generate mnemonic from random entropy following BIP39.
Expand Down
13 changes: 13 additions & 0 deletions components/brave_wallet/browser/eth_tx_manager_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@
#include "base/callback_helpers.h"
#include "base/json/json_reader.h"
#include "base/test/bind.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/task_environment.h"
#include "brave/components/brave_wallet/browser/brave_wallet_constants.h"
#include "brave/components/brave_wallet/browser/brave_wallet_prefs.h"
#include "brave/components/brave_wallet/browser/brave_wallet_utils.h"
#include "brave/components/brave_wallet/browser/eip1559_transaction.h"
#include "brave/components/brave_wallet/browser/eth_data_parser.h"
#include "brave/components/brave_wallet/browser/eth_nonce_tracker.h"
Expand All @@ -29,6 +31,7 @@
#include "brave/components/brave_wallet/browser/pref_names.h"
#include "brave/components/brave_wallet/browser/tx_service.h"
#include "brave/components/brave_wallet/common/brave_wallet.mojom.h"
#include "brave/components/brave_wallet/common/features.h"
#include "brave/components/brave_wallet/common/hex_utils.h"
#include "components/sync_preferences/testing_pref_service_syncable.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
Expand Down Expand Up @@ -176,6 +179,15 @@ class EthTxManagerUnitTest : public testing::Test {
&url_loader_factory_)) {}

void SetUp() override {
base::FieldTrialParams parameters;
parameters[features::kCreateDefaultSolanaAccount.name] = "false";
std::vector<base::test::ScopedFeatureList::FeatureAndParams>
enabled_features;
enabled_features.emplace_back(
brave_wallet::features::kBraveWalletSolanaFeature, parameters);

feature_list_.InitWithFeaturesAndParameters(enabled_features, {});

url_loader_factory_.SetInterceptor(base::BindLambdaForTesting(
[&](const network::ResourceRequest& request) {
url_loader_factory_.ClearResponses();
Expand Down Expand Up @@ -449,6 +461,7 @@ class EthTxManagerUnitTest : public testing::Test {
}

protected:
base::test::ScopedFeatureList feature_list_;
base::test::TaskEnvironment task_environment_;
sync_preferences::TestingPrefServiceSyncable prefs_;
network::TestURLLoaderFactory url_loader_factory_;
Expand Down
Loading

0 comments on commit c4a9a21

Please sign in to comment.