Skip to content

Switch eth chain (uplift to 1.32.x) #10829

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions browser/brave_content_browser_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -248,8 +248,9 @@ void BindCosmeticFiltersResources(
void MaybeBindBraveWalletProvider(
content::RenderFrameHost* const frame_host,
mojo::PendingReceiver<brave_wallet::mojom::BraveWalletProvider> receiver) {
auto rpc_controller = brave_wallet::RpcControllerFactory::GetForContext(
frame_host->GetBrowserContext());
auto* rpc_controller =
brave_wallet::RpcControllerFactory::GetControllerForContext(
frame_host->GetBrowserContext());

if (!rpc_controller)
return;
Expand Down Expand Up @@ -277,8 +278,8 @@ void MaybeBindBraveWalletProvider(
std::make_unique<brave_wallet::BraveWalletProviderImpl>(
HostContentSettingsMapFactory::GetForProfile(
Profile::FromBrowserContext(frame_host->GetBrowserContext())),
std::move(rpc_controller), std::move(tx_controller),
keyring_controller, brave_wallet_service,
rpc_controller, std::move(tx_controller), keyring_controller,
brave_wallet_service,
#if defined(OS_ANDROID)
std::make_unique<
brave_wallet::BraveWalletProviderDelegateImplAndroid>(
Expand Down
109 changes: 60 additions & 49 deletions browser/brave_wallet/brave_wallet_provider_impl_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,13 @@ void ValidateErrorCode(BraveWalletProviderImpl* provider,
ProviderErrors expected) {
bool callback_is_called = false;
provider->AddEthereumChain(
payload,
base::BindLambdaForTesting(
[&callback_is_called, &expected](bool success, int error_code,
const std::string& error_message) {
ASSERT_FALSE(success);
EXPECT_EQ(error_code, static_cast<int>(expected));
ASSERT_FALSE(error_message.empty());
callback_is_called = true;
}));
payload, base::BindLambdaForTesting(
[&callback_is_called, &expected](
int error_code, const std::string& error_message) {
EXPECT_EQ(error_code, static_cast<int>(expected));
ASSERT_FALSE(error_message.empty());
callback_is_called = true;
}));
ASSERT_TRUE(callback_is_called);
}

Expand Down Expand Up @@ -149,12 +147,13 @@ class BraveWalletProviderImplUnitTest : public testing::Test {
content::TestWebContents::Create(browser_context(), nullptr);
eth_json_rpc_controller_.reset(
new EthJsonRpcController(shared_url_loader_factory_, prefs()));
SetNetwork("0x1");
keyring_controller_ =
KeyringControllerFactory::GetControllerForContext(browser_context());
asset_ratio_controller_.reset(
new AssetRatioController(shared_url_loader_factory_));
auto tx_state_manager = std::make_unique<EthTxStateManager>(
prefs(), eth_json_rpc_controller()->MakeRemote());
auto tx_state_manager =
std::make_unique<EthTxStateManager>(prefs(), eth_json_rpc_controller());
auto nonce_tracker = std::make_unique<EthNonceTracker>(
tx_state_manager.get(), eth_json_rpc_controller());
auto pending_tx_tracker = std::make_unique<EthPendingTxTracker>(
Expand All @@ -168,7 +167,7 @@ class BraveWalletProviderImplUnitTest : public testing::Test {
browser_context());

provider_ = std::make_unique<BraveWalletProviderImpl>(
host_content_settings_map(), eth_json_rpc_controller()->MakeRemote(),
host_content_settings_map(), eth_json_rpc_controller(),
eth_tx_controller()->MakeRemote(), keyring_controller_,
brave_wallet_service_,
std::make_unique<brave_wallet::BraveWalletProviderDelegateImpl>(
Expand All @@ -177,7 +176,6 @@ class BraveWalletProviderImplUnitTest : public testing::Test {

observer_.reset(new TestEventsListener());
provider_->Init(observer_->GetReceiver());
SetNetwork("0x1");
}

void SetInterceptor(const std::string& content) {
Expand Down Expand Up @@ -421,6 +419,20 @@ class BraveWalletProviderImplUnitTest : public testing::Test {
return success;
}

void SwitchEthereumChain(const std::string& chain_id,
int* error_out,
std::string* error_message_out) {
base::RunLoop run_loop;
provider_->SwitchEthereumChain(
chain_id, base::BindLambdaForTesting(
[&](int error, const std::string& error_message) {
*error_out = error;
*error_message_out = error_message;
run_loop.Quit();
}));
run_loop.Run();
}

protected:
content::BrowserTaskEnvironment browser_task_environment_;
BraveWalletService* brave_wallet_service_;
Expand Down Expand Up @@ -470,7 +482,7 @@ TEST_F(BraveWalletProviderImplUnitTest, ValidateBrokenPayloads) {

TEST_F(BraveWalletProviderImplUnitTest, EmptyDelegate) {
BraveWalletProviderImpl provider_impl(
host_content_settings_map(), eth_json_rpc_controller()->MakeRemote(),
host_content_settings_map(), eth_json_rpc_controller(),
eth_tx_controller()->MakeRemote(), keyring_controller(),
brave_wallet_service_, nullptr, prefs());
ValidateErrorCode(&provider_impl,
Expand All @@ -483,55 +495,53 @@ TEST_F(BraveWalletProviderImplUnitTest, EmptyDelegate) {
}

TEST_F(BraveWalletProviderImplUnitTest, OnAddEthereumChain) {
bool callback_is_called = false;
GURL url("https://brave.com");
Navigate(url);
base::RunLoop run_loop;
provider()->AddEthereumChain(
R"({"params": [{
"chainId": "0x111",
"chainName": "Binance1 Smart Chain",
"rpcUrls": ["https://bsc-dataseed.binance.org/"]
}]})",
"rpcUrls": ["https://bsc-dataseed.binance.org/"],
},]})",
base::BindLambdaForTesting(
[&callback_is_called](bool success, int error_code,
const std::string& error_message) {
ASSERT_FALSE(success);
[&run_loop](int error_code, const std::string& error_message) {
EXPECT_EQ(error_code,
static_cast<int>(ProviderErrors::kUserRejectedRequest));
ASSERT_FALSE(error_message.empty());
callback_is_called = true;
run_loop.Quit();
}));
ASSERT_FALSE(callback_is_called);
provider()->OnAddEthereumChain("0x111", false);
ASSERT_TRUE(callback_is_called);
run_loop.Run();
}

TEST_F(BraveWalletProviderImplUnitTest,
OnAddEthereumChainRequestCompletedError) {
int callback_is_called = 0;
GURL url("https://brave.com");
Navigate(url);
base::RunLoop run_loop;
size_t callback_called = 0;
provider()->AddEthereumChain(
R"({"params": [{
"chainId": "0x111",
"chainName": "Binance1 Smart Chain",
"rpcUrls": ["https://bsc-dataseed.binance.org/"]
}]})",
base::BindLambdaForTesting(
[&callback_is_called](bool success, int error_code,
const std::string& error_message) {
ASSERT_FALSE(success);
[&](int error_code, const std::string& error_message) {
EXPECT_EQ(error_code,
static_cast<int>(ProviderErrors::kUserRejectedRequest));
EXPECT_EQ(error_message, "test message");
callback_is_called++;
++callback_called;
run_loop.Quit();
}));
EXPECT_EQ(callback_is_called, 0);
provider()->OnAddEthereumChainRequestCompleted("0x111", "test message");
EXPECT_EQ(callback_is_called, 1);
provider()->OnAddEthereumChainRequestCompleted("0x111", "test message");
EXPECT_EQ(callback_is_called, 1);
run_loop.Run();
EXPECT_EQ(callback_called, 1u);
}

TEST_F(BraveWalletProviderImplUnitTest, AddAndApproveTransaction) {
// This makes sure the state manager gets the chain ID
browser_task_environment_.RunUntilIdle();
bool callback_called = false;
std::string tx_hash;
CreateWallet();
Expand Down Expand Up @@ -579,9 +589,6 @@ TEST_F(BraveWalletProviderImplUnitTest, AddAndApproveTransaction) {
}

TEST_F(BraveWalletProviderImplUnitTest, AddAndApproveTransactionError) {
// This makes sure the state manager gets the chain ID
browser_task_environment_.RunUntilIdle();

// We don't need to check every error type since that is checked by
// eth_tx_controller_unittest but make sure an error type is handled
// correctly.
Expand All @@ -608,9 +615,6 @@ TEST_F(BraveWalletProviderImplUnitTest, AddAndApproveTransactionError) {
}

TEST_F(BraveWalletProviderImplUnitTest, AddAndApproveTransactionNoPermission) {
// This makes sure the state manager gets the chain ID
browser_task_environment_.RunUntilIdle();

bool callback_called = false;
provider()->AddAndApproveTransaction(
mojom::TxData::New("0x06", "0x09184e72a000", "0x0974",
Expand All @@ -629,8 +633,6 @@ TEST_F(BraveWalletProviderImplUnitTest, AddAndApproveTransactionNoPermission) {
}

TEST_F(BraveWalletProviderImplUnitTest, AddAndApprove1559Transaction) {
// This makes sure the state manager gets the chain ID
browser_task_environment_.RunUntilIdle();
bool callback_called = false;
std::string tx_hash;
CreateWallet();
Expand Down Expand Up @@ -680,8 +682,6 @@ TEST_F(BraveWalletProviderImplUnitTest, AddAndApprove1559Transaction) {
}

TEST_F(BraveWalletProviderImplUnitTest, AddAndApprove1559TransactionNoChainId) {
// This makes sure the state manager gets the chain ID
browser_task_environment_.RunUntilIdle();
std::string tx_hash;
CreateWallet();
AddAccount();
Expand Down Expand Up @@ -729,9 +729,6 @@ TEST_F(BraveWalletProviderImplUnitTest, AddAndApprove1559TransactionNoChainId) {
}

TEST_F(BraveWalletProviderImplUnitTest, AddAndApprove1559TransactionError) {
// This makes sure the state manager gets the chain ID
browser_task_environment_.RunUntilIdle();

// We don't need to check every error type since that is checked by
// eth_tx_controller_unittest but make sure an error type is handled
// correctly.
Expand Down Expand Up @@ -762,9 +759,6 @@ TEST_F(BraveWalletProviderImplUnitTest, AddAndApprove1559TransactionError) {

TEST_F(BraveWalletProviderImplUnitTest,
AddAndApprove1559TransactionNoPermission) {
// This makes sure the state manager gets the chain ID
browser_task_environment_.RunUntilIdle();

bool callback_called = false;
provider()->AddAndApprove1559Transaction(
mojom::TxData1559::New(
Expand Down Expand Up @@ -1109,4 +1103,21 @@ TEST_F(BraveWalletProviderImplUnitTest, SignMessageHardware) {
l10n_util::GetStringUTF8(IDS_WALLET_USER_REJECTED_REQUEST));
}

TEST_F(BraveWalletProviderImplUnitTest, SwitchEthereumChain) {
int error = -1;
std::string error_message;

SwitchEthereumChain("0x111", &error, &error_message);
EXPECT_EQ(error, static_cast<int>(ProviderErrors::kInvalidParams));
EXPECT_EQ(error_message,
l10n_util::GetStringUTF8(IDS_WALLET_INVALID_PARAMETERS));

// TODO(darkdh): test positive case along with observer when UI is ready for
// hooked up
SwitchEthereumChain("0x1", &error, &error_message);
EXPECT_EQ(error, static_cast<int>(ProviderErrors::kUserRejectedRequest));
EXPECT_EQ(error_message,
l10n_util::GetStringUTF8(IDS_WALLET_USER_REJECTED_REQUEST));
}

} // namespace brave_wallet
4 changes: 2 additions & 2 deletions browser/brave_wallet/eth_nonce_tracker_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ TEST_F(EthNonceTrackerUnitTest, GetNonce) {
base::BindLambdaForTesting([&](bool success) { run_loop.Quit(); }));
run_loop.Run();

EthTxStateManager tx_state_manager(GetPrefs(), controller.MakeRemote());
EthTxStateManager tx_state_manager(GetPrefs(), &controller);
EthNonceTracker nonce_tracker(&tx_state_manager, &controller);

SetTransactionCount(2);
Expand Down Expand Up @@ -176,7 +176,7 @@ TEST_F(EthNonceTrackerUnitTest, NonceLock) {
brave_wallet::mojom::kLocalhostChainId,
base::BindLambdaForTesting([&](bool success) { run_loop.Quit(); }));
run_loop.Run();
EthTxStateManager tx_state_manager(GetPrefs(), controller.MakeRemote());
EthTxStateManager tx_state_manager(GetPrefs(), &controller);
EthNonceTracker nonce_tracker(&tx_state_manager, &controller);

SetTransactionCount(4);
Expand Down
8 changes: 4 additions & 4 deletions browser/brave_wallet/eth_pending_tx_tracker_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class EthPendingTxTrackerUnitTest : public testing::Test {

TEST_F(EthPendingTxTrackerUnitTest, IsNonceTaken) {
EthJsonRpcController controller(shared_url_loader_factory(), GetPrefs());
EthTxStateManager tx_state_manager(GetPrefs(), controller.MakeRemote());
EthTxStateManager tx_state_manager(GetPrefs(), &controller);
EthNonceTracker nonce_tracker(&tx_state_manager, &controller);
EthPendingTxTracker pending_tx_tracker(&tx_state_manager, &controller,
&nonce_tracker);
Expand All @@ -93,7 +93,7 @@ TEST_F(EthPendingTxTrackerUnitTest, ShouldTxDropped) {
EthAddress addr =
EthAddress::FromHex("0x2f015c60e0be116b1f0cd534704db9c92118fb6a");
EthJsonRpcController controller(shared_url_loader_factory(), GetPrefs());
EthTxStateManager tx_state_manager(GetPrefs(), controller.MakeRemote());
EthTxStateManager tx_state_manager(GetPrefs(), &controller);
EthNonceTracker nonce_tracker(&tx_state_manager, &controller);
EthPendingTxTracker pending_tx_tracker(&tx_state_manager, &controller,
&nonce_tracker);
Expand Down Expand Up @@ -124,7 +124,7 @@ TEST_F(EthPendingTxTrackerUnitTest, ShouldTxDropped) {

TEST_F(EthPendingTxTrackerUnitTest, DropTransaction) {
EthJsonRpcController controller(shared_url_loader_factory(), GetPrefs());
EthTxStateManager tx_state_manager(GetPrefs(), controller.MakeRemote());
EthTxStateManager tx_state_manager(GetPrefs(), &controller);
EthNonceTracker nonce_tracker(&tx_state_manager, &controller);
EthPendingTxTracker pending_tx_tracker(&tx_state_manager, &controller,
&nonce_tracker);
Expand All @@ -143,7 +143,7 @@ TEST_F(EthPendingTxTrackerUnitTest, UpdatePendingTransactions) {
EthAddress addr2 =
EthAddress::FromHex("0x2f015c60e0be116b1f0cd534704db9c92118fb6b");
EthJsonRpcController controller(shared_url_loader_factory(), GetPrefs());
EthTxStateManager tx_state_manager(GetPrefs(), controller.MakeRemote());
EthTxStateManager tx_state_manager(GetPrefs(), &controller);
EthNonceTracker nonce_tracker(&tx_state_manager, &controller);
EthPendingTxTracker pending_tx_tracker(&tx_state_manager, &controller,
&nonce_tracker);
Expand Down
20 changes: 5 additions & 15 deletions browser/brave_wallet/eth_tx_state_manager_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -220,9 +220,7 @@ TEST_F(EthTxStateManagerUnitTest, TxMetaAndValue) {

TEST_F(EthTxStateManagerUnitTest, TxOperations) {
GetPrefs()->ClearPref(kBraveWalletTransactions);
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_->MakeRemote());
// Wait for network info
base::RunLoop().RunUntilIdle();
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_.get());

EthTxStateManager::TxMeta meta;
meta.id = "001";
Expand Down Expand Up @@ -306,9 +304,7 @@ TEST_F(EthTxStateManagerUnitTest, TxOperations) {

TEST_F(EthTxStateManagerUnitTest, GetTransactionsByStatus) {
GetPrefs()->ClearPref(kBraveWalletTransactions);
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_->MakeRemote());
// Wait for network info
base::RunLoop().RunUntilIdle();
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_.get());

auto addr1 =
EthAddress::FromHex("0x3535353535353535353535353535353535353535");
Expand Down Expand Up @@ -386,9 +382,7 @@ TEST_F(EthTxStateManagerUnitTest, GetTransactionsByStatus) {

TEST_F(EthTxStateManagerUnitTest, SwitchNetwork) {
GetPrefs()->ClearPref(kBraveWalletTransactions);
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_->MakeRemote());
// Wait for network info
base::RunLoop().RunUntilIdle();
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_.get());

EthTxStateManager::TxMeta meta;
meta.id = "001";
Expand Down Expand Up @@ -427,9 +421,7 @@ TEST_F(EthTxStateManagerUnitTest, SwitchNetwork) {

TEST_F(EthTxStateManagerUnitTest, RetireOldTxMeta) {
GetPrefs()->ClearPref(kBraveWalletTransactions);
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_->MakeRemote());
// Wait for network info
base::RunLoop().RunUntilIdle();
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_.get());

for (size_t i = 0; i < 20; ++i) {
EthTxStateManager::TxMeta meta;
Expand Down Expand Up @@ -613,9 +605,7 @@ TEST_F(EthTxStateManagerUnitTest, TxMetaToTransactionInfo) {

TEST_F(EthTxStateManagerUnitTest, Observer) {
TestEthTxStateManagerObserver observer;
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_->MakeRemote());
// Wait for network info
base::RunLoop().RunUntilIdle();
EthTxStateManager tx_state_manager(GetPrefs(), rpc_controller_.get());
tx_state_manager.AddObserver(&observer);

EthTxStateManager::TxMeta meta;
Expand Down
Loading