* build: drop @types/webpack-env in favor of webpack/module types
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
* chore: improve type when assigning to global.require
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
chore: bump chromium to 140.0.7339.2 (main) (#47929)
* 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>
chore: move gin::DeprecatedWrappable to gin_helper (#47958)
* 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
Co-authored-by: Robo <hop2deep@gmail.com>
* feat: Use DIR_ASSETS path to locate resource bundles
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* Use DIR_ASSETS for calculating ASAR relative paths
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* Add test to verify 'assets' matches parent dir of 'exe'
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* Add Mac-specific test for assets path (but it is failing)
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* test: Update app.getPath('assets') to expect an exception on Mac
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* docs: Update docs for 'assets' path to indicate that it's only available on Windows + Linux
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* fix: Don't define 'assets' mapping on macOS
Co-authored-by: Will Anderson <andersonw@dropbox.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Will Anderson <andersonw@dropbox.com>
* feat: webFrameMain.fromFrameToken
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
* refactor: return null instead of undefined
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
* docs: mention renderer webFrame property
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
* chore: undo null->undefined in wfm.fromId api this will be updated in another pr
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
chore: add TS smoke test for electron/utility
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
* refactor: remove GetIsolate() calls from SetPrivate()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: remove excess GetIsolate() calls in PassValueToOtherContextInner()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: remove GetIsolate() calls from GetPrivate()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* local to ProxyFunctionWrapper()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: remove error_context->GetIsolate() call from PassValueToOtherContextInner()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: remove GetIsolate() call from ProxyFunctionWrapper()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass source and destination isolate as arg to CreateProxyForAPI()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
fix: crash on window.close with WebContentsView on blur
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
* 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()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to electron::util::CompileAndCall()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to OnCreatePreloadableV8Context()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to InvokeEmitProcessEvent()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to ServiceWorkerData's constructor
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to RendererClientBase::SetupMainWorldOverrides()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to RendererClientBase::WilLReleaseScriptContext()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* docs: update docs to avoid v8::Context::GetIsolate()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to ElectronSandboxedRendererClient::InitializeBindings()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: avoid v8::Context::GetIsolate() call in PromiseBase::SettleScope::~SettleScope()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in V8FunctionInvoker
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in RendererClientBase
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in ScriptExecutionCallback::Completed()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in ScriptExecutionCallback::CopyResultToCallingContextAndFinalize()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in electron::GetRenderFrame()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in gin_helper::internal::CallMethodWithArgs()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in OverrideGlobalPropertyFromIsolatedWorld()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in OverrideGlobalValueFromIsolatedWorld()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in ProxyFunctionWrapper()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: pass an isolate when calling GetCreationContextChecked() in PassValueToOtherContextInner()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* fixup! refactor: pass an isolate when calling GetCreationContextChecked() in electron::GetRenderFrame()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to Constructible::GetConstructor()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add a v8::Isolate* arg to NodeBindings::Initialize()
This is needed for the GetConstructor() call
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: avoid v8::Context::GetIsolate() call in GetIpcObject() by taking it as an arg
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: avoid v8::Context::GetIsolate() call in ipc_native::EmitIPCEvent() by taking it as an arg
Co-authored-by: Charles Kerr <charles@charleskerr.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: avoid redundant GetIsolate() calls in NodeBindings::CreateEnvironment()
Xref: https://chromium-review.googlesource.com/c/v8/v8/+/6563615
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: use v8::Isolate::GetCurrent() in Initialize() methods
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add v8::Isolate* arg to NodeBindings::CreateEnvironment()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* fixup! refactor: use v8::Isolate::GetCurrent() in Initialize() methods
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: add v8::Isolate* arg to RendererClientBase::DidCreateScriptContext()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* fixup! refactor: add v8::Isolate* arg to NodeBindings::CreateEnvironment()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* fixup! fixup! refactor: use v8::Isolate::GetCurrent() in Initialize() methods
refactor: prefer JavascriptEnvironment::GetIsolate() in the browser layer
Co-authored-by: Charles Kerr <charles@charleskerr.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* test: cleanup RenderFrame lifespan tests
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* 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
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* test: add waitUntil for flaky test
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* build: cleanup symlinks in cache
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* build: ignore broken links
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* try --ignore-failed-read
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* build: dont deref symlinks
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* build: add flag to 7zip to resolve symlink error
Needed to ignore Dangerous symbolic link path was ignored errors
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* Revert "build: cleanup symlinks in cache"
This reverts commit 69e53cdc88.
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
fix: default to system accent color on invalid user color"
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
* perf: replace string temporary with string_view in GetXdgAppId()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* perf: replace string temporary with string_view in ToV8(WindowOpenDisposition)
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* perf: replace string temporary with string_view in ToV8(electron::api::WebContents::Type)
Co-authored-by: Charles Kerr <charles@charleskerr.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
fix: accentColor should reflect system settings without restart
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Use base::MakeFixedFlatSet()
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: extract-constant for registry key in GetProcessExecPath()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: extract-constant for registry key in Browser::SetLoginItemSettings()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: extract-constant for registry key in Browser::SetLoginItemSettings()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: extract-constant for registry key in Browser::GetLoginItemSettings()
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* chore: document the symbolic constants
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: prefer base::wcstring_view::c_str() to data() to make zero-termination clearer
Co-authored-by: Charles Kerr <charles@charleskerr.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: local functions GetPrivate(), SetPrivate() now take std::string_views
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: make local keys std::string_views instead of C-style char arrays
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: make local keys constexpr
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: move local keys into local anonymous namespace
Co-authored-by: Charles Kerr <charles@charleskerr.com>
---------
Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* 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."
GTK >= 3.90.0 removed support for menuitem icons. When Electron is
built with GTK >= 3.90.0, our code builds these icons and then throws
them away unused. Instead, let's just not build them.
Our gtk_util::GdkPixbufFromSkBitmap utility uses BGRAToRGBA and is
expensive to call.
The GlobalMenuBar used to hold a raw_ptr reference to its NativeWindow;
but since it doesn't use it & only wants the gfx::AcceleratedWidget info,
let's remove the NativeWindowViews reference.
AFAICT, GlobalMenuBarX11::window_ has never been used
* refactor: make TrackableObject::weak_map_id() constexpr
refactor: make BaseWindow::GetID() inline and constexpr
* refactor: make NativeWindow::window_id() constexpr too
* chore: fold the profile patches into one patch
* chore: e patches all
* chore: patch out ProfileSelections::ApplyProfileSelection()
Another profile reference. Referenced iff making a debug build.
* refactor: use x11_util::IsX11() in BuildSubmenuFromModel()
* refactor: use x11_util::IsX11() in ElectronDesktopWindowTreeHostLinux::OnBoundsChanged()
* refactor: use skia_can_fall_back_to_x11 in x11_util::IsX11()
it is identical in practice to electron_can_call_x11 and does not require a Chromium patch
* chore: remove introduce_ozoneplatform_electron_can_call_x11_property.patch
* refactor: use ui::GetOzonePlatformId() to test for x11
* feat: enable innerWidth and innerHeight for window open
* update comment for added special innerWidth and innerHeight
* update 100 min spec requirement handling
* update testing to include getContentSize
* update macOS min requirement handling
* adjust refactored consts
* update const values from nativewindowviews
Fixes https://github.com/electron/electron/issues/45990
We previously made a change in https://github.com/electron/electron/pull/45868
to fix content protection being lost on hide and re-show. However, this
cause a breaking change where protected windows were made opaque black
instead of being hidden as before. This overrides relevant methods in
ElectronDesktopWindowTreeHostWin to restore the previous behavior.
without regressing the original issue.
* refactor: use ValueOrDefault() in electron_api_web_contents.cc
* refactor: use ValueOrDefault() in electron_api_url_loader.cc
* refactor: use ValueOrDefault() in electron_download_manager_delegate.cc
* refactor: use ValueOrDefault() in electron_touch_bar.mm
* refactor: use ValueOrDefault() in electron_url_loader_factory.cc
* refactor: use ValueOrDefault() in electron_browser_context.cc
* refactor: use ValueOrDefault() in electron_touch_bar.mm
* refactor: use ValueOrDefault() in blink_converter.cc
* feat: add ValueOrDefault() to PersistentDictionary
* empty commit
* refactor: use ValueOrDefault() in blink_converter.cc
* refactor: inline the rectangle base::Value::Dict
* refactor: remove has_scroll temporary
---------
Co-authored-by: Deepak Mohan <hop2deep@gmail.com>
* refactor: do not use native_widget_private() in NativeWindowViews::SetContentProtection()
refactor: do not use native_widget_private() in NativeWindowViews::IsContentProtected()
* refactor: do not use native_widget_private() in NativeWindowViews::Show()
* chore: remove native_widget_private #include from native_window_views_win
Not needed since Feb 2025: 9199d5c6
chore: remove deps_add_v8_object_setinternalfieldfornodecore.patch
This was a Node 20-specific workaround that's no longer needed in Node 22.
Xref: https://github.com/nodejs/node/pull/49874.
* Remove microtasks_scope.h and microtasks_scope.cc
* Use v8::MicrotasksScope when ignoring browser checkpoint
These call always skip the browser checkpoint, so they are equivalent to using v8::MicrotasksScope directly (modulo the optional wrapper behavior).
* Remove MicrotasksScope from node_bindings.cc
This code seems contradictory: it explicitly specifies "do not run microtasks" yet runs a microtask checkpoint in the browser process.
Looking at its history, it [was introduced][1] with the intention to not run microtasks, but a [subtle C++ language behavior][2] caused it to do the opposite later in the same roll. Since the original intention was to not run microtasks, and since that is also the simplest explanation, we can assume `ignore_browser_checkpoint` should be true and migrate this to `v8::MicrotasksScope` as it is equivalent (modulo the optional wrapper behavior).
[1]: a4ea80dd47 (diff-efe58cf03c97028f37f801db044d396a5f428686da6595d2c692f1c052bbd09c)
[2]: https://github.com/electron/electron/pull/43185
* Migrate gin_helper/promise.h and gin_helper/promise.cc to v8::MicrotasksScope
Restores the [original][1] behavior of running the microtask checkpoint at destruction, but preserves the behavior of running microtasks in the browser process. This had last changed in the migration to gin_helper::MicroTasks.
[1]: https://github.com/electron/electron/pull/16401
* chore: bump chromium in DEPS to 138.0.7165.0
* 6492127: Add new less invasive context menu mode for mobile interesttarget
https://chromium-review.googlesource.com/c/chromium/src/+/6492127
* chore: fixup patch indices
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
* feat: add gin_helper::Dictionary::ValueOrDefault()
A convenience function for using a default value if the
specified key isn't present in the dictionary.
* refactor: use ValueOrDefault() in native_window.cc
* refactor: use ValueOrDefault() in native_window_mac.mm
* refactor: use ValueOrDefault() in native_window_views.cc
* refactor: use ValueOrDefault() in electron_api_native_image.cc
* test: test menu rendering accelerators
* Update spec/api-menu-spec.ts
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
---------
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* refactor: make NativeWindow::titlebar_overlay_height_ private
* refactor: make NativeWindow::set_has_frame() protected
* refactor: remove NativeWindow::background_material()
It's only used once, in NativeWindow, so use |background_material_| directly.
* refactor: remove NativeWindow::vibrancy()
It's only used once, in a NativeWindow method, so use |vibrancy_| directly.
* refactor: unfriend api::BrowserView
It was added in Oct 2022 by 23d4a25 for access to protected NativeWindow
methods add_inspectable_view() and remove_inspectable_view().
That dependency was removed in Nov 2022 by 184ac2b, so BrowserView
doesn't need access to NativeWindow's private fields & methods anymore.
* refactor: make NativeWindow::ContentBoundsToWindowBounds() protected
refactor: make NativeWindow::WindowBoundsToContentBounds() protected
* chore: use dbus thread for portal version detection
* Update shell/browser/ui/file_dialog_linux_portal.cc
Co-authored-by: Robo <hop2deep@gmail.com>
---------
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* refactor: use ObserverList::Notify() in shell/browser/window_list.cc
* refactor: use ObserverList::Notify() in shell/browser/web_contents_zoom_controller.cc
* refactor: use ObserverList::Notify() in shell/browser/usb/usb_chooser_context.cc
* refactor: use ObserverList::Notify() in shell/browser/usb/electron_usb_delegate.cc
* refactor: use ObserverList::Notify() in shell/browser/ui/views/menu_delegate.cc
* refactor: use ObserverList::Notify() in shell/browser/ui/tray_icon.cc
* refactor: use ObserverList::Notify() in shell/browser/ui/electron_menu_model.cc
* refactor: use ObserverList::Notify() in shell/browser/serial/serial_chooser_context.cc
* refactor: use ObserverList::Notify() in shell/browser/native_window.cc
* refactor: use ObserverList::Notify() in shell/browser/serial/electron_serial_delegate.cc
* refactor: use ObserverList::Notify() in shell/browser/browser.cc
* refactor: use ObserverList::Notify() in shell/browser/api/electron_api_web_contents.cc
* refactor: use ObserverList::Notify() in shell/browser/hid/electron_hid_delegate.cc
* refactor: use ObserverList::Notify() in shell/browser/hid/hid_chooser_context.cc
* refactor: don't call RegisterDeleteDelegateCallback()
move NativeWindowViews' on-widget-delegate-destroyed callback logic to
the NativeWindowViews destructor.
Since NativeWindowViews subclasses from WidgetDelegate and |this| *is*
the delegate being destroyed, we can handle this more cleanly in
~NativeWindowViews() instead of in a separate callback.
* chore: remove NativeWindowViews from the grandfathered-classes-that-can-call-deprecated-views-behavior patch
* refactor: don't call RegisterDeleteDelegateCallback()
RegisterDeleteDelegateCallback() is private upstream API, so we
shouldn't be using it.
Move the on-widget-delegate-destroyed callback logic over to our methods
NativeWindowViews::OnWidgetDestroying() and
NativeWindowViews::OnWidgetDestroyed().
* refactor: add EmitDeprecationWarning helper
Also switches EmitWarning to using Node's ProcessEmitWarningGeneric
* chore: use node namespace for function call
* refactor: use WidgetDelegate::SetTitle()
* Make NativeWindow::SetTitle() and NativeWindow::GetTitle() non-virtual.
Use WidgetDelegate for their implementation.
* Add NativeWindow::OnTitleChanged(), a new protected virtual method to update
subclasses (e.g. NativeWindowMac needs to redraw the button proxy).
* In NativeWindowMac, replace SetTitle() and GetTitle() with OnTitleChanged().
* In NativeWindowViews, replace SetTitle() and GetTitle() with OnTitleChanged().
* test: enable BrowserWindow.title tests on Linux
* test: add a test to confirm win.title changes when document.title is set in the renderer
* test: do not skip visibleOnAllWorkspaces tests on Windows
That feature is supported on Linux, so move the test from the
"window states (excluding Linux)" section into the
"window states" section.
* fix: nested it() calls in visibleOnAllWorkspaces specs
* test: enable accessibilitySupportEnabled tests
test: check both getters after calling each setter
fix: do not assume the default initial value of accessibilitySupportEnabled
* chore: remove redundant test case
* chore: disable accessibilitySupportEnabled tests on Linux
* test: add platform test on visibleOnAllWorkspaces tests
visibleOnAllWorkspaces is not supported on Windows
* test: do not skip visibleOnAllWorkspaces tests on Windows
That feature is supported on Linux, so move the test from the
"window states (excluding Linux)" section into the
"window states" section.
* fix: nested it() calls in visibleOnAllWorkspaces specs
* chore: make the process.platform test simpler
* fix: tests that were not run in api-app-spec due to nested it()
* fix: tests that were not run in api-browser-window-spec due to nested it()
* chore: annotate disabled test
* fix: enable `autoHideMenuBar` tests on Linux and Windows (#46818)
* fix: enable autoHideMenuBar tests
* docs: mark autoHideMenuBar as supported on Linux, Windows
* test: add platform test on visibleOnAllWorkspaces tests
visibleOnAllWorkspaces is not supported on Windows
* test: do not skip visibleOnAllWorkspaces tests on Windows
That feature is supported on Linux, so move the test from the
"window states (excluding Linux)" section into the
"window states" section.
* fix: nested it() calls in visibleOnAllWorkspaces specs
* chore: make the process.platform test simpler
* refactor: use net::CanonicalCookie::IsDomainMatch()
Previously we had been rolling our own impl
* test: add pattern-matching tests for our cookie API
* refactor: add electron::Buffer namespace; move the Buffer as_byte_span() into it
* feat: add electron::Buffer::Copy()
a span-friendly version of node::Buffer::Copy()
* refactor: use electron::Buffer::Copy() in electron_api_base_window.cc
* refactor: use electron::Buffer::Copy() in electron_api_data_pipe_holder.cc
* refactor: use electron::Buffer::Copy() in electron_api_safe_storage.cc
* refactor: use electron::Buffer::Copy() in electron_api_clipboard.cc
* refactor: use electron::Buffer::Copy() in osr_converter.cc
* refactor: use electron::Buffer::Copy() in electron_api_native_image.cc
* refactor: use electron::Buffer::Copy() in net_converter.cc
* refactor: use electron::Buffer::Copy() in electron_api_web_contents.cc
* refactor: make NewEmptyBuffer() return a Local<Value>
chore: remove never-used WebContents.getNativeView().
This was added in https://github.com/electron/electron/pull/10308 but
was never used and never documented, not even as experimental API.
* fix: explicitly call GetNativeNSView() on macOS
* chore: move macOS impl to a .mm file
This is needed in order to access gfx::NativeView::GetNativeNSView()
* fix: do not run microtasks in V8Serializer in browser process
* Remove no-op MicrotasksScope in `shell/browser/api/electron_api_auto_updater.cc`
This call was added in https://github.com/electron/electron/pull/40576 as an expansion of `gin_helper::EmitEvent`.
Since this only runs in the browser process and `bool ignore_browser_checkpoint = true` this code is a no-op.
Node should perform a microtask checkpoint if necessary in `node::MakeCallback`.
* Remove no-op MicrotasksScope in `shell/common/api/electron_bindings.cc`
This method is only called by the browser process. The containing function, `ElectronBindings::DidReceiveMemoryDump`, is only used in two places:
* `ElectronBindings::GetProcessMemoryInfo` in the same file, which has a `CHECK` that it's running in the browser process at the top.
* From `shell/browser/api/electron_api_web_contents.cc`, which is only run in the browser process.
Added a DCHECK for clarity and validation.
* Replace `gin_helper::MicrotasksScope` with `v8::MicrotasksScope` in `shell/renderer/`
The browser check is unnecessary in the renderer. Since `gin_helper::MicrotasksScope` will always act exactly like `v8::MicrotasksScope`, it's clear to just use the v8 object directly. This also brings them in line with the many other uses of `v8::MicrotasksScope` in `shell/renderer/`.
refactor: remove electron::WebContentsPermissionHelper::PermissionTypes::KEYBOARD_LOCK
This was added in 344aba0. In the time when this PR initially went up and
when 344aba0 landed, upstream added blink::PermissionTypes::KEYBOARD_LOCK.
Our duplicate copy can be removed.
feat: expose shouldUseDarkColorsForSystemIntegratedUI
Closes https://github.com/electron/electron/issues/46429.
Refs https://github.com/electron/electron/pull/19735.
This PR adds a new API `shouldUseDarkColorsForSystemIntegratedUI` to the
`nativeTheme` module. This API returns a boolean indicating whether the
system is using dark colors for system integrated UI elements. This is
useful for applications that want to adapt their UI to match the system
theme, especially for those that use system integrated UI elements like
the shell theme or taskbar appearance.
* refactor: make api::View::GetBounds() const
* refactor: make api::View::OnViewBoundsChanged() private
refactor: make api::View::OnViewIsDeleting() private
refactor: make api::View::OnChildViewRemoved() private
* refactor: make ChildPair private
* refactor: use AddChildView(std::unique_ptr<View>) in OpaqueFrameView::CreateButton()
Xref: https://issues.chromium.org/issues/40485510
* refactor: use AddChildView(std::unique_ptr<View>) in MenuBar::RebuildChildren()
* refactor: use AddChildView(std::unique_ptr<View>) for ClientFrameViewLinux labels
* refactor: use AddChildView(std::unique_ptr<View>) for ClientFrameViewLinux buttons
* refactor: use AddChildView(std::unique_ptr<View>) in AutofillPopupView
* refactor: use AddChildViewRaw() to flag the edge cases that we still need to fix
* chore: use west coast const for consistency
* perf: do not clone the map each time we call Archive::HeaderIntegrity()
* perf: use absl::flat_hash_map for the integrity cache
* perf: do not clone the JSON payload string
* perf: preallocate capacity for the integrity cache
* perf: use move variant of insert_or_assign()
* refactor: simplify integrity cache building
remove unnecessary std::optional<>
* refactor: use base::FindOrNull()
* refactor: remove unused #includes
* refactor: make variable types explicit
* fix: make res_size unsigned
* refactor: put GetIntegrityConfigCache() in an unnamed namespace
refator: put LoadIntegrityConfig() in an unnamed namespace
* fix: oops, missing rel_path_utf8 key
* fix: oops, fix Wunreachable-code-return
* refactor: instantiate navigation_entries on the stack instead of the heap
* refactor: reserve the full size of navigation_entries
* refactor: use emplace_back to simplify the code a little
* fix: destroy parent port backend when JS env exits
* fix: close parent port before destroying
---------
Co-authored-by: deepak1556 <hop2deep@gmail.com>
New Node.js module resolution system reads `package.json` from imported
modules by reading from the file natively in C++ without calling into
`fs.readFileSync`. The ASAR FS wrapper code had copied files out into a
temporary folder as a workaround, but it is inefficient and does not
cover all module resolution mechanisms in Node.js.
In this change we expose `overrideReadFileSync` method on the `modules`
binding in Node.js, and use this override to call into ASAR-supporting
`fs.readFileSync`.
* fix: gin_helper::Promise in GPUInfoManager must be destroyed before destroying Node/V8
* fix: use CleanedUpAtExit to control the lifetime of GPUInfoManager
* fix: ensure maximize is emitted when reduce motion is enabled on macOS
* Revert "build: reenable graphics effects for macOS tests (#46454)"
This reverts commit 682ea345ac.
* perf: use an absl::flat_hash_set for UsbChooserContext::ephemeral_devices_
* perf: use an absl::flat_hash_set for GlobalMenuBarRegistrarX11::live_windows_
* perf: use an absl::flat_hash_set for NativeWindowViews::forwarding_windows_
* perf: use an absl::flat_hash_set for OffScreenRenderWidgetHostView::guest_host_views_
perf: use an absl::flat_hash_set for OffScreenRenderWidgetHostView::proxy_views_
* perf: use an absl::flat_hash_set for NativeWindow::injected_frames_
* perf: use an absl::flat_hash_set for NativeWindow::background_throttling_sources_
perf: have ErrorThrower lazy-lookup the current isolate
ErrorThrower's default constructor is marked as "should rarely if ever
be used" because it's expensive to call.
Unfortunately, nearly every instance of ErrorThrower comes as an argument
in gin_helper's JS-->C++ function marshalling where a thrower is
default-constructed and then populated in gin_helper::GetNextArgument()
with an assignment operator to a temporary ErrorThrower constructed
with the gin::Arguments' isolate.
tldr: most of the time we use the slow constructor first, then throw
that work away unused by overwriting with a fast-constructed one.
This refactor avoids that cost by deferring the expensive work to
`ErrorThrower::isolate()`, where it happens only as a fallback iff
isolate_ hasn't been set.
* perf: avoid redundant call to popup_bounds_in_view()
* refactor: use a std::optional<> for paint_canvas local
* fix: fix leaked gfx::Canvas in AutofillPopupView::OnPaint()
* refactor: remove redundant get() call when testing smart pointer for nonempty
* refactor: remove unnecessary draw_canvas variable
* refactor: rename bitmap to offscreen_bitmap for symmetry
* refactor: avoid another redundant call to popup_bounds_in_view()
* perf: avoid making an unnecessary copy of the vector
MimeTypesHandler::GetMIMETypeAllowlist() returns a const&, so we can
iterate that directly instead of making a temporary copy of it.
* perf: move the call to ExtensionRegistry::Get() outside of the loop
Also, keep the previous behavior of not calling it at all if there
aren't any whitelisted extensions.
* perf: avoid redundant map lookup
* refactor: const correctness
* refactor: cleanup
* feat: Corner Smoothing CSS rule (Reland)
Reland of #45185
* Fix patch conflicts
* fixup! Fix patch conflicts
* Update expected image
The dashed border is subtly different. The new version is correct and the old one was incorrect.
refactor: small refactor to WebWorkerObserver::WorkerScriptReadyForEvaluation()
- replace a std::vector<std::string> local with a compile-time array
of std::string_view
- remove .c_str() pessimization when making v8 Strings from string_views
* feat: add support for associating a Menu with a WebFrameMain
This allows certain OS level features to activate such as Writing Tools, Autofill.. and Services.
There appears to be a bug in macOS where the responder chain isn't traversed if the menu is not popped up using an event, as such we spoof a fake mouse event at the write coordinates in the right window and use that to open the menu.
* build: fix build on non-mac
* build: oops missed a header
* fix: safely handle optional T* by checking nullptr too
* build: fix gn check and build errors
* docs: suggested changes
* feat: default `frame` to `window.webContents.mainFrame` when possible
* fix: avoid deref nullptr view
* Revert "feat: default `frame` to `window.webContents.mainFrame` when possible"
This reverts commit 2e88836819.
* fix: lint
* Remove redundant scoped objects
This code, including the comments, matches almost exactly the behavior of this argument to the function.
* Add ScopedPumpMessagesInPrivateModes patch
* More null pointer safety
---------
Co-authored-by: clavin <clavin@electronjs.org>
* refactor: migrate AsarFileValidator to crypto::hash
This change migrates AsarFileValidator's uses of crypto::secure_hash
to the new crypto::hash API, which has more memory safety and less
heap allocations.
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/6287609
* refactor: migrate ValidateIntegrityOrDie to crypto::hash
This change migrates ValidateIntegrityOrDie's use of crypto::SHA256Hash
to the new crypto::hash API, which has more memory safety and less heap
allocations.
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/6287609
* build: fixup windows source cache for release
* build: fixup ffmpeg gn gen
* build: add build-tools depot_tools to PATH
There are some cases where it is still expected that depot_tools be in the path
* put back regular gn gen for ffmpeg
* build: add retry to moving source cache
This resolves the error: `Move-Item : The process cannot access the file because it is being used by another process.`
* refactor: extract-method GetAddedFileSystems()
* refactor: use GetAddedFileSystems() in GetAddedFileSystemPaths()
* refactor: use GetAddedFileSystems() in IsDevToolsFileSystemAdded()
When using the SCK thumbnail capturer, the first refresh has the list of
sources, and the second refresh has the thumbnails. If thumbnails are
not needed, only wait for the first refresh.
This fixes a crash with the PipeWire capturer caused by a Chromium
change introduced in
https://chromium-review.googlesource.com/c/chromium/src/+/5783826.
DesktopMediaListBase now calls Refresh(true) after dispatching
DesktopMediaListObserver::OnDelegatedSourceListDismissed, so it's
important not to call DesktopCapturer::HandleFailure (which deallocates
the DesktopMediaList) synchronously from OnDelegatedSourceListDismissed.
* fix: Wayland resizing border
Closes https://github.com/electron/electron/issues/44543
Refs CL:5180720
Fixes an issue where the resizing border didn't work as expected on Wayland windows.
* fix: border insets when fullscreen
* perf: make ElectronUsbDelegate::controller_map_ an absl::flat_hash_map
* perf: make ElectronSerialDelegate::controller_map_ an absl::flat_hash_map
* perf: make ElectronHidDelegate::controller_map_ an absl::flat_hash_map
* perf: make FrameTreeNodeIdMap an absl::flat_hash_map
* perf: make AutofillDriverFactory::driver_map_ an absl::flat_hash_map
* perf: make asar::Archive::external_files_ an absl::flat_hash_map
* perf: make VersionIdMap an absl::flat_hash_map
* perf: make ObjectCache::proxy_map_ an absl::flat_hash_map
* docs: add TODO to investigate absl map in KeyWeakMap
* refactor: use forward declaration of MediaDeviceIDSalt in electron_browser_context.h
* refactor: remove unused #include from browser_context.h
* refactor: remove unused ElectronBrowserContext::GetWeakPtr()
last use removed in Aug 2020 by bac2f46
* refactor: decouple api::Protocol from ElectronBrowserContext
now they do not know about each other
* refactor: make electron::api::ProtocolError private
* refactor: remove unused isolate arg in Protocol constructor
* refactor: use =default for trivial destructor
feat: set ffmpeg.dll as a delay-loaded DLL
Updated the /DELAYLOAD linker config in BUILD.gn to set ffmpeg.dll
as a delay-loaded DLL. This reduces startup overhead and prevents unnecessary
loading when ffmpeg-related functionality is not used (e.g., the browser process
was unnecessarily loading it).
* refactor: add ElectronBrowserContext::BrowserContexts()
* refactor: use ElectronBrowserContext::BrowserContexts() in ElectronBrowserMainParts::PostMainMessageLoopRun()
* refactor: use ElectronBrowserContext::BrowserContexts() in ElectronExtensionsBrowserClient::IsValidContext()
* refactor: use ElectronBrowserContext::BrowserContexts() in ElectronExtensionsBrowserClient::BroadcastEventToRenderers()
* refactor: move PartitionKey, BrowserContextMap private
* refactor: add ElectronBrowserContext::IsValidContext()
decouple ElectronExtensionsBrowserClient from the internals of ElectronBrowserContext
refactor: use GetDefaultStoragePartition()
Use GetDefaultStorageParition() instead of GetStoragePartition(nullptr)
- It improves code uniformity, since we use get-default everywhere else
- It's more readable
- It's marginally faster, since GetStoragePartition() has more steps
Added in 49b0a1bf4a
refactor: remove unused ElectronBrowserContext::extension_system()
Last use removed on Jul 21, 2020 by 2fb14f5 in PR #24575
This fixes a raw_ptr warning by letting us remove the raw_ptr field
`ElectronBrowserContext::extension_system_`.
* refactor: make UtilityProcessWrapper inherit privately from mojo::MessageReceiver
* refactor: make ParentPort inherit privately from mojo::MessageReceiver
* refactor: make MessagePort inherit privately from mojo::MessageReceiver
* chore: bump chromium in DEPS to 136.0.7059.0
* chore: bump chromium in DEPS to 136.0.7060.0
* chore: bump chromium in DEPS to 136.0.7062.0
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
* perf: use base::SplitStringPiece() in SetNodeOptions()
* perf: use base::SplitStringPiece() in StringToAccelerator()
* refactor: StringToAccelerator() now takes a std::string_view
* chore: bump chromium in DEPS to 136.0.7054.0
* chore: update allow_in-process_windows_to_have_different_web_prefs.patch
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5906158
patch applied manually due to context shear
* chore: e patches all
* refactor!: Session.clearStorageData(syncable)
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/6309405
Remove syncable type from opts.quota in Session.clearStorageData(opts)
because it that category has been removed upstream.
BREAKING CHANGE: Removed ses.clearDataStorage({ quota: 'syncable' })
* docs: deprecate Session.clearDataStorage({ quota })
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* chore: bump chromium in DEPS to 136.0.7052.0
* chore: update mas_avoid_private_macos_api_usage.patch.patch
https://chromium-review.googlesource.com/c/chromium/src/+/6318359
patch applied manually due to context shear
* chore: update preconnect_manager.patch
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/6318420
patch applied manually due to context shear
* chore: e patches all
* chore: bump chromium to 136.0.7053.1
* chore: update fix_remove_profiles_from_spellcheck_service.patch
Xref: https://chromium-review.googlesource.com/c/chromium/src/+/6326575
patch applied manually due to context shear
* chore: e patches all
* chore: revert removal of v8 API used by Node.js
* devtools: Remove DevToolsUIBindings::SendJsonRequest() | https://chromium-review.googlesource.com/c/chromium/src/+/6326236
* 6244461: Merge //content/common/user_agent.cc into //components/embedder_support:user_agent | https://chromium-review.googlesource.com/c/chromium/src/+/6244461
* 6313744: Migrate views::Background factory methods to ColorVariant | https://chromium-review.googlesource.com/c/chromium/src/+/6313744
* 6314545: Remove multiple argument support from base::ToString() | https://chromium-review.googlesource.com/c/chromium/src/+/6314545
* 6317362: [Extensions] Inline MessagingDelegate::CreateReceiverForTab() | https://chromium-review.googlesource.com/c/chromium/src/+/6317362
* 6308998: Add SettingAccess structured metrics event for DevTools | https://chromium-review.googlesource.com/c/chromium/src/+/6308998
* 6295214: Remove redundant state field in per-extension preferences | https://chromium-review.googlesource.com/c/chromium/src/+/6295214
NB: this change is copied from the upstream change to extensions/shell/browser/shell_extension_loader.cc
* fix: ui/ linter error
This is showing up in an eslint build step in Electron:
> /__w/electron/electron/src/out/Default/gen/ui/webui/resources/cr_elements/preprocessed/cr_menu_selector/cr_menu_selector.ts
> 77:23 error This assertion is unnecessary since the receiver accepts the original type of the expression @typescript-eslint/no-unnecessary-type-assertion
>
> ✖ 1 problem (1 error, 0 warnings)
> 1 error and 0 warnings potentially fixable with the `--fix` option.
However, removing the assertion causes a typescript build failure:
> gen/ui/webui/resources/cr_elements/preprocessed/cr_menu_selector/cr_menu_selector.ts:77:23 - error TS2345: Argument of type 'HTMLElement | null' is not assignable to parameter of type 'HTMLElement'.
> Type 'null' is not assignable to type 'HTMLElement'.
>
> 77 items.indexOf(this.querySelector<HTMLElement>(':focus'));
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
So I think the two different steps may be picking up typescript definitions.
This patch should be removed after the issue is tracked down
and fixed in a followup task.
* fix: -Wnonnull warning
Fixes this warning:
> 2025-03-07T01:05:01.8637705Z ../../third_party/electron_node/src/debug_utils.cc(257,12): error: null passed to a callee that requires a non-null argument [-Werror,-Wnonnull]
> 2025-03-07T01:05:01.8638267Z 257 | return nullptr;
> 2025-03-07T01:05:01.8638481Z | ^~~~~~~
> 2025-03-07T01:05:01.8638700Z 1 error generated.
Not sure why this warning was never triggered before; `git blame`
indicates this code hasn't changed in ages:
> c40a8273ef2 (Michaël Zasso 2024-05-10 09:50:20 +0200 255) #endif // DEBUG
> 8e2d33f1562 (Anna Henningsen 2018-06-07 16:54:29 +0200 256) }
> 247b5130595 (Refael Ackermann 2018-10-22 15:07:00 -0400 257) return nullptr;
> 247b5130595 (Refael Ackermann 2018-10-22 15:07:00 -0400 258) }
Presumably this is failing in this Chromium roll due to a
clang version bump.
We should remove this patch after upstreaming it.
* docs: add upstream pr link for Node patch
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
fix: javascript heap oom is not raised in node::OOMErrorHandler
node::OOMErrorHandler terminates the process directly without raising an
oom exception. To fix it, set an oom handler into node from electron.
fix: correct gin embedder indices.
Move electron extra embedders to the end of the enum so they do not
interfere with chromium embedders indices.
Also use kEmbedderBlinkTag directly in its index calculation without
adding extra indices from other tags.
> ### Removed:`isDefault` and `status` properties on `PrinterInfo`
> These properties have been removed from the PrinterInfo Object
> because they have been removed from upstream Chromium.
These properties won't be removed until Electron 36, but
breaking-changes.md lists them as being removed in 35.
This PR corrects the error.
* chore: bump chromium in DEPS to 135.0.7036.0
* chore: bump chromium in DEPS to 135.0.7037.0
---------
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
* fix: re-enable synchronous spellcheck on Windows
* revert: fix: empty suggestions with windows platform checker
---------
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
* feat: allow setting roundedCorners on Windows
* Update docs/api/structures/base-window-options.md
Co-authored-by: Will Anderson <will@itsananderson.com>
---------
Co-authored-by: Will Anderson <will@itsananderson.com>
This fixture has been calling process.exit() immediately after writing
to stdout and stderr, which the Node.js docs say is risky behavior:
> Calling process.exit() will force the process to exit as quickly as
> possible even if there are still asynchronous operations pending that
> have not yet completed fully, including I/O operations to
> process.stdout and process.stderr.
This fixture's been around for years without problems (AFAIK).
The writes are very small ('hello\n' and 'world') and finish quickly.
But recently I've been testing on a very slow CI machine. There, I see
this spec flaking when it expects stderr to be 'world' but it gets ''.
This PR changes the fixture to wait for stdout & stderr to flush
before calling process.exit().
* fix: close quick look during tests on macOS
* use longer delay 🤷
* fix: sharedPreviewPanel being recreated on close
* test: ensure preview panel gets closed
Added missing period for consistency and readability
Added a missing period in a specific part of the text to maintain consistency across the document. This ensures a uniform writing style, improves readability, and aligns with the formatting used throughout the content.
* test: disable unexpectedly quit dialog on macOS
* test: take screenshot before keyboard lock test
* Revert "test: take screenshot before keyboard lock test"
This reverts commit 3ba5c6984f.
* feat: Working navigationHistory.restore with just title/url
* feat: Restore page state, too
* chore: Docs, lint, tests
* Implement feedback
* More magic
* Make _awaitNextLoad truly private
* Implement API group feedback
* One more round of feedback
* fix: fix mksnapshot gen/v8 path
* build: use 7z compression
* build: unzip mksnapshot on Windows and update zip
* chore: escape backslashes
* chore: try another attempt
* chore: remove rmdir for now
---------
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
When using `views::WebView` on macOS `NativeWidgetMacNSWindowHost`
contains a layer and compositor responsible for drawing web contents.
To trigger drawing `NativeWidgetMacNSWindowHost::OnVisibilityChanged`
needs to be called and `[NSWindow orderFrontRegardless]` does not trigger
`[NSWindow orderWindow:relativeTo:]` which can change
`NativeWidgetMacNSWindowHost` visiblity with stack:
```
views::NativeWidgetMacNSWindowHost::OnVisibilityChanged(bool)
remote_cocoa::NativeWidgetNSWindowBridge::OnVisibilityChanged()
-[ViewsNSWindowDelegate onWindowOrderChanged:]
-[NativeWidgetMacNSWindow orderWindow:relativeTo:]
```
`views::Widget` has method for showing inactive window:
`views::Widget::ShowInactive` which triggers
`NativeWidgetMacNSWindowHost::OnVisibilityChanged` with stack:
```
views::NativeWidgetMacNSWindowHost::OnVisibilityChanged(bool)
remote_cocoa::NativeWidgetNSWindowBridge::SetVisibilityState(remote_cocoa::mojom::WindowVisibilityState)
views::NativeWidgetMacNSWindowHost::SetVisibilityState(remote_cocoa::mojom::WindowVisibilityState)
views::NativeWidgetMac::Show(ui::mojom::WindowShowState, gfx::Rect const&)
views::Widget::ShowInactive() + 168
```
However this call seems to be insufficient to bring window to front,
therefore `[NSWindow orderFrontRegardless]` still needs to be called.
Calling `views::Widget::ShowInactive` ensures that all logic related to
showing Chromium widget will be properly executed, but onfortunately it
does not call `[NSWindow orderWindow:relativeTo:]` which is used to
disabling headless mode by the `ElectronNSWindow`, therefore we need to
trigger it manually through exposed `[ElectronNSWindow disableHeadlessMode]`.
Fixes: #45415
- Prefer GURL() when we want to return a non-reference empty URL.
- In ServiceWorkerMain::GetStorageKey(), use a reference instead
of instantiating a new temporary GURL.
From url/gurl.h:
> // Returns a reference to a singleton empty GURL. This object is for
> // callers who return references but don't have anything to return in
> // some cases. If you just want an empty URL for normal use, prefer
> // GURL().
* refactor: use MakeFixedFlatMap() in InclusionStatusToString()
* fix: add log message for EXCLUDE_ALIASING
refactor: add static_assert() to ensure our messages stay
in sync with the CookieInclusion reasons in net/cookies/
description:If you can reproduce the issue in a standalone test case, please use [Electron Fiddle](https://github.com/electron/fiddle) to create one and to publish it as a [GitHub gist](https://gist.github.com) and put the gist URL here. This is **the best way** to ensure this issue is triaged quickly.
description:Electron maintainers need a standalone test case to reproduce and fix your issue. Please use [Electron Fiddle](https://github.com/electron/fiddle) to create one and to publish it as a [GitHub gist](https://gist.github.com). Then put the gist URL here. Issues without testcase gists receive less attention and might be closed without a maintainer taking a closer look. To maximize how much attention your issue receives, please include a testcase gist right from the start.
- [ ] PR description included and stakeholders cc'd
- [ ]`npm test` passes
- [ ] tests are [changed or added](https://github.com/electron/electron/blob/main/docs/development/testing.md)
- [ ] relevant documentation, tutorials, templates and examples are changed or added
- [ ] relevant API documentation, tutorials, and examples are updated and follow the [documentation style guide](https://github.com/electron/electron/blob/main/docs/development/style-guide.md)
- [ ] [PR release notes](https://github.com/electron/clerk/blob/main/README.md) describe the change in a way relevant to app developers, and are [capitalized, punctuated, and past tense](https://github.com/electron/clerk/blob/main/README.md#examples).
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)")
@@ -41,9 +42,10 @@ that was used to open the application, if it was launched from Notification Cent
You can also call `app.isReady()` to check if this event has already fired and `app.whenReady()`
to get a Promise that is fulfilled when Electron is initialized.
**Note**: The `ready` event is only fired after the main process has finished running the first
tick of the event loop. If an Electron API needs to be called before the `ready` event, ensure
that it is called synchronously in the top-level context of the main process.
> [!NOTE]
> The `ready` event is only fired after the main process has finished running the first
> tick of the event loop. If an Electron API needs to be called before the `ready` event, ensure
> that it is called synchronously in the top-level context of the main process.
### Event: 'window-all-closed'
@@ -66,12 +68,14 @@ Emitted before the application starts closing its windows.
Calling `event.preventDefault()` will prevent the default behavior, which is
terminating the application.
**Note:** If application quit was initiated by `autoUpdater.quitAndInstall()`,
then `before-quit` is emitted _after_ emitting `close` event on all windows and
closing them.
> [!NOTE]
> If application quit was initiated by `autoUpdater.quitAndInstall()`,
> then `before-quit` is emitted _after_ emitting `close` event on all windows and
> closing them.
**Note:** On Windows, this event will not be emitted if the app is closed due
to a shutdown/restart of the system or a user logout.
> [!NOTE]
> On Windows, this event will not be emitted if the app is closed due
> to a shutdown/restart of the system or a user logout.
### Event: 'will-quit'
@@ -86,8 +90,9 @@ terminating the application.
See the description of the `window-all-closed` event for the differences between
the `will-quit` and `window-all-closed` events.
**Note:** On Windows, this event will not be emitted if the app is closed due
to a shutdown/restart of the system or a user logout.
> [!NOTE]
> On Windows, this event will not be emitted if the app is closed due
> to a shutdown/restart of the system or a user logout.
### Event: 'quit'
@@ -98,8 +103,9 @@ Returns:
Emitted when the application is quitting.
**Note:** On Windows, this event will not be emitted if the app is closed due
to a shutdown/restart of the system or a user logout.
> [!NOTE]
> On Windows, this event will not be emitted if the app is closed due
> to a shutdown/restart of the system or a user logout.
### Event: 'open-file' _macOS_
@@ -470,24 +476,28 @@ and `workingDirectory` is its current working directory. Usually
applications respond to this by making their primary window focused and
non-minimized.
**Note:**`argv` will not be exactly the same list of arguments as those passed
to the second instance. The order might change and additional arguments might be appended.
If you need to maintain the exact same arguments, it's advised to use `additionalData` instead.
> [!NOTE]
> `argv` will not be exactly the same list of arguments as those passed
> to the second instance. The order might change and additional arguments might be appended.
> If you need to maintain the exact same arguments, it's advised to use `additionalData` instead.
**Note:** If the second instance is started by a different user than the first, the `argv` array will not include the arguments.
> [!NOTE]
> If the second instance is started by a different user than the first, the `argv` array will not include the arguments.
This event is guaranteed to be emitted after the `ready` event of `app`
gets emitted.
**Note:** Extra command line arguments might be added by Chromium,
such as `--original-process-start-time`.
> [!NOTE]
> Extra command line arguments might be added by Chromium,
> such as `--original-process-start-time`.
## Methods
The `app` object has the following methods:
**Note:** Some methods are only available on specific operating systems and are
labeled as such.
> [!NOTE]
> Some methods are only available on specific operating systems and are
> labeled as such.
### `app.quit()`
@@ -592,6 +602,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
@@ -606,7 +617,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.
@@ -679,7 +690,8 @@ preferred over `name` by Electron.
Overrides the current application's name.
**Note:** This function overrides the name used internally by Electron; it does not affect the name that the OS uses.
> [!NOTE]
> This function overrides the name used internally by Electron; it does not affect the name that the OS uses.
### `app.getLocale()`
@@ -688,18 +700,22 @@ Possible return values are documented [here](https://source.chromium.org/chromiu
To set the locale, you'll want to use a command line switch at app startup, which may be found [here](command-line-switches.md).
**Note:** When distributing your packaged app, you have to also ship the
`locales` folder.
> [!NOTE]
> When distributing your packaged app, you have to also ship the
> `locales` folder.
**Note:** This API must be called after the `ready` event is emitted.
> [!NOTE]
> This API must be called after the `ready` event is emitted.
**Note:** To see example return values of this API compared to other locale and language APIs, see [`app.getPreferredSystemLanguages()`](#appgetpreferredsystemlanguages).
> [!NOTE]
> To see example return values of this API compared to other locale and language APIs, see [`app.getPreferredSystemLanguages()`](#appgetpreferredsystemlanguages).
### `app.getLocaleCountryCode()`
Returns `string` - User operating system's locale two-letter [ISO 3166](https://www.iso.org/iso-3166-country-codes.html) country code. The value is taken from native OS APIs.
**Note:** When unable to detect locale country code, it returns empty string.
> [!NOTE]
> When unable to detect locale country code, it returns empty string.
### `app.getSystemLocale()`
@@ -712,9 +728,11 @@ Different operating systems also use the regional data differently:
Therefore, this API can be used for purposes such as choosing a format for rendering dates and times in a calendar app, especially when the developer wants the format to be consistent with the OS.
**Note:** This API must be called after the `ready` event is emitted.
> [!NOTE]
> This API must be called after the `ready` event is emitted.
**Note:** To see example return values of this API compared to other locale and language APIs, see [`app.getPreferredSystemLanguages()`](#appgetpreferredsystemlanguages).
> [!NOTE]
> To see example return values of this API compared to other locale and language APIs, see [`app.getPreferredSystemLanguages()`](#appgetpreferredsystemlanguages).
### `app.getPreferredSystemLanguages()`
@@ -759,6 +777,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,
@@ -777,16 +811,18 @@ Once registered, all links with `your-protocol://` will be opened with the
current executable. The whole link, including protocol, will be passed to your
application as a parameter.
**Note:** On macOS, you can only register protocols that have been added to
your app's `info.plist`, which cannot be modified at runtime. However, you can
change the file during build time via [Electron Forge][electron-forge],
[Electron Packager][electron-packager], or by editing `info.plist` with a text
editor. Please refer to [Apple's documentation][CFBundleURLTypes] for details.
> [!NOTE]
> On macOS, you can only register protocols that have been added to
> your app's `info.plist`, which cannot be modified at runtime. However, you can
> change the file during build time via [Electron Forge][electron-forge],
> [Electron Packager][electron-packager], or by editing `info.plist` with a text
> editor. Please refer to [Apple's documentation][CFBundleURLTypes] for details.
**Note:** In a Windows Store environment (when packaged as an `appx`) this API
will return `true` for all calls but the registry key it sets won't be accessible
by other applications. In order to register your Windows Store application
as a default protocol handler you must [declare the protocol in your manifest](https://learn.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-uap-protocol).
> [!NOTE]
> In a Windows Store environment (when packaged as an `appx`) this API
> will return `true` for all calls but the registry key it sets won't be accessible
> by other applications. In order to register your Windows Store application
> as a default protocol handler you must [declare the protocol in your manifest](https://learn.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-uap-protocol).
The API uses the Windows Registry and `LSSetDefaultHandlerForURLScheme` internally.
@@ -810,11 +846,12 @@ protocol (aka URI scheme). If so, it will remove the app as the default handler.
Returns `boolean` - Whether the current executable is the default handler for a
protocol (aka URI scheme).
**Note:** On macOS, you can use this method to check if the app has been
registered as the default protocol handler for a protocol. You can also verify
this by checking `~/Library/Preferences/com.apple.LaunchServices.plist` on the
macOS machine. Please refer to
[Apple's documentation][LSCopyDefaultHandlerForURLScheme] for details.
> [!NOTE]
> On macOS, you can use this method to check if the app has been
> registered as the default protocol handler for a protocol. You can also verify
> this by checking `~/Library/Preferences/com.apple.LaunchServices.plist` on the
> macOS machine. Please refer to
> [Apple's documentation][LSCopyDefaultHandlerForURLScheme] for details.
The API uses the Windows Registry and `LSCopyDefaultHandlerForURLScheme` internally.
@@ -858,8 +895,9 @@ Adds `tasks` to the [Tasks][tasks] category of the Jump List on Windows.
Returns `boolean` - Whether the call succeeded.
**Note:** If you'd like to customize the Jump List even more use
`app.setJumpList(categories)` instead.
> [!NOTE]
> If you'd like to customize the JumpList even more use
> `app.setJumpList(categories)` instead.
### `app.getJumpListSettings()` _Windows_
@@ -897,21 +935,24 @@ following strings:
If `categories` is `null` the previously set custom Jump List (if any) will be
replaced by the standard Jump List for the app (managed by Windows).
**Note:** If a `JumpListCategory` object has neither the `type` nor the `name`
property set then its `type` is assumed to be `tasks`. If the `name` property
> [!NOTE]
> If a `JumpListCategory` object has neither the `type` nor the `name`
> property set then its `type` is assumed to be `tasks`. If the `name` property
is set but the `type` property is omitted then the `type` is assumed to be
`custom`.
**Note:** Users can remove items from custom categories, and Windows will not
allow a removed item to be added back into a custom category until **after**
the next successful call to `app.setJumpList(categories)`. Any attempt to
re-add a removed item to a custom category earlier than that will result in the
entire custom category being omitted from the Jump List. The list of removed
items can be obtained using `app.getJumpListSettings()`.
> [!NOTE]
> Users can remove items from custom categories, and Windows will not
> allow a removed item to be added back into a custom category until **after**
> the next successful call to `app.setJumpList(categories)`. Any attempt to
> re-add a removed item to a custom category earlier than that will result in the
> entire custom category being omitted from the JumpList. The list of removed
> items can be obtained using `app.getJumpListSettings()`.
**Note:** The maximum length of a Jump List item's `description` property is
260 characters. Beyond this limit, the item will not be added to the Jump
List, nor will it be displayed.
> [!NOTE]
> The maximum length of a Jump List item's `description` property is
> 260 characters. Beyond this limit, the item will not be added to the Jump
> List, nor will it be displayed.
Here's a very simple example of creating a custom Jump List:
@@ -1000,6 +1041,7 @@ starts:
```js
const{app,BrowserWindow}=require('electron')
letmyWindow=null
constadditionalData={myKey:'myValue'}
@@ -1110,6 +1152,11 @@ indicates success while any other value indicates failure according to Chromium
resolver will attempt to use the system's DNS settings to do DNS lookups
itself. Enabled by default on macOS, disabled by default on Windows and
Linux.
*`enableHappyEyeballs` boolean (optional) - Whether the
[Happy Eyeballs V3][happy-eyeballs-v3] algorithm should be used in creating
network connections. When enabled, hostnames resolving to multiple IP
addresses will be attempted in parallel to have a chance at establishing a
connection more quickly.
*`secureDnsMode` string (optional) - Can be 'off', 'automatic' or 'secure'.
Configures the DNS-over-HTTP mode. When 'off', no DoH lookups will be
performed. When 'automatic', DoH lookups will be performed first if DoH is
@@ -1183,7 +1230,8 @@ Returns [`ProcessMetric[]`](structures/process-metric.md): Array of `ProcessMetr
Returns [`GPUFeatureStatus`](structures/gpu-feature-status.md) - The Graphics Feature Status from `chrome://gpu/`.
**Note:** This information is only usable after the `gpu-info-update` event is emitted.
> [!NOTE]
> This information is only usable after the `gpu-info-update` event is emitted.
### `app.getGPUInfo(infoType)`
@@ -1197,6 +1245,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:
@@ -1237,11 +1287,13 @@ badge.
On macOS, it shows on the dock icon. On Linux, it only works for Unity launcher.
**Note:** Unity launcher requires a `.desktop` file to work. For more information,
please read the [Unity integration documentation][unity-requirement].
> [!NOTE]
> Unity launcher requires a `.desktop` file to work. For more information,
> please read the [Unity integration documentation][unity-requirement].
**Note:** On macOS, you need to ensure that your application has the permission
to display notifications for this method to work.
> [!NOTE]
> On macOS, you need to ensure that your application has the permission
> to display notifications for this method to work.
### `app.getBadgeCount()` _Linux_ _macOS_
@@ -1308,6 +1360,7 @@ latest version.
``` js
const { app } = require('electron')
const path = require('node:path')
const appFolder = path.dirname(process.execPath)
@@ -1343,7 +1396,8 @@ 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.
> [!NOTE]
> Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.
### `app.showAboutPanel()`
@@ -1381,6 +1435,7 @@ Returns `Function` - This function **must** be called once you have finished acc
```js
const { app, dialog } = require('electron')
const fs = require('node:fs')
let filepath
@@ -1471,7 +1526,8 @@ By using this API, important information such as password and other sensitive in
See [Apple's documentation](https://developer.apple.com/library/archive/technotes/tn2150/_index.html) for more
details.
**Note:** Enable `Secure Keyboard Entry` only when it is needed and disable it when it is no longer needed.
> [!NOTE]
> Enable `Secure Keyboard Entry` only when it is needed and disable it when it is no longer needed.
### `app.setProxy(config)`
@@ -1485,7 +1541,7 @@ and internal requests made by the runtime (ex: geolocation queries).
This method can only be called after app is ready.
#### `app.resolveProxy(url)`
### `app.resolveProxy(url)`
* `url` URL
@@ -1533,7 +1589,8 @@ See [Chromium's accessibility docs](https://www.chromium.org/developers/design-d
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.
> [!NOTE]
> Rendering accessibility tree can significantly affect the performance of your app. It should not be enabled by default.
### `app.applicationMenu`
@@ -1546,11 +1603,13 @@ An `Integer` property that returns the badge count for current app. Setting the
On macOS, setting this with any nonzero integer shows on the dock icon. On Linux, this property only works for Unity launcher.
**Note:** Unity launcher requires a `.desktop` file to work. For more information,
please read the [Unity integration documentation][unity-requirement].
> [!NOTE]
> Unity launcher requires a `.desktop` file to work. For more information,
> please read the [Unity integration documentation][unity-requirement].
**Note:** On macOS, you need to ensure that your application has the permission
to display notifications for this property to take effect.
> [!NOTE]
> On macOS, you need to ensure that your application has the permission
> to display notifications for this property to take effect.
### `app.commandLine` _Readonly_
@@ -1559,8 +1618,8 @@ command line arguments that Chromium uses.
### `app.dock` _macOS_ _Readonly_
A [`Dock`](./dock.md) `| undefined` object that allows you to perform actions on your app icon in the user's
dock on macOS.
A `Dock | undefined` property ([`Dock`](./dock.md) on macOS, `undefined` on all other
platforms) that allows you to perform actions on your app icon in the user's dock.
### `app.isPackaged` _Readonly_
@@ -1579,6 +1638,7 @@ A `boolean` property that returns `true` if the app is packaged, `false` otherw
_**Note**: There is a subtle difference between the behaviors of `window.onbeforeunload = handler` and `window.addEventListener('beforeunload', handler)`. It is recommended to always set the `event.returnValue` explicitly, instead of only returning a value, as the former works more consistently within Electron._
> [!NOTE]
> There is a subtle difference between the behaviors of `window.onbeforeunload = handler` and
> `window.addEventListener('beforeunload', handler)`. It is recommended to always set the
> `event.returnValue` explicitly, instead of only returning a value, as the former works more
> consistently within Electron.
#### Event: 'closed'
@@ -252,7 +261,8 @@ Emitted when the window is being moved to a new position.
Emitted once when the window is moved to a new position.
**Note**: On macOS this event is an alias of `move`.
> [!NOTE]
> On macOS, this event is an alias of `move`.
#### Event: 'enter-full-screen'
@@ -288,6 +298,7 @@ e.g. `APPCOMMAND_BROWSER_BACKWARD` is emitted as `browser-backward`.
```js
const{BaseWindow}=require('electron')
constwin=newBaseWindow()
win.on('app-command',(e,cmd)=>{
// Navigate the window back when the user hits their mouse back button
@@ -342,12 +353,12 @@ Emitted when the window has closed a sheet.
Emitted when the native new tab button is clicked.
*`point` [Point](structures/point.md) - The screen coordinates the context menu was triggered at
*`point` [Point](structures/point.md) - The screen coordinates where the context menu was triggered.
Emitted when the system context menu is triggered on the window, this is
normally only triggered when the user right clicks on the non-client area
@@ -356,6 +367,8 @@ as `-webkit-app-region: drag` in a frameless window.
Calling `event.preventDefault()` will prevent the menu from being displayed.
To convert `point` to DIP, use [`screen.screenToDipPoint(point)`](./screen.md#screenscreentodippointpoint-windows-linux).
### Static Methods
The `BaseWindow` class has the following static methods:
@@ -396,7 +409,7 @@ A `View` property for the content view of the window.
A `string` (optional) property that is equal to the `tabbingIdentifier` passed to the `BrowserWindow` constructor or `undefined` if none was set.
#### `win.autoHideMenuBar`
#### `win.autoHideMenuBar` _Linux_ _Windows_
A `boolean` property that determines whether the window menu bar should hide itself automatically. Once set, the menu bar will only show when users press the single `Alt` key.
@@ -419,7 +432,8 @@ A `boolean` property that determines whether the window is focusable.
A `boolean` property that determines whether the window is visible on all workspaces.
**Note:** Always returns false on Windows.
> [!NOTE]
> Always returns false on Windows.
#### `win.shadow`
@@ -429,7 +443,8 @@ A `boolean` property that determines whether the window has a shadow.
A `boolean` property that determines whether the menu bar should be visible.
**Note:** If the menu bar is auto-hide, users can still bring up the menu bar by pressing the single `Alt` key.
> [!NOTE]
> If the menu bar is auto-hide, users can still bring up the menu bar by pressing the single `Alt` key.
#### `win.kiosk`
@@ -450,7 +465,8 @@ and the icon of the file will show in window's title bar.
A `string` property that determines the title of the native window.
**Note:** The title of the web page can be different from the title of the native window.
> [!NOTE]
> The title of the web page can be different from the title of the native window.
#### `win.minimizable` _macOS_ _Windows_
@@ -491,6 +507,7 @@ A `boolean` property that determines whether the window is excluded from the app
```js @ts-expect-error=[12]
const { Menu, BaseWindow } = require('electron')
const win = new BaseWindow({ height: 600, width: 600 })
const template = [
@@ -511,12 +528,17 @@ A `string` property that defines an alternative title provided only to
accessibility tools such as screen readers. This string is not directly
visible to users.
#### `win.snapped` _Windows_ _Readonly_
A `boolean` property that indicates whether the window is arranged via [Snap.](https://support.microsoft.com/en-us/windows/snap-your-windows-885a9b1e-a983-a3b1-16cd-c531795e6241)
### Instance Methods
Objects created with `new BaseWindow` have the following instance methods:
**Note:** Some methods are only available on specific operating systems and are
labeled as such.
> [!NOTE]
> Some methods are only available on specific operating systems and are
> labeled as such.
#### `win.setContentView(view)`
@@ -608,7 +630,8 @@ Returns `boolean` - Whether the window is minimized.
Sets whether the window should be in fullscreen mode.
**Note:** On macOS, fullscreen transitions take place asynchronously. If further actions depend on the fullscreen state, use the ['enter-full-screen'](base-window.md#event-enter-full-screen) or ['leave-full-screen'](base-window.md#event-leave-full-screen) events.
> [!NOTE]
> On macOS, fullscreen transitions take place asynchronously. If further actions depend on the fullscreen state, use the ['enter-full-screen'](base-window.md#event-enter-full-screen) or > ['leave-full-screen'](base-window.md#event-leave-full-screen) events.
#### `win.isFullScreen()`
@@ -710,6 +733,7 @@ Resizes and moves the window to the supplied bounds. Any properties that are not
**Note:** On macOS, the y-coordinate value cannot be smaller than the [Tray](tray.md) height. The tray height has changed over time and depends on the operating system, but is between 20-40px. Passing a value lower than the tray height will result in a window that is flush to the tray.
> [!NOTE]
> On macOS, the y-coordinate value cannot be smaller than the [Tray](tray.md) height. The tray height has changed over time and depends on the operating system, but is between 20-40px. Passing a value lower than the tray height will result in a window that is flush to the tray.
#### `win.getBounds()`
Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window as `Object`.
**Note:** On macOS, the y-coordinate value returned will be at minimum the [Tray](tray.md) height. For example, calling `win.setBounds({ x: 25, y: 20, width: 800, height: 600 })` with a tray height of 38 means that `win.getBounds()` will return `{ x: 25, y: 38, width: 800, height: 600 }`.
> [!NOTE]
> On macOS, the y-coordinate value returned will be at minimum the [Tray](tray.md) height. For example, calling `win.setBounds({ x: 25, y: 20, width: 800, height: 600 })` with a tray height of 38 means that `win.getBounds()` will return `{ x: 25, y: 38, width: 800, height: 600 }`.
#### `win.getBackgroundColor()`
@@ -736,7 +762,8 @@ Returns `string` - Gets the background color of the window in Hex (`#RRGGBB`) fo
See [Setting `backgroundColor`](browser-window.md#setting-the-backgroundcolor-property).
**Note:** The alpha value is _not_ returned alongside the red, green, and blue values.
> [!NOTE]
> The alpha value is _not_ returned alongside the red, green, and blue values.
#### `win.setContentBounds(bounds[, animate])`
@@ -754,7 +781,8 @@ Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window's cl
Returns [`Rectangle`](structures/rectangle.md) - Contains the window bounds of the normal state
**Note:** whatever the current state of the window : maximized, minimized or in fullscreen, this function always returns the position and size of the window in normal state. In normal state, getBounds and getNormalBounds returns the same [`Rectangle`](structures/rectangle.md).
> [!NOTE]
> Whatever the current state of the window : maximized, minimized or in fullscreen, this function always returns the position and size of the window in normal state. In normal state, getBounds and getNormalBounds returns the same [`Rectangle`](structures/rectangle.md).
#### `win.setEnabled(enable)`
@@ -951,8 +979,9 @@ Changes the title of native window to `title`.
Returns `string` - The title of the native window.
**Note:** The title of the web page can be different from the title of the native
window.
> [!NOTE]
> The title of the web page can be different from the title of the native
Sets the properties for the window's taskbar button.
**Note:** `relaunchCommand` and `relaunchDisplayName` must always be set
together. If one of those properties is not set, then neither will be used.
> [!NOTE]
> `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 - The accent color for the window. By default, follows user preference in System Settings.
Sets the system accent color and highlighting of active window border.
The `accentColor` parameter accepts the following values:
* **Color string** - 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`** - Uses the system's default accent color from user preferences in System Settings.
* **`false`** - Explicitly disables accent color highlighting for the window.
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)')
// Use system accent color.
win.setAccentColor(true)
// Disable accent color.
win.setAccentColor(false)
```
#### `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_
@@ -1264,6 +1332,13 @@ Sets whether the menu bar should be visible. If the menu bar is auto-hide, users
Returns `boolean` - Whether the menu bar is visible.
#### `win.isSnapped()` _Windows_
Returns `boolean` - whether the window is arranged via [Snap.](https://support.microsoft.com/en-us/windows/snap-your-windows-885a9b1e-a983-a3b1-16cd-c531795e6241)
The window is snapped via buttons shown when the mouse is hovered over window
maximize button, or by dragging it to the edges of the screen.
_**Note**: There is a subtle difference between the behaviors of `window.onbeforeunload = handler` and `window.addEventListener('beforeunload', handler)`. It is recommended to always set the `event.returnValue` explicitly, instead of only returning a value, as the former works more consistently within Electron._
> [!NOTE]
> There is a subtle difference between the behaviors of `window.onbeforeunload = handler` and
> `window.addEventListener('beforeunload', handler)`. It is recommended to always set the
> `event.returnValue` explicitly, instead of only returning a value, as the former works more
> consistently within Electron.
#### Event: 'closed'
@@ -323,7 +333,8 @@ Emitted when the window is being moved to a new position.
Emitted once when the window is moved to a new position.
**Note**: On macOS this event is an alias of `move`.
> [!NOTE]
> On macOS, this event is an alias of `move`.
#### Event: 'enter-full-screen'
@@ -367,6 +378,7 @@ e.g. `APPCOMMAND_BROWSER_BACKWARD` is emitted as `browser-backward`.
```js
const{BrowserWindow}=require('electron')
constwin=newBrowserWindow()
win.on('app-command',(e,cmd)=>{
// Navigate the window back when the user hits their mouse back button
@@ -421,12 +433,12 @@ Emitted when the window has closed a sheet.
Emitted when the native new tab button is clicked.
@@ -497,7 +511,7 @@ A `Integer` property representing the unique ID of the window. Each ID is unique
A `string` (optional) property that is equal to the `tabbingIdentifier` passed to the `BrowserWindow` constructor or `undefined` if none was set.
#### `win.autoHideMenuBar`
#### `win.autoHideMenuBar` _Linux_ _Windows_
A `boolean` property that determines whether the window menu bar should hide itself automatically. Once set, the menu bar will only show when users press the single `Alt` key.
@@ -520,7 +534,8 @@ A `boolean` property that determines whether the window is focusable.
A `boolean` property that determines whether the window is visible on all workspaces.
**Note:** Always returns false on Windows.
> [!NOTE]
> Always returns false on Windows.
#### `win.shadow`
@@ -530,7 +545,8 @@ A `boolean` property that determines whether the window has a shadow.
A `boolean` property that determines whether the menu bar should be visible.
**Note:** If the menu bar is auto-hide, users can still bring up the menu bar by pressing the single `Alt` key.
> [!NOTE]
> If the menu bar is auto-hide, users can still bring up the menu bar by pressing the single `Alt` key.
#### `win.kiosk`
@@ -551,7 +567,8 @@ and the icon of the file will show in window's title bar.
A `string` property that determines the title of the native window.
**Note:** The title of the web page can be different from the title of the native window.
> [!NOTE]
> The title of the web page can be different from the title of the native window.
#### `win.minimizable` _macOS_ _Windows_
@@ -611,12 +628,17 @@ A `string` property that defines an alternative title provided only to
accessibility tools such as screen readers. This string is not directly
visible to users.
#### `win.snapped` _Windows_ _Readonly_
A `boolean` property that indicates whether the window is arranged via [Snap.](https://support.microsoft.com/en-us/windows/snap-your-windows-885a9b1e-a983-a3b1-16cd-c531795e6241)
### Instance Methods
Objects created with `new BrowserWindow` have the following instance methods:
**Note:** Some methods are only available on specific operating systems and are
labeled as such.
> [!NOTE]
> Some methods are only available on specific operating systems and are
> labeled as such.
#### `win.destroy()`
@@ -698,13 +720,15 @@ Returns `boolean` - Whether the window is minimized.
Sets whether the window should be in fullscreen mode.
**Note:** On macOS, fullscreen transitions take place asynchronously. If further actions depend on the fullscreen state, use the ['enter-full-screen'](browser-window.md#event-enter-full-screen) or ['leave-full-screen'](browser-window.md#event-leave-full-screen) events.
> [!NOTE]
> On macOS, fullscreen transitions take place asynchronously. If further actions depend on the fullscreen state, use the ['enter-full-screen'](browser-window.md#event-enter-full-screen) or ['leave-full-screen'](browser-window.md#event-leave-full-screen) events.
#### `win.isFullScreen()`
Returns `boolean` - Whether the window is in fullscreen mode.
**Note:** On macOS, fullscreen transitions take place asynchronously. When querying for a BrowserWindow's fullscreen status, you should ensure that either the ['enter-full-screen'](browser-window.md#event-enter-full-screen) or ['leave-full-screen'](browser-window.md#event-leave-full-screen) events have been emitted.
> [!NOTE]
> On macOS, fullscreen transitions take place asynchronously. When querying for a BrowserWindow's fullscreen status, you should ensure that either the ['enter-full-screen'](browser-window.md#event-enter-full-screen) or ['leave-full-screen'](browser-window.md#event-leave-full-screen) events have been emitted.
#### `win.setSimpleFullScreen(flag)` _macOS_
@@ -802,6 +826,7 @@ Resizes and moves the window to the supplied bounds. Any properties that are not
**Note:** On macOS, the y-coordinate value cannot be smaller than the [Tray](tray.md) height. The tray height has changed over time and depends on the operating system, but is between 20-40px. Passing a value lower than the tray height will result in a window that is flush to the tray.
> [!NOTE]
> On macOS, the y-coordinate value cannot be smaller than the [Tray](tray.md) height. The tray height has changed over time and depends on the operating system, but is between 20-40px. Passing a value lower than the tray height will result in a window that is flush to the tray.
#### `win.getBounds()`
Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window as `Object`.
**Note:** On macOS, the y-coordinate value returned will be at minimum the [Tray](tray.md) height. For example, calling `win.setBounds({ x: 25, y: 20, width: 800, height: 600 })` with a tray height of 38 means that `win.getBounds()` will return `{ x: 25, y: 38, width: 800, height: 600 }`.
> [!NOTE]
> On macOS, the y-coordinate value returned will be at minimum the [Tray](tray.md) height. For example, calling `win.setBounds({ x: 25, y: 20, width: 800, height: 600 })` with a tray height of 38 means that `win.getBounds()` will return `{ x: 25, y: 38, width: 800, height: 600 }`.
#### `win.getBackgroundColor()`
@@ -828,7 +855,8 @@ Returns `string` - Gets the background color of the window in Hex (`#RRGGBB`) fo
See [Setting `backgroundColor`](#setting-the-backgroundcolor-property).
**Note:** The alpha value is _not_ returned alongside the red, green, and blue values.
> [!NOTE]
> The alpha value is _not_ returned alongside the red, green, and blue values.
#### `win.setContentBounds(bounds[, animate])`
@@ -846,7 +874,8 @@ Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window's cl
Returns [`Rectangle`](structures/rectangle.md) - Contains the window bounds of the normal state
**Note:** whatever the current state of the window : maximized, minimized or in fullscreen, this function always returns the position and size of the window in normal state. In normal state, getBounds and getNormalBounds returns the same [`Rectangle`](structures/rectangle.md).
> [!NOTE]
> Whatever the current state of the window (maximized, minimized or in fullscreen), this function always returns the position and size of the window in normal state. In normal state, `getBounds` and `getNormalBounds` return the same [`Rectangle`](structures/rectangle.md).
#### `win.setEnabled(enable)`
@@ -1043,8 +1072,9 @@ Changes the title of native window to `title`.
Returns `string` - The title of the native window.
**Note:** The title of the web page can be different from the title of the native
window.
> [!NOTE]
> The title of the web page can be different from the title of the native
Sets the properties for the window's taskbar button.
**Note:** `relaunchCommand` and `relaunchDisplayName` must always be set
together. If one of those properties is not set, then neither will be used.
> [!NOTE]
> `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 - The accent color for the window. By default, follows user preference in System Settings.
Sets the system accent color and highlighting of active window border.
The `accentColor` parameter accepts the following values:
* **Color string** - 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`** - Uses the system's default accent color from user preferences in System Settings.
* **`false`** - Explicitly disables accent color highlighting for the window.
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)')
// Use system accent color.
win.setAccentColor(true)
// Disable accent color.
win.setAccentColor(false)
```
#### `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_
@@ -1445,6 +1516,13 @@ Sets whether the menu bar should be visible. If the menu bar is auto-hide, users
Returns `boolean` - Whether the menu bar is visible.
#### `win.isSnapped()` _Windows_
Returns `boolean` - whether the window is arranged via [Snap.](https://support.microsoft.com/en-us/windows/snap-your-windows-885a9b1e-a983-a3b1-16cd-c531795e6241)
The window is snapped via buttons shown when the mouse is hovered over window
maximize button, or by dragging it to the edges of the screen.
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 macOS it sets the NSWindow's [`sharingType`](https://developer.apple.com/documentation/appkit/nswindow/sharingtype-swift.property?language=objc) to [`NSWindowSharingNone`](https://developer.apple.com/documentation/appkit/nswindow/sharingtype-swift.enum/none?language=objc).
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.
#### `win.isContentProtected()` _macOS_ _Windows_
Returns `boolean` - whether or not content protection is currently enabled.
@@ -252,9 +255,10 @@ the required version is unavailable. Current default is set to `3`.
Electron supports some of the [CLI flags][node-cli] supported by Node.js.
**Note:** Passing unsupported command line switches to Electron when it is not running in `ELECTRON_RUN_AS_NODE` will have no effect.
> [!NOTE]
> Passing unsupported command line switches to Electron when it is not running in `ELECTRON_RUN_AS_NODE` will have no effect.
### `--inspect-brk\[=\[host:]port]`
### `--inspect-brk[=[host:]port]`
Activate inspector on host:port and break at start of user script. Default host:port is 127.0.0.1:9229.
@@ -266,13 +270,13 @@ Activate inspector on `host:port` and break at start of the first internal
JavaScript script executed when the inspector is available.
Default `host:port` is `127.0.0.1:9229`.
### `--inspect-port=\[host:]port`
### `--inspect-port=[host:]port`
Set the `host:port` to be used when the inspector is activated. Useful when activating the inspector by sending the SIGUSR1 signal. Default host is `127.0.0.1`.
Aliased to `--debug-port=[host:]port`.
### `--inspect\[=\[host:]port]`
### `--inspect[=[host:]port]`
Activate inspector on `host:port`. Default is `127.0.0.1:9229`.
@@ -288,6 +292,10 @@ 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-inspection`
Enable support for devtools network inspector events, for visibility into requests made by the nodejs `http` and `https` modules.
### `--no-deprecation`
Silence deprecation warnings.
@@ -313,6 +321,16 @@ Set the default value of the `verbatim` parameter in the Node.js [`dns.lookup()`
The default is `verbatim` and `dns.setDefaultResultOrder()` have higher priority than `--dns-result-order`.
### `--diagnostic-dir=directory`
Set the directory to which all Node.js diagnostic output files are written. Defaults to current working directory.
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.
> Smoothes out the corner rounding of the `border-radius` CSS rule.
The rounded corners of elements with [the `border-radius` CSS rule](https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius) can be smoothed out using the `-electron-corner-smoothing` CSS rule. This smoothness is very similar to Apple's "continuous" rounded corners in SwiftUI and Figma's "corner smoothing" control on design elements.

Integrating with the operating system and its design language is important to many desktop applications. The shape of a rounded corner can be a subtle detail to many users. However, aligning closely to the system's design language that users are familiar with makes the application's design feel familiar too. Beyond matching the design language of macOS, designers may decide to use smoother round corners for many other reasons.
`-electron-corner-smoothing` affects the shape of borders, outlines, and shadows on the target element. Mirroring the behavior of `border-radius`, smoothing will gradually back off if an element's size is too small for the chosen value.
The `-electron-corner-smoothing` CSS rule is **only implemented for Electron** and has no effect in browsers. Avoid using this rule outside of Electron. This CSS rule is considered experimental and may require migration in the future if replaced by a CSS standard.
### Example
The following example shows the effect of corner smoothing at different percents.
```css
.box{
width:128px;
height:128px;
background-color:cornflowerblue;
border-radius:24px;
-electron-corner-smoothing:var(--percent);/* Column header in table below. */
}
```
| 0% | 30% | 60% | 100% |
| --- | --- | --- | --- |
|  |  |  |  |
### Matching the system UI
Use the `system-ui` keyword to match the smoothness to the OS design language.
```css
.box{
width:128px;
height:128px;
background-color:cornflowerblue;
border-radius:24px;
-electron-corner-smoothing:system-ui;/* Match the system UI design. */
}
```
| OS: | macOS | Windows, Linux |
| --- | --- | --- |
| Value: | `60%` | `0%` |
| Example: |  |  |
### Controlling availibility
This CSS rule can be disabled using the Blink feature flag `ElectronCSSCornerSmoothing`.
```js
constmyWindow=newBrowserWindow({
// [...]
webPreferences:{
disableBlinkFeatures:'ElectronCSSCornerSmoothing'// Disables the `-electron-corner-smoothing` CSS rule
> **Note:** Electron uses Crashpad, not Breakpad, to collect and upload
> [!NOTE]
> Electron uses Crashpad, not Breakpad, to collect and upload
> crashes, but for the time being, the [upload protocol is the same](https://chromium.googlesource.com/crashpad/crashpad/+/HEAD/doc/overview_design.md#Upload-to-collection-server).
Or use a 3rd party hosted solution:
@@ -62,7 +63,7 @@ The `crashReporter` module has the following methods:
*`extra` Record\<string, string\> (optional) - Extra string key/value
annotations that will be sent along with crash reports that are generated
in the main process. Only string values are supported. Crashes generated in
child processes will not contain these extra
child processes will not include these extra parameters. To add extra
parameters to crash reports generated from child processes, call
[`addExtraParameter`](#crashreporteraddextraparameterkey-value) from the
child process.
@@ -84,19 +85,23 @@ before `app.on('ready')`. If the crash reporter is not initialized at the time
a renderer process is created, then that renderer process will not be monitored
by the crash reporter.
**Note:** You can test out the crash reporter by generating a crash using
`process.crash()`.
> [!NOTE]
> You can test out the crash reporter by generating a crash using
> `process.crash()`.
**Note:** If you need to send additional/updated `extra` parameters after your
first call `start` you can call `addExtraParameter`.
> [!NOTE]
> If you need to send additional/updated `extra` parameters after your
> first call `start` you can call `addExtraParameter`.
**Note:** Parameters passed in `extra`, `globalExtra` or set with
`addExtraParameter` have limits on the length of the keys and values. Key names
must be at most 39 bytes long, and values must be no longer than 127 bytes.
Keys with names longer than the maximum will be silently ignored. Key values
longer than the maximum length will be truncated.
> [!NOTE]
> Parameters passed in `extra`, `globalExtra` or set with
> `addExtraParameter` have limits on the length of the keys and values. Key names
> must be at most 39 bytes long, and values must be no longer than 127 bytes.
> Keys with names longer than the maximum will be silently ignored. Key values
> longer than the maximum length will be truncated.
**Note:** This method is only available in the main process.
> [!NOTE]
> This method is only available in the main process.
### `crashReporter.getLastCrashReport()`
@@ -105,7 +110,8 @@ last crash report. Only crash reports that have been uploaded will be returned;
even if a crash report is present on disk it will not be returned until it is
uploaded. In the case that there are no uploaded reports, `null` is returned.
**Note:** This method is only available in the main process.
> [!NOTE]
> This method is only available in the main process.
See [`navigator.mediaDevices.getDisplayMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia) for more information.
**Note:**`navigator.mediaDevices.getDisplayMedia` does not permit the use of `deviceId` for
selection of a source - see [specification](https://w3c.github.io/mediacapture-screen-share/#constraints).
> [!NOTE]
> `navigator.mediaDevices.getDisplayMedia` does not permit the use of `deviceId` for
> selection of a source - see [specification](https://w3c.github.io/mediacapture-screen-share/#constraints).
## Methods
@@ -92,8 +93,9 @@ The `desktopCapturer` module has the following methods:
Returns `Promise<DesktopCapturerSource[]>` - Resolves with an array of [`DesktopCapturerSource`](structures/desktop-capturer-source.md) objects, each `DesktopCapturerSource` represents a screen or an individual window that can be captured.
**Note** Capturing the screen contents requires user consent on macOS 10.15 Catalina or higher,
which can detected by [`systemPreferences.getMediaAccessStatus`][].
> [!NOTE]
> Capturing the screen contents requires user consent on macOS 10.15 Catalina or higher,
> which can detected by [`systemPreferences.getMediaAccessStatus`][].
// Set the save path, making Electron not to prompt a save dialog.
@@ -115,7 +116,8 @@ Returns `boolean` - Whether the download is paused.
Resumes the download that has been paused.
**Note:** To enable resumable downloads the server you are downloading from must support range requests and provide both `Last-Modified` and `ETag` header values. Otherwise `resume()` will dismiss previously received bytes and restart the download from the beginning.
> [!NOTE]
> To enable resumable downloads the server you are downloading from must support range requests and provide both `Last-Modified` and `ETag` header values. Otherwise `resume()` will dismiss previously received bytes and restart the download from the beginning.
#### `downloadItem.canResume()`
@@ -141,9 +143,10 @@ Returns `boolean` - Whether the download has user gesture.
Returns `string` - The file name of the download item.
**Note:** The file name is not always the same as the actual one saved in local
disk. If user changes the file name in a prompted download saving dialog, the
actual name of saved file will be different.
> [!NOTE]
> The file name is not always the same as the actual one saved in local
> disk. If user changes the file name in a prompted download saving dialog, the
> actual name of saved file will be different.
#### `downloadItem.getCurrentBytesPerSecond()`
@@ -172,8 +175,9 @@ header.
Returns `string` - The current state. Can be `progressing`, `completed`, `cancelled` or `interrupted`.
**Note:** The following methods are useful specifically to resume a
`cancelled` item when session is restarted.
> [!NOTE]
> The following methods are useful specifically to resume a
*`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.
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.