From 3c3d55a0273294fa7caf7e2c5cd258cfebae6ca1 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Tue, 27 Jan 2026 10:41:51 -0800 Subject: [PATCH] chore: do not use electron sandbox on linux by default --- docs/src/api/class-electron.md | 3 +++ packages/playwright-client/types/types.d.ts | 5 +++++ packages/playwright-core/src/protocol/validator.ts | 1 + packages/playwright-core/src/server/electron/electron.ts | 3 +-- packages/playwright-core/types/types.d.ts | 5 +++++ packages/protocol/src/channels.d.ts | 2 ++ packages/protocol/src/protocol.yml | 1 + 7 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/src/api/class-electron.md b/docs/src/api/class-electron.md index d9d32f2c08784..90c41de84e810 100644 --- a/docs/src/api/class-electron.md +++ b/docs/src/api/class-electron.md @@ -139,3 +139,6 @@ Maximum time in milliseconds to wait for the application to start. Defaults to ` ### option: Electron.launch.tracesDir = %%-browser-option-tracesdir-%% * since: v1.36 + +### option: Electron.launch.chromiumSandbox = %%-browser-option-chromiumsandbox-%% +* since: v1.59 diff --git a/packages/playwright-client/types/types.d.ts b/packages/playwright-client/types/types.d.ts index 50dd490708e13..ec590ff4b6221 100644 --- a/packages/playwright-client/types/types.d.ts +++ b/packages/playwright-client/types/types.d.ts @@ -19566,6 +19566,11 @@ export interface Electron { */ bypassCSP?: boolean; + /** + * Enable Chromium sandboxing. Defaults to `false`. + */ + chromiumSandbox?: boolean; + /** * Emulates [prefers-colors-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) * media feature, supported values are `'light'` and `'dark'`. See diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index bc253a5a7be63..cafaf61170c9e 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -2529,6 +2529,7 @@ scheme.ElectronInitializer = tOptional(tObject({})); scheme.ElectronLaunchParams = tObject({ executablePath: tOptional(tString), args: tOptional(tArray(tString)), + chromiumSandbox: tOptional(tBoolean), cwd: tOptional(tString), env: tOptional(tArray(tType('NameValue'))), timeout: tFloat, diff --git a/packages/playwright-core/src/server/electron/electron.ts b/packages/playwright-core/src/server/electron/electron.ts index c84076b6249b7..98ab309f289d0 100644 --- a/packages/playwright-core/src/server/electron/electron.ts +++ b/packages/playwright-core/src/server/electron/electron.ts @@ -160,8 +160,7 @@ export class Electron extends SdkObject { let electronArguments = ['--inspect=0', '--remote-debugging-port=0', ...(options.args || [])]; if (os.platform() === 'linux') { - const runningAsRoot = process.geteuid && process.geteuid() === 0; - if (runningAsRoot && electronArguments.indexOf('--no-sandbox') === -1) + if (!options.chromiumSandbox && electronArguments.indexOf('--no-sandbox') === -1) electronArguments.unshift('--no-sandbox'); } diff --git a/packages/playwright-core/types/types.d.ts b/packages/playwright-core/types/types.d.ts index 50dd490708e13..ec590ff4b6221 100644 --- a/packages/playwright-core/types/types.d.ts +++ b/packages/playwright-core/types/types.d.ts @@ -19566,6 +19566,11 @@ export interface Electron { */ bypassCSP?: boolean; + /** + * Enable Chromium sandboxing. Defaults to `false`. + */ + chromiumSandbox?: boolean; + /** * Emulates [prefers-colors-scheme](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) * media feature, supported values are `'light'` and `'dark'`. See diff --git a/packages/protocol/src/channels.d.ts b/packages/protocol/src/channels.d.ts index 86c22a67751ec..39d3a25035605 100644 --- a/packages/protocol/src/channels.d.ts +++ b/packages/protocol/src/channels.d.ts @@ -4429,6 +4429,7 @@ export interface ElectronChannel extends ElectronEventTarget, Channel { export type ElectronLaunchParams = { executablePath?: string, args?: string[], + chromiumSandbox?: boolean, cwd?: string, env?: NameValue[], timeout: number, @@ -4465,6 +4466,7 @@ export type ElectronLaunchParams = { export type ElectronLaunchOptions = { executablePath?: string, args?: string[], + chromiumSandbox?: boolean, cwd?: string, env?: NameValue[], acceptDownloads?: 'accept' | 'deny' | 'internal-browser-default', diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index 9a66cd1beef50..9df70a405da9d 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -3869,6 +3869,7 @@ Electron: args: type: array? items: string + chromiumSandbox: boolean? cwd: string? env: type: array?