git: 181f7554dda6 - main - devel/electron37: update to 37.3.0

From: Hiroki Tagato <tagattie_at_FreeBSD.org>
Date: Mon, 18 Aug 2025 04:54:52 UTC
The branch main has been updated by tagattie:

URL: https://cgit.FreeBSD.org/ports/commit/?id=181f7554dda66a91152c35cfb22c304f25feda82

commit 181f7554dda66a91152c35cfb22c304f25feda82
Author:     Hiroki Tagato <tagattie@FreeBSD.org>
AuthorDate: 2025-08-18 04:52:59 +0000
Commit:     Hiroki Tagato <tagattie@FreeBSD.org>
CommitDate: 2025-08-18 04:54:45 +0000

    devel/electron37: update to 37.3.0
    
    Changelog: https://github.com/electron/electron/releases/tag/v37.3.0
    
    Reported by:    GitHub (watch releases)
---
 devel/electron37/Makefile                          | 18 +++++++--
 devel/electron37/Makefile.version                  |  2 +-
 devel/electron37/distinfo                          | 22 ++++++-----
 devel/electron37/files/package.json                |  1 -
 ...lectron_shell_browser_api_electron__api__app.cc | 16 ++++----
 ...hell_browser_api_electron__api__base__window.cc |  6 +--
 ...shell_browser_api_electron__api__base__window.h |  6 +--
 .../files/patch-electron_shell_browser_browser.h   |  6 +--
 ...electron_shell_browser_native__window__views.cc | 42 ++++++++++-----------
 ...-electron_shell_browser_native__window__views.h |  6 +--
 .../patch-electron_shell_common_node__bindings.cc  |  4 +-
 .../files/patch-electron_spec_api-app-spec.ts      | 43 +++++++++++++---------
 .../patch-electron_spec_api-browser-window-spec.ts | 26 ++++++-------
 ...patch-electron_spec_api-utility-process-spec.ts |  6 +--
 .../patch-electron_spec_api-web-contents-spec.ts   |  4 +-
 .../files/patch-electron_spec_chromium-spec.ts     |  4 +-
 devel/electron37/files/yarn.lock                   |  5 ---
 17 files changed, 117 insertions(+), 100 deletions(-)

diff --git a/devel/electron37/Makefile b/devel/electron37/Makefile
index 28de212fe821..5ce4c11b17e5 100644
--- a/devel/electron37/Makefile
+++ b/devel/electron37/Makefile
@@ -4,13 +4,17 @@ DISTVERSION=	${ELECTRON_VER}
 PULSEMV=	16
 PULSEV=		${PULSEMV}.1
 CATEGORIES=	devel
-MASTER_SITES=	https://commondatastorage.googleapis.com/chromium-browser-official/:chromium \
+MASTER_SITES=	https://github.com/tagattie/FreeBSD-Electron/releases/download/v37.3.0/:chromium \
 		https://freedesktop.org/software/pulseaudio/releases/:pulseaudio
 PKGNAMESUFFIX=	${ELECTRON_VER_MAJOR}
-DISTFILES=	chromium-${CHROMIUM_VER}${EXTRACT_SUFX}:chromium \
+DISTFILES=	chromium-${CHROMIUM_VER}${EXTRACT_SUFX}.0:chromium \
+		chromium-${CHROMIUM_VER}${EXTRACT_SUFX}.1:chromium \
+		chromium-${CHROMIUM_VER}${EXTRACT_SUFX}.2:chromium \
 		pulseaudio-${PULSEV}.tar.gz:pulseaudio \
 		electron-yarn-cache-${ELECTRON_VER}${EXTRACT_SUFX}:prefetch
 DIST_SUBDIR=	${PORTNAME}
+EXTRACT_ONLY=	chromium-${CHROMIUM_VER}${EXTRACT_SUFX} \
+		${DISTFILES:C/:[^:]+$//:C/chromium-${CHROMIUM_VER}${EXTRACT_SUFX}\.[0-9]//}
 
 MAINTAINER=	tagattie@FreeBSD.org
 COMMENT=	Build cross-platform desktop apps with JavaScript, HTML, and CSS
@@ -220,9 +224,9 @@ SNDIO_VARS=		GN_ARGS+=use_sndio=true
 SNDIO_VARS_OFF=		GN_ARGS+=use_sndio=false
 
 # See ${WRKSRC}/electron/DEPS for CHROMIUM_VER
-CHROMIUM_VER=			138.0.7204.185
+CHROMIUM_VER=			138.0.7204.224
 # See ${WRKSRC}/electron/DEPS for NODE_VER
-NODE_VER=			22.17.1
+NODE_VER=			22.18.0
 # See ${WRKSRC}/electron/DEPS for NAN_VER
 NAN_VER=			e14bdcd1f72d62bca1d541b66da43130384ec213
 # See ${WRKSRC}/electron/DEPS for SQUIRREL_MAC_VER
@@ -320,6 +324,12 @@ pre-fetch:
 		${RM} -r ${WRKDIR}; \
 	fi
 
+pre-extract:
+	@if [ ! -f ${DISTDIR}/${DIST_SUBDIR}/chromium-${CHROMIUM_VER}${EXTRACT_SUFX} ]; then \
+		${CAT} ${DISTDIR}/${DIST_SUBDIR}/chromium-${CHROMIUM_VER}${EXTRACT_SUFX}.? > \
+			${DISTDIR}/${DIST_SUBDIR}/chromium-${CHROMIUM_VER}${EXTRACT_SUFX}; \
+	fi
+
 post-extract:
 # Move extracted sources to appropriate locations
 	${MV} ${WRKDIR}/${PORTNAME}-${ELECTRON_VER}/chromium-${CHROMIUM_VER} ${WRKSRC}
diff --git a/devel/electron37/Makefile.version b/devel/electron37/Makefile.version
index 63bad097aa86..1643dd117eff 100644
--- a/devel/electron37/Makefile.version
+++ b/devel/electron37/Makefile.version
@@ -1,2 +1,2 @@
-ELECTRON_VER=	37.2.6
+ELECTRON_VER=	37.3.0
 ELECTRON_VER_MAJOR=	${ELECTRON_VER:C/\..*//}
diff --git a/devel/electron37/distinfo b/devel/electron37/distinfo
index c1986ed2ee06..b309c2f50537 100644
--- a/devel/electron37/distinfo
+++ b/devel/electron37/distinfo
@@ -1,14 +1,18 @@
-TIMESTAMP = 1754602115
-SHA256 (electron/chromium-138.0.7204.185.tar.xz) = b788c781706cfe099413eb52a19718deb6a077e725af7474d064bde3fb13413b
-SIZE (electron/chromium-138.0.7204.185.tar.xz) = 7274579784
+TIMESTAMP = 1755380758
+SHA256 (electron/chromium-138.0.7204.224.tar.xz.0) = 13050324d4260aa3f54e289036837a34ed07822452036a0bc6c51f54a3162472
+SIZE (electron/chromium-138.0.7204.224.tar.xz.0) = 2000000000
+SHA256 (electron/chromium-138.0.7204.224.tar.xz.1) = 208c88ddd1874ed09761aa865b4c28d9e2ece2426f0ad71f9d11361194120469
+SIZE (electron/chromium-138.0.7204.224.tar.xz.1) = 2000000000
+SHA256 (electron/chromium-138.0.7204.224.tar.xz.2) = 26ff0135621e9ef07d13f3eb0cfa4d96a353fbf15af3fab4a9a8cfc81892545c
+SIZE (electron/chromium-138.0.7204.224.tar.xz.2) = 273467888
 SHA256 (electron/pulseaudio-16.1.tar.gz) = 027266c62f2a84422ac45fa721a649508f0f1628fb1fd9242315ac54ce2d7c92
 SIZE (electron/pulseaudio-16.1.tar.gz) = 2763111
-SHA256 (electron/electron-yarn-cache-37.2.6.tar.xz) = 156bcfdc1d2066a4e3639d76851884f446942aa05a371cbf4b6f43381fed497b
-SIZE (electron/electron-yarn-cache-37.2.6.tar.xz) = 30485132
-SHA256 (electron/electron-electron-v37.2.6_GH0.tar.gz) = 00af33600a5ba24f3b3d737e878f6c7b4c41bd68d4dca51a8deb8ebab2de8a5c
-SIZE (electron/electron-electron-v37.2.6_GH0.tar.gz) = 15830486
-SHA256 (electron/nodejs-node-v22.17.1_GH0.tar.gz) = 7a1dbcd53b7152df5592624698f987fd626d9240c33d59dfef13812e4c168eb2
-SIZE (electron/nodejs-node-v22.17.1_GH0.tar.gz) = 123061071
+SHA256 (electron/electron-yarn-cache-37.3.0.tar.xz) = 7823d2fceaf2aac5bb0b342866049b0dfdeca98a65ac00559abfaff47bdba536
+SIZE (electron/electron-yarn-cache-37.3.0.tar.xz) = 30480408
+SHA256 (electron/electron-electron-v37.3.0_GH0.tar.gz) = 3dafe62b05fad97613a0a5605d72e16da2bad7ebfcda841d55c4ceb4001d2f6d
+SIZE (electron/electron-electron-v37.3.0_GH0.tar.gz) = 15833154
+SHA256 (electron/nodejs-node-v22.18.0_GH0.tar.gz) = f0f7022d2bcf1e286a42ccf46bf184e67e469daa83ecd9fda2326e872bab7aa0
+SIZE (electron/nodejs-node-v22.18.0_GH0.tar.gz) = 123027912
 SHA256 (electron/nodejs-nan-e14bdcd1f72d62bca1d541b66da43130384ec213_GH0.tar.gz) = 02edf8d5b3fef9af94d8a1355da60564a57e7f2c99cb422bce042400607ed2eb
 SIZE (electron/nodejs-nan-e14bdcd1f72d62bca1d541b66da43130384ec213_GH0.tar.gz) = 180646
 SHA256 (electron/Squirrel-Squirrel.Mac-0e5d146ba13101a1302d59ea6e6e0b3cace4ae38_GH0.tar.gz) = f4ebb40a8d85dbb7ef02aa0571b2f8e22182c6d73b6992484a53c90047779d01
diff --git a/devel/electron37/files/package.json b/devel/electron37/files/package.json
index 4a3a1d78f04b..bb15faa1f136 100644
--- a/devel/electron37/files/package.json
+++ b/devel/electron37/files/package.json
@@ -18,7 +18,6 @@
     "@types/semver": "^7.5.8",
     "@types/stream-json": "^1.7.7",
     "@types/temp": "^0.9.4",
-    "@types/webpack-env": "^1.18.5",
     "@typescript-eslint/eslint-plugin": "^8.7.0",
     "@typescript-eslint/parser": "^8.7.0",
     "buffer": "^6.0.3",
diff --git a/devel/electron37/files/patch-electron_shell_browser_api_electron__api__app.cc b/devel/electron37/files/patch-electron_shell_browser_api_electron__api__app.cc
index 6cd6bc221472..4f6486828120 100644
--- a/devel/electron37/files/patch-electron_shell_browser_api_electron__api__app.cc
+++ b/devel/electron37/files/patch-electron_shell_browser_api_electron__api__app.cc
@@ -1,4 +1,4 @@
---- electron/shell/browser/api/electron_api_app.cc.orig	2025-07-02 10:12:01 UTC
+--- electron/shell/browser/api/electron_api_app.cc.orig	2025-08-13 14:21:20 UTC
 +++ electron/shell/browser/api/electron_api_app.cc
 @@ -96,7 +96,7 @@
  #include "shell/common/process_util.h"
@@ -9,7 +9,7 @@
  #include "base/nix/scoped_xdg_activation_token_injector.h"
  #include "base/nix/xdg_util.h"
  #endif
-@@ -420,7 +420,7 @@ bool NotificationCallbackWrapper(
+@@ -423,7 +423,7 @@ bool NotificationCallbackWrapper(
      base::CommandLine cmd,
      const base::FilePath& cwd,
      const std::vector<uint8_t> additional_data) {
@@ -18,7 +18,7 @@
    // Set the global activation token sent as a command line switch by another
    // electron app instance. This also removes the switch after use to prevent
    // any side effects of leaving it in the command line after this point.
-@@ -607,7 +607,7 @@ void App::OnFinishLaunching(base::Value::Dict launch_i
+@@ -610,7 +610,7 @@ void App::OnFinishLaunching(base::Value::Dict launch_i
  }
  
  void App::OnFinishLaunching(base::Value::Dict launch_info) {
@@ -27,7 +27,7 @@
    // Set the application name for audio streams shown in external
    // applications. Only affects pulseaudio currently.
    media::AudioManager::SetGlobalAppName(Browser::Get()->GetName());
-@@ -950,7 +950,7 @@ void App::SetDesktopName(const std::string& desktop_na
+@@ -953,7 +953,7 @@ void App::SetDesktopName(const std::string& desktop_na
  }
  
  void App::SetDesktopName(const std::string& desktop_name) {
@@ -36,7 +36,7 @@
    auto env = base::Environment::Create();
    env->SetVar("CHROME_DESKTOP", desktop_name);
  #endif
-@@ -1054,7 +1054,7 @@ bool App::RequestSingleInstanceLock(gin::Arguments* ar
+@@ -1057,7 +1057,7 @@ bool App::RequestSingleInstanceLock(gin::Arguments* ar
        base::BindRepeating(NotificationCallbackWrapper, cb));
  #endif
  
@@ -45,7 +45,7 @@
    // Read the xdg-activation token and set it in the command line for the
    // duration of the notification in order to ensure this is propagated to an
    // already running electron app instance if it exists.
-@@ -1350,7 +1350,7 @@ std::vector<gin_helper::Dictionary> App::GetAppMetrics
+@@ -1354,7 +1354,7 @@ std::vector<gin_helper::Dictionary> App::GetAppMetrics
        pid_dict.Set("name", process_metric.second->name);
      }
  
@@ -54,7 +54,7 @@
      auto memory_info = process_metric.second->GetMemoryInfo();
  
      auto memory_dict = gin_helper::Dictionary::CreateEmpty(isolate);
-@@ -1732,7 +1732,7 @@ gin::ObjectTemplateBuilder App::GetObjectTemplateBuild
+@@ -1738,7 +1738,7 @@ gin::ObjectTemplateBuilder App::GetObjectTemplateBuild
        .SetMethod(
            "removeAsDefaultProtocolClient",
            base::BindRepeating(&Browser::RemoveAsDefaultProtocolClient, browser))
@@ -63,7 +63,7 @@
        .SetMethod(
            "getApplicationInfoForProtocol",
            base::BindRepeating(&Browser::GetApplicationInfoForProtocol, browser))
-@@ -1790,7 +1790,7 @@ gin::ObjectTemplateBuilder App::GetObjectTemplateBuild
+@@ -1796,7 +1796,7 @@ gin::ObjectTemplateBuilder App::GetObjectTemplateBuild
        .SetMethod("getJumpListSettings", &App::GetJumpListSettings)
        .SetMethod("setJumpList", &App::SetJumpList)
  #endif
diff --git a/devel/electron37/files/patch-electron_shell_browser_api_electron__api__base__window.cc b/devel/electron37/files/patch-electron_shell_browser_api_electron__api__base__window.cc
index bb00052d766a..907f75cb7d15 100644
--- a/devel/electron37/files/patch-electron_shell_browser_api_electron__api__base__window.cc
+++ b/devel/electron37/files/patch-electron_shell_browser_api_electron__api__base__window.cc
@@ -1,4 +1,4 @@
---- electron/shell/browser/api/electron_api_base_window.cc.orig	2025-05-22 22:48:48 UTC
+--- electron/shell/browser/api/electron_api_base_window.cc.orig	2025-08-13 14:21:20 UTC
 +++ electron/shell/browser/api/electron_api_base_window.cc
 @@ -42,7 +42,7 @@
  #include "shell/browser/ui/views/win_frame_view.h"
@@ -18,7 +18,7 @@
    static_cast<NativeWindowViews*>(window_.get())
        ->SetIcon(native_image->image().AsImageSkia());
  #endif
-@@ -1091,7 +1091,7 @@ bool BaseWindow::IsSnapped() const {
+@@ -1118,7 +1118,7 @@ v8::Local<v8::Value> BaseWindow::GetAccentColor() cons
  }
  #endif
  
@@ -27,7 +27,7 @@
  void BaseWindow::SetTitleBarOverlay(const gin_helper::Dictionary& options,
                                      gin_helper::Arguments* args) {
    // Ensure WCO is already enabled on this window
-@@ -1342,7 +1342,7 @@ void BaseWindow::BuildPrototype(v8::Isolate* isolate,
+@@ -1371,7 +1371,7 @@ void BaseWindow::BuildPrototype(v8::Isolate* isolate,
        .SetMethod("setThumbnailToolTip", &BaseWindow::SetThumbnailToolTip)
        .SetMethod("setAppDetails", &BaseWindow::SetAppDetails)
  #endif
diff --git a/devel/electron37/files/patch-electron_shell_browser_api_electron__api__base__window.h b/devel/electron37/files/patch-electron_shell_browser_api_electron__api__base__window.h
index 20efa3ef927e..1e4f49baaff2 100644
--- a/devel/electron37/files/patch-electron_shell_browser_api_electron__api__base__window.h
+++ b/devel/electron37/files/patch-electron_shell_browser_api_electron__api__base__window.h
@@ -1,7 +1,7 @@
---- electron/shell/browser/api/electron_api_base_window.h.orig	2025-05-07 07:36:13 UTC
+--- electron/shell/browser/api/electron_api_base_window.h.orig	2025-08-13 14:21:20 UTC
 +++ electron/shell/browser/api/electron_api_base_window.h
-@@ -257,7 +257,7 @@ class BaseWindow : public gin_helper::TrackableObject<
-   bool IsSnapped() const;
+@@ -259,7 +259,7 @@ class BaseWindow : public gin_helper::TrackableObject<
+   v8::Local<v8::Value> GetAccentColor() const;
  #endif
  
 -#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX)
diff --git a/devel/electron37/files/patch-electron_shell_browser_browser.h b/devel/electron37/files/patch-electron_shell_browser_browser.h
index 8abb0580770a..9d81a52e3348 100644
--- a/devel/electron37/files/patch-electron_shell_browser_browser.h
+++ b/devel/electron37/files/patch-electron_shell_browser_browser.h
@@ -1,6 +1,6 @@
---- electron/shell/browser/browser.h.orig	2024-10-22 02:29:46 UTC
+--- electron/shell/browser/browser.h.orig	2025-08-13 14:21:20 UTC
 +++ electron/shell/browser/browser.h
-@@ -144,7 +144,7 @@ class Browser : private WindowListObserver {
+@@ -147,7 +147,7 @@ class Browser : private WindowListObserver {
  
    std::u16string GetApplicationNameForProtocol(const GURL& url);
  
@@ -9,7 +9,7 @@
    // get the name, icon and path for an application
    v8::Local<v8::Promise> GetApplicationInfoForProtocol(v8::Isolate* isolate,
                                                         const GURL& url);
-@@ -272,10 +272,10 @@ class Browser : private WindowListObserver {
+@@ -275,10 +275,10 @@ class Browser : private WindowListObserver {
    PCWSTR GetAppUserModelID();
  #endif  // BUILDFLAG(IS_WIN)
  
diff --git a/devel/electron37/files/patch-electron_shell_browser_native__window__views.cc b/devel/electron37/files/patch-electron_shell_browser_native__window__views.cc
index c241b765d7e0..a692323fc532 100644
--- a/devel/electron37/files/patch-electron_shell_browser_native__window__views.cc
+++ b/devel/electron37/files/patch-electron_shell_browser_native__window__views.cc
@@ -1,6 +1,6 @@
---- electron/shell/browser/native_window_views.cc.orig	2025-08-06 01:20:29 UTC
+--- electron/shell/browser/native_window_views.cc.orig	2025-08-13 14:21:20 UTC
 +++ electron/shell/browser/native_window_views.cc
-@@ -51,7 +51,7 @@
+@@ -52,7 +52,7 @@
  #include "ui/wm/core/shadow_types.h"
  #include "ui/wm/core/window_util.h"
  
@@ -9,7 +9,7 @@
  #include "base/strings/string_util.h"
  #include "shell/browser/browser.h"
  #include "shell/browser/linux/unity_service.h"
-@@ -285,7 +285,7 @@ NativeWindowViews::NativeWindowViews(const gin_helper:
+@@ -286,7 +286,7 @@ NativeWindowViews::NativeWindowViews(const gin_helper:
      params.parent = parent->GetNativeWindow();
  
    params.native_widget = new ElectronDesktopNativeWidgetAura(this);
@@ -18,7 +18,7 @@
    std::string name = Browser::Get()->GetName();
    // Set WM_WINDOW_ROLE.
    params.wm_role_name = "browser-window";
-@@ -310,7 +310,7 @@ NativeWindowViews::NativeWindowViews(const gin_helper:
+@@ -311,7 +311,7 @@ NativeWindowViews::NativeWindowViews(const gin_helper:
    std::string window_type;
    options.Get(options::kType, &window_type);
  
@@ -27,7 +27,7 @@
    // Set _GTK_THEME_VARIANT to dark if we have "dark-theme" option set.
    if (options.ValueOrDefault(options::kDarkTheme, false))
      SetGTKDarkThemeEnabled(true);
-@@ -433,7 +433,7 @@ NativeWindowViews::NativeWindowViews(const gin_helper:
+@@ -432,7 +432,7 @@ NativeWindowViews::NativeWindowViews(const gin_helper:
    if (window)
      window->AddPreTargetHandler(this);
  
@@ -36,7 +36,7 @@
    // On linux after the widget is initialized we might have to force set the
    // bounds if the bounds are smaller than the current display
    SetBounds(gfx::Rect(GetPosition(), bounds.size()), false);
-@@ -454,7 +454,7 @@ void NativeWindowViews::SetGTKDarkThemeEnabled(bool us
+@@ -453,7 +453,7 @@ void NativeWindowViews::SetGTKDarkThemeEnabled(bool us
  }
  
  void NativeWindowViews::SetGTKDarkThemeEnabled(bool use_dark_theme) {
@@ -45,7 +45,7 @@
    if (x11_util::IsX11()) {
      const std::string color = use_dark_theme ? "dark" : "light";
      auto* connection = x11::Connection::Get();
-@@ -515,7 +515,7 @@ void NativeWindowViews::Show() {
+@@ -514,7 +514,7 @@ void NativeWindowViews::Show() {
  
    NotifyWindowShow();
  
@@ -54,7 +54,7 @@
    if (global_menu_bar_)
      global_menu_bar_->OnWindowMapped();
  
-@@ -531,7 +531,7 @@ void NativeWindowViews::ShowInactive() {
+@@ -530,7 +530,7 @@ void NativeWindowViews::ShowInactive() {
  
    NotifyWindowShow();
  
@@ -63,7 +63,7 @@
    if (global_menu_bar_)
      global_menu_bar_->OnWindowMapped();
  
-@@ -550,7 +550,7 @@ void NativeWindowViews::Hide() {
+@@ -549,7 +549,7 @@ void NativeWindowViews::Hide() {
  
    NotifyWindowHide();
  
@@ -72,7 +72,7 @@
    if (global_menu_bar_)
      global_menu_bar_->OnWindowUnmapped();
  #endif
-@@ -581,7 +581,7 @@ bool NativeWindowViews::IsEnabled() const {
+@@ -580,7 +580,7 @@ bool NativeWindowViews::IsEnabled() const {
  bool NativeWindowViews::IsEnabled() const {
  #if BUILDFLAG(IS_WIN)
    return ::IsWindowEnabled(GetAcceleratedWidget());
@@ -81,7 +81,7 @@
    if (x11_util::IsX11())
      return !event_disabler_.get();
    NOTIMPLEMENTED();
-@@ -815,7 +815,7 @@ void NativeWindowViews::SetBounds(const gfx::Rect& bou
+@@ -814,7 +814,7 @@ void NativeWindowViews::SetBounds(const gfx::Rect& bou
    }
  #endif
  
@@ -90,7 +90,7 @@
    // On Linux and Windows the minimum and maximum size should be updated with
    // window size when window is not resizable.
    if (!resizable_) {
-@@ -1072,7 +1072,7 @@ bool NativeWindowViews::IsClosable() const {
+@@ -1071,7 +1071,7 @@ bool NativeWindowViews::IsClosable() const {
      return false;
    }
    return !(info.fState & MFS_DISABLED);
@@ -99,7 +99,7 @@
    return true;
  #endif
  }
-@@ -1112,7 +1112,7 @@ void NativeWindowViews::Center() {
+@@ -1111,7 +1111,7 @@ void NativeWindowViews::Center() {
  // for now to avoid breaking API contract, but should consider the long
  // term plan for this aligning with upstream.
  void NativeWindowViews::Center() {
@@ -108,7 +108,7 @@
    auto display =
        display::Screen::GetScreen()->GetDisplayNearestWindow(GetNativeWindow());
    gfx::Rect window_bounds_in_screen = display.work_area();
-@@ -1332,7 +1332,7 @@ void NativeWindowViews::SetMenu(ElectronMenuModel* men
+@@ -1336,7 +1336,7 @@ void NativeWindowViews::SetMenu(ElectronMenuModel* men
  }
  
  void NativeWindowViews::SetMenu(ElectronMenuModel* menu_model) {
@@ -117,7 +117,7 @@
    // Remove global menu bar.
    if (global_menu_bar_ && menu_model == nullptr) {
      global_menu_bar_.reset();
-@@ -1388,7 +1388,7 @@ void NativeWindowViews::SetParentWindow(NativeWindow* 
+@@ -1392,7 +1392,7 @@ void NativeWindowViews::SetParentWindow(NativeWindow* 
  void NativeWindowViews::SetParentWindow(NativeWindow* parent) {
    NativeWindow::SetParentWindow(parent);
  
@@ -126,7 +126,7 @@
    if (x11_util::IsX11()) {
      auto* connection = x11::Connection::Get();
      connection->SetProperty(
-@@ -1434,7 +1434,7 @@ void NativeWindowViews::SetProgressBar(double progress
+@@ -1438,7 +1438,7 @@ void NativeWindowViews::SetProgressBar(double progress
                                         NativeWindow::ProgressState state) {
  #if BUILDFLAG(IS_WIN)
    taskbar_host_.SetProgressBar(GetAcceleratedWidget(), progress, state);
@@ -135,7 +135,7 @@
    if (unity::IsRunning()) {
      unity::SetProgressFraction(progress);
    }
-@@ -1560,7 +1560,7 @@ content::DesktopMediaID NativeWindowViews::GetDesktopM
+@@ -1564,7 +1564,7 @@ content::DesktopMediaID NativeWindowViews::GetDesktopM
  #if BUILDFLAG(IS_WIN)
    window_handle =
        reinterpret_cast<content::DesktopMediaID::Id>(accelerated_widget);
@@ -144,7 +144,7 @@
    window_handle = static_cast<uint32_t>(accelerated_widget);
  #endif
    aura::WindowTreeHost* const host =
-@@ -1658,7 +1658,7 @@ void NativeWindowViews::SetIcon(HICON window_icon, HIC
+@@ -1662,7 +1662,7 @@ void NativeWindowViews::SetIcon(HICON window_icon, HIC
    SendMessage(hwnd, WM_SETICON, ICON_BIG,
                reinterpret_cast<LPARAM>(app_icon_.get()));
  }
@@ -153,7 +153,7 @@
  void NativeWindowViews::SetIcon(const gfx::ImageSkia& icon) {
    auto* tree_host = views::DesktopWindowTreeHostLinux::GetHostForWidget(
        GetAcceleratedWidget());
-@@ -1773,7 +1773,7 @@ bool NativeWindowViews::CanMinimize() const {
+@@ -1783,7 +1783,7 @@ bool NativeWindowViews::CanMinimize() const {
  bool NativeWindowViews::CanMinimize() const {
  #if BUILDFLAG(IS_WIN)
    return minimizable_;
@@ -162,7 +162,7 @@
    return true;
  #endif
  }
-@@ -1829,7 +1829,7 @@ void NativeWindowViews::HandleKeyboardEvent(
+@@ -1839,7 +1839,7 @@ void NativeWindowViews::HandleKeyboardEvent(
    if (widget_destroyed_)
      return;
  
@@ -171,7 +171,7 @@
    if (event.windows_key_code == ui::VKEY_BROWSER_BACK)
      NotifyWindowExecuteAppCommand(kBrowserBackward);
    else if (event.windows_key_code == ui::VKEY_BROWSER_FORWARD)
-@@ -1848,7 +1848,7 @@ void NativeWindowViews::OnMouseEvent(ui::MouseEvent* e
+@@ -1858,7 +1858,7 @@ void NativeWindowViews::OnMouseEvent(ui::MouseEvent* e
    // Alt+Click should not toggle menu bar.
    root_view_.ResetAltState();
  
diff --git a/devel/electron37/files/patch-electron_shell_browser_native__window__views.h b/devel/electron37/files/patch-electron_shell_browser_native__window__views.h
index 47d4fb90893b..5f2e253fd5e4 100644
--- a/devel/electron37/files/patch-electron_shell_browser_native__window__views.h
+++ b/devel/electron37/files/patch-electron_shell_browser_native__window__views.h
@@ -1,4 +1,4 @@
---- electron/shell/browser/native_window_views.h.orig	2025-08-06 01:20:29 UTC
+--- electron/shell/browser/native_window_views.h.orig	2025-08-13 14:21:20 UTC
 +++ electron/shell/browser/native_window_views.h
 @@ -26,7 +26,7 @@ namespace electron {
  
@@ -9,7 +9,7 @@
  class GlobalMenuBarX11;
  #endif
  
-@@ -164,7 +164,7 @@ class NativeWindowViews : public NativeWindow,
+@@ -165,7 +165,7 @@ class NativeWindowViews : public NativeWindow,
                      LPARAM l_param,
                      LRESULT* result);
    void SetIcon(HICON small_icon, HICON app_icon);
@@ -18,7 +18,7 @@
    void SetIcon(const gfx::ImageSkia& icon);
  #endif
  
-@@ -250,7 +250,7 @@ class NativeWindowViews : public NativeWindow,
+@@ -254,7 +254,7 @@ class NativeWindowViews : public NativeWindow,
    // events from resizing the window.
    extensions::SizeConstraints old_size_constraints_;
  
diff --git a/devel/electron37/files/patch-electron_shell_common_node__bindings.cc b/devel/electron37/files/patch-electron_shell_common_node__bindings.cc
index 93f950fd62a6..753e0a45b250 100644
--- a/devel/electron37/files/patch-electron_shell_common_node__bindings.cc
+++ b/devel/electron37/files/patch-electron_shell_common_node__bindings.cc
@@ -1,4 +1,4 @@
---- electron/shell/common/node_bindings.cc.orig	2025-07-02 10:12:01 UTC
+--- electron/shell/common/node_bindings.cc.orig	2025-08-13 14:21:20 UTC
 +++ electron/shell/common/node_bindings.cc
 @@ -47,7 +47,7 @@
  #include "third_party/electron_node/src/debug_utils.h"
@@ -27,7 +27,7 @@
    electron::crash_keys::SetCrashKey("electron.v8-oom.is_heap_oom",
                                      std::to_string(details.is_heap_oom));
    if (location) {
-@@ -581,7 +581,7 @@ void NodeBindings::Initialize(v8::Local<v8::Context> c
+@@ -580,7 +580,7 @@ void NodeBindings::Initialize(v8::Local<v8::Context> c
    TRACE_EVENT0("electron", "NodeBindings::Initialize");
    // Open node's error reporting system for browser process.
  
diff --git a/devel/electron37/files/patch-electron_spec_api-app-spec.ts b/devel/electron37/files/patch-electron_spec_api-app-spec.ts
index af8cd3c05eb1..ebcc2de849bd 100644
--- a/devel/electron37/files/patch-electron_spec_api-app-spec.ts
+++ b/devel/electron37/files/patch-electron_spec_api-app-spec.ts
@@ -1,6 +1,6 @@
---- electron/spec/api-app-spec.ts.orig	2025-05-27 16:50:03 UTC
+--- electron/spec/api-app-spec.ts.orig	2025-08-13 14:21:20 UTC
 +++ electron/spec/api-app-spec.ts
-@@ -126,11 +126,11 @@ describe('app module', () => {
+@@ -129,11 +129,11 @@ describe('app module', () => {
    });
  
    describe('app.getPreferredSystemLanguages()', () => {
@@ -14,7 +14,7 @@
        const languages = app.getPreferredSystemLanguages();
        if (languages.length) {
          expect(languages).to.not.include('C');
-@@ -193,7 +193,7 @@ describe('app module', () => {
+@@ -196,7 +196,7 @@ describe('app module', () => {
        expect(code).to.equal(123, 'exit code should be 123, if you see this please tag @MarshallOfSound');
      });
  
@@ -23,7 +23,16 @@
        const electronPath = process.execPath;
        const appPath = path.join(fixturesPath, 'api', 'singleton');
        appProcess = cp.spawn(electronPath, [appPath]);
-@@ -447,7 +447,7 @@ describe('app module', () => {
+@@ -360,7 +360,7 @@ describe('app module', () => {
+   });
+ 
+   // GitHub Actions macOS-13 runners used for x64 seem to have a problem with this test.
+-  ifdescribe(process.platform !== 'linux' && !isMacOSx64)('app.{add|get|clear}RecentDocument(s)', () => {
++  ifdescribe(process.platform !== 'linux' && process.platform !== 'freebsd' && !isMacOSx64)('app.{add|get|clear}RecentDocument(s)', () => {
+     const tempFiles = [
+       path.join(fixturesPath, 'foo.txt'),
+       path.join(fixturesPath, 'bar.txt'),
+@@ -488,7 +488,7 @@ describe('app module', () => {
    //   let w = null
  
    //   before(function () {
@@ -32,16 +41,16 @@
    //       this.skip()
    //     }
    //   })
-@@ -554,7 +554,7 @@ describe('app module', () => {
+@@ -595,7 +595,7 @@ describe('app module', () => {
    describe('app.badgeCount', () => {
      const platformIsNotSupported =
-         (process.platform === 'win32') ||
--        (process.platform === 'linux' && !app.isUnityRunning());
-+	((process.platform === 'linux' || process.platform === 'freebsd') && !app.isUnityRunning());
+       (process.platform === 'win32') ||
+-      (process.platform === 'linux' && !app.isUnityRunning());
++      (process.platform === 'linux' && !app.isUnityRunning()) || (process.platform === 'freebsd');
  
      const expectedBadgeCount = 42;
  
-@@ -598,7 +598,7 @@ describe('app module', () => {
+@@ -639,7 +639,7 @@ describe('app module', () => {
      });
    });
  
@@ -50,7 +59,7 @@
      const isMac = process.platform === 'darwin';
      const isWin = process.platform === 'win32';
  
-@@ -978,7 +978,7 @@ describe('app module', () => {
+@@ -1019,7 +1019,7 @@ describe('app module', () => {
      });
    });
  
@@ -59,7 +68,7 @@
      it('is mutable', () => {
        const values = [false, true, false];
        const setters: Array<(arg: boolean) => void> = [
-@@ -1178,7 +1178,7 @@ describe('app module', () => {
+@@ -1233,7 +1233,7 @@ describe('app module', () => {
      });
    });
  
@@ -68,7 +77,7 @@
      let w: BrowserWindow;
  
      before(function () {
-@@ -1313,7 +1313,7 @@ describe('app module', () => {
+@@ -1368,7 +1368,7 @@ describe('app module', () => {
  
    describe('getApplicationNameForProtocol()', () => {
      // TODO: Linux CI doesn't have registered http & https handlers
@@ -77,7 +86,7 @@
        // We can't expect particular app names here, but these protocols should
        // at least have _something_ registered. Except on our Linux CI
        // environment apparently.
-@@ -1331,7 +1331,7 @@ describe('app module', () => {
+@@ -1386,7 +1386,7 @@ describe('app module', () => {
      });
    });
  
@@ -86,7 +95,7 @@
      it('returns promise rejection for a bogus protocol', async function () {
        await expect(
          app.getApplicationInfoForProtocol('bogus-protocol://')
-@@ -1381,7 +1381,7 @@ describe('app module', () => {
+@@ -1436,7 +1436,7 @@ describe('app module', () => {
    });
  
    // FIXME Get these specs running on Linux CI
@@ -95,7 +104,7 @@
      const iconPath = path.join(__dirname, 'fixtures/assets/icon.ico');
      const sizes = {
        small: 16,
-@@ -1463,7 +1463,7 @@ describe('app module', () => {
+@@ -1518,7 +1518,7 @@ describe('app module', () => {
            expect(entry.memory).to.have.property('privateBytes').that.is.greaterThan(0);
          }
  
@@ -104,7 +113,7 @@
            expect(entry.sandboxed).to.be.a('boolean');
          }
  
-@@ -1537,7 +1537,7 @@ describe('app module', () => {
+@@ -1592,7 +1592,7 @@ describe('app module', () => {
  
      it('succeeds with complete GPUInfo', async () => {
        const completeInfo = await getGPUInfo('complete');
@@ -113,7 +122,7 @@
          // For linux and macOS complete info is same as basic info
          await verifyBasicGPUInfo(completeInfo);
          const basicInfo = await getGPUInfo('basic');
-@@ -1561,7 +1561,7 @@ describe('app module', () => {
+@@ -1616,7 +1616,7 @@ describe('app module', () => {
      });
    });
  
diff --git a/devel/electron37/files/patch-electron_spec_api-browser-window-spec.ts b/devel/electron37/files/patch-electron_spec_api-browser-window-spec.ts
index a2aaae07511d..7d0ad25633d7 100644
--- a/devel/electron37/files/patch-electron_spec_api-browser-window-spec.ts
+++ b/devel/electron37/files/patch-electron_spec_api-browser-window-spec.ts
@@ -1,4 +1,4 @@
---- electron/spec/api-browser-window-spec.ts.orig	2025-07-22 07:51:00 UTC
+--- electron/spec/api-browser-window-spec.ts.orig	2025-08-13 14:21:20 UTC
 +++ electron/spec/api-browser-window-spec.ts
 @@ -68,7 +68,7 @@ describe('BrowserWindow module', () => {
        }).not.to.throw();
@@ -72,7 +72,7 @@
          it('checks normal bounds when minimized', async () => {
            const bounds = w.getBounds();
            const minimize = once(w, 'minimize');
-@@ -2983,7 +2983,7 @@ describe('BrowserWindow module', () => {
+@@ -3069,7 +3069,7 @@ describe('BrowserWindow module', () => {
    describe('BrowserWindow.setOpacity(opacity)', () => {
      afterEach(closeAllWindows);
  
@@ -81,7 +81,7 @@
        it('make window with initial opacity', () => {
          const w = new BrowserWindow({ show: false, opacity: 0.5 });
          expect(w.getOpacity()).to.equal(0.5);
-@@ -3009,7 +3009,7 @@ describe('BrowserWindow module', () => {
+@@ -3095,7 +3095,7 @@ describe('BrowserWindow module', () => {
        });
      });
  
@@ -90,7 +90,7 @@
        it('sets 1 regardless of parameter', () => {
          const w = new BrowserWindow({ show: false });
          w.setOpacity(0);
-@@ -3220,7 +3220,7 @@ describe('BrowserWindow module', () => {
+@@ -3306,7 +3306,7 @@ describe('BrowserWindow module', () => {
        expect(overlayRectPreMax.height).to.equal(size);
  
        // 'maximize' event is not emitted on Linux in CI.
@@ -99,7 +99,7 @@
          const maximize = once(w, 'maximize');
          w.show();
          w.maximize();
-@@ -3286,7 +3286,7 @@ describe('BrowserWindow module', () => {
+@@ -3372,7 +3372,7 @@ describe('BrowserWindow module', () => {
          expect(preMaxHeight).to.equal(size);
  
          // 'maximize' event is not emitted on Linux in CI.
@@ -108,7 +108,7 @@
            const maximize = once(w, 'maximize');
            w.show();
            w.maximize();
-@@ -3951,7 +3951,7 @@ describe('BrowserWindow module', () => {
+@@ -4037,7 +4037,7 @@ describe('BrowserWindow module', () => {
          expect(test.nodeTimers).to.equal(true);
          expect(test.nodeUrl).to.equal(true);
  
@@ -117,7 +117,7 @@
            expect(test.creationTime).to.be.null('creation time');
            expect(test.systemMemoryInfo).to.be.null('system memory info');
          } else {
-@@ -4456,7 +4456,7 @@ describe('BrowserWindow module', () => {
+@@ -4542,7 +4542,7 @@ describe('BrowserWindow module', () => {
      });
    });
  
@@ -126,7 +126,7 @@
      afterEach(closeAllWindows);
      it('emits an event when window is maximized', async () => {
        const w = new BrowserWindow({ show: false });
-@@ -4727,7 +4727,7 @@ describe('BrowserWindow module', () => {
+@@ -4813,7 +4813,7 @@ describe('BrowserWindow module', () => {
      // TODO(zcbenz):
      // This test does not run on Linux CI. See:
      // https://github.com/electron/electron/issues/28699
@@ -135,7 +135,7 @@
        const w = new BrowserWindow({});
        const maximize = once(w, 'maximize');
        w.maximize();
-@@ -4744,7 +4744,7 @@ describe('BrowserWindow module', () => {
+@@ -4830,7 +4830,7 @@ describe('BrowserWindow module', () => {
    });
  
    // TODO(dsanders11): Enable once maximize event works on Linux again on CI
@@ -144,7 +144,7 @@
      afterEach(closeAllWindows);
      it('should show the window if it is not currently shown', async () => {
        const w = new BrowserWindow({ show: false });
-@@ -4781,7 +4781,7 @@ describe('BrowserWindow module', () => {
+@@ -4867,7 +4867,7 @@ describe('BrowserWindow module', () => {
  
      // TODO(dsanders11): Enable once minimize event works on Linux again.
      //                   See https://github.com/electron/electron/issues/28699
@@ -153,7 +153,7 @@
        const w = new BrowserWindow();
        const minimize = once(w, 'minimize');
        w.minimize();
-@@ -5267,7 +5267,7 @@ describe('BrowserWindow module', () => {
+@@ -5353,7 +5353,7 @@ describe('BrowserWindow module', () => {
        });
  
        // On Linux there is no "resizable" property of a window.
@@ -162,7 +162,7 @@
          const w = new BrowserWindow({ show: false });
          expect(w.resizable).to.be.true('resizable');
  
-@@ -5477,7 +5477,7 @@ describe('BrowserWindow module', () => {
+@@ -5563,7 +5563,7 @@ describe('BrowserWindow module', () => {
      });
    });
  
@@ -171,7 +171,7 @@
      // Not implemented on Linux.
      afterEach(closeAllWindows);
  
-@@ -6678,7 +6678,7 @@ describe('BrowserWindow module', () => {
+@@ -6764,7 +6764,7 @@ describe('BrowserWindow module', () => {
    describe('"transparent" option', () => {
      afterEach(closeAllWindows);
  
diff --git a/devel/electron37/files/patch-electron_spec_api-utility-process-spec.ts b/devel/electron37/files/patch-electron_spec_api-utility-process-spec.ts
index eab6d0294f3a..ef027ac5f72f 100644
--- a/devel/electron37/files/patch-electron_spec_api-utility-process-spec.ts
+++ b/devel/electron37/files/patch-electron_spec_api-utility-process-spec.ts
@@ -1,6 +1,6 @@
---- electron/spec/api-utility-process-spec.ts.orig	2025-07-02 10:12:01 UTC
+--- electron/spec/api-utility-process-spec.ts.orig	2025-08-13 14:21:20 UTC
 +++ electron/spec/api-utility-process-spec.ts
-@@ -487,7 +487,7 @@ describe('utilityProcess module', () => {
+@@ -522,7 +522,7 @@ describe('utilityProcess module', () => {
        expect(output).to.include(result);
      });
  
@@ -9,7 +9,7 @@
        const message = 'Message from utility process';
        const child = utilityProcess.fork(path.join(fixturesPath, 'expose-main-process-module.js'));
        await once(child, 'spawn');
-@@ -524,7 +524,7 @@ describe('utilityProcess module', () => {
+@@ -559,7 +559,7 @@ describe('utilityProcess module', () => {
        await closeWindow(w);
      });
  
diff --git a/devel/electron37/files/patch-electron_spec_api-web-contents-spec.ts b/devel/electron37/files/patch-electron_spec_api-web-contents-spec.ts
index 91ee421c5a05..001598b72527 100644
--- a/devel/electron37/files/patch-electron_spec_api-web-contents-spec.ts
+++ b/devel/electron37/files/patch-electron_spec_api-web-contents-spec.ts
@@ -1,6 +1,6 @@
---- electron/spec/api-web-contents-spec.ts.orig	2025-06-16 21:48:02 UTC
+--- electron/spec/api-web-contents-spec.ts.orig	2025-08-13 14:21:20 UTC
 +++ electron/spec/api-web-contents-spec.ts
-@@ -2754,7 +2754,7 @@ describe('webContents module', () => {
+@@ -2797,7 +2797,7 @@ describe('webContents module', () => {
      });
  
      // TODO(codebytere): OOPIF printing is disabled on Linux at the moment due to crashes.
diff --git a/devel/electron37/files/patch-electron_spec_chromium-spec.ts b/devel/electron37/files/patch-electron_spec_chromium-spec.ts
index 8ae72b65b937..629ead59ad59 100644
--- a/devel/electron37/files/patch-electron_spec_chromium-spec.ts
+++ b/devel/electron37/files/patch-electron_spec_chromium-spec.ts
@@ -1,4 +1,4 @@
---- electron/spec/chromium-spec.ts.orig	2025-07-16 19:03:26 UTC
+--- electron/spec/chromium-spec.ts.orig	2025-08-13 14:21:20 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}`));
@@ -33,7 +33,7 @@
      const html = `
      <html lang="ja-JP">
        <head>
-@@ -3515,7 +3515,7 @@ describe('paste execCommand', () => {
+@@ -3516,7 +3516,7 @@ describe('paste execCommand', () => {
    });
  });
  
diff --git a/devel/electron37/files/yarn.lock b/devel/electron37/files/yarn.lock
index 05eef81f0ca3..a12aa3686643 100644
--- a/devel/electron37/files/yarn.lock
+++ b/devel/electron37/files/yarn.lock
@@ -1058,11 +1058,6 @@
   resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.2.tgz#6dd61e43ef60b34086287f83683a5c1b2dc53d20"
   integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==
 
-"@types/webpack-env@^1.18.5":
-  version "1.18.5"
-  resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.18.5.tgz#eccda0b04fe024bed505881e2e532f9c119169bf"
-  integrity sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==
-
 "@types/yauzl@^2.9.1":
   version "2.10.0"
   resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"