diff --git a/atom.gyp b/atom.gyp index 2e2bc03593..016260065b 100644 --- a/atom.gyp +++ b/atom.gyp @@ -24,6 +24,7 @@ 'atom/browser/api/lib/menu-item.coffee', 'atom/browser/api/lib/power-monitor.coffee', 'atom/browser/api/lib/protocol.coffee', + 'atom/browser/api/lib/web-contents.coffee', 'atom/browser/lib/init.coffee', 'atom/browser/lib/objects-registry.coffee', 'atom/browser/lib/rpc-server.coffee', diff --git a/atom/browser/api/lib/browser-window.coffee b/atom/browser/api/lib/browser-window.coffee index f4e3a23ef6..a09c3fe71a 100644 --- a/atom/browser/api/lib/browser-window.coffee +++ b/atom/browser/api/lib/browser-window.coffee @@ -1,32 +1,11 @@ EventEmitter = require('events').EventEmitter IDWeakMap = require 'id-weak-map' app = require 'app' -ipc = require 'ipc' +wrapWebContents = require('web-contents').wrap BrowserWindow = process.atomBinding('window').BrowserWindow BrowserWindow::__proto__ = EventEmitter.prototype -wrapWebContents = (webContents) -> - return null unless webContents.isAlive() - # webContents is an EventEmitter. - webContents.__proto__ = EventEmitter.prototype - - # Wrap around the send method. - webContents.send = (args...) -> - @_send 'ATOM_INTERNAL_MESSAGE', [args...] - - # Dispatch the ipc messages. - webContents.on 'ipc-message', (event, channel, args...) => - Object.defineProperty event, 'sender', value: webContents - ipc.emit channel, event, args... - webContents.on 'ipc-message-sync', (event, channel, args...) => - set = (value) -> event.sendReply JSON.stringify(value) - Object.defineProperty event, 'returnValue', {set} - Object.defineProperty event, 'sender', value: webContents - ipc.emit channel, event, args... - - webContents - # Store all created windows in the weak map. BrowserWindow.windows = new IDWeakMap diff --git a/atom/browser/api/lib/web-contents.coffee b/atom/browser/api/lib/web-contents.coffee new file mode 100644 index 0000000000..f3795afe7d --- /dev/null +++ b/atom/browser/api/lib/web-contents.coffee @@ -0,0 +1,23 @@ +EventEmitter = require('events').EventEmitter +ipc = require 'ipc' + +module.exports.wrap = (webContents) -> + return null unless webContents.isAlive() + + # webContents is an EventEmitter. + webContents.__proto__ = EventEmitter.prototype + + # Add the send method. + webContents.send = (args...) -> + @_send 'ATOM_INTERNAL_MESSAGE', [args...] + + # Dispatch IPC messages to the ipc module. + webContents.on 'ipc-message', (event, channel, args...) => + Object.defineProperty event, 'sender', value: webContents + ipc.emit channel, event, args... + webContents.on 'ipc-message-sync', (event, channel, args...) => + Object.defineProperty event, 'returnValue', set: (value) -> event.sendReply JSON.stringify(value) + Object.defineProperty event, 'sender', value: webContents + ipc.emit channel, event, args... + + webContents