2014-10-23 17:54:52 +08:00
|
|
|
ipc = require 'ipc'
|
2014-12-08 08:05:34 -08:00
|
|
|
webFrame = require 'web-frame'
|
2014-10-23 17:54:52 +08:00
|
|
|
|
|
|
|
requestId = 0
|
|
|
|
|
2014-10-25 09:05:50 +08:00
|
|
|
WEB_VIEW_EVENTS =
|
2015-08-05 17:20:23 +05:30
|
|
|
'load-commit': ['url', 'isMainFrame']
|
2014-10-25 09:05:50 +08:00
|
|
|
'did-finish-load': []
|
2015-08-31 11:18:10 +02:00
|
|
|
'did-fail-load': ['errorCode', 'errorDescription', 'validatedUrl']
|
2014-10-25 09:05:50 +08:00
|
|
|
'did-frame-finish-load': ['isMainFrame']
|
|
|
|
'did-start-loading': []
|
|
|
|
'did-stop-loading': []
|
2015-04-08 19:14:47 +05:30
|
|
|
'did-get-response-details': ['status', 'newUrl', 'originalUrl',
|
2015-05-20 21:24:59 +05:30
|
|
|
'httpResponseCode', 'requestMethod', 'referrer',
|
|
|
|
'headers']
|
2014-10-25 09:05:50 +08:00
|
|
|
'did-get-redirect-request': ['oldUrl', 'newUrl', 'isMainFrame']
|
2015-04-29 19:19:31 +05:30
|
|
|
'dom-ready': []
|
2014-10-25 10:01:19 +08:00
|
|
|
'console-message': ['level', 'message', 'line', 'sourceId']
|
2015-09-22 23:39:31 +08:00
|
|
|
'new-window': ['url', 'frameName', 'disposition', 'options']
|
2014-10-25 10:01:19 +08:00
|
|
|
'close': []
|
2014-10-25 09:05:50 +08:00
|
|
|
'crashed': []
|
2015-05-13 01:05:56 +05:30
|
|
|
'gpu-crashed': []
|
|
|
|
'plugin-crashed': ['name', 'version']
|
2014-10-25 09:05:50 +08:00
|
|
|
'destroyed': []
|
2015-04-05 14:50:42 +05:30
|
|
|
'page-title-set': ['title', 'explicitSet']
|
2015-04-20 12:20:04 +05:30
|
|
|
'page-favicon-updated': ['favicons']
|
2015-05-19 14:06:19 +05:30
|
|
|
'enter-html-full-screen': []
|
|
|
|
'leave-html-full-screen': []
|
2014-10-25 09:05:50 +08:00
|
|
|
|
|
|
|
dispatchEvent = (webView, event, args...) ->
|
2015-07-31 20:16:26 +02:00
|
|
|
throw new Error("Unknown event #{event}") unless WEB_VIEW_EVENTS[event]?
|
2014-10-25 09:05:50 +08:00
|
|
|
domEvent = new Event(event)
|
|
|
|
for f, i in WEB_VIEW_EVENTS[event]
|
|
|
|
domEvent[f] = args[i]
|
2014-10-25 15:48:59 +08:00
|
|
|
webView.dispatchEvent domEvent
|
2015-08-05 17:20:23 +05:30
|
|
|
webView.onLoadCommit domEvent if event == 'load-commit'
|
2014-10-25 09:05:50 +08:00
|
|
|
|
2014-10-23 17:54:52 +08:00
|
|
|
module.exports =
|
2014-10-25 09:05:50 +08:00
|
|
|
registerEvents: (webView, viewInstanceId) ->
|
|
|
|
ipc.on "ATOM_SHELL_GUEST_VIEW_INTERNAL_DISPATCH_EVENT-#{viewInstanceId}", (event, args...) ->
|
|
|
|
dispatchEvent webView, event, args...
|
|
|
|
|
2014-12-16 21:10:53 -08:00
|
|
|
ipc.on "ATOM_SHELL_GUEST_VIEW_INTERNAL_IPC_MESSAGE-#{viewInstanceId}", (channel, args...) ->
|
|
|
|
domEvent = new Event('ipc-message')
|
|
|
|
domEvent.channel = channel
|
|
|
|
domEvent.args = [args...]
|
|
|
|
webView.dispatchEvent domEvent
|
|
|
|
|
2014-12-12 17:16:12 -08:00
|
|
|
ipc.on "ATOM_SHELL_GUEST_VIEW_INTERNAL_SIZE_CHANGED-#{viewInstanceId}", (args...) ->
|
2014-10-25 15:48:59 +08:00
|
|
|
domEvent = new Event('size-changed')
|
|
|
|
for f, i in ['oldWidth', 'oldHeight', 'newWidth', 'newHeight']
|
|
|
|
domEvent[f] = args[i]
|
|
|
|
webView.onSizeChanged domEvent
|
|
|
|
|
2015-03-23 23:07:53 +08:00
|
|
|
deregisterEvents: (viewInstanceId) ->
|
|
|
|
ipc.removeAllListeners "ATOM_SHELL_GUEST_VIEW_INTERNAL_DISPATCH_EVENT-#{viewInstanceId}"
|
|
|
|
ipc.removeAllListeners "ATOM_SHELL_GUEST_VIEW_INTERNAL_IPC_MESSAGE-#{viewInstanceId}"
|
|
|
|
ipc.removeAllListeners "ATOM_SHELL_GUEST_VIEW_INTERNAL_SIZE_CHANGED-#{viewInstanceId}"
|
|
|
|
|
2015-05-29 11:44:49 +08:00
|
|
|
createGuest: (params, callback) ->
|
2014-10-23 17:54:52 +08:00
|
|
|
requestId++
|
2015-05-29 11:44:49 +08:00
|
|
|
ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_CREATE_GUEST', params, requestId
|
2014-12-08 08:05:34 -08:00
|
|
|
ipc.once "ATOM_SHELL_RESPONSE_#{requestId}", callback
|
|
|
|
|
2015-01-12 14:17:49 -08:00
|
|
|
attachGuest: (elementInstanceId, guestInstanceId, params) ->
|
|
|
|
ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_ATTACH_GUEST', elementInstanceId, guestInstanceId, params
|
2014-12-08 08:05:34 -08:00
|
|
|
webFrame.attachGuest elementInstanceId
|
2014-10-23 17:54:52 +08:00
|
|
|
|
|
|
|
destroyGuest: (guestInstanceId) ->
|
|
|
|
ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_DESTROY_GUEST', guestInstanceId
|
2014-10-24 14:37:14 +08:00
|
|
|
|
2015-05-29 11:12:55 +08:00
|
|
|
setSize: (guestInstanceId, params) ->
|
|
|
|
ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_SIZE', guestInstanceId, params
|
2014-10-24 16:48:21 +08:00
|
|
|
|
|
|
|
setAllowTransparency: (guestInstanceId, allowtransparency) ->
|
|
|
|
ipc.send 'ATOM_SHELL_GUEST_VIEW_MANAGER_SET_ALLOW_TRANSPARENCY', guestInstanceId, allowtransparency
|