From 23ccad49151883aae9285552112b4e4c568fa63f Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 25 Apr 2014 16:23:40 +0800 Subject: [PATCH] Separate the webContents code in a new file. --- atom.gyp | 1 + atom/browser/api/lib/browser-window.coffee | 23 +--------------------- atom/browser/api/lib/web-contents.coffee | 23 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 22 deletions(-) create mode 100644 atom/browser/api/lib/web-contents.coffee diff --git a/atom.gyp b/atom.gyp index 2e2bc0359..016260065 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 f4e3a23ef..a09c3fe71 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 000000000..f3795afe7 --- /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