Browse Source

fix: Inspector method overrides when contextIsolation enabled (#29886)

* fix: Inspector method overrides when contextIsolation enabled

* fix: handle DevToolsAPI call

* refactor: always use webFrame.executeJavaScript

Co-authored-by: Shelley Vohr <[email protected]>
trop[bot] 3 years ago
parent
commit
b49248d34c
1 changed files with 27 additions and 10 deletions
  1. 27 10
      lib/renderer/inspector.ts

+ 27 - 10
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<number>(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()');
   });
 };