parent
5a9698c77a
commit
dcfd89db1b
@ -1,53 +1,103 @@ |
||||
const identitiesUrl = 'https://alpha.metamask.io/identities/' |
||||
const messagingChannelName = 'metamask' |
||||
|
||||
var pendingTxs = [] |
||||
var unconfirmedTxs = {} |
||||
|
||||
// setup badge click handler
|
||||
chrome.browserAction.onClicked.addListener(function(activeTab) { |
||||
chrome.tabs.create({ url: identitiesUrl }) |
||||
}) |
||||
|
||||
// setup page<->plugin messaging
|
||||
// setup content-background messaging
|
||||
chrome.runtime.onConnect.addListener(function(port) { |
||||
console.assert(port.name == messagingChannelName) |
||||
port.onMessage.addListener(function(msg) { |
||||
addTransaction(msg.payload) |
||||
}) |
||||
port.onMessage.addListener(handleMessage) |
||||
}) |
||||
|
||||
// listen to storage changes
|
||||
// chrome.storage.onChanged.addListener(function(changes, namespace) {
|
||||
// for (key in changes) {
|
||||
// var storageChange = changes[key]
|
||||
// console.log('Storage key "%s" in namespace "%s" changed. ' +
|
||||
// 'Old value was "%s", new value is "%s".',
|
||||
// key,
|
||||
// namespace,
|
||||
// storageChange.oldValue,
|
||||
// storageChange.newValue)
|
||||
// }
|
||||
// })
|
||||
|
||||
// // Save it using the Chrome extension storage API.
|
||||
// chrome.storage.sync.set({'zzz': 22}, function() {
|
||||
// // Notify that we saved.
|
||||
// console.log('Settings saved')
|
||||
// })
|
||||
|
||||
// update badge text
|
||||
chrome.storage.onChanged.addListener(function(changes, namespace) { |
||||
for (key in changes) { |
||||
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) { |
||||
// was removed
|
||||
removeTransaction(storageChange.oldValue) |
||||
} else if (!storageChange.oldValue && storageChange.newValue) { |
||||
// was added
|
||||
addTransaction(deserializeTx(storageChange.newValue)) |
||||
} |
||||
} |
||||
}) |
||||
|
||||
// setup badge text
|
||||
updateBadge() |
||||
|
||||
function handleMessage(msg){ |
||||
console.log('got message!', msg.type) |
||||
switch(msg.type){ |
||||
|
||||
case 'addUnconfirmedTx': |
||||
addTransaction(msg.payload) |
||||
return |
||||
|
||||
case 'removeUnconfirmedTx': |
||||
removeTransaction(msg.payload) |
||||
return |
||||
|
||||
} |
||||
} |
||||
|
||||
function addTransaction(tx){ |
||||
pendingTxs.push(tx) |
||||
var serialized = serializeTx(tx) |
||||
var hash = simpleHash(serialized) |
||||
console.log('add tx: ', tx.id, hash, serializeTx(tx), tx) |
||||
unconfirmedTxs[hash] = tx |
||||
var data = {} |
||||
data[hash] = serialized |
||||
chrome.storage.sync.set(data) |
||||
// trigger ui changes
|
||||
updateBadge() |
||||
} |
||||
|
||||
function removeTransaction(serialized){ |
||||
var hash = simpleHash(serialized) |
||||
delete unconfirmedTxs[hash] |
||||
var data = {} |
||||
data[hash] = undefined |
||||
chrome.storage.sync.set(data) |
||||
// trigger ui changes
|
||||
updateBadge() |
||||
} |
||||
|
||||
function updateBadge(){ |
||||
var label = '' |
||||
if (pendingTxs.length) { |
||||
label = String(pendingTxs.length) |
||||
var count = Object.keys(unconfirmedTxs).length |
||||
if (count) { |
||||
label = String(count) |
||||
} |
||||
chrome.browserAction.setBadgeText({text: label}) |
||||
chrome.browserAction.setBadgeBackgroundColor({color: '#506F8B'}) |
||||
} |
||||
|
||||
function simpleHash(input) { |
||||
var hash = 0, i, chr, len |
||||
if (input.length == 0) return hash |
||||
for (i = 0, len = input.length; i < len; i++) { |
||||
chr = input.charCodeAt(i) |
||||
hash = ((hash << 5) - hash) + chr |
||||
hash |= 0 // Convert to 32bit integer
|
||||
} |
||||
return hash |
||||
} |
||||
|
||||
function serializeTx(tx){ |
||||
return JSON.stringify(tx) |
||||
} |
||||
|
||||
function deserializeTx(tx){ |
||||
return JSON.parse(tx) |
||||
} |
Loading…
Reference in new issue