|
@@ -2,8 +2,8 @@
|
|
|
|
|
|
const { webContents } = require('electron')
|
|
|
const { ipcMainInternal } = require('@electron/internal/browser/ipc-main-internal')
|
|
|
+const ipcMainUtils = require('@electron/internal/browser/ipc-main-internal-utils')
|
|
|
const parseFeaturesString = require('@electron/internal/common/parse-features-string')
|
|
|
-const errorUtils = require('@electron/internal/common/error-utils')
|
|
|
const {
|
|
|
syncMethods,
|
|
|
asyncCallbackMethods,
|
|
@@ -341,21 +341,18 @@ const isWebViewTagEnabled = function (contents) {
|
|
|
}
|
|
|
|
|
|
const handleMessage = function (channel, handler) {
|
|
|
- ipcMainInternal.on(channel, (event, ...args) => {
|
|
|
+ ipcMainUtils.handle(channel, (event, ...args) => {
|
|
|
if (isWebViewTagEnabled(event.sender)) {
|
|
|
- handler(event, ...args)
|
|
|
+ return handler(event, ...args)
|
|
|
} else {
|
|
|
- event.returnValue = null
|
|
|
+ console.error(`<webview> IPC message ${channel} sent by WebContents with <webview> disabled (${event.sender.id})`)
|
|
|
+ throw new Error('<webview> disabled')
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-handleMessage('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', function (event, params, requestId) {
|
|
|
- event._replyInternal(`ELECTRON_RESPONSE_${requestId}`, createGuest(event.sender, params))
|
|
|
-})
|
|
|
-
|
|
|
-handleMessage('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST_SYNC', function (event, params) {
|
|
|
- event.returnValue = createGuest(event.sender, params)
|
|
|
+handleMessage('ELECTRON_GUEST_VIEW_MANAGER_CREATE_GUEST', function (event, params) {
|
|
|
+ return createGuest(event.sender, params)
|
|
|
})
|
|
|
|
|
|
handleMessage('ELECTRON_GUEST_VIEW_MANAGER_DESTROY_GUEST', function (event, guestInstanceId) {
|
|
@@ -385,36 +382,19 @@ ipcMainInternal.on('ELECTRON_GUEST_VIEW_MANAGER_FOCUS_CHANGE', function (event,
|
|
|
}
|
|
|
})
|
|
|
|
|
|
-handleMessage('ELECTRON_GUEST_VIEW_MANAGER_ASYNC_CALL', function (event, requestId, guestInstanceId, method, args, hasCallback) {
|
|
|
- new Promise(resolve => {
|
|
|
- const guest = getGuestForWebContents(guestInstanceId, event.sender)
|
|
|
- if (!asyncCallbackMethods.has(method) && !asyncPromiseMethods.has(method)) {
|
|
|
- throw new Error(`Invalid method: ${method}`)
|
|
|
- }
|
|
|
- if (hasCallback) {
|
|
|
- guest[method](...args, resolve)
|
|
|
- } else {
|
|
|
- resolve(guest[method](...args))
|
|
|
- }
|
|
|
- }).then(result => {
|
|
|
- return [null, result]
|
|
|
- }, error => {
|
|
|
- return [errorUtils.serialize(error)]
|
|
|
- }).then(responseArgs => {
|
|
|
- event._replyInternal(`ELECTRON_GUEST_VIEW_MANAGER_ASYNC_CALL_RESPONSE_${requestId}`, ...responseArgs)
|
|
|
- })
|
|
|
-})
|
|
|
+const allMethods = new Set([
|
|
|
+ ...syncMethods,
|
|
|
+ ...asyncCallbackMethods,
|
|
|
+ ...asyncPromiseMethods
|
|
|
+])
|
|
|
|
|
|
-handleMessage('ELECTRON_GUEST_VIEW_MANAGER_SYNC_CALL', function (event, guestInstanceId, method, args) {
|
|
|
- try {
|
|
|
- const guest = getGuestForWebContents(guestInstanceId, event.sender)
|
|
|
- if (!syncMethods.has(method)) {
|
|
|
- throw new Error(`Invalid method: ${method}`)
|
|
|
- }
|
|
|
- event.returnValue = [null, guest[method](...args)]
|
|
|
- } catch (error) {
|
|
|
- event.returnValue = [errorUtils.serialize(error)]
|
|
|
+handleMessage('ELECTRON_GUEST_VIEW_MANAGER_CALL', function (event, guestInstanceId, method, args) {
|
|
|
+ const guest = getGuestForWebContents(guestInstanceId, event.sender)
|
|
|
+ if (!allMethods.has(method)) {
|
|
|
+ throw new Error(`Invalid method: ${method}`)
|
|
|
}
|
|
|
+
|
|
|
+ return guest[method](...args)
|
|
|
})
|
|
|
|
|
|
// Returns WebContents from its guest id hosted in given webContents.
|