diff options
popup - add current domain tracking
Diffstat (limited to 'app')
-rw-r--r-- | app/manifest.json | 6 | ||||
-rw-r--r-- | app/scripts/popup.js | 65 |
2 files changed, 49 insertions, 22 deletions
diff --git a/app/manifest.json b/app/manifest.json index 3a110629f..d3d20dd82 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -36,15 +36,15 @@ } ], "permissions": [ - "storage" + "storage", + "tabs" ], "web_accessible_resources": [ "scripts/inpage.js" ], "externally_connectable": { "matches": [ - "https://metamask.io/*", - "https://alpha.metamask.io/*" + "https://metamask.io/*" ] } }
\ No newline at end of file diff --git a/app/scripts/popup.js b/app/scripts/popup.js index ca88f4fa7..77c27c6b5 100644 --- a/app/scripts/popup.js +++ b/app/scripts/popup.js @@ -1,38 +1,65 @@ +const url = require('url') const EventEmitter = require('events').EventEmitter +const async = require('async') const Dnode = require('dnode') const MetaMaskUi = require('metamask-ui') const MetaMaskUiCss = require('metamask-ui/css') const injectCss = require('inject-css') const PortStream = require('./lib/port-stream.js') - -// setup communication with background -var pluginPort = chrome.runtime.connect({name: 'popup'}) -var duplex = new PortStream(pluginPort) -var eventEmitter = new EventEmitter() -var background = Dnode({ - // setUnconfirmedTxs: setUnconfirmedTxs, - sendUpdate: function(state){ - eventEmitter.emit('update', state) - }, -}) -duplex.pipe(background).pipe(duplex) -background.once('remote', function(accountManager){ - accountManager.on = eventEmitter.on.bind(eventEmitter) - setupApp(accountManager) -}) - // setup app var css = MetaMaskUiCss() injectCss(css) -function setupApp(accountManager){ +async.parallel({ + currentDomain: getCurrentDomain, + accountManager: connectToAccountManager, +}, setupApp) + +function connectToAccountManager(cb){ + // setup communication with background + var pluginPort = chrome.runtime.connect({name: 'popup'}) + var duplex = new PortStream(pluginPort) + var eventEmitter = new EventEmitter() + var background = Dnode({ + // setUnconfirmedTxs: setUnconfirmedTxs, + sendUpdate: function(state){ + eventEmitter.emit('update', state) + }, + }) + duplex.pipe(background).pipe(duplex) + background.once('remote', function(accountManager){ + // setup push events + accountManager.on = eventEmitter.on.bind(eventEmitter) + cb(null, accountManager) + }) +} + +function getCurrentDomain(cb){ + chrome.tabs.query({active: true, currentWindow: true}, function(results){ + var activeTab = results[0] + var currentUrl = activeTab && activeTab.url + var currentDomain = url.parse(currentUrl).host + if (!currentUrl) { + return cb(null, '<unknown>') + } + cb(null, currentDomain) + }) +} + +function setupApp(err, opts){ + if (err) { + alert(err.stack) + throw err + return + } var container = document.getElementById('app-content') var app = MetaMaskUi({ container: container, - accountManager: accountManager, + accountManager: opts.accountManager, + currentDomain: opts.currentDomain, }) }
\ No newline at end of file |