From e25715a0e0136e77102d5a05c2f0c227d49704f4 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Sat, 20 Sep 2025 14:02:28 +0200 Subject: [PATCH 1/2] fix: Preload issues --- src/preload/index.ts | 3 +- src/renderer/ipc.ts | 4 +- .../src => preload-injection}/main.js | 15 +++---- .../package.json | 6 +-- .../src => preload-injection}/renderer.js | 4 ++ .../test.ts | 22 ++++++---- .../webpack.config.js | 44 +++++++------------ 7 files changed, 46 insertions(+), 52 deletions(-) rename test/e2e/test-apps/other/{main-process-module/src => preload-injection}/main.js (59%) rename test/e2e/test-apps/other/{main-process-module => preload-injection}/package.json (77%) rename test/e2e/test-apps/other/{main-process-module/src => preload-injection}/renderer.js (75%) rename test/e2e/test-apps/other/{main-process-module => preload-injection}/test.ts (72%) rename test/e2e/test-apps/other/{main-process-module => preload-injection}/webpack.config.js (50%) diff --git a/src/preload/index.ts b/src/preload/index.ts index 89cfe2e3..e6f4297b 100644 --- a/src/preload/index.ts +++ b/src/preload/index.ts @@ -37,7 +37,8 @@ export function hookupIpc(namespace: string = 'sentry-ipc'): void { if (contextBridge) { // This will fail if contextIsolation is not enabled try { - contextBridge.exposeInMainWorld(ipcUtil.namespace, ipcObject); + // eslint-disable-next-line no-restricted-globals + contextBridge.exposeInMainWorld('__SENTRY_IPC__', window.__SENTRY_IPC__); } catch (e) { // } diff --git a/src/renderer/ipc.ts b/src/renderer/ipc.ts index cb22b750..6fb81bd5 100644 --- a/src/renderer/ipc.ts +++ b/src/renderer/ipc.ts @@ -8,10 +8,8 @@ import { ElectronRendererOptionsInternal } from './sdk.js'; function getImplementation(ipcKey: string): IPCInterface { const ipcUtil = ipcChannelUtils(ipcKey); - window.__SENTRY_IPC__ = window.__SENTRY_IPC__ || {}; - // Favour IPC if it's been exposed by a preload script - if (window.__SENTRY_IPC__[ipcUtil.namespace]) { + if (window.__SENTRY_IPC__?.[ipcUtil.namespace]) { return window.__SENTRY_IPC__[ipcUtil.namespace] as IPCInterface; } else { debug.log('IPC was not configured in preload script, falling back to custom protocol and fetch'); diff --git a/test/e2e/test-apps/other/main-process-module/src/main.js b/test/e2e/test-apps/other/preload-injection/main.js similarity index 59% rename from test/e2e/test-apps/other/main-process-module/src/main.js rename to test/e2e/test-apps/other/preload-injection/main.js index 8ca6b918..824cf0d6 100644 --- a/test/e2e/test-apps/other/main-process-module/src/main.js +++ b/test/e2e/test-apps/other/preload-injection/main.js @@ -1,12 +1,13 @@ // eslint-disable-next-line import/no-unresolved -import { init } from '@sentry/electron/main'; -import { app, BrowserWindow } from 'electron'; -import * as path from 'path'; -import * as url from 'url'; +const { init, IPCMode } = require('@sentry/electron/main'); +const { app, BrowserWindow } = require('electron'); +const path = require('path'); +const url = require('url'); init({ dsn: '__DSN__', debug: true, + ipcMode: IPCMode.Classic, onFatalError: () => {}, }); @@ -22,13 +23,9 @@ app.on('ready', () => { window.loadURL( url.format({ - pathname: path.join(__dirname, 'index.html'), + pathname: path.join(__dirname, 'dist', 'index.html'), protocol: 'file:', slashes: true, }), ); - - setTimeout(() => { - throw new Error('Some main error'); - }, 2000); }); diff --git a/test/e2e/test-apps/other/main-process-module/package.json b/test/e2e/test-apps/other/preload-injection/package.json similarity index 77% rename from test/e2e/test-apps/other/main-process-module/package.json rename to test/e2e/test-apps/other/preload-injection/package.json index 2846caab..cf6306ed 100644 --- a/test/e2e/test-apps/other/main-process-module/package.json +++ b/test/e2e/test-apps/other/preload-injection/package.json @@ -1,12 +1,12 @@ { - "name": "webpack-main-process", - "description": "Webpack app with error in main process", + "name": "preload-injection", + "description": "Preload injection", "version": "1.0.0", "scripts": { "start": "electron .", "build": "webpack" }, - "main": "dist/main.js", + "main": "main.js", "devDependencies": { "@sentry/webpack-plugin": "^2.2.0", "csp-html-webpack-plugin": "^5.1.0", diff --git a/test/e2e/test-apps/other/main-process-module/src/renderer.js b/test/e2e/test-apps/other/preload-injection/renderer.js similarity index 75% rename from test/e2e/test-apps/other/main-process-module/src/renderer.js rename to test/e2e/test-apps/other/preload-injection/renderer.js index afb0c0a6..ce4f748b 100644 --- a/test/e2e/test-apps/other/main-process-module/src/renderer.js +++ b/test/e2e/test-apps/other/preload-injection/renderer.js @@ -8,3 +8,7 @@ init({ console.log('renderer logging'); getCurrentScope().setUser({ id: 'abc-123' }); + +setTimeout(() => { + throw new Error('Some renderer error'); +}, 2000); diff --git a/test/e2e/test-apps/other/main-process-module/test.ts b/test/e2e/test-apps/other/preload-injection/test.ts similarity index 72% rename from test/e2e/test-apps/other/main-process-module/test.ts rename to test/e2e/test-apps/other/preload-injection/test.ts index 273657c1..fc9d886b 100644 --- a/test/e2e/test-apps/other/main-process-module/test.ts +++ b/test/e2e/test-apps/other/preload-injection/test.ts @@ -5,12 +5,12 @@ electronTestRunner(__dirname, { skipEsmAutoTransform: true, skip: () => process. await ctx .expect({ envelope: eventEnvelope({ - level: 'fatal', - platform: 'node', + level: 'error', + platform: 'javascript', debug_meta: { images: [ { - code_file: 'app:///dist/main.js', + code_file: 'app:///dist/renderer.js', type: 'sourcemap', debug_id: UUID_V4_MATCHER, }, @@ -20,30 +20,36 @@ electronTestRunner(__dirname, { skipEsmAutoTransform: true, skip: () => process. values: [ { type: 'Error', - value: 'Some main error', + value: 'Some renderer error', stacktrace: { frames: expect.arrayContaining([ { colno: expect.any(Number), - filename: 'app:///dist/main.js', + filename: 'app:///dist/renderer.js', function: expect.any(String), in_app: true, lineno: expect.any(Number), - module: 'dist:main', }, ]), }, mechanism: { handled: false, - type: 'generic', + type: 'auto.browser.browserapierrors.setTimeout', }, }, ], }, + request: { + headers: {}, + url: 'app:///dist/index.html', + }, + extra: { + arguments: [], + }, tags: { 'event.environment': 'javascript', 'event.origin': 'electron', - 'event.process': 'browser', + 'event.process': 'renderer', }, user: { id: 'abc-123', diff --git a/test/e2e/test-apps/other/main-process-module/webpack.config.js b/test/e2e/test-apps/other/preload-injection/webpack.config.js similarity index 50% rename from test/e2e/test-apps/other/main-process-module/webpack.config.js rename to test/e2e/test-apps/other/preload-injection/webpack.config.js index 69b08ca4..f19b3a10 100644 --- a/test/e2e/test-apps/other/main-process-module/webpack.config.js +++ b/test/e2e/test-apps/other/preload-injection/webpack.config.js @@ -20,32 +20,20 @@ const sentryWebpackPluginOptions = { }, }; -module.exports = [ - { - mode: 'production', - entry: './src/main.js', - target: 'electron-main', - output: { - libraryTarget: 'commonjs2', - filename: 'main.js', - }, - plugins: [/* new WarningsToErrorsPlugin(), */ sentryWebpackPlugin(sentryWebpackPluginOptions)], +module.exports = { + mode: 'production', + entry: './renderer.js', + target: 'web', + output: { + filename: 'renderer.js', }, - { - mode: 'production', - entry: './src/renderer.js', - target: 'web', - output: { - filename: 'renderer.js', - }, - plugins: [ - new HtmlWebpackPlugin(), - // new WarningsToErrorsPlugin(), - new CspHtmlWebpackPlugin({ - 'default-src': "'self'", - 'script-src': "'self'", - }), - sentryWebpackPlugin(sentryWebpackPluginOptions), - ], - }, -]; + plugins: [ + new HtmlWebpackPlugin(), + // new WarningsToErrorsPlugin(), + new CspHtmlWebpackPlugin({ + 'default-src': "'self'", + 'script-src': "'self'", + }), + sentryWebpackPlugin(sentryWebpackPluginOptions), + ], +}; From 5e6d303a5d310bff2bf990fb8b35602ab46271c3 Mon Sep 17 00:00:00 2001 From: Tim Fish Date: Sat, 20 Sep 2025 15:04:41 +0200 Subject: [PATCH 2/2] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4c235d5..e5b088bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ## 7.1.1 - fix: Preload injection path (#1243) +- fix: Preload `contextIsolation` issues (#1244) ## 7.1.0