|
@@ -7,7 +7,11 @@ const ipcRenderer = require('@electron/internal/renderer/ipc-renderer-internal')
|
|
|
const guestViewInternal = require('@electron/internal/renderer/web-view/guest-view-internal')
|
|
|
const webViewConstants = require('@electron/internal/renderer/web-view/web-view-constants')
|
|
|
const errorUtils = require('@electron/internal/common/error-utils')
|
|
|
-const { syncMethods, asyncMethods } = require('@electron/internal/common/web-view-methods')
|
|
|
+const {
|
|
|
+ syncMethods,
|
|
|
+ asyncCallbackMethods,
|
|
|
+ asyncPromiseMethods
|
|
|
+} = require('@electron/internal/common/web-view-methods')
|
|
|
|
|
|
// ID generator.
|
|
|
let nextId = 0
|
|
@@ -254,9 +258,35 @@ const setupMethods = (WebViewElement) => {
|
|
|
ipcRenderer.send('ELECTRON_GUEST_VIEW_MANAGER_ASYNC_CALL', requestId, getGuestInstanceId(this), method, args, callback != null)
|
|
|
}
|
|
|
}
|
|
|
- for (const method of asyncMethods) {
|
|
|
+
|
|
|
+ for (const method of asyncCallbackMethods) {
|
|
|
WebViewElement.prototype[method] = createNonBlockHandler(method)
|
|
|
}
|
|
|
+
|
|
|
+ const createPromiseHandler = function (method) {
|
|
|
+ return function (...args) {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ const callback = (typeof args[args.length - 1] === 'function') ? args.pop() : null
|
|
|
+ const requestId = getNextId()
|
|
|
+
|
|
|
+ ipcRenderer.once(`ELECTRON_GUEST_VIEW_MANAGER_ASYNC_CALL_RESPONSE_${requestId}`, function (event, error, result) {
|
|
|
+ if (error == null) {
|
|
|
+ if (callback) {
|
|
|
+ callback(result)
|
|
|
+ }
|
|
|
+ resolve(result)
|
|
|
+ } else {
|
|
|
+ reject(errorUtils.deserialize(error))
|
|
|
+ }
|
|
|
+ })
|
|
|
+ ipcRenderer.send('ELECTRON_GUEST_VIEW_MANAGER_ASYNC_CALL', requestId, getGuestInstanceId(this), method, args, callback != null)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (const method of asyncPromiseMethods) {
|
|
|
+ WebViewElement.prototype[method] = createPromiseHandler(method)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
module.exports = { setupAttributes, setupMethods, guestViewInternal, webFrame, WebViewImpl }
|