From 9b1d2d5b88f3481d671ed5d5d572e933dd7e70c5 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Fri, 25 Jun 2021 17:50:39 +0900 Subject: [PATCH] fix: Inspector method overrides when contextIsolation enabled (#29885) * fix: Inspector method overrides when contextIsolation enabled * fix: handle DevToolsAPI call * refactor: always use webFrame.executeJavaScript Co-authored-by: Shelley Vohr --- lib/renderer/inspector.ts | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/lib/renderer/inspector.ts b/lib/renderer/inspector.ts index fd0e603ee361c..e6dde7ecd8c62 100644 --- a/lib/renderer/inspector.ts +++ b/lib/renderer/inspector.ts @@ -1,16 +1,32 @@ +import { internalContextBridge } from '@electron/internal/renderer/api/context-bridge'; import { ipcRendererInternal } from '@electron/internal/renderer/ipc-renderer-internal'; import * as ipcRendererUtils from '@electron/internal/renderer/ipc-renderer-internal-utils'; +import { webFrame } from 'electron/renderer'; import { IPC_MESSAGES } from '../common/ipc-messages'; -window.onload = function () { - // Use menu API to show context menu. - window.InspectorFrontendHost!.showContextMenuAtPoint = createMenu; - - // correct for Chromium returning undefined for filesystem - window.Persistence!.FileSystemWorkspaceBinding.completeURL = completeURL; +const { contextIsolationEnabled } = internalContextBridge; - // Use dialog API to override file chooser dialog. - window.UI!.createFileSelectorElement = createFileSelectorElement; +/* Corrects for some Inspector adaptations needed in Electron. +* 1) Use menu API to show context menu. +* 2) Correct for Chromium returning undefined for filesystem. +* 3) Use dialog API to override file chooser dialog. +*/ +window.onload = function () { + if (contextIsolationEnabled) { + internalContextBridge.overrideGlobalValueFromIsolatedWorld([ + 'InspectorFrontendHost', 'showContextMenuAtPoint' + ], createMenu); + internalContextBridge.overrideGlobalValueFromIsolatedWorld([ + 'Persistence', 'FileSystemWorkspaceBinding', 'completeURL' + ], completeURL); + internalContextBridge.overrideGlobalValueFromIsolatedWorld([ + 'UI', 'createFileSelectorElement' + ], createFileSelectorElement); + } else { + window.InspectorFrontendHost!.showContextMenuAtPoint = createMenu; + window.Persistence!.FileSystemWorkspaceBinding.completeURL = completeURL; + window.UI!.createFileSelectorElement = createFileSelectorElement; + } }; // Extra / is needed as a result of MacOS requiring absolute paths @@ -36,9 +52,10 @@ const createMenu = function (x: number, y: number, items: ContextMenuItem[]) { const isEditMenu = useEditMenuItems(x, y, items); ipcRendererInternal.invoke(IPC_MESSAGES.INSPECTOR_CONTEXT_MENU, items, isEditMenu).then(id => { if (typeof id === 'number') { - window.DevToolsAPI!.contextMenuItemSelected(id); + webFrame.executeJavaScript(`window.DevToolsAPI.contextMenuItemSelected(${JSON.stringify(id)})`); } - window.DevToolsAPI!.contextMenuCleared(); + + webFrame.executeJavaScript('window.DevToolsAPI.contextMenuCleared()'); }); };