use webcontents id to identify callbacks

This commit is contained in:
Robo 2015-10-30 08:34:40 +05:30
parent 3a154ab8ea
commit 2c59f4567e
6 changed files with 25 additions and 21 deletions

View file

@ -4,8 +4,8 @@ objectsRegistry = require './objects-registry.js'
v8Util = process.atomBinding 'v8_util'
IDWeakMap = process.atomBinding('id_weak_map').IDWeakMap
# Weak reference to callback with their registry ID.
rendererCallbacks = new IDWeakMap()
# Object mapping from webcontents id to their renderer callbacks weakmap.
rendererRegistry = {}
# Convert a real value into meta data.
valueToMeta = (sender, value, optimizeSimpleObject=false) ->
@ -74,11 +74,18 @@ unwrapArgs = (sender, args) ->
returnValue = metaToValue meta.value
-> returnValue
when 'function'
webContentsId = sender.getId()
rendererCallbacks = rendererRegistry[webContentsId]
if not rendererCallbacks?
# Weak reference to callbacks with their ID
rendererCallbacks = new IDWeakMap()
rendererRegistry[webContentsId] = rendererCallbacks
if rendererCallbacks.has(meta.id)
return rendererCallbacks.get(meta.id)
rendererReleased = false
objectsRegistry.once "clear-#{sender.getId()}", ->
objectsRegistry.once "clear-#{webContentsId}", ->
rendererReleased = true
ret = ->
@ -109,6 +116,8 @@ callFunction = (event, func, caller, args) ->
# Send by BrowserWindow when its render view is deleted.
process.on 'ATOM_BROWSER_RELEASE_RENDER_VIEW', (id) ->
if rendererRegistry.id?
delete rendererRegistry.id
objectsRegistry.clear id
ipc.on 'ATOM_BROWSER_REQUIRE', (event, module) ->