Skip to content
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

Revert "Add window.phantom.solana alias" (uplift to 1.42.x) #14433

Merged
merged 1 commit into from
Aug 2, 2022
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
89 changes: 35 additions & 54 deletions browser/brave_wallet/solana_provider_renderer_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ constexpr char OnAccountChangedScript[] =

constexpr char CheckSolanaProviderScript[] =
"window.domAutomationController.send(!!window.braveSolana)";
constexpr char OverwriteScript[] = "window.solana = ['test'];window.solana[0]";

std::string VectorToArrayString(const std::vector<uint8_t>& vec) {
std::string result;
Expand Down Expand Up @@ -600,41 +601,29 @@ IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, DefaultWallet) {
}

IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, ExtensionOverwrite) {
constexpr char OverwriteScript[] = "window.%s = ['test'];window.%s[0]";
for (const std::string& provider : {"solana", "phantom.solana"}) {
brave_wallet::SetDefaultWallet(
browser()->profile()->GetPrefs(),
brave_wallet::mojom::DefaultWallet::BraveWallet);
ReloadAndWaitForLoadStop(browser());
// can't be overwritten
EXPECT_EQ(
content::EvalJs(web_contents(browser()),
base::StringPrintf(OverwriteScript, provider.c_str(),
provider.c_str()))
.error,
"");
ASSERT_TRUE(content::EvalJs(
web_contents(browser()),
base::StringPrintf("window.%s.isPhantom", provider.c_str()))
.ExtractBool());

brave_wallet::SetDefaultWallet(
browser()->profile()->GetPrefs(),
brave_wallet::mojom::DefaultWallet::BraveWalletPreferExtension);
ReloadAndWaitForLoadStop(browser());
// overwritten
EXPECT_EQ(
content::EvalJs(web_contents(browser()),
base::StringPrintf(OverwriteScript, provider.c_str(),
provider.c_str()))
.ExtractString(),
"test");
}
brave_wallet::SetDefaultWallet(
browser()->profile()->GetPrefs(),
brave_wallet::mojom::DefaultWallet::BraveWallet);
ReloadAndWaitForLoadStop(browser());
// can't be overwritten
EXPECT_EQ(content::EvalJs(web_contents(browser()), OverwriteScript).error,
"");
ASSERT_TRUE(
content::EvalJs(web_contents(browser()), "window.solana.isPhantom")
.ExtractBool());

brave_wallet::SetDefaultWallet(
browser()->profile()->GetPrefs(),
brave_wallet::mojom::DefaultWallet::BraveWalletPreferExtension);
ReloadAndWaitForLoadStop(browser());
// overwritten
EXPECT_EQ(
content::EvalJs(web_contents(browser()), OverwriteScript).ExtractString(),
"test");
}

IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, NonWritable) {
for (const std::string& provider :
{"braveSolana", "solana", "phantom.solana"}) {
for (const std::string& provider : {"braveSolana", "solana"}) {
// window.braveSolana.* and window.solana.* (methods)
for (const std::string& method :
{"on", "off", "emit", "removeListener", "removeAllListeners",
Expand Down Expand Up @@ -672,28 +661,20 @@ IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, NonWritable) {
}

IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, IsPhantomAndIsBraveWallet) {
for (const std::string& provider :
{"braveSolana", "solana", "phantom.solana"}) {
ASSERT_TRUE(ExecJs(web_contents(browser()),
base::StringPrintf(R"(window.%s.isPhantom = 123;
window.%s.isBraveWallet = 456)",
provider.c_str(), provider.c_str())));
// Both are non-writable
auto result1 = EvalJs(
web_contents(browser()),
base::StringPrintf(
R"(window.domAutomationController.send(window.%s.isPhantom))",
provider.c_str()),
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY);
EXPECT_EQ(base::Value(true), result1.value);
auto result2 = EvalJs(
web_contents(browser()),
base::StringPrintf(
R"(window.domAutomationController.send(window.%s.isBraveWallet))",
provider.c_str()),
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY);
EXPECT_EQ(base::Value(true), result2.value);
}
ASSERT_TRUE(ExecJs(web_contents(browser()),
"window.braveSolana.isPhantom = 123; "
"window.braveSolana.isBraveWallet = 456"));
// Both are non-writable
auto result1 = EvalJs(
web_contents(browser()),
"window.domAutomationController.send(window.braveSolana.isPhantom)",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY);
EXPECT_EQ(base::Value(true), result1.value);
auto result2 = EvalJs(
web_contents(browser()),
"window.domAutomationController.send(window.braveSolana.isBraveWallet)",
content::EXECUTE_SCRIPT_USE_MANUAL_REPLY);
EXPECT_EQ(base::Value(true), result2.value);
}

IN_PROC_BROWSER_TEST_F(SolanaProviderRendererTest, Connect) {
Expand Down
27 changes: 0 additions & 27 deletions components/brave_wallet/renderer/js_solana_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -142,33 +142,6 @@ void JSSolanaProvider::Install(bool allow_overwrite_window_solana,
"because it already exists!"));
}

// window.phantom.solana is the latest Phantom provider object used in
// wallet-adapter, we have to use it because not every sites using
// wallet-dapter list us by including BraveWalletAdapter.
v8::Local<v8::Value> phantom_value;
if (!global->Get(context, gin::StringToV8(isolate, "phantom"))
.ToLocal(&phantom_value) ||
!phantom_value->IsObject()) {
v8::Local<v8::Object> phantom_obj = v8::Object::New(isolate);
if (!allow_overwrite_window_solana) {
SetProviderNonWritable(context, phantom_obj, provider_value,
gin::StringToV8(isolate, "solana"), true);
SetProviderNonWritable(context, global, phantom_obj,
gin::StringToV8(isolate, "phantom"), true);
} else {
phantom_obj
->Set(context, gin::StringToSymbol(isolate, "solana"), provider_value)
.Check();
global->Set(context, gin::StringToSymbol(isolate, "phantom"), phantom_obj)
.Check();
}
} else {
render_frame->GetWebFrame()->AddMessageToConsole(
blink::WebConsoleMessage(blink::mojom::ConsoleMessageLevel::kWarning,
"Brave Wallet will not insert window.phantom "
"because it already exists!"));
}

// Non-function properties are readonly guaranteed by gin::Wrappable
for (const std::string& method :
{"connect", "disconnect", "signAndSendTransaction", "signMessage",
Expand Down