aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEsteban MIno <efmino@uc.cl>2018-08-21 09:32:14 +0800
committerEsteban MIno <efmino@uc.cl>2018-08-21 09:32:14 +0800
commit68c1b4c17049e3ef18397ae83b0eb9da8cccab2c (patch)
tree4a708ae87adeb67d855f9200c8b7e02415b48153
parent81cd29df43feb2469b78c6240d12ffcb9a68678e (diff)
downloadtangerine-wallet-browser-68c1b4c17049e3ef18397ae83b0eb9da8cccab2c.tar
tangerine-wallet-browser-68c1b4c17049e3ef18397ae83b0eb9da8cccab2c.tar.gz
tangerine-wallet-browser-68c1b4c17049e3ef18397ae83b0eb9da8cccab2c.tar.bz2
tangerine-wallet-browser-68c1b4c17049e3ef18397ae83b0eb9da8cccab2c.tar.lz
tangerine-wallet-browser-68c1b4c17049e3ef18397ae83b0eb9da8cccab2c.tar.xz
tangerine-wallet-browser-68c1b4c17049e3ef18397ae83b0eb9da8cccab2c.tar.zst
tangerine-wallet-browser-68c1b4c17049e3ef18397ae83b0eb9da8cccab2c.zip
watchAsset returns result wether token was added or not
-rw-r--r--app/scripts/background.js20
-rw-r--r--app/scripts/controllers/preferences.js16
-rw-r--r--app/scripts/metamask-controller.js4
3 files changed, 30 insertions, 10 deletions
diff --git a/app/scripts/background.js b/app/scripts/background.js
index 029ad139a..1913d35dd 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -256,7 +256,7 @@ function setupController (initState, initLangCode) {
showUnconfirmedMessage: triggerUi,
unlockAccountMessage: triggerUi,
showUnapprovedTx: triggerUi,
- showAddTokenUi: triggerUi,
+ showWatchAssetUi: showWatchAssetUi,
// initial state
initState,
// initial locale code
@@ -444,6 +444,24 @@ function triggerUi () {
})
}
+/**
+ * Opens the browser popup for user confirmation of watchAsset
+ * then it waits until user interact with the UI
+ */
+function showWatchAssetUi () {
+ triggerUi()
+ return new Promise(
+ (resolve) => {
+ var interval = setInterval(() => {
+ if (!notificationIsOpen) {
+ clearInterval(interval)
+ resolve()
+ }
+ }, 1000)
+ }
+ )
+}
+
// On first install, open a window to MetaMask website to how-it-works.
extension.runtime.onInstalled.addListener(function (details) {
if ((details.reason === 'install') && (!METAMASK_DEBUG)) {
diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js
index 611d2d067..11f36e284 100644
--- a/app/scripts/controllers/preferences.js
+++ b/app/scripts/controllers/preferences.js
@@ -41,7 +41,7 @@ class PreferencesController {
this.diagnostics = opts.diagnostics
this.network = opts.network
this.store = new ObservableStore(initState)
- this.showAddTokenUi = opts.showAddTokenUi
+ this.showWatchAssetUi = opts.showWatchAssetUi
this._subscribeProviderType()
}
// PUBLIC METHODS
@@ -82,13 +82,12 @@ class PreferencesController {
* @param {Function} - next
* @param {Function} - end
*/
- requestAddToken (req, res, next, end) {
+ async requestWatchAsset (req, res, next, end) {
if (req.method === 'metamask_watchAsset') {
const { type, options } = req.params
switch (type) {
case 'ERC20':
- this._handleWatchAssetERC20(options, res)
- res.result = options.address
+ res.result = await this._handleWatchAssetERC20(options)
end()
break
default:
@@ -521,17 +520,20 @@ class PreferencesController {
/**
* Handle the suggestion of an ERC20 asset through `watchAsset`
* *
- * @param {Object} options Parameters according to addition of ERC20 token
+ * @param {Boolean} assetAdded Boolean according to addition of ERC20 token
*
*/
- _handleWatchAssetERC20 (options) {
+ async _handleWatchAssetERC20 (options) {
// TODO handle bad parameters
const { address, symbol, decimals, imageUrl } = options
const rawAddress = address
this._validateSuggestedTokenParams({ rawAddress, symbol, decimals })
const tokenOpts = { rawAddress, decimals, symbol, imageUrl }
this.addSuggestedToken(tokenOpts)
- this.showAddTokenUi()
+ return this.showWatchAssetUi().then(() => {
+ const tokenAddresses = this.getTokens().filter(token => token.address === normalizeAddress(rawAddress))
+ return tokenAddresses.length > 0
+ })
}
}
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 57001fdff..0ee9d730c 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -88,7 +88,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.preferencesController = new PreferencesController({
initState: initState.PreferencesController,
initLangCode: opts.initLangCode,
- showAddTokenUi: opts.showAddTokenUi,
+ showWatchAssetUi: opts.showWatchAssetUi,
network: this.networkController,
})
@@ -1241,7 +1241,7 @@ module.exports = class MetamaskController extends EventEmitter {
engine.push(createOriginMiddleware({ origin }))
engine.push(createLoggerMiddleware({ origin }))
engine.push(filterMiddleware)
- engine.push(this.preferencesController.requestAddToken.bind(this.preferencesController))
+ engine.push(this.preferencesController.requestWatchAsset.bind(this.preferencesController))
engine.push(createProviderMiddleware({ provider: this.provider }))
// setup connection