diff options
author | Paul Bouchon <mail@bitpshr.net> | 2019-01-31 02:27:33 +0800 |
---|---|---|
committer | Dan Finlay <542863+danfinlay@users.noreply.github.com> | 2019-01-31 02:27:33 +0800 |
commit | db776b5a02187d4545e3fb2b9dfd33d838145af7 (patch) | |
tree | c657d478d32005b80c8e6aa5e7ec45b075e8e954 /app/scripts | |
parent | b2813d1113b75df09e9bb9f0781f65a2544adcfb (diff) | |
download | tangerine-wallet-browser-db776b5a02187d4545e3fb2b9dfd33d838145af7.tar tangerine-wallet-browser-db776b5a02187d4545e3fb2b9dfd33d838145af7.tar.gz tangerine-wallet-browser-db776b5a02187d4545e3fb2b9dfd33d838145af7.tar.bz2 tangerine-wallet-browser-db776b5a02187d4545e3fb2b9dfd33d838145af7.tar.lz tangerine-wallet-browser-db776b5a02187d4545e3fb2b9dfd33d838145af7.tar.xz tangerine-wallet-browser-db776b5a02187d4545e3fb2b9dfd33d838145af7.tar.zst tangerine-wallet-browser-db776b5a02187d4545e3fb2b9dfd33d838145af7.zip |
EIP-1102 updates (#6006)
* Update privacy notice
* Respond to 1102 messages using tab ID
Diffstat (limited to 'app/scripts')
-rw-r--r-- | app/scripts/controllers/provider-approval.js | 46 | ||||
-rw-r--r-- | app/scripts/platforms/extension.js | 6 |
2 files changed, 28 insertions, 24 deletions
diff --git a/app/scripts/controllers/provider-approval.js b/app/scripts/controllers/provider-approval.js index 53172c069..b8cf04341 100644 --- a/app/scripts/controllers/provider-approval.js +++ b/app/scripts/controllers/provider-approval.js @@ -27,19 +27,19 @@ class ProviderApprovalController { }) if (platform && platform.addMessageListener) { - platform.addMessageListener(({ action = '', force, origin, siteTitle, siteImage }) => { + platform.addMessageListener(({ action = '', force, origin, siteTitle, siteImage }, { tab }) => { switch (action) { case 'init-provider-request': - this._handleProviderRequest(origin, siteTitle, siteImage, force) + this._handleProviderRequest(origin, siteTitle, siteImage, force, tab.id) break case 'init-is-approved': - this._handleIsApproved(origin) + this._handleIsApproved(origin, tab.id) break case 'init-is-unlocked': - this._handleIsUnlocked() + this._handleIsUnlocked(tab.id) break case 'init-privacy-request': - this._handlePrivacyRequest() + this._handlePrivacyRequest(tab.id) break } }) @@ -53,11 +53,11 @@ class ProviderApprovalController { * @param {string} siteTitle - The title of the document requesting full provider access * @param {string} siteImage - The icon of the window requesting full provider access */ - _handleProviderRequest (origin, siteTitle, siteImage, force) { - this.store.updateState({ providerRequests: [{ origin, siteTitle, siteImage }] }) + _handleProviderRequest (origin, siteTitle, siteImage, force, tabID) { + this.store.updateState({ providerRequests: [{ origin, siteTitle, siteImage, tabID }] }) const isUnlocked = this.keyringController.memStore.getState().isUnlocked if (!force && this.approvedOrigins[origin] && this.caching && isUnlocked) { - this.approveProviderRequest(origin) + this.approveProviderRequest(tabID) return } this.openPopup && this.openPopup() @@ -68,32 +68,32 @@ class ProviderApprovalController { * * @param {string} origin - Origin of the window */ - _handleIsApproved (origin) { + _handleIsApproved (origin, tabID) { this.platform && this.platform.sendMessage({ action: 'answer-is-approved', isApproved: this.approvedOrigins[origin] && this.caching, caching: this.caching, - }, { active: true }) + }, { id: tabID }) } /** * Called by a tab to determine if MetaMask is currently locked or unlocked */ - _handleIsUnlocked () { + _handleIsUnlocked (tabID) { const isUnlocked = this.keyringController.memStore.getState().isUnlocked - this.platform && this.platform.sendMessage({ action: 'answer-is-unlocked', isUnlocked }, { active: true }) + this.platform && this.platform.sendMessage({ action: 'answer-is-unlocked', isUnlocked }, { id: tabID }) } /** * Called to check privacy mode; if privacy mode is off, this will automatically enable the provider (legacy behavior) */ - _handlePrivacyRequest () { + _handlePrivacyRequest (tabID) { const privacyMode = this.preferencesController.getFeatureFlags().privacyMode if (!privacyMode) { this.platform && this.platform.sendMessage({ action: 'approve-legacy-provider-request', selectedAddress: this.publicConfigStore.getState().selectedAddress, - }, { active: true }) + }, { id: tabID }) this.publicConfigStore.emit('update', this.publicConfigStore.getState()) } } @@ -101,17 +101,18 @@ class ProviderApprovalController { /** * Called when a user approves access to a full Ethereum provider API * - * @param {string} origin - Origin of the target window to approve provider access + * @param {string} tabID - ID of the target window that approved provider access */ - approveProviderRequest (origin) { + approveProviderRequest (tabID) { this.closePopup && this.closePopup() const requests = this.store.getState().providerRequests + const origin = requests.find(request => request.tabID === tabID).origin this.platform && this.platform.sendMessage({ action: 'approve-provider-request', selectedAddress: this.publicConfigStore.getState().selectedAddress, - }, { active: true }) + }, { id: tabID }) this.publicConfigStore.emit('update', this.publicConfigStore.getState()) - const providerRequests = requests.filter(request => request.origin !== origin) + const providerRequests = requests.filter(request => request.tabID !== tabID) this.store.updateState({ providerRequests }) this.approvedOrigins[origin] = true } @@ -119,13 +120,14 @@ class ProviderApprovalController { /** * Called when a tab rejects access to a full Ethereum provider API * - * @param {string} origin - Origin of the target window to reject provider access + * @param {string} tabID - ID of the target window that rejected provider access */ - rejectProviderRequest (origin) { + rejectProviderRequest (tabID) { this.closePopup && this.closePopup() const requests = this.store.getState().providerRequests - this.platform && this.platform.sendMessage({ action: 'reject-provider-request' }, { active: true }) - const providerRequests = requests.filter(request => request.origin !== origin) + const origin = requests.find(request => request.tabID === tabID).origin + this.platform && this.platform.sendMessage({ action: 'reject-provider-request' }, { id: tabID }) + const providerRequests = requests.filter(request => request.tabID !== tabID) this.store.updateState({ providerRequests }) delete this.approvedOrigins[origin] } diff --git a/app/scripts/platforms/extension.js b/app/scripts/platforms/extension.js index e8779739c..3dadd5d34 100644 --- a/app/scripts/platforms/extension.js +++ b/app/scripts/platforms/extension.js @@ -65,9 +65,11 @@ class ExtensionPlatform { } sendMessage (message, query = {}) { - extension.tabs.query(query, tabs => { + const id = query.id + delete query.id + extension.tabs.query({ ...query }, tabs => { tabs.forEach(tab => { - extension.tabs.sendMessage(tab.id, message) + extension.tabs.sendMessage(id || tab.id, message) }) }) } |