diff options
author | Kevin Serrano <kevin.serrano@consensys.net> | 2017-08-30 07:36:19 +0800 |
---|---|---|
committer | Kevin Serrano <kevin.serrano@consensys.net> | 2017-08-30 07:36:19 +0800 |
commit | ae8486d5cfa2c1d173e0c675408cc6bc00729bd3 (patch) | |
tree | ec01718a70d72e7961953556c03b24855474cacd | |
parent | 056276af02c5717684e36eeeaf6a8787ea4a39e6 (diff) | |
parent | 71de68fc13d83934e8bc81ba43574a946bc32159 (diff) | |
download | tangerine-wallet-browser-ae8486d5cfa2c1d173e0c675408cc6bc00729bd3.tar tangerine-wallet-browser-ae8486d5cfa2c1d173e0c675408cc6bc00729bd3.tar.gz tangerine-wallet-browser-ae8486d5cfa2c1d173e0c675408cc6bc00729bd3.tar.bz2 tangerine-wallet-browser-ae8486d5cfa2c1d173e0c675408cc6bc00729bd3.tar.lz tangerine-wallet-browser-ae8486d5cfa2c1d173e0c675408cc6bc00729bd3.tar.xz tangerine-wallet-browser-ae8486d5cfa2c1d173e0c675408cc6bc00729bd3.tar.zst tangerine-wallet-browser-ae8486d5cfa2c1d173e0c675408cc6bc00729bd3.zip |
Merge branch 'master' into new-currency-test
-rw-r--r-- | CHANGELOG.md | 3 | ||||
-rw-r--r-- | app/scripts/lib/auto-reload.js | 60 | ||||
-rw-r--r-- | app/scripts/lib/inpage-provider.js | 6 | ||||
-rw-r--r-- | test/unit/tx-state-history-helper-test.js | 26 |
4 files changed, 73 insertions, 22 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index cab45914e..a0fe916dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## Current Master +- Make eth_sign deprecation warning less noisy +- Fix bug with network version serialization over synchronous RPC + ## 3.9.11 2017-8-24 - Fix nonce calculation bug that would sometimes generate very wrong nonces. diff --git a/app/scripts/lib/auto-reload.js b/app/scripts/lib/auto-reload.js index 6abce73ea..62aaf405c 100644 --- a/app/scripts/lib/auto-reload.js +++ b/app/scripts/lib/auto-reload.js @@ -2,33 +2,55 @@ module.exports = setupDappAutoReload function setupDappAutoReload (web3, observable) { // export web3 as a global, checking for usage + let hasBeenWarned = false + let reloadInProgress = false + let lastTimeUsed + let lastSeenNetwork + global.web3 = new Proxy(web3, { - get: (_web3, name) => { - // get the time of use - if (name !== '_used') { + get: (_web3, key) => { + // show warning once on web3 access + if (!hasBeenWarned && key !== 'currentProvider') { console.warn('MetaMask: web3 will be deprecated in the near future in favor of the ethereumProvider \nhttps://github.com/ethereum/mist/releases/tag/v0.9.0') - _web3._used = Date.now() + hasBeenWarned = true } - return _web3[name] + // get the time of use + lastTimeUsed = Date.now() + // return value normally + return _web3[key] }, - set: (_web3, name, value) => { - _web3[name] = value + set: (_web3, key, value) => { + // set value normally + _web3[key] = value }, }) - var networkVersion observable.subscribe(function (state) { - // get the initial network - const curentNetVersion = state.networkVersion - if (!networkVersion) networkVersion = curentNetVersion - - if (curentNetVersion !== networkVersion && web3._used) { - const timeSinceUse = Date.now() - web3._used - // if web3 was recently used then delay the reloading of the page - timeSinceUse > 500 ? triggerReset() : setTimeout(triggerReset, 500) - // prevent reentry into if statement if state updates again before - // reload - networkVersion = curentNetVersion + // if reload in progress, no need to check reload logic + if (reloadInProgress) return + + const currentNetwork = state.networkVersion + + // set the initial network + if (!lastSeenNetwork) { + lastSeenNetwork = currentNetwork + return + } + + // skip reload logic if web3 not used + if (!lastTimeUsed) return + + // if network did not change, exit + if (currentNetwork === lastSeenNetwork) return + + // initiate page reload + reloadInProgress = true + const timeSinceUse = Date.now() - lastTimeUsed + // if web3 was recently used then delay the reloading of the page + if (timeSinceUse > 500) { + triggerReset() + } else { + setTimeout(triggerReset, 500) } }) } diff --git a/app/scripts/lib/inpage-provider.js b/app/scripts/lib/inpage-provider.js index fd032a673..7c74a62d3 100644 --- a/app/scripts/lib/inpage-provider.js +++ b/app/scripts/lib/inpage-provider.js @@ -27,7 +27,7 @@ function MetamaskInpageProvider (connectionStream) { ) // ignore phishing warning message (handled elsewhere) - multiStream.ignoreStream('phishing') + multiStream.ignoreStream('phishing') // connect to async provider const asyncProvider = self.asyncProvider = new StreamProvider() @@ -80,7 +80,7 @@ MetamaskInpageProvider.prototype.send = function (payload) { case 'eth_coinbase': // read from localStorage selectedAddress = self.publicConfigStore.getState().selectedAddress - result = selectedAddress + result = selectedAddress || null break case 'eth_uninstallFilter': @@ -90,7 +90,7 @@ MetamaskInpageProvider.prototype.send = function (payload) { case 'net_version': const networkVersion = self.publicConfigStore.getState().networkVersion - result = networkVersion + result = networkVersion || null break // throw not-supported Error diff --git a/test/unit/tx-state-history-helper-test.js b/test/unit/tx-state-history-helper-test.js new file mode 100644 index 000000000..90cb10713 --- /dev/null +++ b/test/unit/tx-state-history-helper-test.js @@ -0,0 +1,26 @@ +const assert = require('assert') +const clone = require('clone') +const txStateHistoryHelper = require('../../app/scripts/lib/tx-state-history-helper') + +describe('deepCloneFromTxMeta', function () { + it('should clone deep', function () { + const input = { + foo: { + bar: { + bam: 'baz' + } + } + } + const output = txStateHistoryHelper.snapshotFromTxMeta(input) + assert('foo' in output, 'has a foo key') + assert('bar' in output.foo, 'has a bar key') + assert('bam' in output.foo.bar, 'has a bar key') + assert.equal(output.foo.bar.bam, 'baz', 'has a baz value') + }) + + it('should remove the history key', function () { + const input = { foo: 'bar', history: 'remembered' } + const output = txStateHistoryHelper.snapshotFromTxMeta(input) + assert(typeof output.history, 'undefined', 'should remove history') + }) +}) |