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 'remote-object' then objectsRegistry.get meta.id
 | 
				
			||||||
      when 'array' then unwrapArgs processId, routingId, meta.value
 | 
					      when 'array' then unwrapArgs processId, routingId, meta.value
 | 
				
			||||||
      when 'object'
 | 
					      when 'object'
 | 
				
			||||||
        ret = {}
 | 
					        ret = v8Util.createObjectWithName meta.name
 | 
				
			||||||
        for member in meta.members
 | 
					        for member in meta.members
 | 
				
			||||||
          ret[member.name] = metaToValue(member.value)
 | 
					          ret[member.name] = metaToValue(member.value)
 | 
				
			||||||
        ret
 | 
					        ret
 | 
				
			||||||
 | 
					      when 'function-with-return-value'
 | 
				
			||||||
 | 
					        returnValue = metaToValue meta.value
 | 
				
			||||||
 | 
					        -> returnValue
 | 
				
			||||||
      when 'function'
 | 
					      when 'function'
 | 
				
			||||||
        ret = ->
 | 
					        ret = ->
 | 
				
			||||||
          ipc.sendChannel processId, routingId, 'ATOM_RENDERER_CALLBACK', meta.id, valueToMeta(processId, routingId, arguments)
 | 
					          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'
 | 
					    else if value? and typeof value is 'object' and v8Util.getHiddenValue value, 'atomId'
 | 
				
			||||||
      type: 'remote-object', id: v8Util.getHiddenValue value, 'atomId'
 | 
					      type: 'remote-object', id: v8Util.getHiddenValue value, 'atomId'
 | 
				
			||||||
    else if value? and typeof value is 'object'
 | 
					    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.members.push(name: prop, value: valueToMeta(field)) for prop, field of value
 | 
				
			||||||
      ret
 | 
					      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'
 | 
					    else if typeof value is 'function'
 | 
				
			||||||
      type: 'function', id: callbacksRegistry.add(value)
 | 
					      type: 'function', id: callbacksRegistry.add(value)
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
| 
						 | 
					@ -121,3 +123,9 @@ processCache = null
 | 
				
			||||||
exports.__defineGetter__ 'process', ->
 | 
					exports.__defineGetter__ 'process', ->
 | 
				
			||||||
  processCache = exports.getGlobal('process') unless processCache?
 | 
					  processCache = exports.getGlobal('process') unless processCache?
 | 
				
			||||||
  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')
 | 
					      a = remote.require path.join(fixtures, 'module', 'id.js')
 | 
				
			||||||
      assert.equal a.id, 1127
 | 
					      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', ->
 | 
					    it 'can change its properties', ->
 | 
				
			||||||
      property = remote.require path.join(fixtures, 'module', 'property.js')
 | 
					      property = remote.require path.join(fixtures, 'module', 'property.js')
 | 
				
			||||||
      assert.equal property.property, 1127
 | 
					      assert.equal property.property, 1127
 | 
				
			||||||
| 
						 | 
					@ -28,6 +35,12 @@ describe 'ipc', ->
 | 
				
			||||||
      # Restore.
 | 
					      # Restore.
 | 
				
			||||||
      property.property = 1127
 | 
					      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', ->
 | 
					  describe 'ipc.send', ->
 | 
				
			||||||
    it 'should work when sending an object containing id property', (done) ->
 | 
					    it 'should work when sending an object containing id property', (done) ->
 | 
				
			||||||
      obj = id: 1, name: 'ly'
 | 
					      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
		Add a link
		
	
		Reference in a new issue