|
@@ -151,9 +151,10 @@ const throwRPCError = function (message) {
|
|
|
throw error
|
|
|
}
|
|
|
|
|
|
-const removeRemoteListenersAndLogWarning = (sender, meta, callIntoRenderer) => {
|
|
|
+const removeRemoteListenersAndLogWarning = (sender, callIntoRenderer) => {
|
|
|
+ const location = v8Util.getHiddenValue(callIntoRenderer, 'location')
|
|
|
let message = `Attempting to call a function in a renderer window that has been closed or released.` +
|
|
|
- `\nFunction provided here: ${meta.location}`
|
|
|
+ `\nFunction provided here: ${location}`
|
|
|
|
|
|
if (sender instanceof EventEmitter) {
|
|
|
const remoteEvents = sender.eventNames().filter((eventName) => {
|
|
@@ -213,14 +214,14 @@ const unwrapArgs = function (sender, contextId, args) {
|
|
|
return rendererFunctions.get(objectId)
|
|
|
}
|
|
|
|
|
|
- const processId = sender.getProcessId()
|
|
|
const callIntoRenderer = function (...args) {
|
|
|
- if (!sender.isDestroyed() && processId === sender.getProcessId()) {
|
|
|
+ if (!sender.isDestroyed()) {
|
|
|
sender._sendInternal('ELECTRON_RENDERER_CALLBACK', contextId, meta.id, valueToMeta(sender, contextId, args))
|
|
|
} else {
|
|
|
- removeRemoteListenersAndLogWarning(this, meta, callIntoRenderer)
|
|
|
+ removeRemoteListenersAndLogWarning(this, callIntoRenderer)
|
|
|
}
|
|
|
}
|
|
|
+ v8Util.setHiddenValue(callIntoRenderer, 'location', meta.location)
|
|
|
Object.defineProperty(callIntoRenderer, 'length', { value: meta.length })
|
|
|
|
|
|
v8Util.setRemoteCallbackFreer(callIntoRenderer, contextId, meta.id, sender)
|
|
@@ -280,6 +281,15 @@ const handleRemoteCommand = function (channel, handler) {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+handleRemoteCommand('ELECTRON_BROWSER_WRONG_CONTEXT_ERROR', function (event, contextId, passedContextId, id) {
|
|
|
+ const objectId = [passedContextId, id]
|
|
|
+ if (!rendererFunctions.has(objectId)) {
|
|
|
+ // Do nothing if the error has already been reported before.
|
|
|
+ return
|
|
|
+ }
|
|
|
+ removeRemoteListenersAndLogWarning(event.sender, rendererFunctions.get(objectId))
|
|
|
+})
|
|
|
+
|
|
|
handleRemoteCommand('ELECTRON_BROWSER_REQUIRE', function (event, contextId, module) {
|
|
|
return valueToMeta(event.sender, contextId, process.mainModule.require(module))
|
|
|
})
|