diff --git a/atom/browser/lib/rpc-server.js b/atom/browser/lib/rpc-server.js index a31c6e146e88..5399c192e821 100644 --- a/atom/browser/lib/rpc-server.js +++ b/atom/browser/lib/rpc-server.js @@ -16,7 +16,7 @@ const FUNCTION_PROPERTIES = [ let rendererFunctions = {}; // Return the description of object's members: -let getObjectMemebers = function(object) { +let getObjectMembers = function(object) { let names = Object.getOwnPropertyNames(object); // For Function, we should not override following properties even though they // are "own" properties. @@ -46,7 +46,7 @@ let getObjectPrototype = function(object) { if (proto === null || proto === Object.prototype) return null; return { - members: getObjectMemebers(proto), + members: getObjectMembers(proto), proto: getObjectPrototype(proto), }; }; @@ -101,7 +101,7 @@ var valueToMeta = function(sender, value, optimizeSimpleObject) { // passed to renderer we would assume the renderer keeps a reference of // it. meta.id = objectsRegistry.add(sender, value); - meta.members = getObjectMemebers(value); + meta.members = getObjectMembers(value); meta.proto = getObjectPrototype(value); } else if (meta.type === 'buffer') { meta.value = Array.prototype.slice.call(value, 0); diff --git a/atom/renderer/api/lib/remote.js b/atom/renderer/api/lib/remote.js index a9798338faa6..07aa24782935 100644 --- a/atom/renderer/api/lib/remote.js +++ b/atom/renderer/api/lib/remote.js @@ -110,6 +110,8 @@ let setObjectMembers = function(object, metaId, members) { return metaToValue(ret); } }; + descriptor.writable = true; + descriptor.configurable = true; descriptor.value = remoteMemberFunction; } else if (member.type === 'get') { descriptor.get = function() { diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index 1ac717cd9d3e..641d89270cbc 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -63,6 +63,16 @@ describe('ipc module', function() { var obj = new call.constructor; assert.equal(obj.test, 'test'); }); + + it('can reassign and delete its member functions', function() { + var remoteFunctions = remote.require(path.join(fixtures, 'module', 'function.js')); + assert.equal(remoteFunctions.aFunction(), 1127); + + remoteFunctions.aFunction = function () { return 1234; }; + assert.equal(remoteFunctions.aFunction(), 1234); + + assert.equal(delete remoteFunctions.aFunction, true); + }); }); describe('remote value in browser', function() { diff --git a/spec/fixtures/module/function.js b/spec/fixtures/module/function.js new file mode 100644 index 000000000000..803a2838d372 --- /dev/null +++ b/spec/fixtures/module/function.js @@ -0,0 +1 @@ +exports.aFunction = function() { return 1127; };