diff --git a/devel/electron40/Makefile.version b/devel/electron40/Makefile.version index 10c4e3037f25..e0a9cae5dea4 100644 --- a/devel/electron40/Makefile.version +++ b/devel/electron40/Makefile.version @@ -1,2 +1,2 @@ -ELECTRON_VER= 40.9.1 +ELECTRON_VER= 40.9.2 ELECTRON_VER_MAJOR= ${ELECTRON_VER:C/\..*//} diff --git a/devel/electron40/distinfo b/devel/electron40/distinfo index b3da3ee13581..c15d44704562 100644 --- a/devel/electron40/distinfo +++ b/devel/electron40/distinfo @@ -1,29 +1,29 @@ -TIMESTAMP = 1776572141 +TIMESTAMP = 1777116979 SHA256 (electron/chromium-144.0.7559.236.tar.xz.0) = 21556e44d5f5e464a7603afc1e912127c4546d3c55d777055614b769247d2714 SIZE (electron/chromium-144.0.7559.236.tar.xz.0) = 2000000000 SHA256 (electron/chromium-144.0.7559.236.tar.xz.1) = 389e96ab80e7f3ea7a330060c51ed714f2277810b13bbd1d72bb9e6119dce3a2 SIZE (electron/chromium-144.0.7559.236.tar.xz.1) = 2000000000 SHA256 (electron/chromium-144.0.7559.236.tar.xz.2) = 3783608e8c802c5660a7c2ea12d9e16ae6f534eb739c155c0de4b42eca358c3e SIZE (electron/chromium-144.0.7559.236.tar.xz.2) = 309499476 SHA256 (electron/pulseaudio-16.1.tar.gz) = 027266c62f2a84422ac45fa721a649508f0f1628fb1fd9242315ac54ce2d7c92 SIZE (electron/pulseaudio-16.1.tar.gz) = 2763111 SHA256 (electron/yarn-4.12.0.tgz) = bd58d06826ce9542c4cd904fe10bab7bc718ea2cc39a45d9fbd15f2edb45761c SIZE (electron/yarn-4.12.0.tgz) = 1056794 -SHA256 (electron/electron40-40.9.1-node-modules.tar.xz) = b0068fa06ba9c5bc449a2ab423a3a4c65e77a7f6cff3255e2d9aae61ac036df1 -SIZE (electron/electron40-40.9.1-node-modules.tar.xz) = 59792711 -SHA256 (electron/electron-electron-v40.9.1_GH0.tar.gz) = 70998ea62dcbb704a9ff568ae30ee3b961b439a6c413829004017f5a4252e875 -SIZE (electron/electron-electron-v40.9.1_GH0.tar.gz) = 17232048 +SHA256 (electron/electron40-40.9.2-node-modules.tar.xz) = b0068fa06ba9c5bc449a2ab423a3a4c65e77a7f6cff3255e2d9aae61ac036df1 +SIZE (electron/electron40-40.9.2-node-modules.tar.xz) = 59792711 +SHA256 (electron/electron-electron-v40.9.2_GH0.tar.gz) = f066f2e6b6d878fce77bbbd64316f8848acb3bbc5827ab9f6220f4a0700bd58c +SIZE (electron/electron-electron-v40.9.2_GH0.tar.gz) = 17293190 SHA256 (electron/nodejs-node-v24.14.1_GH0.tar.gz) = dd9da50596e7b1c4edeb56daf0e81f57e1b61e43c36f40eadeee77be7d779e08 SIZE (electron/nodejs-node-v24.14.1_GH0.tar.gz) = 126384322 SHA256 (electron/nodejs-nan-675cefebca42410733da8a454c8d9391fcebfbc2_GH0.tar.gz) = 3983c68f19ed75dd37dc228eab385093ae2533132730f253f0c3d19ff10788e3 SIZE (electron/nodejs-nan-675cefebca42410733da8a454c8d9391fcebfbc2_GH0.tar.gz) = 111323 SHA256 (electron/Squirrel-Squirrel.Mac-0e5d146ba13101a1302d59ea6e6e0b3cace4ae38_GH0.tar.gz) = f4ebb40a8d85dbb7ef02aa0571b2f8e22182c6d73b6992484a53c90047779d01 SIZE (electron/Squirrel-Squirrel.Mac-0e5d146ba13101a1302d59ea6e6e0b3cace4ae38_GH0.tar.gz) = 2112918 SHA256 (electron/ReactiveCocoa-ReactiveObjC-74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76_GH0.tar.gz) = 88e65f116c7a06fccedb43970fba63080a57a4e5dc29147d2cdfe1ee58dd0546 SIZE (electron/ReactiveCocoa-ReactiveObjC-74ab5baccc6f7202c8ac69a8d1e152c29dc1ea76_GH0.tar.gz) = 1136238 SHA256 (electron/Mantle-Mantle-78d3966b3c331292ea29ec38661b25df0a245948_GH0.tar.gz) = a365df6d83e0be3cc000b70bd39734d80c28f0d9983ebe44698337a2ca464bb1 SIZE (electron/Mantle-Mantle-78d3966b3c331292ea29ec38661b25df0a245948_GH0.tar.gz) = 62962 SHA256 (electron/EngFlow-reclient-configs-955335c30a752e9ef7bff375baab5e0819b6c00d_GH0.tar.gz) = c148f76220fc41a89ffeaf370c2cc175577be184688b12aa6fec5f8ac6c714c4 SIZE (electron/EngFlow-reclient-configs-955335c30a752e9ef7bff375baab5e0819b6c00d_GH0.tar.gz) = 13014 SHA256 (electron/evanw-esbuild-v0.27.1_GH0.tar.gz) = bcc3abdc911961ef04340714dc69ddc34af6d2e2c60a1c4036d1c7f1a3fc4a23 SIZE (electron/evanw-esbuild-v0.27.1_GH0.tar.gz) = 1978868 diff --git a/devel/electron40/files/patch-electron_BUILD.gn b/devel/electron40/files/patch-electron_BUILD.gn index 77e4374ee92b..8143c518e385 100644 --- a/devel/electron40/files/patch-electron_BUILD.gn +++ b/devel/electron40/files/patch-electron_BUILD.gn @@ -1,62 +1,62 @@ ---- electron/BUILD.gn.orig 2026-02-13 02:06:08 UTC +--- electron/BUILD.gn.orig 2026-04-21 14:16:24 UTC +++ electron/BUILD.gn -@@ -550,7 +550,7 @@ source_set("electron_lib") { +@@ -554,7 +554,7 @@ source_set("electron_lib") { defines += [ "GDK_DISABLE_DEPRECATION_WARNINGS" ] } - if (!is_mas_build) { + if (!is_mas_build && !is_bsd) { deps += [ "//components/crash/core/app", "//components/crash/core/browser", -@@ -649,6 +649,12 @@ source_set("electron_lib") { +@@ -653,6 +653,12 @@ source_set("electron_lib") { cflags_objcc = [ "-fobjc-weak" ] } } + if (is_bsd) { + sources -= [ + "shell/common/crash_keys.cc", + "shell/common/crash_keys.h", + ] + } if (is_linux) { libs = [ "xshmfence" ] deps += [ -@@ -1234,7 +1240,7 @@ if (is_mac) { +@@ -1238,7 +1244,7 @@ if (is_mac) { ":electron_lib", ":electron_win32_resources", ":packed_resources", - "//components/crash/core/app", + # "//components/crash/core/app", "//content:sandbox_helper_win", "//electron/buildflags", "//third_party/electron_node:libnode", -@@ -1261,7 +1267,7 @@ if (is_mac) { +@@ -1265,7 +1271,7 @@ if (is_mac) { public_deps = [ "//tools/v8_context_snapshot" ] } - if (is_linux) { + if (is_linux && !is_bsd) { data_deps += [ "//components/crash/core/app:chrome_crashpad_handler" ] } -@@ -1328,7 +1334,7 @@ if (is_mac) { +@@ -1332,7 +1338,7 @@ if (is_mac) { configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ] } - if (is_linux) { + if (is_linux && !is_bsd) { deps += [ "//sandbox/linux:chrome_sandbox" ] } } -@@ -1449,7 +1455,9 @@ dist_zip("electron_dist_zip") { +@@ -1453,7 +1459,9 @@ dist_zip("electron_dist_zip") { ] } - data_deps += [ "//sandbox/linux:chrome_sandbox" ] + if (!is_bsd) { + data_deps += [ "//sandbox/linux:chrome_sandbox" ] + } } deps = data_deps outputs = [ "$root_build_dir/dist.zip" ] diff --git a/devel/electron40/files/patch-electron_shell_browser_api_electron__api__web__contents.cc b/devel/electron40/files/patch-electron_shell_browser_api_electron__api__web__contents.cc index afcbf01134c5..2ffd5e368e7f 100644 --- a/devel/electron40/files/patch-electron_shell_browser_api_electron__api__web__contents.cc +++ b/devel/electron40/files/patch-electron_shell_browser_api_electron__api__web__contents.cc @@ -1,77 +1,77 @@ ---- electron/shell/browser/api/electron_api_web_contents.cc.orig 2026-04-15 14:05:49 UTC +--- electron/shell/browser/api/electron_api_web_contents.cc.orig 2026-04-21 14:16:24 UTC +++ electron/shell/browser/api/electron_api_web_contents.cc @@ -162,11 +162,11 @@ #include "ui/base/cocoa/defaults_utils.h" #endif -#if BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD) #include "ui/linux/linux_ui.h" #endif -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_BSD) #include "ui/aura/window.h" #include "ui/gfx/font_render_params.h" #endif @@ -198,7 +198,7 @@ #include "content/public/browser/plugin_service.h" #endif -#if !IS_MAS_BUILD() +#if !IS_MAS_BUILD() && !BUILDFLAG(IS_BSD) #include "chrome/browser/hang_monitor/hang_crash_dump.h" // nogncheck #endif @@ -572,7 +572,7 @@ std::optional GetCursorBlinkInterval( ui::TextInsertionCaretBlinkPeriodFromDefaults()); if (system_value) return *system_value; -#elif BUILDFLAG(IS_LINUX) +#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD) if (auto* native_theme = ui::NativeTheme::GetInstanceForNativeUi()) return native_theme->caret_blink_interval(); #elif BUILDFLAG(IS_WIN) @@ -944,7 +944,7 @@ void WebContents::InitWithSessionAndOptions( accept_languages.pop_back(); prefs->accept_languages = accept_languages; -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_BSD) // Update font settings. static const gfx::FontRenderParams params( gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr)); -@@ -2759,13 +2759,13 @@ void WebContents::ForcefullyCrashRenderer() { +@@ -2766,13 +2766,13 @@ void WebContents::ForcefullyCrashRenderer() { content::RenderProcessHost* rph = rwh->GetProcess(); if (rph) { -#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_BSD) // A generic |CrashDumpHungChildProcess()| is not implemented for Linux. // Instead we send an explicit IPC to crash on the renderer's IO thread. rph->ForceCrash(); #else // Try to generate a crash report for the hung process. -#if !IS_MAS_BUILD() +#if !IS_MAS_BUILD() && !BUILDFLAG(IS_BSD) CrashDumpHungChildProcess(rph->GetProcess().Handle()); #endif rph->Shutdown(content::RESULT_CODE_HUNG); -@@ -3447,7 +3447,7 @@ void WebContents::Focus() { +@@ -3454,7 +3454,7 @@ void WebContents::Focus() { void WebContents::Focus() { // Focusing on WebContents does not automatically focus the window on macOS // and Linux, do it manually to match the behavior on Windows. -#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD) if (owner_window()) owner_window()->Focus(true); #endif -@@ -4343,7 +4343,7 @@ ui::ImageModel WebContents::GetDevToolsWindowIcon() { +@@ -4350,7 +4350,7 @@ ui::ImageModel WebContents::GetDevToolsWindowIcon() { } #endif -#if BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD) void WebContents::GetDevToolsWindowWMClass(std::string* name, std::string* class_name) { *class_name = Browser::Get()->GetName(); diff --git a/devel/electron40/files/patch-electron_shell_browser_ui_inspectable__web__contents.cc b/devel/electron40/files/patch-electron_shell_browser_ui_inspectable__web__contents.cc index afc177b7b92a..ae203e0b43f3 100644 --- a/devel/electron40/files/patch-electron_shell_browser_ui_inspectable__web__contents.cc +++ b/devel/electron40/files/patch-electron_shell_browser_ui_inspectable__web__contents.cc @@ -1,11 +1,11 @@ ---- electron/shell/browser/ui/inspectable_web_contents.cc.orig 2026-04-15 14:05:49 UTC +--- electron/shell/browser/ui/inspectable_web_contents.cc.orig 2026-04-21 14:16:24 UTC +++ electron/shell/browser/ui/inspectable_web_contents.cc -@@ -575,7 +575,7 @@ void InspectableWebContents::LoadCompleted() { +@@ -572,7 +572,7 @@ void InspectableWebContents::LoadCompleted() { dock_state_ = "right"; } } -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD) auto* api_web_contents = api::WebContents::From(GetWebContents()); if (api_web_contents) { auto* win = diff --git a/devel/electron40/files/patch-electron_shell_common_node__bindings.cc b/devel/electron40/files/patch-electron_shell_common_node__bindings.cc index bf8373148ff3..9205ca4b84e7 100644 --- a/devel/electron40/files/patch-electron_shell_common_node__bindings.cc +++ b/devel/electron40/files/patch-electron_shell_common_node__bindings.cc @@ -1,38 +1,38 @@ ---- electron/shell/common/node_bindings.cc.orig 2026-03-05 10:29:21 UTC +--- electron/shell/common/node_bindings.cc.orig 2026-04-21 14:16:24 UTC +++ electron/shell/common/node_bindings.cc @@ -51,7 +51,7 @@ #include "third_party/electron_node/src/debug_utils.h" #include "third_party/electron_node/src/module_wrap.h" -#if !IS_MAS_BUILD() +#if !IS_MAS_BUILD() && !BUILDFLAG(IS_BSD) #include "shell/common/crash_keys.h" #endif @@ -168,7 +168,7 @@ void V8FatalErrorCallback(const char* location, const void V8FatalErrorCallback(const char* location, const char* message) { LOG(ERROR) << "Fatal error in V8: " << location << " " << message; -#if !IS_MAS_BUILD() +#if !IS_MAS_BUILD() && !BUILDFLAG(IS_BSD) electron::crash_keys::SetCrashKey("electron.v8-fatal.message", message); electron::crash_keys::SetCrashKey("electron.v8-fatal.location", location); #endif @@ -190,7 +190,7 @@ void V8OOMErrorCallback(const char* location, const v8 LOG(ERROR) << "OOM detail: " << details.detail; } -#if !IS_MAS_BUILD() +#if !IS_MAS_BUILD() && !BUILDFLAG(IS_BSD) electron::crash_keys::SetCrashKey("electron.v8-oom.is_heap_oom", std::to_string(details.is_heap_oom)); if (location) { -@@ -639,7 +639,7 @@ void NodeBindings::Initialize(v8::Isolate* const isola +@@ -662,7 +662,7 @@ void NodeBindings::Initialize(v8::Isolate* const isola TRACE_EVENT0("electron", "NodeBindings::Initialize"); // Open node's error reporting system for browser process. -#if BUILDFLAG(IS_LINUX) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD) // Get real command line in renderer process forked by zygote. if (browser_env_ != BrowserEnvironment::kBrowser) ElectronCommandLine::InitializeFromCommandLine(); diff --git a/devel/electron40/files/patch-electron_spec_api-browser-window-spec.ts b/devel/electron40/files/patch-electron_spec_api-browser-window-spec.ts index d6afd4409abe..47627f843a87 100644 --- a/devel/electron40/files/patch-electron_spec_api-browser-window-spec.ts +++ b/devel/electron40/files/patch-electron_spec_api-browser-window-spec.ts @@ -1,191 +1,191 @@ ---- electron/spec/api-browser-window-spec.ts.orig 2026-04-15 14:05:49 UTC +--- electron/spec/api-browser-window-spec.ts.orig 2026-04-21 14:16:24 UTC +++ electron/spec/api-browser-window-spec.ts @@ -69,7 +69,7 @@ describe('BrowserWindow module', () => { }).not.to.throw(); }); - ifit(process.platform === 'linux')('does not crash when setting large window icons', async () => { + ifit(process.platform === 'linux' || process.platform === 'freebsd')('does not crash when setting large window icons', async () => { const appPath = path.join(fixtures, 'apps', 'xwindow-icon'); const appProcess = childProcess.spawn(process.execPath, [appPath]); await once(appProcess, 'exit'); @@ -326,7 +326,7 @@ describe('BrowserWindow module', () => { }); }); - ifdescribe(process.platform !== 'linux')('BrowserWindow.getContentProtection', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('BrowserWindow.getContentProtection', () => { afterEach(closeAllWindows); it('can set content protection', async () => { const w = new BrowserWindow({ show: false }); @@ -1197,7 +1197,7 @@ describe('BrowserWindow module', () => { describe('BrowserWindow.minimize()', () => { // TODO(codebytere): Enable for Linux once maximize/minimize events work in CI. - ifit(process.platform !== 'linux')('should not be visible when the window is minimized', async () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('should not be visible when the window is minimized', async () => { const minimize = once(w, 'minimize'); w.minimize(); await minimize; @@ -1214,7 +1214,7 @@ describe('BrowserWindow module', () => { }); // TODO(dsanders11): Enable for Linux once CI plays nice with these kinds of tests - ifit(process.platform !== 'linux')('should not restore maximized windows', async () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('should not restore maximized windows', async () => { const maximize = once(w, 'maximize'); const shown = once(w, 'show'); w.maximize(); @@ -1279,7 +1279,7 @@ describe('BrowserWindow module', () => { expect(w.isFocused()).to.equal(true); }); - ifit(process.platform !== 'linux')('acquires focus status from the other windows', async () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('acquires focus status from the other windows', async () => { const w1 = new BrowserWindow({ show: false }); const w2 = new BrowserWindow({ show: false }); const w3 = new BrowserWindow({ show: false }); @@ -1381,7 +1381,7 @@ describe('BrowserWindow module', () => { expect(w.isFocused()).to.equal(false); }); - ifit(process.platform !== 'linux')('transfers focus status to the next window', async () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('transfers focus status to the next window', async () => { const w1 = new BrowserWindow({ show: false }); const w2 = new BrowserWindow({ show: false }); const w3 = new BrowserWindow({ show: false }); @@ -1840,7 +1840,7 @@ describe('BrowserWindow module', () => { }); }); - ifdescribe(process.platform !== 'linux')('Maximized state', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('Maximized state', () => { it('checks normal bounds when maximized', async () => { const bounds = w.getBounds(); const maximize = once(w, 'maximize'); @@ -2050,7 +2050,7 @@ describe('BrowserWindow module', () => { }); }); - ifdescribe(process.platform !== 'linux')('Minimized state', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('Minimized state', () => { it('checks normal bounds when minimized', async () => { const bounds = w.getBounds(); const minimize = once(w, 'minimize'); -@@ -3124,7 +3124,7 @@ describe('BrowserWindow module', () => { +@@ -3151,7 +3151,7 @@ describe('BrowserWindow module', () => { describe('BrowserWindow.setOpacity(opacity)', () => { afterEach(closeAllWindows); - ifdescribe(process.platform !== 'linux')(('Windows and Mac'), () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')(('Windows and Mac'), () => { it('make window with initial opacity', () => { const w = new BrowserWindow({ show: false, opacity: 0.5 }); expect(w.getOpacity()).to.equal(0.5); -@@ -3150,7 +3150,7 @@ describe('BrowserWindow module', () => { +@@ -3177,7 +3177,7 @@ describe('BrowserWindow module', () => { }); }); - ifdescribe(process.platform === 'linux')(('Linux'), () => { + ifdescribe(process.platform === 'linux' || process.platform === 'freebsd')(('Linux'), () => { it('sets 1 regardless of parameter', () => { const w = new BrowserWindow({ show: false }); w.setOpacity(0); -@@ -3361,7 +3361,7 @@ describe('BrowserWindow module', () => { +@@ -3388,7 +3388,7 @@ describe('BrowserWindow module', () => { expect(overlayRectPreMax.height).to.equal(size); // 'maximize' event is not emitted on Linux in CI. - if (process.platform !== 'linux' && !w.isMaximized()) { + if ((process.platform !== 'linux' && process.platform !== 'freebsd') && !w.isMaximized()) { const maximize = once(w, 'maximize'); w.show(); w.maximize(); -@@ -3427,7 +3427,7 @@ describe('BrowserWindow module', () => { +@@ -3454,7 +3454,7 @@ describe('BrowserWindow module', () => { expect(preMaxHeight).to.equal(size); // 'maximize' event is not emitted on Linux in CI. - if (process.platform !== 'linux' && !w.isMaximized()) { + if ((process.platform !== 'linux' && process.platform !== 'freebsd') && !w.isMaximized()) { const maximize = once(w, 'maximize'); w.show(); w.maximize(); -@@ -4120,7 +4120,7 @@ describe('BrowserWindow module', () => { +@@ -4147,7 +4147,7 @@ describe('BrowserWindow module', () => { expect(test.nodeTimers).to.equal(true); expect(test.nodeUrl).to.equal(true); - if (process.platform === 'linux' && test.osSandbox) { + if ((process.platform === 'linux' || process.platform === 'freebsd') && test.osSandbox) { expect(test.creationTime).to.be.null('creation time'); expect(test.systemMemoryInfo).to.be.null('system memory info'); } else { -@@ -4625,7 +4625,7 @@ describe('BrowserWindow module', () => { +@@ -4652,7 +4652,7 @@ describe('BrowserWindow module', () => { }); }); - ifdescribe(process.platform !== 'linux')('max/minimize events', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('max/minimize events', () => { afterEach(closeAllWindows); it('emits an event when window is maximized', async () => { const w = new BrowserWindow({ show: false }); -@@ -4896,7 +4896,7 @@ describe('BrowserWindow module', () => { +@@ -4923,7 +4923,7 @@ describe('BrowserWindow module', () => { // TODO(zcbenz): // This test does not run on Linux CI. See: // https://github.com/electron/electron/issues/28699 - ifit(process.platform === 'linux' && !process.env.CI)('should bring a minimized maximized window back to maximized state', async () => { + ifit((process.platform === 'linux' || process.platform === 'freebsd') && !process.env.CI)('should bring a minimized maximized window back to maximized state', async () => { const w = new BrowserWindow({}); const maximize = once(w, 'maximize'); w.maximize(); -@@ -4911,7 +4911,7 @@ describe('BrowserWindow module', () => { +@@ -4938,7 +4938,7 @@ describe('BrowserWindow module', () => { expect(w.isMaximized()).to.equal(true); }); - ifit(process.platform !== 'linux')('should not break fullscreen state', async () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('should not break fullscreen state', async () => { const w = new BrowserWindow({ show: false }); w.show(); -@@ -4934,7 +4934,7 @@ describe('BrowserWindow module', () => { +@@ -4961,7 +4961,7 @@ describe('BrowserWindow module', () => { }); // TODO(dsanders11): Enable once maximize event works on Linux again on CI - ifdescribe(process.platform !== 'linux')('BrowserWindow.maximize()', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('BrowserWindow.maximize()', () => { afterEach(closeAllWindows); it('should show the window if it is not currently shown', async () => { const w = new BrowserWindow({ show: false }); -@@ -4971,7 +4971,7 @@ describe('BrowserWindow module', () => { +@@ -4998,7 +4998,7 @@ describe('BrowserWindow module', () => { // TODO(dsanders11): Enable once minimize event works on Linux again. // See https://github.com/electron/electron/issues/28699 - ifit(process.platform !== 'linux')('should not restore a minimized window', async () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('should not restore a minimized window', async () => { const w = new BrowserWindow(); const minimize = once(w, 'minimize'); w.minimize(); -@@ -5457,7 +5457,7 @@ describe('BrowserWindow module', () => { +@@ -5484,7 +5484,7 @@ describe('BrowserWindow module', () => { }); // On Linux there is no "resizable" property of a window. - ifit(process.platform !== 'linux')('does affect maximizability when disabled and enabled', () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('does affect maximizability when disabled and enabled', () => { const w = new BrowserWindow({ show: false }); expect(w.resizable).to.be.true('resizable'); -@@ -5697,7 +5697,7 @@ describe('BrowserWindow module', () => { +@@ -5724,7 +5724,7 @@ describe('BrowserWindow module', () => { }); }); - ifdescribe(process.platform !== 'linux')('window states (excluding Linux)', () => { + ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd')('window states (excluding Linux)', () => { // Not implemented on Linux. afterEach(closeAllWindows); -@@ -7008,7 +7008,7 @@ describe('BrowserWindow module', () => { +@@ -7035,7 +7035,7 @@ describe('BrowserWindow module', () => { describe('"transparent" option', () => { afterEach(closeAllWindows); - ifit(process.platform !== 'linux')('correctly returns isMaximized() when the window is maximized then minimized', async () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('correctly returns isMaximized() when the window is maximized then minimized', async () => { const w = new BrowserWindow({ frame: false, transparent: true diff --git a/devel/electron40/files/patch-electron_spec_api-web-contents-spec.ts b/devel/electron40/files/patch-electron_spec_api-web-contents-spec.ts index 2935bf13ab2b..bf94cf020797 100644 --- a/devel/electron40/files/patch-electron_spec_api-web-contents-spec.ts +++ b/devel/electron40/files/patch-electron_spec_api-web-contents-spec.ts @@ -1,11 +1,20 @@ ---- electron/spec/api-web-contents-spec.ts.orig 2026-02-19 05:24:38 UTC +--- electron/spec/api-web-contents-spec.ts.orig 2026-04-21 14:16:24 UTC +++ electron/spec/api-web-contents-spec.ts -@@ -2917,7 +2917,7 @@ describe('webContents module', () => { +@@ -1244,7 +1244,7 @@ describe('webContents module', () => { + // back to OpenFolder() which does a blocking DirectoryExists() on the UI + // thread (pre-existing behavior). Workspace-gating is covered by the test + // above. +- ifit(process.platform !== 'linux')('reveals paths under a registered workspace folder without executing them', async () => { ++ ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('reveals paths under a registered workspace folder without executing them', async () => { + const w = new BrowserWindow({ show: false }); + await openDevTools(w); + +@@ -2979,7 +2979,7 @@ describe('webContents module', () => { }); // TODO(codebytere): OOPIF printing is disabled on Linux at the moment due to crashes. - ifit(process.platform !== 'linux')('can print cross-origin iframes', async () => { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('can print cross-origin iframes', async () => { server = http.createServer((_, res) => { res.writeHead(200); res.end(` diff --git a/devel/electron40/files/patch-electron_spec_chromium-spec.ts b/devel/electron40/files/patch-electron_spec_chromium-spec.ts index 7c580a8fb362..666aac05cce6 100644 --- a/devel/electron40/files/patch-electron_spec_chromium-spec.ts +++ b/devel/electron40/files/patch-electron_spec_chromium-spec.ts @@ -1,44 +1,44 @@ ---- electron/spec/chromium-spec.ts.orig 2026-04-15 14:05:49 UTC +--- electron/spec/chromium-spec.ts.orig 2026-04-21 14:16:24 UTC +++ electron/spec/chromium-spec.ts @@ -475,13 +475,13 @@ describe('command line switches', () => { it('should not set an invalid locale', async () => testLocale('asdfkl', `${currentLocale}|${currentSystemLocale}|${currentPreferredLanguages}`)); const lcAll = String(process.env.LC_ALL); - ifit(process.platform === 'linux')('current process has a valid LC_ALL env', async () => { + ifit(process.platform === 'linux' || process.platform === 'freebsd')('current process has a valid LC_ALL env', async () => { // The LC_ALL env should not be set to DOM locale string. expect(lcAll).to.not.equal(app.getLocale()); }); - ifit(process.platform === 'linux')('should not change LC_ALL', async () => testLocale('fr', lcAll, true)); - ifit(process.platform === 'linux')('should not change LC_ALL when setting invalid locale', async () => testLocale('asdfkl', lcAll, true)); - ifit(process.platform === 'linux')('should not change LC_ALL when --lang is not set', async () => testLocale('', lcAll, true)); + ifit(process.platform === 'linux' || process.platform === 'freebsd')('should not change LC_ALL', async () => testLocale('fr', lcAll, true)); + ifit(process.platform === 'linux' || process.platform === 'freebsd')('should not change LC_ALL when setting invalid locale', async () => testLocale('asdfkl', lcAll, true)); + ifit(process.platform === 'linux' || process.platform === 'freebsd')('should not change LC_ALL when --lang is not set', async () => testLocale('', lcAll, true)); }); describe('--remote-debugging-pipe switch', () => { -@@ -3412,12 +3412,12 @@ describe('font fallback', () => { +@@ -3435,12 +3435,12 @@ describe('font fallback', () => { expect(fonts[0].familyName).to.equal('Arial'); } else if (process.platform === 'darwin') { expect(fonts[0].familyName).to.equal('Helvetica'); - } else if (process.platform === 'linux') { + } else if (process.platform === 'linux' || process.platform === 'freebsd') { expect(fonts[0].familyName).to.equal('DejaVu Sans'); } // I think this depends on the distro? We don't specify a default. }); - ifit(process.platform !== 'linux')('should fall back to Japanese font for sans-serif Japanese script', async function () { + ifit(process.platform !== 'linux' && process.platform !== 'freebsd')('should fall back to Japanese font for sans-serif Japanese script', async function () { const html = ` -@@ -3970,7 +3970,7 @@ describe('paste execCommand', () => { +@@ -3993,7 +3993,7 @@ describe('paste execCommand', () => { }); }); -ifdescribe((process.platform !== 'linux' || app.isUnityRunning()))('navigator.setAppBadge/clearAppBadge', () => { +ifdescribe(((process.platform !== 'linux' && process.platform !== 'freebsd') || app.isUnityRunning()))('navigator.setAppBadge/clearAppBadge', () => { let w: BrowserWindow; const expectedBadgeCount = 42;