aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts
diff options
context:
space:
mode:
authorPaul Bouchon <mail@bitpshr.net>2018-11-10 09:40:32 +0800
committerDan Finlay <542863+danfinlay@users.noreply.github.com>2018-11-10 10:21:59 +0800
commitc3176248544e3e0019389b1f177cac68087bfe8f (patch)
treec1100bb2ef2949138a48d950b206f85b06ab8948 /app/scripts
parent782c2c14d4278c5228465b39408f5eafb167b86a (diff)
downloadtangerine-wallet-browser-c3176248544e3e0019389b1f177cac68087bfe8f.tar
tangerine-wallet-browser-c3176248544e3e0019389b1f177cac68087bfe8f.tar.gz
tangerine-wallet-browser-c3176248544e3e0019389b1f177cac68087bfe8f.tar.bz2
tangerine-wallet-browser-c3176248544e3e0019389b1f177cac68087bfe8f.tar.lz
tangerine-wallet-browser-c3176248544e3e0019389b1f177cac68087bfe8f.tar.xz
tangerine-wallet-browser-c3176248544e3e0019389b1f177cac68087bfe8f.tar.zst
tangerine-wallet-browser-c3176248544e3e0019389b1f177cac68087bfe8f.zip
EIP-1102: Update publicConfig store concurrently with approval
Diffstat (limited to 'app/scripts')
-rw-r--r--app/scripts/contentscript.js8
-rw-r--r--app/scripts/controllers/provider-approval.js10
-rw-r--r--app/scripts/inpage.js44
3 files changed, 29 insertions, 33 deletions
diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js
index efb14233d..ee38ee3ab 100644
--- a/app/scripts/contentscript.js
+++ b/app/scripts/contentscript.js
@@ -147,11 +147,15 @@ function listenForProviderRequest () {
}
})
- extension.runtime.onMessage.addListener(({ action = '', isApproved, caching, isUnlocked }) => {
+ extension.runtime.onMessage.addListener(({ action = '', isApproved, caching, isUnlocked, selectedAddress }) => {
switch (action) {
case 'approve-provider-request':
isEnabled = true
- window.postMessage({ type: 'ethereumprovider' }, '*')
+ window.postMessage({ type: 'ethereumprovider', selectedAddress }, '*')
+ break
+ case 'approve-legacy-provider-request':
+ isEnabled = true
+ window.postMessage({ type: 'ethereumproviderlegacy', selectedAddress }, '*')
break
case 'reject-provider-request':
window.postMessage({ type: 'ethereumprovider', error: 'User rejected provider access' }, '*')
diff --git a/app/scripts/controllers/provider-approval.js b/app/scripts/controllers/provider-approval.js
index d3b7f6dff..21d7fd22e 100644
--- a/app/scripts/controllers/provider-approval.js
+++ b/app/scripts/controllers/provider-approval.js
@@ -88,7 +88,10 @@ class ProviderApprovalController {
_handlePrivacyRequest () {
const privacyMode = this.preferencesController.getFeatureFlags().privacyMode
if (!privacyMode) {
- this.platform && this.platform.sendMessage({ action: 'approve-provider-request' }, { active: true })
+ this.platform && this.platform.sendMessage({
+ action: 'approve-legacy-provider-request',
+ selectedAddress: this.publicConfigStore.getState().selectedAddress,
+ }, { active: true })
this.publicConfigStore.emit('update', this.publicConfigStore.getState())
}
}
@@ -101,7 +104,10 @@ class ProviderApprovalController {
approveProviderRequest (origin) {
this.closePopup && this.closePopup()
const requests = this.store.getState().providerRequests || []
- this.platform && this.platform.sendMessage({ action: 'approve-provider-request' }, { active: true })
+ this.platform && this.platform.sendMessage({
+ action: 'approve-provider-request',
+ selectedAddress: this.publicConfigStore.getState().selectedAddress,
+ }, { active: true })
this.publicConfigStore.emit('update', this.publicConfigStore.getState())
const providerRequests = requests.filter(request => request.origin !== origin)
this.store.updateState({ providerRequests })
diff --git a/app/scripts/inpage.js b/app/scripts/inpage.js
index cfcf5e364..83392761e 100644
--- a/app/scripts/inpage.js
+++ b/app/scripts/inpage.js
@@ -56,45 +56,31 @@ inpageProvider.setMaxListeners(100)
// set up a listener for when MetaMask is locked
onMessage('metamasksetlocked', () => { isEnabled = false })
+// set up a listener for privacy mode responses
+onMessage('ethereumproviderlegacy', ({ data: { selectedAddress } }) => {
+ isEnabled = true
+ inpageProvider.publicConfigStore.updateState({ selectedAddress })
+}, true)
+
// augment the provider with its enable method
inpageProvider.enable = function ({ force } = {}) {
return new Promise((resolve, reject) => {
- providerHandle = ({ data: { error } }) => {
+ providerHandle = ({ data: { error, selectedAddress } }) => {
if (typeof error !== 'undefined') {
reject(error)
} else {
window.removeEventListener('message', providerHandle)
- // wait for the publicConfig store to populate with an account
- const publicConfig = new Promise((resolve) => {
- const { selectedAddress } = inpageProvider.publicConfigStore.getState()
- inpageProvider._metamask.isUnlocked().then(unlocked => {
- if (!unlocked || selectedAddress) {
- resolve()
- } else {
- inpageProvider.publicConfigStore.on('update', ({ selectedAddress }) => {
- selectedAddress && resolve()
- })
- }
- })
- })
+ inpageProvider.publicConfigStore.updateState({ selectedAddress })
// wait for the background to update with an account
- const ethAccounts = new Promise((resolveAccounts, rejectAccounts) => {
- inpageProvider.sendAsync({ method: 'eth_accounts', params: [] }, (error, response) => {
- if (error) {
- rejectAccounts(error)
- } else {
- resolveAccounts(response.result)
- }
- })
- })
-
- Promise.all([ethAccounts, publicConfig])
- .then(([selectedAddress]) => {
+ inpageProvider.sendAsync({ method: 'eth_accounts', params: [] }, (error, response) => {
+ if (error) {
+ reject(error)
+ } else {
isEnabled = true
- resolve(selectedAddress)
- })
- .catch(reject)
+ resolve(response.result)
+ }
+ })
}
}
onMessage('ethereumprovider', providerHandle, true)