Skip to content

Commit 18223e1

Browse files
authoredMar 7, 2024
Merge pull request #1419 from crypto-com/fix/isolation
feat: enable contextIsolation in DAppBrowser
2 parents 7390583 + eddee7a commit 18223e1

File tree

4 files changed

+127
-19
lines changed

4 files changed

+127
-19
lines changed
 

‎package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"main": "build/electron/main.js",
1010
"private": true,
1111
"scripts": {
12-
"run-audit": "yarn audit-ci --high -a 1094574 1094894",
12+
"run-audit": "yarn audit-ci --high -a 1094574 1096494 1096640",
1313
"start": "node scripts/start.js",
1414
"build": "cross-env NODE_OPTIONS=--max_old_space_size=8192 && yarn clean-builds && node scripts/build.js",
1515
"test": "node scripts/test.js --watchAll=false",

‎src/pages/dapp/browser/DappBrowser.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ const DappBrowser = forwardRef<DappBrowserRef, DappBrowserProps>((props: DappBro
120120
errorCallback: Function;
121121
}>();
122122

123+
useEffect(() => {
124+
if (isDOMReady && cronosAsset) {
125+
webviewRef.current?.send('getAddress', [cronosAsset.address!]);
126+
}
127+
}, [cronosAsset, isDOMReady]);
128+
123129
const onRequestAddress = useRefCallback((onSuccess: (address: string) => void) => {
124130
onSuccess(cronosAsset?.address!);
125131
});
@@ -425,7 +431,7 @@ const DappBrowser = forwardRef<DappBrowserRef, DappBrowserProps>((props: DappBro
425431
preload={ProviderPreloadScriptPath}
426432
ref={webviewRef}
427433
allowpopups={'true' as any}
428-
webpreferences="contextIsolation=false, nodeIntegration=false, javascript=yes, allowpopup=yes"
434+
webpreferences="contextIsolation=true, sandbox=true, nodeIntegration=false, javascript=yes, allowpopup=yes"
429435
useragent={window.navigator.userAgent.replace(
430436
'chain-desktop-wallet',
431437
'Desktop Wallet Build',

‎src/pages/dapp/browser/preload.js

+105-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
// !! if you change the location of this file, remember to change `extraResources` in package.json as well !!
22
/* eslint-disable max-classes-per-file */
33
/* eslint-disable */
4-
const { Buffer } = require('buffer');
5-
const { ipcRenderer } = require('electron');
4+
const { ipcRenderer, contextBridge } = require('electron');
65
const EventEmitter = require('events');
76

87
class RPCServer {
@@ -568,4 +567,107 @@ const providerConfig = {
568567
rpcUrl: 'https://evm.cronos.org',
569568
isDebug: true,
570569
};
571-
window.ethereum = new window.desktopWallet.Provider(providerConfig);
570+
571+
const provider = new Web3Provider(providerConfig);
572+
573+
ipcRenderer.on('getAddress', (event, args) => {
574+
const address = args[0];
575+
576+
contextBridge.exposeInMainWorld('ethereum', {
577+
address,
578+
ready: true,
579+
isDesktopWallet: true,
580+
setConfig: (config, emitChanges) => {
581+
provider.setConfig(config, emitChanges);
582+
},
583+
request: payload => {
584+
return provider.request(payload);
585+
},
586+
setAddress: address => {
587+
provider.setAddress(address);
588+
},
589+
sendResponse: (id, result) => {
590+
provider.sendResponse(id, result);
591+
},
592+
sendError: (id, error) => {
593+
provider.sendError(id, error);
594+
},
595+
eth_accounts: () => {
596+
return provider.eth_accounts();
597+
},
598+
eth_coinbase: () => {
599+
return provider.eth_coinbase();
600+
},
601+
net_version: () => {
602+
return provider.net_version();
603+
},
604+
eth_chainId: () => {
605+
return provider.eth_chainId();
606+
},
607+
eth_sign: payload => {
608+
return provider.eth_sign(payload);
609+
},
610+
personal_sign: payload => {
611+
return provider.personal_sign(payload);
612+
},
613+
personal_ecRecover: payload => {
614+
return provider.personal_ecRecover(payload);
615+
},
616+
eth_signTypedData: (payload, useV4) => {
617+
return provider.eth_signTypedData(payload, useV4);
618+
},
619+
eth_sendTransaction: payload => {
620+
return provider.eth_sendTransaction(payload);
621+
},
622+
eth_requestAccounts: payload => {
623+
return provider.eth_requestAccounts(payload);
624+
},
625+
wallet_watchAsset: payload => {
626+
return provider.wallet_watchAsset(payload);
627+
},
628+
wallet_addEthereumChain: payload => {
629+
return provider.wallet_addEthereumChain(payload);
630+
},
631+
wallet_switchEthereumChain: payload => {
632+
return provider.wallet_switchEthereumChain(payload);
633+
},
634+
isConnected: () => {
635+
return provider.isConnected();
636+
},
637+
enable: () => {
638+
return provider.enable();
639+
},
640+
send: payload => {
641+
return provider.send(payload);
642+
},
643+
sendAsync: (payload, callback) => {
644+
return provider.sendAsync(payload, callback);
645+
},
646+
addEventListener: (event, callback) => {
647+
provider.addListener(event, callback);
648+
},
649+
on: (event, callback) => {
650+
provider.on(event, callback);
651+
},
652+
once: (event, callback) => {
653+
provider.once(event, callback);
654+
},
655+
removeListener: (event, callback) => {
656+
provider.removeListener(event, callback);
657+
},
658+
removeAllListeners: event => {
659+
provider.removeAllListeners(event);
660+
},
661+
emit: (event, ...args) => {
662+
provider.emit(event, ...args);
663+
},
664+
})
665+
contextBridge.exposeInMainWorld('desktopWallet', {
666+
Provider: Web3Provider,
667+
postMessage: arg => {
668+
ipcRenderer.sendToHost('dapp', arg);
669+
},
670+
})
671+
672+
})
673+

‎yarn.lock

+14-14
Original file line numberDiff line numberDiff line change
@@ -5547,9 +5547,9 @@ asap@~2.0.6:
55475547
integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
55485548

55495549
asar@^3.1.0:
5550-
version "3.1.0"
5551-
resolved "https://registry.yarnpkg.com/asar/-/asar-3.1.0.tgz#70b0509449fe3daccc63beb4d3c7d2e24d3c6473"
5552-
integrity sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ==
5550+
version "3.2.0"
5551+
resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221"
5552+
integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==
55535553
dependencies:
55545554
chromium-pickle-js "^0.2.0"
55555555
commander "^5.0.0"
@@ -6374,13 +6374,13 @@ buffer-crc32@~0.2.3:
63746374

63756375
buffer-equal@1.0.0:
63766376
version "1.0.0"
6377-
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz"
6378-
integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74=
6377+
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
6378+
integrity sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==
63796379

63806380
buffer-fill@^1.0.0:
63816381
version "1.0.0"
63826382
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
6383-
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
6383+
integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==
63846384

63856385
buffer-from@^1.0.0:
63866386
version "1.1.2"
@@ -7036,8 +7036,8 @@ colorette@^1.2.1, colorette@^1.2.2:
70367036

70377037
colors@1.0.3:
70387038
version "1.0.3"
7039-
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz"
7040-
integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=
7039+
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
7040+
integrity sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==
70417041

70427042
combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
70437043
version "1.0.8"
@@ -7068,8 +7068,8 @@ command-line-usage@^6.1.0:
70687068

70697069
commander@2.9.0:
70707070
version "2.9.0"
7071-
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz"
7072-
integrity sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=
7071+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
7072+
integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==
70737073
dependencies:
70747074
graceful-readlink ">= 1.0.0"
70757075

@@ -8335,7 +8335,7 @@ diffie-hellman@^5.0.0:
83358335

83368336
dir-compare@^2.4.0:
83378337
version "2.4.0"
8338-
resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz"
8338+
resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-2.4.0.tgz#785c41dc5f645b34343a4eafc50b79bac7f11631"
83398339
integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==
83408340
dependencies:
83418341
buffer-equal "1.0.0"
@@ -8731,7 +8731,7 @@ emoji-regex@^8.0.0:
87318731

87328732
emoji-regex@^9.0.0:
87338733
version "9.2.2"
8734-
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz"
8734+
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
87358735
integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
87368736

87378737
emojis-list@^3.0.0:
@@ -10669,8 +10669,8 @@ graceful-fs@^4.2.9:
1066910669

1067010670
"graceful-readlink@>= 1.0.0":
1067110671
version "1.0.1"
10672-
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz"
10673-
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
10672+
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
10673+
integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==
1067410674

1067510675
growl@1.10.5:
1067610676
version "1.10.5"

0 commit comments

Comments
 (0)