electron/atom/common/api/lib/callbacks-registry.coffee

27 lines
723 B
CoffeeScript

savedGlobal = global # the "global.global" might be deleted later
module.exports =
class CallbacksRegistry
constructor: ->
@emptyFunc = -> throw new Error "Browser trying to call a non-exist callback
in renderer, this usually happens when renderer code forgot to release
a callback installed on objects in browser when renderer was going to be
unloaded or released."
@callbacks = {}
add: (callback) ->
id = Math.random().toString()
@callbacks[id] = callback
id
get: (id) ->
@callbacks[id] ? ->
call: (id, args...) ->
@get(id).call savedGlobal, args...
apply: (id, args...) ->
@get(id).apply savedGlobal, args...
remove: (id) ->
delete @callbacks[id]