aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbitpshr <mail@bitpshr.net>2018-10-30 04:55:13 +0800
committerDan Finlay <542863+danfinlay@users.noreply.github.com>2018-11-06 07:07:09 +0800
commitba40fcbcb43c5adcb3a961afd4050cdb2025b7a6 (patch)
tree0e3d1fa0c609153cb0ca66dd89e9c9c3377672a4
parentf02e18dd80672a0b7440256cb7946feabf907ee1 (diff)
downloadtangerine-wallet-browser-ba40fcbcb43c5adcb3a961afd4050cdb2025b7a6.tar
tangerine-wallet-browser-ba40fcbcb43c5adcb3a961afd4050cdb2025b7a6.tar.gz
tangerine-wallet-browser-ba40fcbcb43c5adcb3a961afd4050cdb2025b7a6.tar.bz2
tangerine-wallet-browser-ba40fcbcb43c5adcb3a961afd4050cdb2025b7a6.tar.lz
tangerine-wallet-browser-ba40fcbcb43c5adcb3a961afd4050cdb2025b7a6.tar.xz
tangerine-wallet-browser-ba40fcbcb43c5adcb3a961afd4050cdb2025b7a6.tar.zst
tangerine-wallet-browser-ba40fcbcb43c5adcb3a961afd4050cdb2025b7a6.zip
Handle logout gracefully
-rw-r--r--app/scripts/contentscript.js21
-rw-r--r--app/scripts/controllers/provider-approval.js25
-rw-r--r--app/scripts/inpage.js14
-rw-r--r--app/scripts/metamask-controller.js7
4 files changed, 42 insertions, 25 deletions
diff --git a/app/scripts/contentscript.js b/app/scripts/contentscript.js
index fdc04ba1b..0244f6fa0 100644
--- a/app/scripts/contentscript.js
+++ b/app/scripts/contentscript.js
@@ -129,21 +129,21 @@ function listenForProviderRequest () {
origin: source.location.hostname,
})
break
- case 'ETHEREUM_QUERY_STATUS':
+ case 'ETHEREUM_IS_APPROVED':
extension.runtime.sendMessage({
- action: 'init-status-request',
+ action: 'init-is-approved',
origin: source.location.hostname,
})
break
- case 'METAMASK_UNLOCK_STATUS':
+ case 'METAMASK_IS_UNLOCKED':
extension.runtime.sendMessage({
- action: 'init-unlock-request',
+ action: 'init-is-unlocked',
})
break
}
})
- extension.runtime.onMessage.addListener(({ action, isEnabled, isUnlocked }) => {
+ extension.runtime.onMessage.addListener(({ action, isEnabled, isApproved, isUnlocked }) => {
if (!action) { return }
switch (action) {
case 'approve-provider-request':
@@ -153,11 +153,14 @@ function listenForProviderRequest () {
case 'reject-provider-request':
injectScript(`window.dispatchEvent(new CustomEvent('ethereumprovider', { detail: { error: 'User rejected provider access' }}))`)
break
- case 'answer-status-request':
- injectScript(`window.dispatchEvent(new CustomEvent('ethereumproviderstatus', { detail: { isEnabled: ${isEnabled}}}))`)
+ case 'answer-is-approved':
+ injectScript(`window.dispatchEvent(new CustomEvent('ethereumisapproved', { detail: { isApproved: ${isApproved}}}))`)
break
- case 'answer-unlock-request':
- injectScript(`window.dispatchEvent(new CustomEvent('metamaskunlockstatus', { detail: { isUnlocked: ${isUnlocked}}}))`)
+ case 'answer-is-unlocked':
+ injectScript(`window.dispatchEvent(new CustomEvent('metamaskisunlocked', { detail: { isUnlocked: ${isUnlocked}}}))`)
+ break
+ case 'metamask-set-locked':
+ injectScript(`window.dispatchEvent(new CustomEvent('metamasksetlocked', { detail: {}}))`)
break
}
})
diff --git a/app/scripts/controllers/provider-approval.js b/app/scripts/controllers/provider-approval.js
index fa2fb2cf8..3af165438 100644
--- a/app/scripts/controllers/provider-approval.js
+++ b/app/scripts/controllers/provider-approval.js
@@ -24,11 +24,11 @@ class ProviderApprovalController {
case 'init-provider-request':
this.handleProviderRequest(origin)
break
- case 'init-status-request':
- this.handleProviderStatusRequest(origin)
+ case 'init-is-approved':
+ this.handleIsApproved(origin)
break
- case 'init-unlock-request':
- this.handleUnlockRequest()
+ case 'init-is-unlocked':
+ this.handleIsUnlocked()
break
case 'init-privacy-request':
this.handlePrivacyStatusRequest()
@@ -44,7 +44,8 @@ class ProviderApprovalController {
*/
handleProviderRequest (origin) {
this.store.updateState({ providerRequests: [{ origin }] })
- if (this.isApproved(origin)) {
+ const isUnlocked = this.keyringController.memStore.getState().isUnlocked
+ if (isUnlocked && this.isApproved(origin)) {
this.approveProviderRequest(origin)
return
}
@@ -56,14 +57,14 @@ class ProviderApprovalController {
*
* @param {string} origin - Origin of the window requesting provider status
*/
- async handleProviderStatusRequest (origin) {
- const isEnabled = this.isApproved(origin)
- this.platform && this.platform.sendMessage({ action: 'answer-status-request', isEnabled }, { active: true })
+ async handleIsApproved (origin) {
+ const isApproved = this.isApproved(origin)
+ this.platform && this.platform.sendMessage({ action: 'answer-is-approved', isApproved }, { active: true })
}
- handleUnlockRequest () {
+ handleIsUnlocked () {
const isUnlocked = this.keyringController.memStore.getState().isUnlocked
- this.platform && this.platform.sendMessage({ action: 'answer-unlock-request', isUnlocked }, { active: true })
+ this.platform && this.platform.sendMessage({ action: 'answer-is-unlocked', isUnlocked }, { active: true })
}
handlePrivacyStatusRequest () {
@@ -119,6 +120,10 @@ class ProviderApprovalController {
const privacyMode = this.preferencesController.getFeatureFlags().privacyMode
return !privacyMode || this.approvedOrigins[origin]
}
+
+ setLocked () {
+ this.platform.sendMessage({ action: 'metamask-set-locked' })
+ }
}
module.exports = ProviderApprovalController
diff --git a/app/scripts/inpage.js b/app/scripts/inpage.js
index cadc61727..49a18c5e9 100644
--- a/app/scripts/inpage.js
+++ b/app/scripts/inpage.js
@@ -33,6 +33,10 @@ inpageProvider.setMaxListeners(100)
var isEnabled = false
var warned = false
+window.addEventListener('metamasksetlocked', () => {
+ isEnabled = false
+})
+
// augment the provider with its enable method
inpageProvider.enable = function () {
return new Promise((resolve, reject) => {
@@ -91,14 +95,14 @@ inpageProvider._metamask = new Proxy({
*/
isApproved: function() {
return new Promise((resolve, reject) => {
- window.addEventListener('ethereumproviderstatus', ({ detail }) => {
+ window.addEventListener('ethereumisapproved', ({ detail }) => {
if (typeof detail.error !== 'undefined') {
reject(detail.error)
} else {
- resolve(!!detail.isEnabled)
+ resolve(!!detail.isApproved)
}
})
- window.postMessage({ type: 'ETHEREUM_QUERY_STATUS' }, '*')
+ window.postMessage({ type: 'ETHEREUM_IS_APPROVED' }, '*')
})
},
@@ -109,14 +113,14 @@ inpageProvider._metamask = new Proxy({
*/
isUnlocked: function () {
return new Promise((resolve, reject) => {
- window.addEventListener('metamaskunlockstatus', ({ detail }) => {
+ window.addEventListener('metamaskisunlocked', ({ detail }) => {
if (typeof detail.error !== 'undefined') {
reject(detail.error)
} else {
resolve(!!detail.isUnlocked)
}
})
- window.postMessage({ type: 'METAMASK_UNLOCK_STATUS' }, '*')
+ window.postMessage({ type: 'METAMASK_IS_UNLOCKED' }, '*')
})
},
}, {
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 8930a3f2d..bf1df7ff5 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -422,7 +422,7 @@ module.exports = class MetamaskController extends EventEmitter {
setAddressBook: nodeify(addressBookController.setAddressBook, addressBookController),
// KeyringController
- setLocked: nodeify(keyringController.setLocked, keyringController),
+ setLocked: nodeify(this.setLocked, this),
createNewVaultAndKeychain: nodeify(this.createNewVaultAndKeychain, this),
createNewVaultAndRestore: nodeify(this.createNewVaultAndRestore, this),
addNewKeyring: nodeify(keyringController.addNewKeyring, keyringController),
@@ -1576,4 +1576,9 @@ module.exports = class MetamaskController extends EventEmitter {
whitelistPhishingDomain (hostname) {
return this.blacklistController.whitelistDomain(hostname)
}
+
+ setLocked() {
+ this.providerApprovalController.setLocked()
+ return this.keyringController.setLocked()
+ }
}