aboutsummaryrefslogtreecommitdiffstats
path: root/app/scripts/lib/notifications.js
blob: d011d778b547b2b2828ece4a5fd211ef721af3d1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
const createId = require('hat')
const uiUtils = require('../../../ui/app/util')
var notificationHandlers = {}

module.exports = {
  createUnlockRequestNotification: createUnlockRequestNotification,
  createTxNotification: createTxNotification,
  createMsgNotification: createMsgNotification,
}

// notification button press
chrome.notifications.onButtonClicked.addListener(function(notificationId, buttonIndex){
  var handlers = notificationHandlers[notificationId]
  if (buttonIndex === 0) {
    handlers.confirm()
  } else {
    handlers.cancel()
  }
  chrome.notifications.clear(notificationId)
})

// notification teardown
chrome.notifications.onClosed.addListener(function(notificationId){
  delete notificationHandlers[notificationId]
})

// creation helper
function createUnlockRequestNotification(opts){
  var message = 'An Ethereum app has requested a signature. Please unlock your account.'

  var id = createId()
  chrome.notifications.create(id, {
    type: 'basic',
    iconUrl: '/images/icon-128.png',
    title: opts.title,
    message: message,
  })
  
}

function createTxNotification(opts){
  var message = [
    'Submitted by '+opts.txParams.origin,
    'to: '+uiUtils.addressSummary(opts.txParams.to),
    'from: '+uiUtils.addressSummary(opts.txParams.from),
    'value: '+uiUtils.formatBalance(opts.txParams.value),
    'data: '+uiUtils.dataSize(opts.txParams.data),
  ].join('\n')

  var id = createId()
  chrome.notifications.create(id, {
    type: 'basic',
    requireInteraction: true,
    iconUrl: '/images/icon-128.png',
    title: opts.title,
    message: message,
    buttons: [{
      title: 'confirm',
    },{
      title: 'cancel',
    }]
  })
  notificationHandlers[id] = {
    confirm: opts.confirm,
    cancel: opts.cancel,
  }
}

function createMsgNotification(opts){
  var message = [
    'Submitted by '+opts.msgParams.origin,
    'to be signed by: '+uiUtils.addressSummary(opts.msgParams.from),
    'message:\n'+opts.msgParams.data,
  ].join('\n')

  var id = createId()
  chrome.notifications.create(id, {
    type: 'basic',
    requireInteraction: true,
    iconUrl: '/images/icon-128.png',
    title: opts.title,
    message: message,
    buttons: [{
      title: 'confirm',
    },{
      title: 'cancel',
    }]
  })
  notificationHandlers[id] = {
    confirm: opts.confirm,
    cancel: opts.cancel,
  }
}