23getUserMedia with chromeMediaSource: 'desktop' no longer accepts WebContents source ids; use chromeMediaSource: 'tab' with webContents.getMediaSourceId() or setDisplayMediaRequestHandler to capture a WebContents.#53709 <sup>(Also in 42, 43, 45)</sup>
24nodeIntegrationInWorker now applies only to workers created by frames that themselves have Node integration; enable nodeIntegrationInSubFrames to keep Node in workers created by subframes.#53711 <sup>(Also in 42, 43, 45)</sup>
* Added the `ELECTRON_DEBUG_DRAGGABLE_REGIONS` environment variable, which visualizes and logs draggable regions in unpackaged apps to help debug custom title bars. [#53627](https://github.com/electron/electron/pull/53627) <sup>(Also in [43](https://github.com/electron/electron/pull/53633), [45](https://github.com/electron/electron/pull/53626))</sup>
## Fixes
* File System Access permission requests and the `file-system-access-restricted` event are scoped to the requesting document, grants are reset when the origin's last page closes, and write access works in in-memory sessions. [#53691](https://github.com/electron/electron/pull/53691) <sup>(Also in [42](https://github.com/electron/electron/pull/53695), [43](https://github.com/electron/electron/pull/53694), [45](https://github.com/electron/electron/pull/53690))</sup>
* Fixed Ctrl+Y not yanking text killed with Ctrl+K in text fields on macOS. [#53714](https://github.com/electron/electron/pull/53714) <sup>(Also in [45](https://github.com/electron/electron/pull/53715))</sup>
* Fixed `Tray` icons not appearing when running inside Flatpak or Snap sandboxes on Linux. [#53653](https://github.com/electron/electron/pull/53653) <sup>(Also in [45](https://github.com/electron/electron/pull/53654))</sup>
* Fixed `app.getGPUInfo('complete')` stalling the GPU process for several seconds on some Windows systems. [#53644](https://github.com/electron/electron/pull/53644) <sup>(Also in [45](https://github.com/electron/electron/pull/53645))</sup>
* Fixed `session.setPermissionCheckHandler` receiving the top-level origin and a null `webContents` for `hid` and `usb` checks made from a subframe. [#53688](https://github.com/electron/electron/pull/53688) <sup>(Also in [42](https://github.com/electron/electron/pull/53736), [43](https://github.com/electron/electron/pull/53689), [45](https://github.com/electron/electron/pull/53679))</sup>
* Fixed `webContents.on()`, `removeListener()` and `removeAllListeners()` throwing "Object has been destroyed" for `console-message` listeners after the WebContents was destroyed. [#53494](https://github.com/electron/electron/pull/53494) <sup>(Also in [42](https://github.com/electron/electron/pull/53497), [43](https://github.com/electron/electron/pull/53496), [45](https://github.com/electron/electron/pull/53495))</sup>
* Fixed a crash on Linux when `process.env` was written while another thread was reading the environment, and a memory leak when a worker thread exits. [#53509](https://github.com/electron/electron/pull/53509) <sup>(Also in [42](https://github.com/electron/electron/pull/53511), [43](https://github.com/electron/electron/pull/53510), [45](https://github.com/electron/electron/pull/53508))</sup>
* Fixed a possible crash on Windows when a file dialog was shown for a window that was being closed at the same time. [#53583](https://github.com/electron/electron/pull/53583) <sup>(Also in [42](https://github.com/electron/electron/pull/53585), [43](https://github.com/electron/electron/pull/53584), [45](https://github.com/electron/electron/pull/53586))</sup>
* Fixed a renderer crash when the main process sent IPC to, or a page navigated, a same-process `window.open()` child whose `contextIsolation` differed from its opener's. [#53539](https://github.com/electron/electron/pull/53539) <sup>(Also in [42](https://github.com/electron/electron/pull/53541), [43](https://github.com/electron/electron/pull/53540), [45](https://github.com/electron/electron/pull/53538))</sup>
* Fixed a spurious `node_init` error being logged when creating a `ShadowRealm` with Node.js integration enabled. [#53579](https://github.com/electron/electron/pull/53579) <sup>(Also in [45](https://github.com/electron/electron/pull/53578))</sup>
* Fixed crashes in `setDisplayMediaRequestHandler` when the granted frame had been destroyed or another tab was granted by id. [#53672](https://github.com/electron/electron/pull/53672) <sup>(Also in [42](https://github.com/electron/electron/pull/53674), [43](https://github.com/electron/electron/pull/53671), [45](https://github.com/electron/electron/pull/53673))</sup>
* Fixed several non-functional DevTools integrations: the Security panel's "View certificate" button, Ctrl+wheel zooming inside DevTools, and DevTools keyboard shortcuts (e.g. F8) while the inspected page has focus. [#53630](https://github.com/electron/electron/pull/53630) <sup>(Also in [43](https://github.com/electron/electron/pull/53631), [45](https://github.com/electron/electron/pull/53471))</sup>
* Fixed window state not being persisted when a window entered or left fullscreen, or was maximized or unmaximized, without also being moved or resized. [#53576](https://github.com/electron/electron/pull/53576) <sup>(Also in [45](https://github.com/electron/electron/pull/53577))</sup>
* Internal `<webview>`, `window.close()` and `executeJavaScript` reply IPCs are validated against the sending frame. [#53723](https://github.com/electron/electron/pull/53723) <sup>(Also in [42](https://github.com/electron/electron/pull/53727), [43](https://github.com/electron/electron/pull/53726), [45](https://github.com/electron/electron/pull/53724))</sup>
* `<webview>` without `allowpopups` also blocks links opened into a new window by modifier-click, and such windows navigate as the clicking document rather than as a browser-initiated load. [#53721](https://github.com/electron/electron/pull/53721) <sup>(Also in [42](https://github.com/electron/electron/pull/53719), [43](https://github.com/electron/electron/pull/53718), [45](https://github.com/electron/electron/pull/53717))</sup>
* `getUserMedia` with `chromeMediaSource: 'desktop'` no longer accepts WebContents source ids; use `chromeMediaSource: 'tab'` with `webContents.getMediaSourceId()` or `setDisplayMediaRequestHandler` to capture a WebContents. [#53709](https://github.com/electron/electron/pull/53709) <sup>(Also in [42](https://github.com/electron/electron/pull/53710), [43](https://github.com/electron/electron/pull/53707), [45](https://github.com/electron/electron/pull/53708))</sup>
* `nodeIntegrationInWorker` now applies only to workers created by frames that themselves have Node integration; enable `nodeIntegrationInSubFrames` to keep Node in workers created by subframes. [#53711](https://github.com/electron/electron/pull/53711) <sup>(Also in [42](https://github.com/electron/electron/pull/53713), [43](https://github.com/electron/electron/pull/53712), [45](https://github.com/electron/electron/pull/53706))</sup>
* `openExternal` permission requests started by a frame that has since gone away are attributed to that frame's origin rather than to the navigating page. [#53699](https://github.com/electron/electron/pull/53699) <sup>(Also in [42](https://github.com/electron/electron/pull/53697), [43](https://github.com/electron/electron/pull/53698), [45](https://github.com/electron/electron/pull/53696))</sup>
* `pointerLock` and `keyboardLock` permission requests now report the requesting frame, and `execCommand('paste')` requires user activation in the frame that calls it. [#53693](https://github.com/electron/electron/pull/53693) <sup>(Also in [42](https://github.com/electron/electron/pull/53702), [43](https://github.com/electron/electron/pull/53701), [45](https://github.com/electron/electron/pull/53692))</sup>
## Other Changes
* Fixed the app becoming unresponsive when a page has a very large number of `app-region` draggable elements. [#53597](https://github.com/electron/electron/pull/53597) <sup>(Also in [43](https://github.com/electron/electron/pull/53632), [45](https://github.com/electron/electron/pull/53596))</sup>
* Updated Chromium to 152.0.7977.78. [#53523](https://github.com/electron/electron/pull/53523)