mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
Merge pull request #4678 from atom/writable-member-functions
Make remote member functions writable/configurable
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
1
spec/fixtures/module/function.js
vendored
Normal file
1
spec/fixtures/module/function.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
exports.aFunction = function() { return 1127; };
|
||||
Reference in New Issue
Block a user