Skip to content

Commit

Permalink
Remove window.phantom alias
Browse files Browse the repository at this point in the history
  • Loading branch information
bsclifton committed Aug 2, 2022
1 parent 1a0c319 commit ad9fa96
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 82 deletions.
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 @@ -593,41 +594,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::SetDefaultSolanaWallet(
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::SetDefaultSolanaWallet(
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::SetDefaultSolanaWallet(
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::SetDefaultSolanaWallet(
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 @@ -665,28 +654,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
24 changes: 23 additions & 1 deletion components/brave_wallet/resources/solana_provider.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
// you can obtain one at http://mozilla.org/MPL/2.0/.

(function () {
if (!window.braveSolana) {
if (!window.braveSolana || !window.solana) {
return
}
const EventEmitter = require('events')
Expand All @@ -31,4 +31,26 @@
writable: false
}
})
Object.defineProperties(window.solana, {
on: {
value: SolanaEventEmitter.on,
writable: false
},
off: {
value: SolanaEventEmitter.off,
writable: false
},
emit: {
value: SolanaEventEmitter.emit,
writable: false
},
removeListener: {
value: SolanaEventEmitter.removeListener,
writable: false
},
removeAllListeners: {
value: SolanaEventEmitter.removeAllListeners,
writable: false
}
})
})()

0 comments on commit ad9fa96

Please sign in to comment.