load from storage on start and export unsignedTxs on remote connect
This commit is contained in:
parent
dcfd89db1b
commit
6bf98c6923
|
@ -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/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -101,3 +117,11 @@ 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
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
const allowedMessageTarget = 'metamask'
|
const allowedMessageTarget = 'metamask'
|
||||||
const allowedMessageType = 'addUnconfirmedTx'
|
const allowedMessageType = 'addUnsignedTx'
|
||||||
|
|
||||||
|
|
||||||
// inject in-page script
|
// inject in-page script
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue