aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Finlay <dan@danfinlay.com>2016-05-26 08:57:57 +0800
committerDan Finlay <dan@danfinlay.com>2016-05-26 08:57:57 +0800
commite8eae89576161722a8b8f4931de0daad62955ab0 (patch)
tree38e39444dd9185cee84d44b9f6baaec5855f6a4d
parent21af266fde3a9147f43ee1186daae275dc2a5eed (diff)
parent9f8267225221cd025591852bbf0eb719b6dde9ac (diff)
downloadtangerine-wallet-browser-e8eae89576161722a8b8f4931de0daad62955ab0.tar
tangerine-wallet-browser-e8eae89576161722a8b8f4931de0daad62955ab0.tar.gz
tangerine-wallet-browser-e8eae89576161722a8b8f4931de0daad62955ab0.tar.bz2
tangerine-wallet-browser-e8eae89576161722a8b8f4931de0daad62955ab0.tar.lz
tangerine-wallet-browser-e8eae89576161722a8b8f4931de0daad62955ab0.tar.xz
tangerine-wallet-browser-e8eae89576161722a8b8f4931de0daad62955ab0.tar.zst
tangerine-wallet-browser-e8eae89576161722a8b8f4931de0daad62955ab0.zip
Merge branch 'master' into FixTransactionBackButton
-rw-r--r--CHANGELOG.md1
-rw-r--r--app/scripts/background.js48
-rw-r--r--app/scripts/lib/notifications.js1
-rw-r--r--test/unit/reducers/unlock_vault_test.js51
-rw-r--r--ui/app/reducers/app.js1
5 files changed, 88 insertions, 14 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 33d3d9111..7e2a608c2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@
- Added copy address button to account list.
- Fixed back button on confirm transaction screen.
- Add indication of pending transactions to account list screen.
+- Fixed bug where error warning was sometimes not cleared on view transition.
## 2.0.0 2016-05-23
diff --git a/app/scripts/background.js b/app/scripts/background.js
index 313dbbc66..4f537b30a 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -1,10 +1,10 @@
+const urlUtil = require('url')
const Dnode = require('dnode')
const eos = require('end-of-stream')
const combineStreams = require('pumpify')
const extend = require('xtend')
const EthStore = require('eth-store')
const MetaMaskProvider = require('web3-provider-engine/zero.js')
-const handleRequestsFromStream = require('web3-stream-provider/handler')
const ObjectMultiplex = require('./lib/obj-multiplex')
const PortStream = require('./lib/port-stream.js')
const IdentityStore = require('./lib/idStore')
@@ -27,27 +27,28 @@ function connectRemote(remotePort){
var portStream = new PortStream(remotePort)
if (isMetaMaskInternalProcess) {
// communication with popup
- setupTrustedCommunication(portStream)
+ setupTrustedCommunication(portStream, 'MetaMask')
} else {
// communication with page
- setupUntrustedCommunication(portStream)
+ var originDomain = urlUtil.parse(remotePort.sender.url).hostname
+ setupUntrustedCommunication(portStream, originDomain)
}
}
-function setupUntrustedCommunication(connectionStream){
+function setupUntrustedCommunication(connectionStream, originDomain){
// setup multiplexing
var mx = setupMultiplex(connectionStream)
// connect features
- setupProviderConnection(mx.createStream('provider'))
+ setupProviderConnection(mx.createStream('provider'), originDomain)
setupPublicConfig(mx.createStream('publicConfig'))
}
-function setupTrustedCommunication(connectionStream){
+function setupTrustedCommunication(connectionStream, originDomain){
// setup multiplexing
var mx = setupMultiplex(connectionStream)
// connect features
setupControllerConnection(mx.createStream('controller'))
- setupProviderConnection(mx.createStream('provider'))
+ setupProviderConnection(mx.createStream('provider'), originDomain)
}
//
@@ -66,10 +67,10 @@ var providerOpts = {
cb(null, result)
},
// tx signing
- approveTransaction: approveTransaction,
+ approveTransaction: newUnsignedTransaction,
signTransaction: idStore.signTransaction.bind(idStore),
// msg signing
- approveMessage: approveMessage,
+ approveMessage: newUnsignedMessage,
signMessage: idStore.signMessage.bind(idStore),
}
var provider = MetaMaskProvider(providerOpts)
@@ -143,13 +144,32 @@ function setupPublicConfig(stream){
stream.pipe(storeStream).pipe(stream)
}
-function setupProviderConnection(stream){
- handleRequestsFromStream(stream, provider, logger)
+function setupProviderConnection(stream, originDomain){
+
+ stream.on('data', function onRpcRequest(payload){
+ // Append origin to rpc payload
+ payload.origin = originDomain
+ // Append origin to signature request
+ if (payload.method === 'eth_sendTransaction') {
+ payload.params[0].origin = originDomain
+ } else if (payload.method === 'eth_sign') {
+ payload.params.push(originDomain)
+ }
+ // handle rpc request
+ provider.sendAsync(payload, function onPayloadHandled(err, response){
+ logger(null, payload, response)
+ try {
+ stream.write(response)
+ } catch (err) {
+ logger(err)
+ }
+ })
+ })
function logger(err, request, response){
if (err) return console.error(err.stack)
if (!request.isMetamaskInternal) {
- console.log('MetaMaskPlugin - RPC complete:', request, '->', response)
+ console.log(`RPC (${originDomain}):`, request, '->', response)
if (response.error) console.error('Error in RPC response:\n'+response.error.message)
}
}
@@ -218,7 +238,7 @@ function updateBadge(state){
// Add unconfirmed Tx + Msg
//
-function approveTransaction(txParams, cb){
+function newUnsignedTransaction(txParams, cb){
var state = idStore.getState()
if (!state.isUnlocked) {
createUnlockRequestNotification({
@@ -230,7 +250,7 @@ function approveTransaction(txParams, cb){
}
}
-function approveMessage(msgParams, cb){
+function newUnsignedMessage(msgParams, cb){
var state = idStore.getState()
if (!state.isUnlocked) {
createUnlockRequestNotification({
diff --git a/app/scripts/lib/notifications.js b/app/scripts/lib/notifications.js
index f4f0a2d8b..5a7ae6c2b 100644
--- a/app/scripts/lib/notifications.js
+++ b/app/scripts/lib/notifications.js
@@ -40,6 +40,7 @@ function createUnlockRequestNotification(opts){
function createTxNotification(opts){
var message = [
+ 'Submitted by '+opts.txParams.origin,
'to: '+uiUtils.addressSummary(opts.txParams.to),
'from: '+uiUtils.addressSummary(opts.txParams.from),
'value: '+uiUtils.formatBalance(opts.txParams.value),
diff --git a/test/unit/reducers/unlock_vault_test.js b/test/unit/reducers/unlock_vault_test.js
new file mode 100644
index 000000000..b7540af08
--- /dev/null
+++ b/test/unit/reducers/unlock_vault_test.js
@@ -0,0 +1,51 @@
+var jsdom = require('mocha-jsdom')
+var assert = require('assert')
+var freeze = require('deep-freeze-strict')
+var path = require('path')
+var sinon = require('sinon')
+
+var actions = require(path.join(__dirname, '..', '..', '..', 'ui', 'app', 'actions.js'))
+var reducers = require(path.join(__dirname, '..', '..', '..', 'ui', 'app', 'reducers.js'))
+
+describe('#unlockMetamask(selectedAccount)', function() {
+
+ beforeEach(function() {
+ // sinon allows stubbing methods that are easily verified
+ this.sinon = sinon.sandbox.create()
+ })
+
+ afterEach(function() {
+ // sinon requires cleanup otherwise it will overwrite context
+ this.sinon.restore()
+ })
+
+ describe('after an error', function() {
+ it('clears warning', function() {
+ const warning = 'this is the wrong warning'
+ const account = 'foo_account'
+ const initialState = {
+ appState: {
+ warning: warning,
+ }
+ }
+
+ const resultState = reducers(initialState, actions.unlockMetamask(account))
+ assert.equal(resultState.appState.warning, null, 'warning nullified')
+ })
+ })
+
+ describe('going home after an error', function() {
+ it('clears warning', function() {
+ const warning = 'this is the wrong warning'
+ const account = 'foo_account'
+ const initialState = {
+ appState: {
+ warning: warning,
+ }
+ }
+
+ const resultState = reducers(initialState, actions.goHome())
+ assert.equal(resultState.appState.warning, null, 'warning nullified')
+ })
+ })
+})
diff --git a/ui/app/reducers/app.js b/ui/app/reducers/app.js
index ae7501725..a98b809d6 100644
--- a/ui/app/reducers/app.js
+++ b/ui/app/reducers/app.js
@@ -162,6 +162,7 @@ function reduceApp(state, action) {
privateKey: '',
},
transForward: false,
+ warning: null,
})
case actions.SHOW_ACCOUNT_DETAIL: