a8cb839734
Fixes atom/atom#1805.
42 lines
1.6 KiB
CoffeeScript
42 lines
1.6 KiB
CoffeeScript
EventEmitter = require('events').EventEmitter
|
|
ipc = require 'ipc'
|
|
|
|
module.exports.wrap = (webContents) ->
|
|
return null unless webContents.isAlive()
|
|
|
|
# webContents is an EventEmitter.
|
|
webContents.__proto__ = EventEmitter.prototype
|
|
|
|
# WebContents::send(channel, args..)
|
|
webContents.send = (args...) ->
|
|
@_send 'ATOM_INTERNAL_MESSAGE', [args...]
|
|
|
|
# Make sure webContents.executeJavaScript would run the code only when the
|
|
# web contents has been loaded.
|
|
webContents.loaded = false
|
|
webContents.once 'did-finish-load', -> @loaded = true
|
|
webContents.executeJavaScript = (code) ->
|
|
if @loaded
|
|
@_executeJavaScript code
|
|
else
|
|
webContents.once 'did-finish-load', @_executeJavaScript.bind(this, code)
|
|
|
|
# The processId and routingId and identify a webContents.
|
|
webContents.getId = -> "#{@getProcessId()}-#{@getRoutingId()}"
|
|
webContents.equal = (other) -> @getId() is other.getId()
|
|
|
|
# Tell the rpc server that a render view has been deleted and we need to
|
|
# release all objects owned by it.
|
|
webContents.on 'render-view-deleted', (event, processId, routingId) ->
|
|
process.emit 'ATOM_BROWSER_RELEASE_RENDER_VIEW', "#{processId}-#{routingId}"
|
|
|
|
# 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
|