Add more tests around signing for all methods

This commit is contained in:
Brian R. Bondy
2021-11-02 14:39:56 -04:00
parent 9fe658e536
commit 2f2dbc19cc
3 changed files with 153 additions and 61 deletions
@@ -103,6 +103,9 @@ class BraveWalletSignMessageBrowserTest : public InProcessBrowserTest {
protected:
BraveWalletService* brave_wallet_service_;
std::vector<std::string> methods_{"signMessage", "signMessageViaSend",
"signMessageViaSend2",
"signMessageViaSendAsync"};
private:
base::test::ScopedFeatureList scoped_feature_list_;
@@ -113,28 +116,34 @@ class BraveWalletSignMessageBrowserTest : public InProcessBrowserTest {
IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, UserApprovedRequest) {
RestoreWallet();
GURL url = https_server()->GetURL("a.com", "/sign_message.html");
ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
WaitForLoadStop(web_contents());
EXPECT_TRUE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
UserGrantPermission(true);
ASSERT_TRUE(ExecJs(web_contents(),
"signMessage('0x084DCb94038af1715963F149079cE011C4B22961',"
" '0xdeadbeef')"));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
brave_wallet_service_->NotifySignMessageRequestProcessed(true, 0);
EXPECT_EQ(
EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
"0x670651c072cac2a3f93cb862a17378f6849c66b4516e5d5a30210868a2840e2a6a345a"
"4f84615c591c1a47260e798babe8f2f0cce03a09dac09df79c55d8e4401b");
size_t request_index = 0;
for (const std::string& method : methods_) {
ASSERT_TRUE(ExecJs(
web_contents(),
base::StringPrintf("%s('0x084DCb94038af1715963F149079cE011C4B22961',"
" '0xdeadbeef')",
method.c_str())));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
brave_wallet_service_->NotifySignMessageRequestProcessed(true,
request_index++);
EXPECT_EQ(EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
"0x670651c072cac2a3f93cb862a17378f6849c66b4516e5d5a30210868a2840e"
"2a6a345a"
"4f84615c591c1a47260e798babe8f2f0cce03a09dac09df79c55d8e4401b");
}
}
IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, UserRejectedRequest) {
@@ -147,22 +156,29 @@ IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, UserRejectedRequest) {
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
UserGrantPermission(true);
ASSERT_TRUE(ExecJs(web_contents(),
"signMessage('0x084DCb94038af1715963F149079cE011C4B22961',"
" '0xdeadbeef')"));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
brave_wallet_service_->NotifySignMessageRequestProcessed(false, 0);
EXPECT_EQ(EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
l10n_util::GetStringUTF8(IDS_WALLET_USER_REJECTED_REQUEST));
size_t request_index = 0;
for (const std::string& method : methods_) {
ASSERT_TRUE(ExecJs(
web_contents(),
base::StringPrintf("%s('0x084DCb94038af1715963F149079cE011C4B22961',"
" '0xdeadbeef')",
method.c_str())));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_TRUE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
brave_wallet_service_->NotifySignMessageRequestProcessed(false,
request_index++);
EXPECT_EQ(EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
l10n_util::GetStringUTF8(IDS_WALLET_USER_REJECTED_REQUEST));
}
}
IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, InvalidAddress) {
IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, UnknownAddress) {
RestoreWallet();
GURL url = https_server()->GetURL("a.com", "/sign_message.html");
ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
@@ -172,21 +188,52 @@ IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, InvalidAddress) {
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
UserGrantPermission(true);
ASSERT_TRUE(ExecJs(web_contents(),
"signMessage('0x6b1Bd828cF8CE051B6282dCFEf6863746E2E1909',"
" '0xdeadbeef')"));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_FALSE(
for (const std::string& method : methods_) {
ASSERT_TRUE(ExecJs(
web_contents(),
base::StringPrintf("%s('0x6b1Bd828cF8CE051B6282dCFEf6863746E2E1909',"
" '0xdeadbeef')",
method.c_str())));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_FALSE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
EXPECT_EQ(EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
l10n_util::GetStringFUTF8(
IDS_WALLET_ETH_SIGN_NOT_AUTHED,
base::ASCIIToUTF16(std::string(
"0x6b1Bd828cF8CE051B6282dCFEf6863746E2E1909"))));
}
}
IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, InvalidAddressParam) {
RestoreWallet();
GURL url = https_server()->GetURL("a.com", "/sign_message.html");
ASSERT_TRUE(ui_test_utils::NavigateToURL(browser(), url));
WaitForLoadStop(web_contents());
EXPECT_TRUE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
EXPECT_EQ(EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
l10n_util::GetStringFUTF8(
IDS_WALLET_ETH_SIGN_NOT_AUTHED,
base::ASCIIToUTF16(std::string(
"0x6b1Bd828cF8CE051B6282dCFEf6863746E2E1909"))));
UserGrantPermission(true);
for (const std::string& method : methods_) {
ASSERT_TRUE(ExecJs(web_contents(), base::StringPrintf("%s(null,"
" '0xdeadbeef')",
method.c_str())));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_FALSE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
EXPECT_EQ(EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
// This one is not localized
"Generic processing error");
}
}
IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, NoEthPermission) {
@@ -199,21 +246,25 @@ IN_PROC_BROWSER_TEST_F(BraveWalletSignMessageBrowserTest, NoEthPermission) {
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
UserGrantPermission(false);
ASSERT_TRUE(ExecJs(web_contents(),
"signMessage('0x084DCb94038af1715963F149079cE011C4B22961',"
" '0xdeadbeef')"));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_FALSE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
EXPECT_EQ(EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
l10n_util::GetStringFUTF8(
IDS_WALLET_ETH_SIGN_NOT_AUTHED,
base::ASCIIToUTF16(std::string(
"0x084DCb94038af1715963F149079cE011C4B22961"))));
for (const std::string& method : methods_) {
ASSERT_TRUE(ExecJs(
web_contents(),
base::StringPrintf("%s('0x084DCb94038af1715963F149079cE011C4B22961',"
" '0xdeadbeef')",
method.c_str())));
// Wait for BraveWalletProviderImpl::ContinueSignMessage
base::RunLoop().RunUntilIdle();
EXPECT_FALSE(
brave_wallet::BraveWalletTabHelper::FromWebContents(web_contents())
->IsShowingBubble());
EXPECT_EQ(EvalJs(web_contents(), "getSignMessageResult()",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY)
.ExtractString(),
l10n_util::GetStringFUTF8(
IDS_WALLET_ETH_SIGN_NOT_AUTHED,
base::ASCIIToUTF16(std::string(
"0x084DCb94038af1715963F149079cE011C4B22961"))));
}
}
} // namespace brave_wallet
@@ -617,9 +617,8 @@ void BraveWalletJSHandler::SendAsync(gin::Arguments* args) {
isolate, true)) {
base::Value id;
std::string input_json;
input_value =
content::V8ValueConverter::Create()->FromV8Value(
input, isolate->GetCurrentContext());
input_value = content::V8ValueConverter::Create()->FromV8Value(
input, isolate->GetCurrentContext());
if (base::JSONWriter::Write(*input_value, &input_json)) {
std::string method;
ALLOW_UNUSED_LOCAL(
+42
View File
@@ -24,8 +24,50 @@
})
}
function signMessageViaSend(address, message) {
window.ethereum.send({
id: '1',
method: 'eth_sign',
params: [address, message]
}, (err, result) => {
if (err && err.error) {
signMessageResult = err.error.message
return
}
if (result && result.result) {
signMessageResult = result.result
}
})
}
function signMessageViaSend2(address, message) {
window.ethereum.send('eth_sign', [address, message]).then(result => {
signMessageResult = result.result
}).catch(error => {
signMessageResult = error.error.message
})
}
function signMessageViaSendAsync(address, message) {
window.ethereum.sendAsync({
id: '1',
method: 'eth_sign',
params: [address, message]
}, (err, result) => {
if (err && err.error) {
signMessageResult = err.error.message
return
}
if (result && result.result) {
signMessageResult = result.result
}
})
}
function getSignMessageResult() {
window.domAutomationController.send(signMessageResult)
// Reset signMessageResult
signMessageResult = undefined
}
</script>