diff --git a/renderer/api/lib/remote.coffee b/renderer/api/lib/remote.coffee index 3a7436e86e34..d43feebab17b 100644 --- a/renderer/api/lib/remote.coffee +++ b/renderer/api/lib/remote.coffee @@ -87,9 +87,14 @@ window.addEventListener 'unload', (event) -> ipc.sendChannelSync 'ATOM_BROWSER_RELEASE_RENDER_VIEW' # Get remote module. +# (Just like node's require, the modules are cached permanently, note that this +# is safe leak since the object is not expected to get freed in browser) +moduleCache = {} exports.require = (module) -> + return moduleCache[module] if moduleCache[module]? + meta = ipc.sendChannelSync 'ATOM_BROWSER_REQUIRE', module - metaToValue meta + moduleCache[module] = metaToValue meta # Get object with specified id. exports.getObject = (id) -> diff --git a/spec/api/ipc.coffee b/spec/api/ipc.coffee new file mode 100644 index 000000000000..b3482185e855 --- /dev/null +++ b/spec/api/ipc.coffee @@ -0,0 +1,9 @@ +assert = require 'assert' +remote = require 'remote' + +describe 'ipc', -> + describe 'remote.require', -> + it 'should returns same object for the same module', -> + dialog1 = remote.require 'dialog' + dialog2 = remote.require 'dialog' + assert.equal dialog1, dialog2