From b444b35215928006686444ffa392a06a1186bb98 Mon Sep 17 00:00:00 2001 From: Maksim Date: Wed, 6 Jul 2016 17:02:56 +0800 Subject: [PATCH 1/6] Update remote.js --- lib/renderer/api/remote.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/renderer/api/remote.js b/lib/renderer/api/remote.js index b5c9fe3a0e4..a85cb6262a3 100644 --- a/lib/renderer/api/remote.js +++ b/lib/renderer/api/remote.js @@ -60,7 +60,7 @@ var wrapArgs = function (args, visited) { ret = { type: 'object', - name: value.constructor.name, + name: (value.constructor && value.constructor.name) ? value.constructor.name : 'Object', members: [] } for (prop in value) { From a1209b69b3c67964952f37a5f9eda0d2d8463939 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 6 Jul 2016 09:11:01 -0700 Subject: [PATCH 2/6] Add spec for constructor-less param --- spec/api-ipc-spec.js | 1 + spec/fixtures/module/no-prototype.js | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index 2bf5213cae3..595cae95909 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -34,6 +34,7 @@ describe('ipc module', function () { assert.equal(a.foo.bar, 'baz') assert.equal(a.foo.baz, false) assert.equal(a.bar, 1234) + assert.equal(a.baz(Object.create(null)), 'hello') }) it('should search module from the user app', function () { diff --git a/spec/fixtures/module/no-prototype.js b/spec/fixtures/module/no-prototype.js index f298925b80f..9fea1b31d30 100644 --- a/spec/fixtures/module/no-prototype.js +++ b/spec/fixtures/module/no-prototype.js @@ -1,4 +1,10 @@ const foo = Object.create(null) foo.bar = 'baz' foo.baz = false -module.exports = {foo: foo, bar: 1234} +module.exports = { + foo: foo, + bar: 1234, + baz: function () { + return 'hello' + } +} From d67dfd09fdd6c7b134778bbb9a01f91f71c0562d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 6 Jul 2016 09:18:12 -0700 Subject: [PATCH 3/6] Pass through empty constructor names --- lib/renderer/api/remote.js | 2 +- spec/api-ipc-spec.js | 3 ++- spec/fixtures/module/no-prototype.js | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/renderer/api/remote.js b/lib/renderer/api/remote.js index a85cb6262a3..b120bed0fe0 100644 --- a/lib/renderer/api/remote.js +++ b/lib/renderer/api/remote.js @@ -60,7 +60,7 @@ var wrapArgs = function (args, visited) { ret = { type: 'object', - name: (value.constructor && value.constructor.name) ? value.constructor.name : 'Object', + name: value.constructor != null ? value.constructor.name : 'Object', members: [] } for (prop in value) { diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index 595cae95909..6b0222d62ee 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -34,7 +34,8 @@ describe('ipc module', function () { assert.equal(a.foo.bar, 'baz') assert.equal(a.foo.baz, false) assert.equal(a.bar, 1234) - assert.equal(a.baz(Object.create(null)), 'hello') + assert.equal(a.getConstructorName(Object.create(null)), 'Object') + assert.equal(a.getConstructorName(new (class {})), '') }) it('should search module from the user app', function () { diff --git a/spec/fixtures/module/no-prototype.js b/spec/fixtures/module/no-prototype.js index 9fea1b31d30..3dce313774c 100644 --- a/spec/fixtures/module/no-prototype.js +++ b/spec/fixtures/module/no-prototype.js @@ -4,7 +4,7 @@ foo.baz = false module.exports = { foo: foo, bar: 1234, - baz: function () { - return 'hello' + getConstructorName: function (value) { + return value.constructor.name } } From a9b43a0fc9b9ae00fc02eb08e2f012040b8f303a Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 6 Jul 2016 13:06:48 -0700 Subject: [PATCH 4/6] Use empty string constructor name when missing --- lib/renderer/api/remote.js | 2 +- spec/api-ipc-spec.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/renderer/api/remote.js b/lib/renderer/api/remote.js index b120bed0fe0..79fe41ed566 100644 --- a/lib/renderer/api/remote.js +++ b/lib/renderer/api/remote.js @@ -60,7 +60,7 @@ var wrapArgs = function (args, visited) { ret = { type: 'object', - name: value.constructor != null ? value.constructor.name : 'Object', + name: value.constructor != null ? value.constructor.name : '', members: [] } for (prop in value) { diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index 6b0222d62ee..2d439af0399 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -31,10 +31,11 @@ describe('ipc module', function () { it('should work when object has no prototype', function () { var a = remote.require(path.join(fixtures, 'module', 'no-prototype.js')) + assert.equal(a.foo.constructor.name, '') assert.equal(a.foo.bar, 'baz') assert.equal(a.foo.baz, false) assert.equal(a.bar, 1234) - assert.equal(a.getConstructorName(Object.create(null)), 'Object') + assert.equal(a.getConstructorName(Object.create(null)), '') assert.equal(a.getConstructorName(new (class {})), '') }) From 56739e10e3f6b30cacd752618fa60e8438072526 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 6 Jul 2016 13:11:25 -0700 Subject: [PATCH 5/6] Add anonymous class to exports and assert it --- spec/api-ipc-spec.js | 3 ++- spec/fixtures/module/no-prototype.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index 2d439af0399..e98db97107d 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -35,8 +35,9 @@ describe('ipc module', function () { assert.equal(a.foo.bar, 'baz') assert.equal(a.foo.baz, false) assert.equal(a.bar, 1234) + assert.equal(a.anonymous.constructor.name, '') assert.equal(a.getConstructorName(Object.create(null)), '') - assert.equal(a.getConstructorName(new (class {})), '') + assert.equal(a.getConstructorName(new class {}), '') }) it('should search module from the user app', function () { diff --git a/spec/fixtures/module/no-prototype.js b/spec/fixtures/module/no-prototype.js index 3dce313774c..4d326819984 100644 --- a/spec/fixtures/module/no-prototype.js +++ b/spec/fixtures/module/no-prototype.js @@ -4,6 +4,7 @@ foo.baz = false module.exports = { foo: foo, bar: 1234, + anonymous: new class {}, getConstructorName: function (value) { return value.constructor.name } From 2e029942777d8d5312fe511960a3674da287b7fa Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 6 Jul 2016 15:45:35 -0700 Subject: [PATCH 6/6] Add parens about constructor --- spec/api-ipc-spec.js | 2 +- spec/fixtures/module/no-prototype.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index e98db97107d..0d9ba0ddeef 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -37,7 +37,7 @@ describe('ipc module', function () { assert.equal(a.bar, 1234) assert.equal(a.anonymous.constructor.name, '') assert.equal(a.getConstructorName(Object.create(null)), '') - assert.equal(a.getConstructorName(new class {}), '') + assert.equal(a.getConstructorName(new (class {})), '') }) it('should search module from the user app', function () { diff --git a/spec/fixtures/module/no-prototype.js b/spec/fixtures/module/no-prototype.js index 4d326819984..46cc4fe8385 100644 --- a/spec/fixtures/module/no-prototype.js +++ b/spec/fixtures/module/no-prototype.js @@ -4,7 +4,7 @@ foo.baz = false module.exports = { foo: foo, bar: 1234, - anonymous: new class {}, + anonymous: new (class {}), getConstructorName: function (value) { return value.constructor.name }