load from storage on start and export unsignedTxs on remote connect

This commit is contained in:
kumavis 2015-08-01 23:36:03 -07:00
parent dcfd89db1b
commit 6bf98c6923
4 changed files with 49 additions and 19 deletions

View File

@ -39,5 +39,11 @@
], ],
"web_accessible_resources": [ "web_accessible_resources": [
"scripts/inpage.js" "scripts/inpage.js"
] ],
"externally_connectable": {
"matches": [
"https://metamask.io/*",
"https://alpha.metamask.io/*"
]
}
} }

View File

@ -1,28 +1,36 @@
const identitiesUrl = 'https://alpha.metamask.io/identities/' const identitiesUrl = 'https://alpha.metamask.io/identities/'
const messagingChannelName = 'metamask' const messagingChannelName = 'metamask'
var unconfirmedTxs = {} var unsignedTxs = {}
// setup badge click handler // setup badge click handler
chrome.browserAction.onClicked.addListener(function(activeTab) { chrome.browserAction.onClicked.addListener(function(activeTab) {
chrome.tabs.create({ url: identitiesUrl }) chrome.tabs.create({ url: identitiesUrl })
}) })
// setup content-background messaging // setup messaging
chrome.runtime.onConnect.addListener(function(port) { chrome.runtime.onConnect.addListener(connectRemote)
port.onMessage.addListener(handleMessage) chrome.runtime.onConnectExternal.addListener(connectRemote)
function connectRemote(remote){
remote.onMessage.addListener(handleMessage)
exportUnsignedTxs(remote)
}
// load from storage
chrome.storage.sync.get(function(data){
for (var key in data) {
var serialized = data[key]
var tx = deserializeTx(serialized)
var hash = simpleHash(serialized)
unsignedTxs[hash] = tx
}
updateBadge()
}) })
// listen to storage changes // listen to storage changes
chrome.storage.onChanged.addListener(function(changes, namespace) { chrome.storage.onChanged.addListener(function(changes, namespace) {
for (key in changes) { for (key in changes) {
var storageChange = changes[key] var storageChange = changes[key]
console.log('Storage key "%s" in namespace "%s" changed. ' +
'Old value was "%s", new value is:',
key,
namespace,
storageChange.oldValue,
storageChange.newValue)
if (storageChange.oldValue && !storageChange.newValue) { if (storageChange.oldValue && !storageChange.newValue) {
// was removed // was removed
removeTransaction(storageChange.oldValue) removeTransaction(storageChange.oldValue)
@ -40,11 +48,11 @@ function handleMessage(msg){
console.log('got message!', msg.type) console.log('got message!', msg.type)
switch(msg.type){ switch(msg.type){
case 'addUnconfirmedTx': case 'addUnsignedTx':
addTransaction(msg.payload) addTransaction(msg.payload)
return return
case 'removeUnconfirmedTx': case 'removeUnsignedTx':
removeTransaction(msg.payload) removeTransaction(msg.payload)
return return
@ -54,8 +62,7 @@ function handleMessage(msg){
function addTransaction(tx){ function addTransaction(tx){
var serialized = serializeTx(tx) var serialized = serializeTx(tx)
var hash = simpleHash(serialized) var hash = simpleHash(serialized)
console.log('add tx: ', tx.id, hash, serializeTx(tx), tx) unsignedTxs[hash] = tx
unconfirmedTxs[hash] = tx
var data = {} var data = {}
data[hash] = serialized data[hash] = serialized
chrome.storage.sync.set(data) chrome.storage.sync.set(data)
@ -65,7 +72,7 @@ function addTransaction(tx){
function removeTransaction(serialized){ function removeTransaction(serialized){
var hash = simpleHash(serialized) var hash = simpleHash(serialized)
delete unconfirmedTxs[hash] delete unsignedTxs[hash]
var data = {} var data = {}
data[hash] = undefined data[hash] = undefined
chrome.storage.sync.set(data) chrome.storage.sync.set(data)
@ -73,9 +80,18 @@ function removeTransaction(serialized){
updateBadge() updateBadge()
} }
function exportUnsignedTxs(remote){
console.log('exporting txs!', unsignedTxs)
var data = {
type: 'importUnsignedTxs',
payload: getValues(unsignedTxs),
}
remote.postMessage(data)
}
function updateBadge(){ function updateBadge(){
var label = '' var label = ''
var count = Object.keys(unconfirmedTxs).length var count = Object.keys(unsignedTxs).length
if (count) { if (count) {
label = String(count) label = String(count)
} }
@ -100,4 +116,12 @@ function serializeTx(tx){
function deserializeTx(tx){ function deserializeTx(tx){
return JSON.parse(tx) return JSON.parse(tx)
}
function getValues(obj){
var output = []
for (var key in obj) {
output.push(obj[key])
}
return output
} }

View File

@ -1,5 +1,5 @@
const allowedMessageTarget = 'metamask' const allowedMessageTarget = 'metamask'
const allowedMessageType = 'addUnconfirmedTx' const allowedMessageType = 'addUnsignedTx'
// inject in-page script // inject in-page script

View File

@ -4,7 +4,7 @@ const MetamaskProvider = require('./lib/metamask-provider.js')
const rpcUrl = 'https://rpc.metamask.io' const rpcUrl = 'https://rpc.metamask.io'
const documentOrigin = window.location.origin const documentOrigin = window.location.origin
const allowedMessageTarget = 'metamask' const allowedMessageTarget = 'metamask'
const allowedMessageType = 'addUnconfirmedTx' const allowedMessageType = 'addUnsignedTx'
var provider = new MetamaskProvider(forwardPayload, rpcUrl) var provider = new MetamaskProvider(forwardPayload, rpcUrl)