1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 19:26:13 +02:00
metamask-extension/app/scripts/background.js

127 lines
2.8 KiB
JavaScript
Raw Normal View History

2015-08-02 01:33:31 +02:00
const identitiesUrl = 'https://alpha.metamask.io/identities/'
const messagingChannelName = 'metamask'
2015-08-01 03:38:02 +02:00
var unsignedTxs = {}
2015-08-01 03:38:02 +02:00
2015-08-02 01:33:31 +02:00
// setup badge click handler
chrome.browserAction.onClicked.addListener(function(activeTab) {
chrome.tabs.create({ url: identitiesUrl })
})
// setup messaging
chrome.runtime.onConnect.addListener(connectRemote)
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()
2015-08-02 01:33:31 +02:00
})
// listen to storage changes
chrome.storage.onChanged.addListener(function(changes, namespace) {
for (key in changes) {
var storageChange = changes[key]
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()
2015-08-02 01:33:31 +02:00
function handleMessage(msg){
console.log('got message!', msg.type)
switch(msg.type){
case 'addUnsignedTx':
addTransaction(msg.payload)
return
case 'removeUnsignedTx':
removeTransaction(msg.payload)
return
}
}
2015-08-02 01:33:31 +02:00
function addTransaction(tx){
var serialized = serializeTx(tx)
var hash = simpleHash(serialized)
unsignedTxs[hash] = tx
var data = {}
data[hash] = serialized
chrome.storage.sync.set(data)
// trigger ui changes
updateBadge()
}
function removeTransaction(serialized){
var hash = simpleHash(serialized)
delete unsignedTxs[hash]
var data = {}
data[hash] = undefined
chrome.storage.sync.set(data)
// trigger ui changes
updateBadge()
}
function exportUnsignedTxs(remote){
console.log('exporting txs!', unsignedTxs)
var data = {
type: 'importUnsignedTxs',
payload: getValues(unsignedTxs),
}
remote.postMessage(data)
}
function updateBadge(){
var label = ''
var count = Object.keys(unsignedTxs).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)
}
function getValues(obj){
var output = []
for (var key in obj) {
output.push(obj[key])
}
return output
}