aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkumavis <aaron@kumavis.me>2017-03-31 09:33:19 +0800
committerkumavis <aaron@kumavis.me>2017-03-31 09:33:19 +0800
commit5036263f88a1f61957982b64d27472a516c28def (patch)
tree1aa3ea47b8dc9032e165ee988da38279252729ce
parentbe88c87b2560f0ae2afd668d9c10cadde0a4ebc3 (diff)
downloadtangerine-wallet-browser-5036263f88a1f61957982b64d27472a516c28def.tar
tangerine-wallet-browser-5036263f88a1f61957982b64d27472a516c28def.tar.gz
tangerine-wallet-browser-5036263f88a1f61957982b64d27472a516c28def.tar.bz2
tangerine-wallet-browser-5036263f88a1f61957982b64d27472a516c28def.tar.lz
tangerine-wallet-browser-5036263f88a1f61957982b64d27472a516c28def.tar.xz
tangerine-wallet-browser-5036263f88a1f61957982b64d27472a516c28def.tar.zst
tangerine-wallet-browser-5036263f88a1f61957982b64d27472a516c28def.zip
introduce platform api and rename notifications to notification-manager
-rw-r--r--app/scripts/background.js13
-rw-r--r--app/scripts/lib/notification-manager.js74
-rw-r--r--app/scripts/lib/notifications.js67
-rw-r--r--app/scripts/metamask-controller.js14
-rw-r--r--app/scripts/platforms/extension.js19
-rw-r--r--app/scripts/popup.js8
-rw-r--r--ui/app/reducers/app.js2
7 files changed, 117 insertions, 80 deletions
diff --git a/app/scripts/background.js b/app/scripts/background.js
index 254737dec..5fb56d497 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -4,12 +4,13 @@ const asyncQ = require('async-q')
const pipe = require('pump')
const LocalStorageStore = require('obs-store/lib/localStorage')
const storeTransform = require('obs-store/lib/transform')
+const ExtensionPlatform = require('./platforms/extension')
const Migrator = require('./lib/migrator/')
const migrations = require('./migrations/')
const PortStream = require('./lib/port-stream.js')
-const notification = require('./lib/notifications.js')
+const NotificationManager = require('./lib/notification-manager.js')
const MetamaskController = require('./metamask-controller')
-const extension = require('./lib/extension')
+const extension = require('extensionizer')
const firstTimeState = require('./first-time-state')
const STORAGE_KEY = 'metamask-config'
@@ -19,6 +20,10 @@ const log = require('loglevel')
window.log = log
log.setDefaultLevel(METAMASK_DEBUG ? 'debug' : 'warn')
+const platform = new ExtensionPlatform()
+const notificationManager = new NotificationManager()
+global.METAMASK_NOTIFIER = notificationManager
+
let popupIsOpen = false
// state persistence
@@ -68,6 +73,8 @@ function setupController (initState) {
showUnapprovedTx: triggerUi,
// initial state
initState,
+ // platform specific api
+ platform,
})
global.metamaskController = controller
@@ -140,7 +147,7 @@ function setupController (initState) {
// popup trigger
function triggerUi () {
- if (!popupIsOpen) notification.show()
+ if (!popupIsOpen) notificationManager.show()
}
// On first install, open a window to MetaMask website to how-it-works.
diff --git a/app/scripts/lib/notification-manager.js b/app/scripts/lib/notification-manager.js
new file mode 100644
index 000000000..ff8a4b2e5
--- /dev/null
+++ b/app/scripts/lib/notification-manager.js
@@ -0,0 +1,74 @@
+const extension = require('extensionizer')
+const height = 520
+const width = 360
+
+
+class NotificationManager {
+
+ //
+ // Public
+ //
+
+ show () {
+ this.getPopup((err, popup) => {
+ if (err) throw err
+
+ if (popup) {
+ // bring focus to existing popup
+ extension.windows.update(popup.id, { focused: true })
+ } else {
+ // create new popup
+ extension.windows.create({
+ url: 'notification.html',
+ type: 'popup',
+ width,
+ height,
+ })
+ .catch((reason) => {
+ log.error('failed to create poupup', reason)
+ })
+ }
+ })
+ }
+
+ getPopup (cb) {
+ this._getWindows((err, windows) => {
+ if (err) throw err
+ cb(null, this._getPopupIn(windows))
+ })
+ }
+
+ closePopup () {
+ this.getPopup((err, popup) => {
+ if (err) throw err
+ if (!popup) return
+ extension.windows.remove(popup.id, console.error)
+ })
+ }
+
+ //
+ // Private
+ //
+
+ _getWindows (cb) {
+ // Ignore in test environment
+ if (!extension.windows) {
+ return cb()
+ }
+
+ extension.windows.getAll({}, (windows) => {
+ cb(null, windows)
+ })
+ }
+
+ _getPopupIn (windows) {
+ return windows ? windows.find((win) => {
+ return (win && win.type === 'popup' &&
+ win.height === height &&
+ win.width === width)
+ }) : null
+ }
+
+}
+
+module.exports = NotificationManager \ No newline at end of file
diff --git a/app/scripts/lib/notifications.js b/app/scripts/lib/notifications.js
deleted file mode 100644
index 0ec01f3a7..000000000
--- a/app/scripts/lib/notifications.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const extension = require('./extension')
-const height = 520
-const width = 360
-
-const notifications = {
- show,
- getPopup,
- closePopup,
-}
-module.exports = notifications
-window.METAMASK_NOTIFIER = notifications
-
-function show () {
- getPopup((err, popup) => {
- if (err) throw err
-
- if (popup) {
- // bring focus to existing popup
- extension.windows.update(popup.id, { focused: true })
- } else {
- // create new popup
- extension.windows.create({
- url: 'notification.html',
- type: 'popup',
- width,
- height,
- })
- .catch((reason) => {
- log.error('failed to create poupup', reason)
- })
- }
- })
-}
-
-function getWindows (cb) {
- // Ignore in test environment
- if (!extension.windows) {
- return cb()
- }
-
- extension.windows.getAll({}, (windows) => {
- cb(null, windows)
- })
-}
-
-function getPopup (cb) {
- getWindows((err, windows) => {
- if (err) throw err
- cb(null, getPopupIn(windows))
- })
-}
-
-function getPopupIn (windows) {
- return windows ? windows.find((win) => {
- return (win && win.type === 'popup' &&
- win.height === height &&
- win.width === width)
- }) : null
-}
-
-function closePopup () {
- getPopup((err, popup) => {
- if (err) throw err
- if (!popup) return
- extension.windows.remove(popup.id, console.error)
- })
-}
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 03ea104e0..af8b4688d 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -20,7 +20,6 @@ const MessageManager = require('./lib/message-manager')
const PersonalMessageManager = require('./lib/personal-message-manager')
const TxManager = require('./transaction-manager')
const ConfigManager = require('./lib/config-manager')
-const extension = require('./lib/extension')
const autoFaucet = require('./lib/auto-faucet')
const nodeify = require('./lib/nodeify')
const accountImporter = require('./account-import-strategies')
@@ -34,6 +33,9 @@ module.exports = class MetamaskController extends EventEmitter {
this.opts = opts
let initState = opts.initState || {}
+ // platform-specific api
+ this.platform = opts.platform
+
// observable state store
this.store = new ObservableStore(initState)
@@ -629,7 +631,7 @@ module.exports = class MetamaskController extends EventEmitter {
break
}
- if (url) extension.tabs.create({ url })
+ if (url) this.platform.openWindow({ url })
}
createShapeShiftTx (depositAddress, depositType) {
@@ -647,7 +649,7 @@ module.exports = class MetamaskController extends EventEmitter {
setDefaultRpc () {
this.configManager.setRpcTarget('http://localhost:8545')
- extension.runtime.reload()
+ this.platform.reload()
this.lookupNetwork()
return Promise.resolve('http://localhost:8545')
}
@@ -656,7 +658,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.configManager.setRpcTarget(rpcTarget)
return this.preferencesController.updateFrequentRpcList(rpcTarget)
.then(() => {
- extension.runtime.reload()
+ this.platform.reload()
this.lookupNetwork()
return Promise.resolve(rpcTarget)
})
@@ -664,13 +666,13 @@ module.exports = class MetamaskController extends EventEmitter {
setProviderType (type) {
this.configManager.setProviderType(type)
- extension.runtime.reload()
+ this.platform.reload()
this.lookupNetwork()
}
useEtherscanProvider () {
this.configManager.useEtherscanProvider()
- extension.runtime.reload()
+ this.platform.reload()
}
getNetworkState () {
diff --git a/app/scripts/platforms/extension.js b/app/scripts/platforms/extension.js
new file mode 100644
index 000000000..cbb35768e
--- /dev/null
+++ b/app/scripts/platforms/extension.js
@@ -0,0 +1,19 @@
+const extension = require('extensionizer')
+
+class ExtensionPlatform {
+
+ //
+ // Public
+ //
+
+ reload () {
+ extension.runtime.reload()
+ }
+
+ openWindow ({ url }) {
+ extension.tabs.create({ url })
+ }
+
+}
+
+module.exports = ExtensionPlatform
diff --git a/app/scripts/popup.js b/app/scripts/popup.js
index 62db68c10..6606c9584 100644
--- a/app/scripts/popup.js
+++ b/app/scripts/popup.js
@@ -3,8 +3,10 @@ const MetaMaskUiCss = require('../../ui/css')
const startPopup = require('./popup-core')
const PortStream = require('./lib/port-stream.js')
const isPopupOrNotification = require('./lib/is-popup-or-notification')
-const extension = require('./lib/extension')
-const notification = require('./lib/notifications')
+const extension = require('extensionizer')
+const NotificationManager = require('./lib/notification-manager')
+
+const notificationManager = new NotificationManager()
var css = MetaMaskUiCss()
injectCss(css)
@@ -20,6 +22,6 @@ startPopup(portStream)
function closePopupIfOpen (name) {
if (name !== 'notification') {
- notification.closePopup()
+ notificationManager.closePopup()
}
}
diff --git a/ui/app/reducers/app.js b/ui/app/reducers/app.js
index 3a6baca91..6f633ab4e 100644
--- a/ui/app/reducers/app.js
+++ b/ui/app/reducers/app.js
@@ -1,7 +1,7 @@
const extend = require('xtend')
const actions = require('../actions')
const txHelper = require('../../lib/tx-helper')
-const notification = require('../../../app/scripts/lib/notifications')
+const notification = require('../../../app/scripts/lib/notification-manager')
module.exports = reduceApp