Add remote.createFunctionWithReturnValue API.
This commit is contained in:
parent
d88676bf65
commit
c86acc4cd7
5 changed files with 33 additions and 3 deletions
|
@ -44,10 +44,13 @@ unwrapArgs = (processId, routingId, args) ->
|
|||
when 'remote-object' then objectsRegistry.get meta.id
|
||||
when 'array' then unwrapArgs processId, routingId, meta.value
|
||||
when 'object'
|
||||
ret = {}
|
||||
ret = v8Util.createObjectWithName meta.name
|
||||
for member in meta.members
|
||||
ret[member.name] = metaToValue(member.value)
|
||||
ret
|
||||
when 'function-with-return-value'
|
||||
returnValue = metaToValue meta.value
|
||||
-> returnValue
|
||||
when 'function'
|
||||
ret = ->
|
||||
ipc.sendChannel processId, routingId, 'ATOM_RENDERER_CALLBACK', meta.id, valueToMeta(processId, routingId, arguments)
|
||||
|
|
|
@ -13,9 +13,11 @@ wrapArgs = (args) ->
|
|||
else if value? and typeof value is 'object' and v8Util.getHiddenValue value, 'atomId'
|
||||
type: 'remote-object', id: v8Util.getHiddenValue value, 'atomId'
|
||||
else if value? and typeof value is 'object'
|
||||
ret = type: 'object', members: []
|
||||
ret = type: 'object', name: value.constructor.name, members: []
|
||||
ret.members.push(name: prop, value: valueToMeta(field)) for prop, field of value
|
||||
ret
|
||||
else if typeof value is 'function' and v8Util.getHiddenValue value, 'returnValue'
|
||||
type: 'function-with-return-value', value: valueToMeta(value())
|
||||
else if typeof value is 'function'
|
||||
type: 'function', id: callbacksRegistry.add(value)
|
||||
else
|
||||
|
@ -121,3 +123,9 @@ processCache = null
|
|||
exports.__defineGetter__ 'process', ->
|
||||
processCache = exports.getGlobal('process') unless processCache?
|
||||
processCache
|
||||
|
||||
# Create a funtion that will return the specifed value when called in browser.
|
||||
exports.createFunctionWithReturnValue = (returnValue) ->
|
||||
func = -> returnValue
|
||||
v8Util.setHiddenValue func, 'returnValue', true
|
||||
func
|
||||
|
|
|
@ -16,7 +16,14 @@ describe 'ipc', ->
|
|||
a = remote.require path.join(fixtures, 'module', 'id.js')
|
||||
assert.equal a.id, 1127
|
||||
|
||||
describe 'remote object', ->
|
||||
describe 'remote.createFunctionWithReturnValue', ->
|
||||
it 'should be called in browser synchronously', ->
|
||||
buf = new Buffer('test')
|
||||
call = remote.require path.join(fixtures, 'module', 'call.js')
|
||||
result = call.call remote.createFunctionWithReturnValue(buf)
|
||||
assert.equal result.constructor.name, 'Buffer'
|
||||
|
||||
describe 'remote object in renderer', ->
|
||||
it 'can change its properties', ->
|
||||
property = remote.require path.join(fixtures, 'module', 'property.js')
|
||||
assert.equal property.property, 1127
|
||||
|
@ -28,6 +35,12 @@ describe 'ipc', ->
|
|||
# Restore.
|
||||
property.property = 1127
|
||||
|
||||
describe 'remote value in browser', ->
|
||||
it 'keeps its constructor name for objects', ->
|
||||
buf = new Buffer('test')
|
||||
print_name = remote.require path.join(fixtures, 'module', 'print_name.js')
|
||||
assert.equal print_name.print(buf), 'Buffer'
|
||||
|
||||
describe 'ipc.send', ->
|
||||
it 'should work when sending an object containing id property', (done) ->
|
||||
obj = id: 1, name: 'ly'
|
||||
|
|
3
spec/fixtures/module/call.js
vendored
Normal file
3
spec/fixtures/module/call.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
exports.call = function(func) {
|
||||
return func();
|
||||
}
|
3
spec/fixtures/module/print_name.js
vendored
Normal file
3
spec/fixtures/module/print_name.js
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
exports.print = function(obj) {
|
||||
return obj.constructor.name;
|
||||
}
|
Loading…
Add table
Reference in a new issue