* fix: run toast creation on background thread
notes: attempts to fix app freeze when triggering notifications and the COM server in WindowsShellExperienceHost hangs
Co-authored-by: Jan Hannemann <jan.hannemann@outlook.com>
* fix: comments
Co-authored-by: Jan Hannemann <jan.hannemann@outlook.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Jan Hannemann <jan.hannemann@outlook.com>
This should fix the oom errors
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
chore: bump chromium to 144.0.7527.0 40-x-y
* chore: bump chromium in DEPS to 144.0.7527.0
* 7106405: [video pip] Fix gesture handling issues
https://chromium-review.googlesource.com/c/chromium/src/+/7106405
* 7130938: Reland "Remove some dependencies from the custom_handlers component"
https://chromium-review.googlesource.com/c/chromium/src/+/7130938
* 7139361: Rename PluginService's GetPlugins methods
https://chromium-review.googlesource.com/c/chromium/src/+/7139361
* chore: fixup patch indices
* test: fix macos webgl test | 7128438: Reland "Flip SwiftShader deprecation to launched." | https://chromium-review.googlesource.com/c/chromium/src/+/7128438
* test: update webgl test to skip on fallback adapters
* Fixup spec runner to properly fail on linux when tests fail
* test: fixup dbus tests
* test: convert shared-texture-spec from old done callback to async
Fixes Error: done() called multiple times in test <sharedTexture module import shared texture produced by osr successfully imported and rendered with subtle api> of file /__w/electron/electron/src/electron/spec/api-shared-texture-spec.ts
* test: fixup shared texture spec
* Revert "test: fixup dbus tests"
This reverts commit 3e2e720003.
* test: fixup dbus tests
* test: disable context menu spellcheck tests on linux
https://github.com/electron/electron/pull/48657 broke those tests
* disable sharedTexture tests on platforms other than macOS arm64
They were not working on other platforms previously but now they error out.
Also removed extraneous debugging.
* fix: use github.sha for yarn cache key to avoid hashFiles() composite action bug
* Use --immutable-cache to allow native module builds
* fix: wait for devtools blur event in focus test to avoid race condition
* fix: wait for devtools blur event in focus test to avoid race condition
* fix allow native module builds in spec workspace
* test:rebuild native modules
* Revert "fix allow native module builds in spec workspace"
This reverts commit ffda3be98c.
* Revert "Use --immutable-cache to allow native module builds"
This reverts commit 2e6eea4348.
* Revert "fix: use github.sha for yarn cache key to avoid hashFiles() composite action bug"
This reverts commit 33560ba0de.
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
In 6399527761 we changed the path strings
that `node_modules.cc` operates on from single-byte to wide strings.
Unfortunately this means that `generic_path()` that the
"fix: ensure TraverseParent bails on resource path exit" patch was
calling was no longer a safe method to call on Windows if the underlying
string has unicode characters in it.
Here we fix it by using `ConvertGenericPathToUTF8` from the Node.js
internal utilities.
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Fedor Indutny <indutny@signal.org>
* docs: explain how to load SF Symbols with `nativeImage`
Co-authored-by: Niklas Wenzel <dev@nikwen.de>
* fix: use single quotes
Co-authored-by: Niklas Wenzel <dev@nikwen.de>
* fix: use single quotes
Co-authored-by: Niklas Wenzel <dev@nikwen.de>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Niklas Wenzel <dev@nikwen.de>
Make setFocusable only deactivate a window if focusable is false. Do not deactivate a window when setting focusable to true.
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: vulture <isu@vulture.fm>
* docs(timelines): Correct v40.0.0 stable release date
On the Electron Timelines tutorial page (/docs/latest/tutorial/electron-timelines), there is a clear typo in the release schedule for v40.0.0.
The table currently lists the dates as:
* Alpha: 2025-Oct-30
* Beta: 2025-Dec-03
* **Stable: 2025-Oct-28**
This is logically incorrect, as the 'Stable' release date (Oct 28) is listed *before* both the 'Alpha' (Oct 30) and 'Beta' (Dec 03) dates for the same version.
This appears to be a copy-paste error, as the 'Stable' date (2025-Oct-28) is identical to the 'Stable' date for the v39.0.0 release in the preceding row.
This commit updates the 'Stable' date for v40.0.0 to its correct value, ensuring the timeline is accurate and logical.
Co-authored-by: 정승규 <43807509+jsk41755@users.noreply.github.com>
* docs: Update v40.0.0 stable date to 2026-Jan-13 based on Chromium schedule
Co-authored-by: 정승규 <43807509+jsk41755@users.noreply.github.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: 정승규 <43807509+jsk41755@users.noreply.github.com>
trap handlers will be initialized once the user script starts
but before app#ready. Wasm compilation before that phase will
break trap handler registeration due to the check in
v8::internal::wasm::UpdateComputedInformation. For some reason
this issue was only visible in <= 39-x-y when pdf-reader.mjs
was being loaded, maybe some module loading logic changed in >= 40-x-y
which are based on Node.js v24.x. In either case, it is best to
align the loading of wasm module required for the tests in light
of changes to how we are registering the trap handlers for the
main process.
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
fix: fix the issue where the parent window remained interactive after the modal window was opened in somecases.
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Bill Shen <15865969+cucbin@users.noreply.github.com>
The install process spawn was not capturing its own signal variable,
causing the error check to incorrectly reference the build signal
instead. This could lead to:
- Install termination by signal going undetected
- False positive errors when build was killed but install succeeded
This commit ensures the install signal is properly captured and
checked, matching the pattern used for the build process.
`bringToFront` DevTools message is sent when breakpoint is triggered
or inspect is called and Chromium upon this message activates DevTools
via `DevToolsUIBindings::Delegate::ActivateWindow`:
```
void DevToolsWindow::ActivateWindow() {
if (life_stage_ != kLoadCompleted)
return;
\#if BUILDFLAG(IS_ANDROID)
NOTIMPLEMENTED();
\#else
if (is_docked_ && GetInspectedBrowserWindow())
main_web_contents_->Focus();
else if (!is_docked_ && browser_ && !browser_->window()->IsActive())
browser_->window()->Activate();
\#endif
}
```
which implements: `DevToolsUIBindings::Delegate::ActivateWindow`.
Electron also implements this interface in:
`electron::InspectableWebContents`. However it was only setting
a zoom level, therefore this commit extends it with activation
of the DevTools.
Only supported for DevTools manged by `electron::InspectableWebContents`.
Closes: #37388
If either `npm_config_electron_use_remote_checksums` or
`electron_use_remote_checksums` are set as environment variables, then
force Electron to verify with remote checksums instead of embedded ones.
Fixes#48594.
* docs: security.md mark 'Enable process sandboxing' as active by default since electron 20
* Adjusted according to feedback
* Updated according to feedback - adjusted sandbox.md
* formatting
* Fixed broken markup
* Implemented docs linting suggestions
* docs: docs/tutorial/sandbox.md - fixed typo
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* docs: web-preferences.md - sandbox: mention default value and relation to nodeIntegration
---------
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* chore: bump nan to 2.23.0
* Fix C++ flags passed to C compiler in NAN spec runner
Passing C++-specific flags to the C compiler caused failures building native test modules.
NAN uprgaded the version of node-gyp it uses, triggering a new codepath with the C compiler that didn't occur before. In that new branch, the C++ flags present in the CFLAGS environment variable we were passing in caused the C compiler to error out:
```
error: invalid argument '-std=c++20' not allowed with 'C'
```
The fix is to only pass C++-specific flags to the C++ compiler, and not the C compiler. This is done by separating out the CFLAGS and CXXFLAGS environment variables in our nan-spec-runner.js script.
I'm curious to know more about why each of these flags are necessary, but for now this change restores the previous behavior where native test modules could be built successfully.
* test: use v8 version check instead of node version check (patch)
* Re-enable `methodswithdata-test`
* chore: bump chromium in DEPS to 143.0.7485.0
* chore: update allow_disabling_blink_scheduler_throttling_per_renderview.patch
Move SetSupportsDraggableRegions mojom IPC from chrome/ and extensions/ to blink/ | https://chromium-review.googlesource.com/c/chromium/src/+/7043264
Patch applied manually due to context shear
* Move SetSupportsDraggableRegions mojom IPC from chrome/ and extensions/ to blink/ | https://chromium-review.googlesource.com/c/chromium/src/+/7043264
* chore: e patches all
* chore: check for file existence before setting utime
* chore: stop disabling kWinDelaySpellcheckServiceInit
[cleanup] Remove feature WinDelaySpellcheckServiceInit | https://chromium-review.googlesource.com/c/chromium/src/+/7012087
This flag has been removed upstream. We've used it since c2d7164 (#38248)
to fix a crash originally described in 97b353a (#34993):
> Delaying spell check initialization is causing specs for
> 'custom dictionary word list API' to fail in Electron.
Since we haven't touched this in a few years, and since there's a
clear success criteria (a passing/failing spec), and since the patch
to restore this flag would be pretty large (~750 lines), I'm going
to try just removing the flag from our source to see if the spec
passes or fails.
* Revert "chore: stop disabling kWinDelaySpellcheckServiceInit"
This reverts commit e688880396.
Unfortunately, the crash persists.
* Revert [cleanup] Remove feature WinDelaySpellcheckServiceInit | https://chromium-review.googlesource.com/c/chromium/src/+/7012087
We currently need this feature
* fixup! chore: check for file existence before setting utime
* fixup! Move SetSupportsDraggableRegions mojom IPC from chrome/ and extensions/ to blink/ | https://chromium-review.googlesource.com/c/chromium/src/+/7043264
Address Robo's code review @ 64c7fd21ed
* fixup! fixup! chore: check for file existence before setting utime
fix: oops typo
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* fix: Enable shader-f16 on Windows
* fix: include dxil.dll and dxcompiler.dll for windows x64 and arm64
* fix: modified to follow the chromium dawn build configuration
* fix: include dxil.dll and dxcompiler.dll for windows x86
* fix: Modified to avoid explicitly specifying dawn_use_built_dxc
We logged a fatal error but didn't exit with code 1 so the publish kept going. This was caught by a sanity check later down the release process but would have been quicker to fail out here.
Also adds some code to maybe workaround the underlying auth error
fix: fix launch crash when null device is disabled on Windows
add node flag node::ProcessInitializationFlags::kNoStdioInitialization
Co-authored-by: yangzuohui <yangzuohui@bytedance.com>
Co-authored-by: yangliu <yangliu.leo@bytedance.com>
* fix: wrong api call
* fix: consistency of the resize state
* fix: edge cases
* chore: add detailed comments
* fix: lint
* chore: only windows
* chore: use transparent
Dynamic ESM import in non-context-isolated preload
Extend `HostImportModuleWithPhaseDynamically`'s routing to support
Node.js import resolution in non-context-isolated preloads through
`v8_host_defined_options` length check. The length of host defined
options is distinct between Blink and Node.js and we can use it to
determine which resolver to use.
* build: update build tools to get proper exit codes from e build
xref: https://github.com/electron/build-tools/pull/759
* build: target zips directly
mksnapshot and chromedriver have issues with siso trying to run a separate build and zip step, so just target the zip target
* build: don't unzip chromedriver and mksnapshot in tests
The contents of these files are not used in testing, so we shouldn't unzip them.
perf: two minor perf refactors in InvokeIpcCallback()
1. Allocate the CallbackScope on the stack instead of the heap
2. Skip a redundant call to node::Environment::GetCurrent()
* docs: mention that webUtils should be used via preload script
* docs: suppress lint errors
* docs: clarify webUtils usage scope
* docs: exclude potentially dangerous alert() in the example code
* docs: minor change
* docs: minor change
* docs: minor change
* docs: minor change
* docs: minor change
* docs: minor change
* docs: minor change
* docs: minor change
* docs: minor change
* docs: minor change
* docs: make linter happy
* docs: apply suggestion
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
* docs: apply suggestion
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
* docs: apply suggestion
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
* docs: minor change
* docs: minor change
* docs: remove preload line
---------
Co-authored-by: Niklas Wenzel <dev@nikwen.de>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
* refactor: make api::Clipboard::GetClipboardBuffer() private
* refactor: move GetClipboadBuffer() into anonymous namespace
* refactor: use gin::Arguments in StopRecording()
* refactor: use gin::Arguments in ImageView::New()
* refactor: use gin::Arguments in AppendSwitch()
* refactor: use gin::Arguments WebContentsView::New()
* refactor: make gin::Arguments arg const in WrappableBase::InitWithArgs()
This makes explicit that we are using it for wrapper + isolate, not the args values
* refactor: remove gin_helper::Arguments arg from ExposeAPI()
refactor: remove gin_helper::Arguments arg from ExposeAPIInWorld()
* refactor: remove gin_helper::Arguments arg from ElectronBindings::GetSystemMemoryInfo()
* refactor: remove gin_helper::Arguments arg from preload_utils::GetBinding()
* refactor: use gin::Arguments in OpenExternal()
* refactor: use gin::Arguments in ExecuteInWorld()
* refactor: use gin::Arguments in ExecuteJavaScript()
* refactor: use gin::Arguments in InvokeNew()
* refactor: use gin::Arguments in ExecuteJavaScriptInIsolatedWorld()
* refactor: remove unused GetNextArgument() marshaller for gin_helper::Arguments
* refactor: remove unused #include gin_helper/arguments.h
* chore: remove unused gin_helper::Arguments
* fixup! refactor: use gin::Arguments in ExecuteJavaScriptInIsolatedWorld()
Xref: https://github.com/electron/electron/pull/48447
We overriden the `GetPackageJSON` in Node.js to let us read files
straight from the ASAR file instead of disk. The override works by
providing a JS method with the limitation that it should not throw a
runtime error. However, this invariant was accidentally violated by
`asar.splitPath` that sometimes contrary to its' TypeScript definition
returned `false`.
fix: macOS stop overriding private cornerMask API to fix WindowServer GPU load spike
Electron fetched a custom `_cornerMask` for `ElectronNSWindow` to smooth
vibrancy corners. On macOS 15 (Tahoe) that private hook forces the window
shadow to be rendered from a fully transparent surface, causing the
WindowServer GPU load regression. Remove the `cornerMask` property and
the `_cornerMask` override so we stay on Apple’s default shadow path.
* refactor: make api::Menu inherit from gin::Wrappable*
* refactor: make api::Menu::kWrapperInfo const
* refactor: use three-arg version of GetConstructor in Menu
refactor: undo branch changes to two-arg version of GetConstructor
* fixup! refactor: make api::Menu inherit from gin::Wrappable*
fix: return type of Menu::New
* fixup! refactor: make api::Menu inherit from gin::Wrappable*
make MenuMac's constructor public so that cppgc can use it
* refactor: Pinnable -> SelfKeepAlive
* refactor: use gin::Arguments::ThrowTypeError() in AutoUpdater::SetFeedURL()
* refactor: use gin::Arguments::ThrowTypeError() in Browser::Focus()
* refactor: use gin::Arguments::ThrowTypeError() in SystemPreferences::SetUserDefault()
* refactor: use gin::Arguments::ThrowTypeError() in UtilityProcessWrapper::Create()
* refactor: use gin::Arguments::ThrowTypeError() in UtilityProcessWrapper::PostMessage()
* refactor: use gin::Arguments::ThrowTypeError() in ElectronBundleMover::ShouldContinueMove()
* refactor: use gin::Arguments::ThrowTypeError() in OnClientCertificateSelected()
* refactor: use gin::Arguments::ThrowTypeError() in Session::ClearData()
* refactor: use gin::Arguments::ThrowTypeError() in ElectronBrowserContext::DisplayMediaDeviceChosen()
* refactor: use gin::Arguments::ThrowTypeError() in WebContents::ReplaceMisspelling()
* refactor: use gin::Arguments::ThrowTypeError() in WebContents::Print()
* chore: iwyu shell/common/gin_helper/error_thrower.h
* test: rerun failed tests individually
* ci: use screencapture-nag-remover
Needed to bypass the popup message "bash" is requesting to bypass the system private window picker and directly access your screen and audio.
* Revert "chore: test with 1st quadrant of the window"
No longer needed because of the addition of the
screencapture-nag-remover script.
This reverts commit f4a7e04c0b.
* test: fixup navigationHistory flake
* rerun test up to 3 times
* refactor: make api::Clipboard::GetClipboardBuffer() private
* refactor: move GetClipboadBuffer() into anonymous namespace
* refactor: use gin::Arguments in BaseWindow::MoveAbove()
refactor: use gin::Arguments in BaseWindow::SetAlwaysOnTop()
refactor: use gin::Arguments in BaseWindow::SetIgnoreMouseEvent()
* refactor: use gin::Arguments in BaseWindow::SetProgresBar()
* refactor: use gin::Arguments in BaseWindow::SetVisibleOnAllWorkspaces()
* refactor: use gin::Arguments in BaseWindow::SetVibrancy()
* refactor: use gin::Arguments in BaseWindow::SetAspectRatio()
* refactor: use gin::Arguments in BaseWindow::PreviewFile()
* refactor: use gin::Arguments in BaseWindow::SetThumbarButtons()
* refactor: use gin::Arguments in BaseWindow::SetBounds()
* refactor: use gin::Arguments in BaseWindow::SetContentBounds()
* refactor: use gin::Arguments in BaseWindow::SetSize()
* refactor: use gin::Arguments in BaseWindow::SetContentSize()
* refactor: use gin::Arguments in BaseWindow::SetSheetOffset()
* refactor: use gin::Arguments in BaseWindow::SetPosition()
* refactor: use gin::Arguments in BaseWindow::AddTabbedWindow()
* refactor: use gin::Arguments in BaseWindow::SetParentWindow()
* refactor: use gin::Arguments in BaseWindow::BaseWindow()
* refactor: use gin::Arguments in BaseWindow::SetAccentColor()
* refactor: use gin::Arguments in BaseWindow::SetTitleBarOverlay()
* refactor: narrow App:SetJumpList() arg from gin::Arguments* to v8::Isolate*
* refactor: narrow WebContents::AddWorkSpace() arg from gin::Arguments* to v8::Isolate*
* refactor: narrow ShowMessageBox() arg from gin::Arguments* to v8::Isolate*
* refactor: narrow ShowOpenDialog() arg from gin::Arguments* to v8::Isolate*
* refactor: remove unused gin::Arguments* arg from OverrideGlobalPropertyFromIsolatedWorld()
* refactor: narrow WebContents::StartDrag() arg from gin::Arguments* to v8::Isolate*
* refactor: narrow NetLog::StopLogging() arg from gin::Arguments* to v8::Isolate*
* refactor: narrow Protocol::IsProtocolHandled() arg from gin::Arguments* to v8::Isolate*
* refactor: remove unused isolate arg from Debugger ctor
* refactor: make Debugger ctor, dtor public
needed for cppgc::MakeGarbageCollected()
This is what upstream does, e.g. https://chromium-review.googlesource.com/c/chromium/src/+/6722236
* fixup! refactor: remove unused isolate arg from Debugger ctor
mark Debugger ctor as explicit
* refactor: in EventEmitterMixin, handle both old and new WrapperInfo types
* refactor: make electron::api::Debugger inherit from gin::Wrappable
* refactor: add api::Debugger::GetTypeName()
* refactor: add api::Debugger::GetClassName()
* chore: bump chromium in DEPS to 141.0.7352.0
* chore: update patches
* 6830573: Revert 'Migrate WrappableWithNamedPropertyInterceptor to gin::Wrappable' | https://chromium-review.googlesource.com/c/chromium/src/+/6830573
* chore: bump chromium in DEPS to 141.0.7354.0
* chore: bump chromium in DEPS to 141.0.7356.0
* chore: bump chromium in DEPS to 141.0.7357.0
* chore: bump chromium in DEPS to 141.0.7359.0
* chore: bump chromium in DEPS to 141.0.7361.0
* 6838518: [Mac] Correctly deallocate sandbox error buffers and prevent crash resulting from nullptr assignment | https://chromium-review.googlesource.com/c/chromium/src/+/6838518
* 6850973: Reland "Use base::ByteCount in base::SysInfo." | https://chromium-review.googlesource.com/c/chromium/src/+/6850973
* 6506565: [FPF-CI] Create initial NoiseHash in the browser. | https://chromium-review.googlesource.com/c/chromium/src/+/6506565
* chore: update patches
* fixup! 6850973: Reland "Use base::ByteCount in base::SysInfo." | https://chromium-review.googlesource.com/c/chromium/src/+/6850973
* fixup! 6506565: [FPF-CI] Create initial NoiseHash in the browser. | https://chromium-review.googlesource.com/c/chromium/src/+/6506565
* fix: unsafe buffer warning in fix_properly_honor_printing_page_ranges.patch
* fix: FTBFS in src_remove_dependency_on_wrapper-descriptor-based_cppheap.patch
This change should be upstreamed.
Fixes this error:
../../third_party/electron_node/src/env.cc:606:3: error: no matching function for call to 'Wrap'
606 | v8::Object::Wrap<v8::CppHeapPointerTag::kDefaultTag>(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../v8/include/v8-object.h:1076:14: note: candidate function template not viable: cannot convert argument of incomplete type 'void *' to 'v8::Object::Wrappable *' for 3rd argument
1076 | void Object::Wrap(v8::Isolate* isolate, const v8::Local<v8::Object>& wrapper,
| ^
1077 | v8::Object::Wrappable* wrappable) {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../v8/include/v8-object.h:1084:14: note: candidate function template not viable: no known conversion from 'Local<Object>' to 'const PersistentBase<Object>' for 2nd argument
1084 | void Object::Wrap(v8::Isolate* isolate, const PersistentBase<Object>& wrapper,
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../v8/include/v8-object.h:1093:14: note: candidate function template not viable: no known conversion from 'Local<Object>' to 'const BasicTracedReference<Object>' for 2nd argument
1093 | void Object::Wrap(v8::Isolate* isolate,
| ^
1094 | const BasicTracedReference<Object>& wrapper,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
* [v8-init] Access crash key only from main thread | https://chromium-review.googlesource.com/c/chromium/src/+/6827167
* chore: e patches all
* chore: remove chore_restore_some_deprecated_wrapper_utility_in_gin.patch from patches
this remove line got re-added when rebasing roller/chromium/main
* chore: e patches all
* fix: include base/time/time.h when using base::Time
* chore: update patches
* Make --host-rules an alias for --host-resolver-rules.
Refs https://chromium-review.googlesource.com/c/chromium/src/+/4867872
* ci: update BUILD_TOOLS_SHA
Refs https://github.com/electron/build-tools/pull/746
* [Fontations] Remove Fontations suffix from font names
Refs https://chromium-review.googlesource.com/c/chromium/src/+/6835930
* temp: debug macOS addon build failure
* Revert "temp: debug macOS addon build failure"
This reverts commit 40bc8abab65dc83e17c4ab97cb6e7522a193fb44.
* test: run tests with Xcode 16.4
* ci: fix tccdb update for macOS 15
* spec: disable opening external application for loadURL
on macOS opening unknown external application will bring
up dialog to choose apps from application store which will
break our other test suites that want to capture screen
for pixel matching.
The loadURL spec that tests bad-scheme://foo is sufficient
that we hit the permission handler for openExternal since
at that point we already know the runtime gave up on handling
the scheme.
* chore: rebase patches
* chore: disable codesiging tests
* ci: update ScreenCaptureApprovals.plist for /bin/bash
* ci: try updating tcc permissions
* ci: update TCC permissions
Refs https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive
* chore: test with 1st quadrant of the window
* chore: adjust for macOS 15 menubar height
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Keeley Hammond <khammond@slack-corp.com>
Co-authored-by: Keeley Hammond <vertedinde@electronjs.org>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* build: remove no longer needed arg for siso
* chore: test ffmpeg zip
* build: fix ffmpeg build with siso
* Revert "chore: test ffmpeg zip"
This reverts commit 2bbcc86039.
* fix: Optimize the value of memory.free in the return data of getSystemMemoryInfo().
* fix: Improve the value of memory in the return data of getSystemMemoryInfo().
* fix: complete API doc.
* Update docs/api/process.md
Co-authored-by: Will Anderson <will@itsananderson.com>
* fix: update name to fileBacked.
* fix: fix with code conflict
---------
Co-authored-by: Will Anderson <will@itsananderson.com>
* chore: bump chromium in DEPS to 140.0.7330.0
* chore: bump chromium in DEPS to 140.0.7331.0
* chore: update patches
* fix: gn check failing on crashpad.h
Not yet sure what caused this
* fix: predictors::PreconnectManager -> content::PreconnectManager
CL: https://chromium-review.googlesource.com/c/chromium/src/+/6788473
* chore: bump chromium in DEPS to 140.0.7333.0
* chore: bump chromium in DEPS to 140.0.7335.0
* chore: bump chromium in DEPS to 140.0.7337.0
* chore: update patches
* chore: restore some gin utility
* 6804057: [Extensions] Validate nodoc is specified as a boolean in schemas
https://chromium-review.googlesource.com/c/chromium/src/+/6804057
* fixup! chore: restore some gin utility
* fixup! fix: predictors::PreconnectManager -> content::PreconnectManager CL: https://chromium-review.googlesource.com/c/chromium/src/+/6788473
* 6772346: Reset MouseWheelPhaseHandler state when trackpoint scroll is detected
https://chromium-review.googlesource.com/c/chromium/src/+/6772346
Not certain about what the "correct" argument to pass here is. A quick dive into the CL suggests that passing `false` is safe to keep things working. The blast radius if this assumption is wrong is that "fling" scroll gestures may not work as expected with the OSR.
* 6789383: Uninstall SODA language pack after 30 days of inactivity
https://chromium-review.googlesource.com/c/chromium/src/+/6789383
* chore: update libcxx filenames
* chore: bump chromium in DEPS to 140.0.7339.0
* chore: update patches
* fixup! 6772346: Reset MouseWheelPhaseHandler state when trackpoint scroll is detected https://chromium-review.googlesource.com/c/chromium/src/+/6772346
* chore: bump chromium in DEPS to 140.0.7339.2
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: clavin <clavin@electronjs.org>
* refactor: remove GetIsolate() calls from SetPrivate()
* refactor: remove excess GetIsolate() calls in PassValueToOtherContextInner()
* refactor: remove GetIsolate() calls from GetPrivate()
* refactor: add a v8::Isolate* local to ProxyFunctionWrapper()
* refactor: remove error_context->GetIsolate() call from PassValueToOtherContextInner()
* refactor: remove GetIsolate() call from ProxyFunctionWrapper()
* refactor: pass source and destination isolate as arg to CreateProxyForAPI()
* chore: move gin::DeprecatedWrappable to gin_helper
This is in preparation for migrating to gin::Wrappable
based on cppgc #47922
The upstream class will be deleted soon via roller PR but
the cppgc migration should happen outside the roll, this
change retains the current functionality by copying the
implementation into //electron/shell/common/gin_helper.
The class can be deleted once the cppgc migration is complete.
* chore: fix lint:cpp
* feat: Use DIR_ASSETS path to locate resource bundles
* Use DIR_ASSETS for calculating ASAR relative paths
* Add test to verify 'assets' matches parent dir of 'exe'
* Add Mac-specific test for assets path (but it is failing)
* test: Update app.getPath('assets') to expect an exception on Mac
* docs: Update docs for 'assets' path to indicate that it's only available on Windows + Linux
* fix: Don't define 'assets' mapping on macOS
* feat: add setAccentColor on Windows
* refactor: unify GetSystemAccentColor
* refactor: remove redundant parsing
* chore: fixup documentation
* Update docs/api/browser-window.md
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* Update docs/api/base-window.md
Co-authored-by: Will Anderson <andersonw@dropbox.com>
---------
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* feat: webFrameMain.fromFrameToken
* refactor: return null instead of undefined
* docs: mention renderer webFrame property
* chore: undo null->undefined in wfm.fromId api
this will be updated in another pr
* refactor: add a v8::Isolate* arg to RendererClientBase::IsWebViewFrame()
Needed for creating gin dictionaries
refactor: add a v8::Isolate* arg to ShouldLoadPreload()
Needed for calling IsWebViewFrame()
* refactor: add a v8::Isolate* arg to electron::util::CompileAndCall()
* refactor: add a v8::Isolate* arg to OnCreatePreloadableV8Context()
* refactor: add a v8::Isolate* arg to InvokeEmitProcessEvent()
* refactor: add a v8::Isolate* arg to ServiceWorkerData's constructor
* refactor: add a v8::Isolate* arg to RendererClientBase::SetupMainWorldOverrides()
* refactor: add a v8::Isolate* arg to RendererClientBase::WilLReleaseScriptContext()
* docs: update docs to avoid v8::Context::GetIsolate()
* refactor: add a v8::Isolate* arg to ElectronSandboxedRendererClient::InitializeBindings()
* refactor: avoid v8::Context::GetIsolate() call in PromiseBase::SettleScope::~SettleScope()
* refactor: add a v8::Isolate* arg to Constructible::GetConstructor()
* refactor: add a v8::Isolate* arg to NodeBindings::Initialize()
This is needed for the GetConstructor() call
* refactor: avoid v8::Context::GetIsolate() call in GetIpcObject() by taking it as an arg
* refactor: avoid v8::Context::GetIsolate() call in ipc_native::EmitIPCEvent() by taking it as an arg
* refactor: pass an isolate when calling GetCreationContextChecked() in V8FunctionInvoker
* refactor: pass an isolate when calling GetCreationContextChecked() in RendererClientBase
* refactor: pass an isolate when calling GetCreationContextChecked() in ScriptExecutionCallback::Completed()
* refactor: pass an isolate when calling GetCreationContextChecked() in ScriptExecutionCallback::CopyResultToCallingContextAndFinalize()
* refactor: pass an isolate when calling GetCreationContextChecked() in electron::GetRenderFrame()
* refactor: pass an isolate when calling GetCreationContextChecked() in gin_helper::internal::CallMethodWithArgs()
* refactor: pass an isolate when calling GetCreationContextChecked() in OverrideGlobalPropertyFromIsolatedWorld()
* refactor: pass an isolate when calling GetCreationContextChecked() in OverrideGlobalValueFromIsolatedWorld()
* refactor: pass an isolate when calling GetCreationContextChecked() in ProxyFunctionWrapper()
* refactor: pass an isolate when calling GetCreationContextChecked() in PassValueToOtherContextInner()
* fixup! refactor: pass an isolate when calling GetCreationContextChecked() in electron::GetRenderFrame()
* build: extend Chromium options in bug report template
As predicted by @dsanders11 and others, we got a bunch of bug reports with clearly incorrect values for "does this issue appear in Chromium?" because people didn't test or didn't know how to test.
This PR adds an "I didn't know how to test" option.
* build: update wording to use present tense
* test: cleanup RenderFrame lifespan tests
* test: disable navigator.serial tests on arm64 mac
debug the hang
test: disable navigator.bluetooth on arm64 mac
Revert "test: disable navigator.bluetooth on arm64 mac"
This reverts commit 4b53a8485a5ff391832c7da93d859f1aa8722e70.
Revert "debug the hang"
This reverts commit 00338f0d49a7918224822087b4510fa9db0686c3.
Revert "test: disable navigator.serial tests on arm64 mac"
This reverts commit fb515ce447a9d42185e84b17b460e4fb6d1bf71d.
Reapply "test: disable navigator.serial tests on arm64 mac"
This reverts commit 0e5608108ffebbe8b8b27af9ea06aadae2ea85dd.
Reapply "test: disable navigator.bluetooth on arm64 mac"
This reverts commit f4c7d3fc0624a22421cba5d3d75df8c5d4367eea.
fixup
* test: add waitUntil for flaky test
* build: Add platform-specific if conditions to the source sets in chromium_src.
* build: Add platform-specific if conditions to the source sets in chromium_src.
* build: cleanup symlinks in cache
* build: ignore broken links
* try --ignore-failed-read
* build: dont deref symlinks
* build: add flag to 7zip to resolve symlink error
Needed to ignore Dangerous symbolic link path was ignored errors
* Revert "build: cleanup symlinks in cache"
This reverts commit 69e53cdc88.
* build: reenable v8_enable_temporal_support
* ci: test with increased vm map count
* chore: backport PA use fewer vmas by default on linux
* chore: update patches
* Revert "ci: test with increased vm map count"
This reverts commit b626c9a5ab7ad3f01e17d77c330abfd8096a8b02.
* ci: remove logs
---------
Co-authored-by: patchup[bot] <73610968+patchup[bot]@users.noreply.github.com>
* perf: replace string temporary with string_view in GetXdgAppId()
* perf: replace string temporary with string_view in ToV8(WindowOpenDisposition)
* perf: replace string temporary with string_view in ToV8(electron::api::WebContents::Type)
fix: window.open popups are always resizable
Closes https://github.com/electron/electron/issues/43591.
Per current WHATWG spec, the `window.open` API should always
create a resizable popup window. This change updates the
`parseFeaturesString` function to ensure that windows opened
with `window.open` are always resizable, regardless of the
`resizable` feature string.
* refactor: extract-constant for registry key in GetProcessExecPath()
* refactor: extract-constant for registry key in Browser::SetLoginItemSettings()
* refactor: extract-constant for registry key in Browser::SetLoginItemSettings()
* refactor: extract-constant for registry key in Browser::GetLoginItemSettings()
* chore: document the symbolic constants
* refactor: prefer base::wcstring_view::c_str() to data() to make zero-termination clearer
* refactor: local functions GetPrivate(), SetPrivate() now take std::string_views
* refactor: make local keys std::string_views instead of C-style char arrays
* refactor: make local keys constexpr
* refactor: move local keys into local anonymous namespace
* build: rewrite push-patch to use the github API instead of local git commits to ensure commits are signed
* again
(cherry picked from commit a21afc3e45)
* use pr head ref
(cherry picked from commit 0edcc985fa)
* refactor: have ShowSaveDialogSync() return a std::optional<base::FilePath>
* fixup! refactor: have ShowSaveDialogSync() return a std::optional<base::FilePath>
Refs https://github.com/electron/.permissions/pull/293
The repo was renamed to `minimal-repro` and is no longer intended to be used as a way to start new projects (see PR above).
Since we really want bugs in `electron/electron` to be reported with a Fiddle gist instead of a standalone repo (makes reproducing and bisecting sooo much easier and safer!), I removed the repo from the README completely instead of mentioning as an issue reproduction starting point.
* fix: add back fallback wasm-trap handling
Refs https://chromium-review.googlesource.com/c/chromium/src/+/5372409
This change sets up wasm-trap handling for the case where content_shell
has not enabled crash reporting but moves the responsibility to
ElectronRendererClient. The default ContentRendererClient assumes
that crash reporting is enabled (crashpad enabled by default) and does
not set up its own handler.
* chore: fix build
---------
Co-authored-by: deepak1556 <hop2deep@gmail.com>
document the default value of priority option
Update the priority test to not use the httpbin.org as server
Fixed the lint errors
Fixed the build error
* docs: Add documentation for ImageView
* docs: Add ImageView main process module list in README.md
* test: Add some basic tests for ImageView
* test: Fill out Window embedding tests to better reflect how someone might use an ImageView
* docs: Add notes about using ImageView as a splash screen
Co-authored-by: Niklas Wenzel <dev@nikwen.de>
* docs: Update ImageView example to show a more complete splash screen example
* docs: Remove view resizing logic since the ImageView automatically gets resized
---------
Co-authored-by: Niklas Wenzel <dev@nikwen.de>
* feat: add menu item role `palette` and `header`
* adds comments
* refactors new role items to new item types
* docs: custom type
* docs: note types only available on mac 14+
---------
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
* refactor: make NativeWindow::is_modal_ const
* refactor: make NativeWindow::title_bar_style_ const and private
* refactor: make NativeWindow::has_client_frame() protected
refactor: make NativeWindow::transparent() protected
* refactor: make NativeWindow::enable_larger_than_screen() protected
* refactor: make NativeWindow::has_frame_ const
* fixup! refactor: make NativeWindow::has_client_frame() protected
fix: GetExpandedWindowSize()
* refactor: remove unnecessary downcast in MenuViews::PopupAt()
* refactor: pass a views::Widget as an arg to the ElectronDesktopWindowTreeHostLinux ctor
* refactor: pass a views::Widget as an arg to the ElectronDesktopNativeWidgetAura ctor
* refactor: pass a views::Widget as an arg to the ElectronDesktopWindowTreeHostWin ctor
* refactor: create desktop_window_tree_host_ in the ElectronDesktopNativeWidgetAura constructor
* fixup! refactor: create desktop_window_tree_host_ in the ElectronDesktopNativeWidgetAura constructor
fix: tyop
* refactor: use in-class member initialization for NativeWindow::widget_
* refactor: make NativeWindow::transparent_ const
refactor: make NativeWindow::enable_larger_than_screen_ const
* chore: make linter happy after rebase
* refactor: use base::circular_deque in ResolveProxyHelper
* refactor: use base::circular_deque in GetExtraCrashKeys()
refactor: reduce visibility of kMaxCrashKeyValueSize
This change is to match Chromium's usage advice from
base/containers/README.md: `base:circular_deque` is preferred over
`std::deque` to provide consistent performance across platforms.
refactor: make NativeWindow::pending_transitions a base::queue
Follow the base/containers/README.md advice that "Chromium code should
always use `base::circular_deque` or `base::queue` in preference to
`std::deque` or `std::queue` due to memory usage and platform variation."
description:What is the last version of Electron this worked in, if applicable?
placeholder:16.0.0
- type:dropdown
attributes:
label:Does the issue also appear in Chromium / Google Chrome?
description:If it does, please report the issue in the [Chromium issue tracker](https://issues.chromium.org/issues), not against Electron. Electron will inherit the fix once Chromium resolves the issue.
printf "<!-- no-dependency-change -->\n\nHello @${{ github.event.pull_request.user.login }}! It looks like this pull request touches one of our dependency files, and per [our contribution policy](https://github.com/electron/electron/blob/main/CONTRIBUTING.md#dependencies-upgrades-policy) we do not accept these types of changes in PRs." | gh pr review $PR_URL -r --body-file=-
printf "<!-- disallowed-non-maintainer-change -->\n\nHello @${{ github.event.pull_request.user.login }}! It looks like this pull request touches one of our dependency or CI files, and per [our contribution policy](https://github.com/electron/electron/blob/main/CONTRIBUTING.md#dependencies-upgrades-policy) we do not accept these types of changes in PRs." | gh pr review $PR_URL -r --body-file=-
This issue has been automatically marked as stale. **If this issue is still affecting you, please leave any comment** (for example, "bump"), and we'll keep it open. If you have any new additional information—in particular, if this is still reproducible in the [latest version of Electron](https://www.electronjs.org/releases/stable) or in the [beta](https://www.electronjs.org/releases/beta)—please include it with your comment!
close-issue-message:>
This issue has been closed due to inactivity, and will not be monitored. If this is a bug and you can reproduce this issue on a [supported version of Electron](https://www.electronjs.org/docs/latest/tutorial/electron-timelines#timeline) please open a new issue and include instructions for reproducing the issue.
"Chromium has updated the mac_deployment_target, please update this assert, update the supported versions documentation (docs/tutorial/support.md) and flag this as a breakingchange")
mac_deployment_target == "12.0",
"Chromium has updated the mac_deployment_target, please update this assert and flag this as a breaking change (docs/breaking-changes.md)")
@@ -37,36 +37,24 @@ For more installation options and troubleshooting tips, see
Each Electron release provides binaries for macOS, Windows, and Linux.
* macOS (Big Sur and up): Electron provides 64-bit Intel and Apple Silicon / ARM binaries for macOS.
* macOS (Monterey and up): Electron provides 64-bit Intel and Apple Silicon / ARM binaries for macOS.
* Windows (Windows 10 and up): Electron provides `ia32` (`x86`), `x64` (`amd64`), and `arm64` binaries for Windows. Windows on ARM support was added in Electron 5.0.8. Support for Windows 7, 8 and 8.1 was [removed in Electron 23, in line with Chromium's Windows deprecation policy](https://www.electronjs.org/blog/windows-7-to-8-1-deprecation-notice).
* Linux: The prebuilt binaries of Electron are built on Ubuntu 20.04. They have also been verified to work on:
* Linux: The prebuilt binaries of Electron are built on Ubuntu 22.04. They have also been verified to work on:
* Ubuntu 18.04 and newer
* Fedora 32 and newer
* Debian 10 and newer
## Quick start & Electron Fiddle
## Electron Fiddle
Use [`Electron Fiddle`](https://github.com/electron/fiddle)
to build, run, and package small Electron experiments, to see code examples for all of Electron's APIs, and
to try out different versions of Electron. It's designed to make the start of your journey with
@@ -8,6 +8,12 @@ The Electron team will send a response indicating the next steps in handling you
Report security bugs in third-party modules to the person or team maintaining the module. You can also report a vulnerability through the [npm contact form](https://www.npmjs.com/support) by selecting "I'm reporting a security vulnerability".
## Escalation
If you do not receive an acknowledgement of your report within 6 business days, or if you cannot find a private security contact for the project, you may escalate to the OpenJS Foundation CNA at `security@lists.openjsf.org`.
If the project acknowledges your report but does not provide any further response or engagement within 14 days, escalation is also appropriate.
## The Electron Security Notification Process
For context on Electron's security notification process, please see the [Notifications](https://github.com/electron/governance/blob/main/wg-security/membership-and-notifications.md#notifications) section of the Security WG's [Membership and Notifications](https://github.com/electron/governance/blob/main/wg-security/membership-and-notifications.md) Governance document.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This has been adapted from https://source.chromium.org/chromium/chromium/src/+/main:build/linux/strip_binary.gni;drc=c220a41e0422d45f1657c28146d32e99cc53640b
# The notable difference is it has an option to compress the debug sections
import("//build/config/clang/clang.gni")
import("//build/toolchain/toolchain.gni")
# Extracts symbols from a binary into a symbol file.
#
# Args:
# binary_input: Path to the binary containing symbols to extract, e.g.:
# "$root_out_dir/chrome"
# symbol_output: Desired output file for symbols, e.g.:
# "$root_out_dir/chrome.debug"
# stripped_binary_output: Desired output file for stripped file, e.g.:
# "$root_out_dir/chrome.stripped"
# compress_debug_sections: If true, compress the extracted debug sections
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This has been adapted from https://source.chromium.org/chromium/chromium/src/+/main:build/linux/strip_binary.py;drc=c220a41e0422d45f1657c28146d32e99cc53640b
# The notable difference is it has an option to compress the debug sections
importargparse
importsubprocess
importsys
defmain()->int:
parser=argparse.ArgumentParser(description="Strip binary using LLVM tools.")
*`launch-failed` - Process never successfully launched
*`integrity-failure` - Windows code integrity checks failed
*`memory-eviction` - Process proactively terminated to prevent a future out-of-memory (OOM) situation
*`exitCode` number - The exit code for the process
(e.g. status from waitpid if on POSIX, from GetExitCodeProcess on Windows).
*`serviceName` string (optional) - The non-localized name of the process.
@@ -601,6 +603,7 @@ Returns `string` - The current application directory.
*`%APPDATA%` on Windows
*`$XDG_CONFIG_HOME` or `~/.config` on Linux
*`~/Library/Application Support` on macOS
*`assets` The directory where app assets such as `resources.pak` are stored. By default this is the same as the folder containing the `exe` path. Available on Windows and Linux only.
*`userData` The directory for storing your app's configuration files, which
by default is the `appData` directory appended with your app's name. By
convention files storing user data should be written to this directory, and
@@ -615,7 +618,7 @@ Returns `string` - The current application directory.
directory.
*`temp` Temporary directory.
*`exe` The current executable file.
*`module` The `libchromiumcontent` library.
*`module` The location of the Chromium module. By default this is synonymous with `exe`.
*`desktop` The current user's Desktop directory.
*`documents` Directory for a user's "My Documents".
*`downloads` Directory for a user's downloads.
@@ -775,6 +778,22 @@ bar, and on macOS, you can visit it from dock menu.
Clears the recent documents list.
### `app.getRecentDocuments()` _macOS_ _Windows_
Returns `string[]` - An array containing documents in the most recent documents list.
*`protocol` string - The name of your protocol, without `://`. For example,
@@ -1023,6 +1042,7 @@ starts:
```js
const{app,BrowserWindow}=require('electron')
letmyWindow=null
constadditionalData={myKey:'myValue'}
@@ -1195,6 +1215,13 @@ Disables hardware acceleration for current app.
This method can only be called before app is ready.
### `app.isHardwareAccelerationEnabled()`
Returns `boolean` - whether hardware acceleration is currently enabled.
> [!NOTE]
> This information is only usable after the `gpu-info-update` event is emitted.
### `app.disableDomainBlockingFor3DAPIs()`
By default, Chromium disables 3D APIs (e.g. WebGL) until restart on a per
@@ -1226,6 +1253,8 @@ For `infoType` equal to `complete`:
For `infoType` equal to `basic`:
Promise is fulfilled with `Object` containing fewer attributes than when requested with `complete`. Here's an example of basic response:
<!-- eslint-skip -->
```js
{
auxAttributes:
@@ -1339,6 +1368,7 @@ latest version.
``` js
const { app } = require('electron')
const path = require('node:path')
const appFolder = path.dirname(process.execPath)
@@ -1375,7 +1405,75 @@ details. Disabled by default.
This API must be called after the `ready` event is emitted.
> [!NOTE]
> Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.
> Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default. Calling this method will enable the following accessibility support features: `nativeAPIs`, `webContents`, `inlineTextBoxes`, and `extendedProperties`.
@@ -1252,6 +1260,47 @@ Sets the properties for the window's taskbar button.
> `relaunchCommand` and `relaunchDisplayName` must always be set
> together. If one of those properties is not set, then neither will be used.
#### `win.setAccentColor(accentColor)` _Windows_
* `accentColor` boolean | string | null - The accent color for the window. By default, follows user preference in System Settings. To reset to system default, pass `null`.
Sets the system accent color and highlighting of active window border.
The `accentColor` parameter accepts the following values:
* **Color string** - Like `true`, but sets a custom accent color using standard CSS color formats (Hex, RGB, RGBA, HSL, HSLA, or named colors). Alpha values in RGBA/HSLA formats are ignored and the color is treated as fully opaque.
* **`true`** - Enable accent color highlighting for the window with the system accent color regardless of whether accent colors are enabled for windows in System `Settings.`
* **`false`** - Disable accent color highlighting for the window regardless of whether accent colors are currently enabled for windows in System Settings.
* **`null`** - Reset window accent color behavior to follow behavior set in System Settings.
Examples:
```js
const win = new BrowserWindow({ frame: false })
// Set red accent color.
win.setAccentColor('#ff0000')
// RGB format (alpha ignored if present).
win.setAccentColor('rgba(255,0,0,0.5)')
// Enable accent color, using the color specified in System Settings.
win.setAccentColor(true)
// Disable accent color.
win.setAccentColor(false)
// Reset window accent color behavior to follow behavior set in System Settings.
win.setAccentColor(null)
```
#### `win.getAccentColor()` _Windows_
Returns `string | boolean` - the system accent color and highlighting of active window border in Hex RGB format.
If a color has been set for the window that differs from the system accent color, the window accent color will
be returned. Otherwise, a boolean will be returned, with `true` indicating that the window uses the global system accent color, and `false` indicating that accent color highlighting is disabled for this window.
#### `win.setIcon(icon)` _Windows_ _Linux_
* `icon` [NativeImage](native-image.md) | string
@@ -1346,6 +1395,10 @@ On Windows it calls SetWindowDisplayAffinity with `WDA_EXCLUDEFROMCAPTURE`.
For Windows 10 version 2004 and up the window will be removed from capture entirely,
older Windows versions behave as if `WDA_MONITOR` is applied capturing a black window.
#### `win.isContentProtected()` _macOS_ _Windows_
Returns `boolean` - whether or not content protection is currently enabled.
@@ -1219,7 +1227,8 @@ Captures a snapshot of the page within `rect`. Omitting `rect` will capture the
Returns `Promise<void>` - the promise will resolve when the page has finished loading
(see [`did-finish-load`](web-contents.md#event-did-finish-load)), and rejects
if the page fails to load (see [`did-fail-load`](web-contents.md#event-did-fail-load)).
if the page fails to load (see
[`did-fail-load`](web-contents.md#event-did-fail-load)). A noop rejection handler is already attached, which avoids unhandled rejection errors. If the existing page has a beforeUnload handler, [`did-fail-load`](web-contents.md#event-did-fail-load) will be called unless [`will-prevent-unload`](web-contents.md#event-did-fail-load) is handled.
Same as [`webContents.loadURL(url[, options])`](web-contents.md#contentsloadurlurl-options).
@@ -1430,6 +1441,47 @@ Sets the properties for the window's taskbar button.
> `relaunchCommand` and `relaunchDisplayName` must always be set
> together. If one of those properties is not set, then neither will be used.
#### `win.setAccentColor(accentColor)` _Windows_
* `accentColor` boolean | string | null - The accent color for the window. By default, follows user preference in System Settings. To reset to system default, pass `null`.
Sets the system accent color and highlighting of active window border.
The `accentColor` parameter accepts the following values:
* **Color string** - Like `true`, but sets a custom accent color using standard CSS color formats (Hex, RGB, RGBA, HSL, HSLA, or named colors). Alpha values in RGBA/HSLA formats are ignored and the color is treated as fully opaque.
* **`true`** - Enable accent color highlighting for the window with the system accent color regardless of whether accent colors are enabled for windows in System `Settings.`
* **`false`** - Disable accent color highlighting for the window regardless of whether accent colors are currently enabled for windows in System Settings.
* **`null`** - Reset window accent color behavior to follow behavior set in System Settings.
Examples:
```js
const win = new BrowserWindow({ frame: false })
// Set red accent color.
win.setAccentColor('#ff0000')
// RGB format (alpha ignored if present).
win.setAccentColor('rgba(255,0,0,0.5)')
// Enable accent color, using the color specified in System Settings.
win.setAccentColor(true)
// Disable accent color.
win.setAccentColor(false)
// Reset window accent color behavior to follow behavior set in System Settings.
win.setAccentColor(null)
```
#### `win.getAccentColor()` _Windows_
Returns `string | boolean` - the system accent color and highlighting of active window border in Hex RGB format.
If a color has been set for the window that differs from the system accent color, the window accent color will
be returned. Otherwise, a boolean will be returned, with `true` indicating that the window uses the global system accent color, and `false` indicating that accent color highlighting is disabled for this window.
#### `win.showDefinitionForSelection()` _macOS_
Same as `webContents.showDefinitionForSelection()`.
@@ -1523,11 +1575,22 @@ events.
Prevents the window contents from being captured by other apps.
On macOS it sets the NSWindow's sharingType to NSWindowSharingNone.
On Windows it calls SetWindowDisplayAffinity with `WDA_EXCLUDEFROMCAPTURE`.
On Windows, it calls [`SetWindowDisplayAffinity`](https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowdisplayaffinity) with `WDA_EXCLUDEFROMCAPTURE`.
For Windows 10 version 2004 and up the window will be removed from capture entirely,
older Windows versions behave as if `WDA_MONITOR` is applied capturing a black window.
@@ -290,7 +311,7 @@ Specify ways of the inspector web socket url exposure.
By default inspector websocket url is available in stderr and under /json/list endpoint on `http://host:port/json/list`.
### `--experimental-network-inspector`
### `--experimental-network-inspection`
Enable support for devtools network inspector events, for visibility into requests made by the nodejs `http` and `https` modules.
@@ -325,6 +346,26 @@ Set the directory to which all Node.js diagnostic output files are written. Defa
Affects the default output directory of [v8.setHeapSnapshotNearHeapLimit](https://nodejs.org/docs/latest/api/v8.html#v8setheapsnapshotnearheaplimitlimit).
### `--no-experimental-global-navigator`
Disable exposition of [Navigator API][] on the global scope from Node.js.
## Chromium Flags
There isn't a documented list of all Chromium switches, but there are a few ways to find them.
The easiest way is through Chromium's flags page, which you can access at `about://flags`. These flags don't directly match switch names, but they show up in the process's command-line arguments.
To see these arguments, enable a flag in `about://flags`, then go to `about://version` in Chromium. You'll find a list of command-line arguments, including `--flag-switches-begin --your --list --flag-switches-end`, which contains the list of your flag enabled switches.
Most flags are included as part of `--enable-features=`, but some are standalone switches, like `--enable-experimental-web-platform-features`.
A complete list of flags exists in [Chromium's flag metadata page](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/flag-metadata.json), but this list includes platform, environment and GPU specific, expired and potentially non-functional flags, so many of them might not always work in every situation.
Keep in mind that standalone switches can sometimes be split into individual features, so there's no fully complete list of switches.
Finally, you'll need to ensure that the version of Chromium in Electron matches the version of the browser you're using to cross-reference the switches.
@@ -102,6 +102,10 @@ Returns `Promise<DesktopCapturerSource[]>` - Resolves with an array of [`Desktop
## Caveats
`desktopCapturer.getSources(options)` only returns a single source on Linux when using Pipewire.
PipeWire supports a single capture for both screens and windows. If you request the window and screen type, the selected source will be returned as a window capture.
`navigator.mediaDevices.getUserMedia` does not work on macOS for audio capture due to a fundamental limitation whereby apps that want to access the system's audio require a [signed kernel extension](https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/KernelExtensions/KernelExtensions.html). Chromium, and by extension Electron, does not provide this.
It is possible to circumvent this limitation by capturing system audio with another macOS app like Soundflower and passing it through a virtual audio input device. This virtual device can then be queried with `navigator.mediaDevices.getUserMedia`.
*`accelerators`[Accelerator](accelerator.md)[] - an array of [Accelerator](accelerator.md)s.
*`accelerators`string[] - An array of [accelerator](../tutorial/keyboard-shortcuts.md#accelerators) shortcuts.
*`callback` Function
Registers a global shortcut of all `accelerator` items in `accelerators`. The `callback` is called when any of the registered shortcuts are pressed by the user.
@@ -93,7 +96,7 @@ the app has been authorized as a [trusted accessibility client](https://develope
### `globalShortcut.isRegistered(accelerator)`
*`accelerator` [Accelerator](accelerator.md)
*`accelerator` string - An [accelerator](../tutorial/keyboard-shortcuts.md#accelerators) shortcut.
Returns `boolean` - Whether this application has registered `accelerator`.
@@ -103,7 +106,7 @@ don't want applications to fight for global shortcuts.
### `globalShortcut.unregister(accelerator)`
*`accelerator` [Accelerator](accelerator.md)
*`accelerator` string - An [accelerator](../tutorial/keyboard-shortcuts.md#accelerators) shortcut.
*`accelerator`string (optional) - An [Accelerator](../tutorial/keyboard-shortcuts.md#accelerators) string.
*`icon` ([NativeImage](native-image.md) | string) (optional) - Can be a
[NativeImage](native-image.md) or the file path of an icon.
*`enabled` boolean (optional) - If false, the menu item will be greyed out and
unclickable.
*`acceleratorWorksWhenHidden` boolean (optional) _macOS_ - default is `true`, and when `false` will prevent the accelerator from triggering the item if the item is not visible.
@@ -54,88 +67,13 @@ See [`Menu`](menu.md) for examples.
> [!NOTE]
> `acceleratorWorksWhenHidden` is specified as being macOS-only because accelerators always work when items are hidden on Windows and Linux. The option is exposed to users to give them the option to turn it off, as this is possible in native macOS development.
### Roles
Roles allow menu items to have predefined behaviors.
It is best to specify `role` for any menu item that matches a standard role,
rather than trying to manually implement the behavior in a `click` function.
The built-in `role` behavior will give the best native experience.
The `label` and `accelerator` values are optional when using a `role` and will
default to appropriate values for each platform.
Every menu item must have either a `role`, `label`, or in the case of a separator
a `type`.
The `role` property can have following values:
*`undo`
*`about` - Trigger a native about panel (custom message box on Window, which does not provide its own).
*`redo`
*`cut`
*`copy`
*`paste`
*`pasteAndMatchStyle`
*`selectAll`
*`delete`
*`minimize` - Minimize current window.
*`close` - Close current window.
*`quit` - Quit the application.
*`reload` - Reload the current window.
*`forceReload` - Reload the current window ignoring the cache.
*`toggleDevTools` - Toggle developer tools in the current window.
*`togglefullscreen` - Toggle full screen mode on the current window.
*`resetZoom` - Reset the focused page's zoom level to the original size.
*`windowMenu` - Whole default "Window" menu (Minimize, Zoom, etc.).
The following additional roles are available on _macOS_:
*`appMenu` - Whole default "App" menu (About, Services, etc.)
*`hide` - Map to the `hide` action.
*`hideOthers` - Map to the `hideOtherApplications` action.
*`unhide` - Map to the `unhideAllApplications` action.
*`showSubstitutions` - Map to the `orderFrontSubstitutionsPanel` action.
*`toggleSmartQuotes` - Map to the `toggleAutomaticQuoteSubstitution` action.
*`toggleSmartDashes` - Map to the `toggleAutomaticDashSubstitution` action.
*`toggleTextReplacement` - Map to the `toggleAutomaticTextReplacement` action.
*`startSpeaking` - Map to the `startSpeaking` action.
*`stopSpeaking` - Map to the `stopSpeaking` action.
*`front` - Map to the `arrangeInFront` action.
*`zoom` - Map to the `performZoom` action.
*`toggleTabBar` - Map to the `toggleTabBar` action.
*`selectNextTab` - Map to the `selectNextTab` action.
*`selectPreviousTab` - Map to the `selectPreviousTab` action.
*`showAllTabs` - Map to the `showAllTabs` action.
*`mergeAllWindows` - Map to the `mergeAllWindows` action.
*`moveTabToNewWindow` - Map to the `moveTabToNewWindow` action.
*`window` - The submenu is a "Window" menu.
*`help` - The submenu is a "Help" menu.
*`services` - The submenu is a ["Services"](https://developer.apple.com/documentation/appkit/nsapplication/1428608-servicesmenu?language=objc) menu. This is only intended for use in the Application Menu and is _not_ the same as the "Services" submenu used in context menus in macOS apps, which is not implemented in Electron.
*`recentDocuments` - The submenu is an "Open Recent" menu.
*`clearRecentDocuments` - Map to the `clearRecentDocuments` action.
*`shareMenu` - The submenu is [share menu][ShareMenu]. The `sharingItem` property must also be set to indicate the item to share.
When specifying a `role` on macOS, `label` and `accelerator` are the only
options that will affect the menu item. All other options will be ignored.
Lowercase `role`, e.g. `toggledevtools`, is still supported.
> [!NOTE]
> The `enabled` and `visibility` properties are not available for top-level menu items in the tray on macOS.
### Instance Properties
The following properties are available on instances of `MenuItem`:
#### `menuItem.id`
A `string` indicating the item's unique id, this property can be
A `string` indicating the item's unique id. This property can be
dynamically changed.
#### `menuItem.label`
@@ -158,7 +96,10 @@ item's submenu, if present.
#### `menuItem.type`
A `string` indicating the type of the item. Can be `normal`, `separator`, `submenu`, `checkbox` or `radio`.
A `string` indicating the type of the item. Can be `normal`, `separator`, `submenu`, `checkbox`, `radio`, `header` or `palette`.
> [!NOTE]
> `header` and `palette` are only available on macOS 14 and up.
#### `menuItem.role`
@@ -190,17 +131,17 @@ A `string` indicating the item's hover text.
#### `menuItem.enabled`
A `boolean` indicating whether the item is enabled, this property can be
A `boolean` indicating whether the item is enabled. This property can be
dynamically changed.
#### `menuItem.visible`
A `boolean` indicating whether the item is visible, this property can be
A `boolean` indicating whether the item is visible. This property can be
dynamically changed.
#### `menuItem.checked`
A `boolean` indicating whether the item is checked, this property can be
A `boolean` indicating whether the item is checked. This property can be
dynamically changed.
A `checkbox` menu item will toggle the `checked` property on and off when
@@ -231,5 +172,3 @@ A `number` indicating an item's sequential unique id.
Sends the `action` to the first responder of application. This is used for
emulating default macOS menu behaviors. Usually you would use the
[`role`](menu-item.md#roles) property of a [`MenuItem`](menu-item.md).
[`role`](../tutorial/menus.md#roles) property of a [`MenuItem`](menu-item.md).
See the [macOS Cocoa Event Handling Guide](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW7)
@@ -73,47 +80,50 @@ The `menu` object has the following instance methods:
#### `menu.popup([options])`
*`options` Object (optional)
*`window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
*`frame` [WebFrameMain](web-frame-main.md) (optional) - Provide the relevant frame
-`options` Object (optional)
-`window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
-`frame` [WebFrameMain](web-frame-main.md) (optional) - Provide the relevant frame
if you want certain OS-level features such as Writing Tools on macOS to function correctly. Typically, this should be `params.frame` from the [`context-menu` event](web-contents.md#event-context-menu) on a WebContents, or the [`focusedFrame` property](web-contents.md#contentsfocusedframe-readonly) of a WebContents.
*`x` number (optional) - Default is the current mouse cursor position.
-`x` number (optional) - Default is the current mouse cursor position.
Must be declared if `y` is declared.
*`y` number (optional) - Default is the current mouse cursor position.
-`y` number (optional) - Default is the current mouse cursor position.
Must be declared if `x` is declared.
*`positioningItem` number (optional) _macOS_ - The index of the menu item to
-`positioningItem` number (optional) _macOS_ - The index of the menu item to
be positioned under the mouse cursor at the specified coordinates. Default
is -1.
*`sourceType` string (optional) _Windows__Linux_ - This should map to the `menuSourceType`
-`sourceType` string (optional) _Windows__Linux_ - This should map to the `menuSourceType`
provided by the `context-menu` event. It is not recommended to set this value manually,
only provide values you receive from other APIs or leave it `undefined`.
Can be `none`, `mouse`, `keyboard`, `touch`, `touchMenu`, `longPress`, `longTap`, `touchHandle`, `stylus`, `adjustSelection`, or `adjustSelectionReset`.
*`callback` Function (optional) - Called when menu is closed.
-`callback` Function (optional) - Called when menu is closed.
Pops up this menu as a context menu in the [`BaseWindow`](base-window.md).
> [!TIP]
> For more details, see the [Context Menu](../tutorial/context-menu.md) guide.
#### `menu.closePopup([window])`
*`window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
-`window` [BaseWindow](base-window.md) (optional) - Default is the focused window.
Closes the context menu in the `window`.
#### `menu.append(menuItem)`
*`menuItem` [MenuItem](menu-item.md)
-`menuItem` [MenuItem](menu-item.md)
Appends the `menuItem` to the menu.
#### `menu.getMenuItemById(id)`
*`id` string
-`id` string
Returns `MenuItem | null` the item with the specified `id`
#### `menu.insert(pos, menuItem)`
*`pos` Integer
*`menuItem` [MenuItem](menu-item.md)
-`pos` Integer
-`menuItem` [MenuItem](menu-item.md)
Inserts the `menuItem` to the `pos` position of the menu.
@@ -129,7 +139,7 @@ Objects created with `new Menu` or returned by `Menu.buildFromTemplate` emit the
Returns:
*`event` Event
-`event` Event
Emitted when `menu.popup()` is called.
@@ -137,7 +147,7 @@ Emitted when `menu.popup()` is called.
Returns:
*`event` Event
-`event` Event
Emitted when a popup is closed either manually or with `menu.closePopup()`.
@@ -149,296 +159,5 @@ Emitted when a popup is closed either manually or with `menu.closePopup()`.
A `MenuItem[]` array containing the menu's items.
Each `Menu` consists of multiple [`MenuItem`](menu-item.md)s and each `MenuItem`
can have a submenu.
## Examples
An example of creating the application menu with the simple template API:
macOS has a completely different style of application menu from Windows and
Linux. Here are some notes on making your app's menu more native-like.
### Standard Menus
On macOS there are many system-defined standard menus, like the [`Services`](https://developer.apple.com/documentation/appkit/nsapplication/1428608-servicesmenu?language=objc) and
`Windows` menus. To make your menu a standard menu, you should set your menu's
`role` to one of the following and Electron will recognize them and make them
become standard menus:
* `window`
* `help`
* `services`
### Standard Menu Item Actions
macOS has provided standard actions for some menu items, like `About xxx`,
`Hide xxx`, and `Hide Others`. To set the action of a menu item to a standard
action, you should set the `role` attribute of the menu item.
### Main Menu's Name
On macOS the label of the application menu's first item is always your app's
name, no matter what label you set. To change it, modify your app bundle's
`Info.plist` file. See
[About Information Property List Files][AboutInformationPropertyListFiles]
for more information.
### Menu Sublabels
Menu sublabels, or [subtitles](https://developer.apple.com/documentation/appkit/nsmenuitem/subtitle?language=objc), can be added to menu items using the `sublabel` option. Below is an example based on the renderer example above:
## Setting Menu for Specific Browser Window (_Linux_ _Windows_)
The [`setMenu` method][setMenu] of browser windows can set the menu of certain
browser windows.
## Menu Item Position
You can make use of `before`, `after`, `beforeGroupContaining`, `afterGroupContaining` and `id` to control how the item will be placed when building a menu with `Menu.buildFromTemplate`.
* `before` - Inserts this item before the item with the specified id. If the
referenced item doesn't exist the item will be inserted at the end of
the menu. Also implies that the menu item in question should be placed in the same “group” as the item.
* `after` - Inserts this item after the item with the specified id. If the
referenced item doesn't exist the item will be inserted at the end of
the menu. Also implies that the menu item in question should be placed in the same “group” as the item.
* `beforeGroupContaining` - Provides a means for a single context menu to declare
the placement of their containing group before the containing group of the item with the specified id.
* `afterGroupContaining` - Provides a means for a single context menu to declare
the placement of their containing group after the containing group of the item with the specified id.
By default, items will be inserted in the order they exist in the template unless one of the specified positioning keywords is used.
> Electron's built-in classes cannot be subclassed in user code.
> For more information, see [the FAQ](../faq.md#class-inheritance-does-not-work-with-electron-built-in-modules).
### Instance Properties
#### `channel.port1`
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.