Enable passing objects and arrays when calling remote function.

This commit is contained in:
Cheng Zhao 2013-08-14 21:51:51 +08:00
parent b39df5ea87
commit 2fd91e8c96
2 changed files with 21 additions and 5 deletions

View file

@ -38,10 +38,16 @@ errorToMeta = (error) ->
# Convert array of meta data from renderer into array of real values.
unwrapArgs = (processId, routingId, args) ->
args.map (meta) ->
metaToValue = (meta) ->
switch meta.type
when 'value' then meta.value
when 'object' then objectsRegistry.get meta.id
when 'remote-object' then objectsRegistry.get meta.id
when 'array' then unwrapArgs processId, routingId, meta.value
when 'object'
ret = {}
for member in meta.members
ret[member.name] = metaToValue(member.value)
ret
when 'function'
ret = ->
ipc.sendChannel processId, routingId, 'ATOM_RENDERER_CALLBACK', meta.id, valueToMeta(processId, routingId, arguments)
@ -50,6 +56,8 @@ unwrapArgs = (processId, routingId, args) ->
ret
else throw new TypeError("Unknown type: #{meta.type}")
args.map metaToValue
ipc.on 'ATOM_BROWSER_REQUIRE', (event, processId, routingId, module) ->
try
event.result = valueToMeta processId, routingId, require(module)