aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorFrankie <frankie.pangilinan@consensys.net>2016-09-14 03:18:19 +0800
committerFrankie <frankie.pangilinan@consensys.net>2016-09-14 03:18:19 +0800
commit19c1b1fd8e28c10f85ed5f612d10c8b87e2e5c8a (patch)
tree425f11071576a44ca4327125056ac217ae499bae /app
parent4aa5114019870ea6606d98ee9bf5092b45ed9fc5 (diff)
parent54ecb09a209bf3ffeba968a79acfa500625b0d4a (diff)
downloadtangerine-wallet-browser-19c1b1fd8e28c10f85ed5f612d10c8b87e2e5c8a.tar.gz
tangerine-wallet-browser-19c1b1fd8e28c10f85ed5f612d10c8b87e2e5c8a.tar.zst
tangerine-wallet-browser-19c1b1fd8e28c10f85ed5f612d10c8b87e2e5c8a.zip
Merge branch 'master' into qrCode
Diffstat (limited to 'app')
-rw-r--r--app/manifest.json2
-rw-r--r--app/scripts/lib/idStore.js2
-rw-r--r--app/scripts/lib/port-stream.js3
-rw-r--r--app/scripts/popup-core.js63
-rw-r--r--app/scripts/popup.js88
5 files changed, 74 insertions, 84 deletions
diff --git a/app/manifest.json b/app/manifest.json
index 9b66260cd..a21e0612a 100644
--- a/app/manifest.json
+++ b/app/manifest.json
@@ -1,7 +1,7 @@
{
"name": "MetaMask",
"short_name": "Metamask",
- "version": "2.11.0",
+ "version": "2.11.1",
"manifest_version": 2,
"author": "https://metamask.io",
"description": "Ethereum Browser Extension",
diff --git a/app/scripts/lib/idStore.js b/app/scripts/lib/idStore.js
index b5b13a57a..89c0c3abc 100644
--- a/app/scripts/lib/idStore.js
+++ b/app/scripts/lib/idStore.js
@@ -505,7 +505,7 @@ IdentityStore.prototype.purgeCache = function () {
this._currentState.identities = {}
let accounts
try {
- Object.keys(this._ethStore._currentState.accounts)
+ accounts = Object.keys(this._ethStore._currentState.accounts)
} catch (e) {
accounts = []
}
diff --git a/app/scripts/lib/port-stream.js b/app/scripts/lib/port-stream.js
index 1889e3c04..6f59d4485 100644
--- a/app/scripts/lib/port-stream.js
+++ b/app/scripts/lib/port-stream.js
@@ -30,8 +30,7 @@ PortDuplexStream.prototype._onMessage = function (msg) {
PortDuplexStream.prototype._onDisconnect = function () {
try {
- // this.end()
- this.emit('close')
+ this.push(null)
} catch (err) {
this.emit('error', err)
}
diff --git a/app/scripts/popup-core.js b/app/scripts/popup-core.js
new file mode 100644
index 000000000..94413a1c4
--- /dev/null
+++ b/app/scripts/popup-core.js
@@ -0,0 +1,63 @@
+const EventEmitter = require('events').EventEmitter
+const Dnode = require('dnode')
+const Web3 = require('web3')
+const MetaMaskUi = require('../../ui')
+const StreamProvider = require('web3-stream-provider')
+const setupMultiplex = require('./lib/stream-utils.js').setupMultiplex
+
+
+module.exports = initializePopup
+
+
+function initializePopup(connectionStream){
+ // setup app
+ connectToAccountManager(connectionStream, setupApp)
+}
+
+function connectToAccountManager (connectionStream, cb) {
+ // setup communication with background
+ // setup multiplexing
+ var mx = setupMultiplex(connectionStream)
+ // connect features
+ setupControllerConnection(mx.createStream('controller'), cb)
+ setupWeb3Connection(mx.createStream('provider'))
+}
+
+function setupWeb3Connection (connectionStream) {
+ var providerStream = new StreamProvider()
+ providerStream.pipe(connectionStream).pipe(providerStream)
+ connectionStream.on('error', console.error.bind(console))
+ providerStream.on('error', console.error.bind(console))
+ global.web3 = new Web3(providerStream)
+}
+
+function setupControllerConnection (connectionStream, cb) {
+ // this is a really sneaky way of adding EventEmitter api
+ // to a bi-directional dnode instance
+ var eventEmitter = new EventEmitter()
+ var accountManagerDnode = Dnode({
+ sendUpdate: function (state) {
+ eventEmitter.emit('update', state)
+ },
+ })
+ connectionStream.pipe(accountManagerDnode).pipe(connectionStream)
+ accountManagerDnode.once('remote', function (accountManager) {
+ // setup push events
+ accountManager.on = eventEmitter.on.bind(eventEmitter)
+ cb(null, accountManager)
+ })
+}
+
+function setupApp (err, accountManager) {
+ if (err) {
+ alert(err.stack)
+ throw err
+ }
+
+ var container = document.getElementById('app-content')
+
+ MetaMaskUi({
+ container: container,
+ accountManager: accountManager,
+ })
+}
diff --git a/app/scripts/popup.js b/app/scripts/popup.js
index 096b56115..e6f149f96 100644
--- a/app/scripts/popup.js
+++ b/app/scripts/popup.js
@@ -1,94 +1,22 @@
-const url = require('url')
-const EventEmitter = require('events').EventEmitter
-const async = require('async')
-const Dnode = require('dnode')
-const Web3 = require('web3')
-const MetaMaskUi = require('../../ui')
-const MetaMaskUiCss = require('../../ui/css')
const injectCss = require('inject-css')
+const MetaMaskUiCss = require('../../ui/css')
+const startPopup = require('./popup-core')
const PortStream = require('./lib/port-stream.js')
-const StreamProvider = require('web3-stream-provider')
-const setupMultiplex = require('./lib/stream-utils.js').setupMultiplex
const isPopupOrNotification = require('./lib/is-popup-or-notification')
const extension = require('./lib/extension')
const notification = require('./lib/notifications')
-// setup app
var css = MetaMaskUiCss()
injectCss(css)
-async.parallel({
- currentDomain: getCurrentDomain,
- accountManager: connectToAccountManager,
-}, setupApp)
-
-function connectToAccountManager (cb) {
- // setup communication with background
-
- var name = isPopupOrNotification()
- closePopupIfOpen(name)
- window.METAMASK_UI_TYPE = name
- var pluginPort = extension.runtime.connect({ name })
- var portStream = new PortStream(pluginPort)
- // setup multiplexing
- var mx = setupMultiplex(portStream)
- // connect features
- setupControllerConnection(mx.createStream('controller'), cb)
- setupWeb3Connection(mx.createStream('provider'))
-}
-
-function setupWeb3Connection (stream) {
- var remoteProvider = new StreamProvider()
- remoteProvider.pipe(stream).pipe(remoteProvider)
- stream.on('error', console.error.bind(console))
- remoteProvider.on('error', console.error.bind(console))
- global.web3 = new Web3(remoteProvider)
-}
-
-function setupControllerConnection (stream, cb) {
- var eventEmitter = new EventEmitter()
- var background = Dnode({
- sendUpdate: function (state) {
- eventEmitter.emit('update', state)
- },
- })
- stream.pipe(background).pipe(stream)
- background.once('remote', function (accountManager) {
- // setup push events
- accountManager.on = eventEmitter.on.bind(eventEmitter)
- cb(null, accountManager)
- })
-}
+var name = isPopupOrNotification()
+closePopupIfOpen(name)
+window.METAMASK_UI_TYPE = name
-function getCurrentDomain (cb) {
- const unknown = '<unknown>'
- if (!extension.tabs) return cb(null, unknown)
- extension.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)
- })
-}
+var pluginPort = extension.runtime.connect({ name })
+var portStream = new PortStream(pluginPort)
-function setupApp (err, opts) {
- if (err) {
- alert(err.stack)
- throw err
- }
-
- var container = document.getElementById('app-content')
-
- MetaMaskUi({
- container: container,
- accountManager: opts.accountManager,
- currentDomain: opts.currentDomain,
- networkVersion: opts.networkVersion,
- })
-}
+startPopup(portStream)
function closePopupIfOpen(name) {
if (name !== 'notification') {