From a9e22801e9a4671da2d13b338864b59195dffd70 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 4 Mar 2016 15:43:51 -0800 Subject: [PATCH 1/5] Add failing spec for reassigning remote function --- spec/api-ipc-spec.js | 8 ++++++++ spec/fixtures/module/function.js | 1 + 2 files changed, 9 insertions(+) create mode 100644 spec/fixtures/module/function.js diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index 1ac717cd9d3e..462c7bcf9762 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -63,6 +63,14 @@ describe('ipc module', function() { var obj = new call.constructor; assert.equal(obj.test, 'test'); }); + + it('can reassign 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); + }); }); 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; }; From 610a5031885474d320eeda46fdffb03884ccd867 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 4 Mar 2016 15:49:46 -0800 Subject: [PATCH 2/5] Make member functions writable --- atom/renderer/api/lib/remote.js | 1 + 1 file changed, 1 insertion(+) diff --git a/atom/renderer/api/lib/remote.js b/atom/renderer/api/lib/remote.js index a9798338faa6..6b84f74d354e 100644 --- a/atom/renderer/api/lib/remote.js +++ b/atom/renderer/api/lib/remote.js @@ -110,6 +110,7 @@ let setObjectMembers = function(object, metaId, members) { return metaToValue(ret); } }; + descriptor.writable = true; descriptor.value = remoteMemberFunction; } else if (member.type === 'get') { descriptor.get = function() { From f460d81dd09d6bc050574e3018fec372958f854b Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 4 Mar 2016 15:51:17 -0800 Subject: [PATCH 3/5] Allow remote member functions to be deleted --- atom/renderer/api/lib/remote.js | 1 + spec/api-ipc-spec.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/atom/renderer/api/lib/remote.js b/atom/renderer/api/lib/remote.js index 6b84f74d354e..07aa24782935 100644 --- a/atom/renderer/api/lib/remote.js +++ b/atom/renderer/api/lib/remote.js @@ -111,6 +111,7 @@ let setObjectMembers = function(object, metaId, members) { } }; 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 462c7bcf9762..df18835c43d0 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -70,6 +70,8 @@ describe('ipc module', function() { remoteFunctions.aFunction = function () { return 1234; }; assert.equal(remoteFunctions.aFunction(), 1234); + + assert.equal(delete remoteFunctions.aFunction, true); }); }); From 3230927f105a9140985eec7505b7d1d9a2c72ea7 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 4 Mar 2016 15:56:18 -0800 Subject: [PATCH 4/5] Mention deleting --- spec/api-ipc-spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index df18835c43d0..641d89270cbc 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -64,7 +64,7 @@ describe('ipc module', function() { assert.equal(obj.test, 'test'); }); - it('can reassign its member functions', function() { + it('can reassign and delete its member functions', function() { var remoteFunctions = remote.require(path.join(fixtures, 'module', 'function.js')); assert.equal(remoteFunctions.aFunction(), 1127); From fe9e026f9e9aaf191c9e998493f2d88c4c6f76e7 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Fri, 4 Mar 2016 15:57:21 -0800 Subject: [PATCH 5/5] getObjectMemebers -> getObjectMembers --- atom/browser/lib/rpc-server.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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);