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/
* feat: ServiceWorkerMain
* refactor: disconnect remote
* handle version_info_ nullptr case
* initiate finish request when possible and enumerate errors
* explicit name for test method
* oops
* fix: wait for redundant version to stop before destroying
* docs: clarify when undefined is returned
* chore: remove extra semicolons
* fix: backport patch to fix systemd unit activation in Chromium
This backports a patch from Chromium, which fixes systemd unit
activation. That is, a globalShortcuts feature that Chromium has
needs to create a systemd unit and rename it properly. Portal's
global shortcuts uses that name afterwards to map the app with
the shortcuts bound. However, there might be a race between
Chromium binding shortcuts and renaming the unit.
This is a first step to add Portal's globalShortcuts to
Electron.
* feat: Support global shortcuts via GlobalShortcutsPortal feature
Chromium has a new feature called GlobalShortcutsPortal. It
allows clients to use Portal's globalShortcuts to register and
listen to shortcuts.
This patches adds necessary bits, which allows Electron to
use that feature.
In order to make it work, one has to add
--enable-features=GlobalShortcutsPortal
Test: tested manually with a sample app.
* docs: add GlobalShortcutsPortal feature to globalShortcuts docs
Electron supports Portal's globalShortcuts API now via Chromium, and Electron
apps can use that in a Wayland session. Update the docs with the required
feature flag that must be passed to be able to use that implementation.
refactor: simplify StopTracing() a little by using a string_view instead of an optional<string>
We have compile-time string literals that we're passing to a method
that takes a string_view argument, so we don't need all this extra
optional<string> scaffolding
* refactor: remove InspectableWebContentsViewMac in favor of the Views version
* cherry-pick: refactor: remove InspectableWebContentsViewMac in favor of the Views version (#41326)
commit e67ab9a93d
Confilcts not resolved, except removal of the files removed
by the original commit.
* resolved conflicts and build issues after cherry-pick
* cherry-picked: fix: add method allowing to disable headless mode in native widget
https://github.com/electron/electron/pull/42996
fixing
https://github.com/electron/electron/issues/42995
* fix: displaying select popup in window created as fullscreen window
`constrainFrameRect:toScreen:` is not being call for windows created
with `fullscreen: true` therefore `headless` mode was not being removed
and `RenderWidgetHostNSViewBridge::DisplayPopupMenu` ignored displaying
popup.
Issue could be fixed by placing additional removal of `headless` mode
in the `toggleFullScreen:`, but `orderWindow:relativeTo:` is called
both for a regular and a fullscreen window, therefore there will be
a single place fixing both cases.
Because `electron::NativeWindowMac` lifetime may be shorter than
`ElectronNSWindow` on which macOS may execute `orderWindow:relativeTo:`
we need to clear `shell_` when `NativeWindow` is being closed.
Fixes#43010.
* fix: Content visibility when using `vibrancy`
We need to put `NSVisualEffectView` before `ViewsCompositorSuperview`
otherwise when using `vibrancy` in `BrowserWindow` `NSVisualEffectView`
will hide content displayed by the compositor.
Fixes#43003Fixes#42336
In fact main issues reported in these tickets were not present after
cherry-picking original refactor switching to `views::WebView`, so
text could be selected and click event was properly generated. However
both issues testcases were using `vibrancy` and actual content was
invisible, because it was covered by the `NSVisualEffectView`.
* fix: EXCEPTION_ACCESS_VIOLATION crash on BrowserWindow.destroy()
Restored postponed deletion of the `NativeWindow`.
Restoration caused `DCHECK(new_parent_ui_layer->GetCompositor());` failure
in `BrowserCompositorMac::SetParentUiLayer` after the spec test:
`chrome extensions chrome.webRequest does not take precedence over Electron webRequest - http`
with stack:
```
7 Electron Framework 0x000000011fe07830 content::BrowserCompositorMac::SetParentUiLayer(ui::Layer*) + 628
8 Electron Framework 0x000000011fe0c154 content::RenderWidgetHostViewMac::SetParentUiLayer(ui::Layer*) + 220
9 Electron Framework 0x000000011fe226a8 content::WebContentsViewMac::CreateViewForWidget(content::RenderWidgetHost*) + 600
10 Electron Framework 0x000000011fd37e4c content::WebContentsImpl::CreateRenderWidgetHostViewForRenderManager(content::RenderViewHost*) + 164
11 Electron Framework 0x000000011fb32278 content::RenderFrameHostManager::CreateSpeculativeRenderFrame(content::SiteInstanceImpl*, bool, scoped_refptr<content::BrowsingContextState> const&) + 816
12 Electron Framework 0x000000011fb2ab8c content::RenderFrameHostManager::CreateSpeculativeRenderFrameHost(content::SiteInstanceImpl*, content::SiteInstanceImpl*, bool) + 1308
13 Electron Framework 0x000000011fb28598 content::RenderFrameHostManager::GetFrameHostForNavigation(content::NavigationRequest*, content::BrowsingContextGroupSwap*, std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>>*) + 1796
14 Electron Framework 0x000000011fa78660 content::NavigationRequest::SelectFrameHostForOnRequestFailedInternal(bool, bool, std::__Cr::optional<std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>>> const&) + 280
15 Electron Framework 0x000000011fa6a994 content::NavigationRequest::OnRequestFailedInternal(network::URLLoaderCompletionStatus const&, bool, std::__Cr::optional<std::__Cr::basic_string<char, std::__Cr::char_traits<char>, std::__Cr::allocator<char>>> const&, bo
+ 1008
16 Electron Framework 0x000000011fa7772c content::NavigationRequest::OnRequestFailed(network::URLLoaderCompletionStatus const&) + 72
17 Electron Framework 0x000000011f8554ac content::NavigationURLLoaderImpl::NotifyRequestFailed(network::URLLoaderCompletionStatus const&) + 248
```
This was probably the reason of removing `NativeWindow` immediately
in order to cleanup `views_host_` in `WebContentsViewMac` to prevent
using layer without compositor in `WebContentsViewMac::CreateViewForWidget`.
`[ElectronNSWindowDelegate windowWillClose:]` is deleting window host
and the compositor used by the `NativeWindow` therefore detach `NativeWindow`
contents from parent. This will clear `views_host_` and prevent failing
mentioned `DCHECK`.
Fixes#42975
* chore: Applied review suggestions
* refactor: directly cleanup shell
---------
Co-authored-by: Samuel Maddock <smaddock@slack-corp.com>
In the old version of get-version.js, it replaces the leading 'v',
i.e. |output.stdout.toString().trim().replace(/^v/g, '')|. However,
in the new version of get-git-version.py, it directly replaces all
'v'. Obviously, it does not conform to the original semantics.
Although it will not affect the existing electron version calculation,
it may affect other developers' customized git-tag-version, such as
v0.0.0-dev.xxx, which will lose the 'v' of dev.
* fix: add patch to fix desktopCapturer.getSources not returning electron window on Windows
* add chromium link
* Update patches/chromium/fix_desktop_capturer_show_own_window.patch
Co-authored-by: Keeley Hammond <vertedinde@electronjs.org>
* fix on electron side
* set flag to true
* wrong capturer
---------
Co-authored-by: Keeley Hammond <vertedinde@electronjs.org>
Update window-setup.ts
The message should simply read "is not supported" or, alternatively, "is not, and will not, be supported", but not "is and will not be supported".
`ReadUnicodeCharacter` updates index to the last character read, and not after it. We need to manually increment it to move to the next character.
It also doesn't validate that the index is valid, so we need to check that index is within bounds.
Refs: #44336
* build: test windows runner
* build: try build windows on windows?
* build: take win/cross changes
* build: use bash as default shell always
* build: configure git for windows build tools
* build: bash as default
* build: configure windows correctly
* build: use sha1sum
* build: force windows cipd init and python3 existence
* just pain
* build: restore cache on windows
* build: use build-tools gclient
* build: sync gclient vars to build windows job
* build: output depshash for debugging
* build: past sam was a silly goose
* build: depshash logging
* build: force lf endings for lock and DEPS
* build: platform strings are hard
* build: checkout on windows host
* sup
* no check
* idk
* sigh
* ...
* no double checkout
* build: yolo some stuff
* build: run gn-check for windows on linux hosts for speed
* use container...
* cry ?
* build: e d
* e d
* no log
* fix toolchain on windows cross check
* build: use powershell to add mksnapshot_args
* build: enable x86 and arm64 windows builds too
* clean up
* maybe not needed
* build: keep action around for post step
* build: configure git global on win
* build: ia32 zip manifest
* build: no patch depot_tools for tests
* build: get arm64 windows closer to working
* build: windows tar is ass
* 32 bit on 32 bit
* maybe bash
* build: set up nodejs
* correct windows sharding
* fix some spec runner stuff
* fix windows tests
* overwrite -Force
* sigh
* screen res
* wat
* logs
* ... more logs
* line endings will be the death of me
* remove 1080p force thing
* vsctools + logging
* disable some fullscreen tests on GHA
* no progress
* run all CI
* install visual studio on arm64
* windows hax for non windows
* maybe arm sdk
* clean up depshash logic
* build: use single check per platform
* ensure clean args
* fix loop
* remove debug
* update default build image sha for dispatch
* plzzzz
* one more try
* arm64 vctools
* sad
* build: fix non-dispatch windows gn check
* chore: debug datadog-ci location
* chore: update build-tools for newer toolchain
* chore: set path for datadog-ci
* try this
* chore: fixup gn check
* fixup gn-check some more
* fixup windows gn check
* chore: fixup windows gn check
* test: use cmd for Windows testing
* fixup use cmd for testing on Windows
* fixup windows GN check
* fixup npm config arch for x86
* Can we set test files via powershell
* fixup to set test files via powershell
* fixup set test files via powershell
* Don't check cross instance cache disk space on Windows
* Use separate step to set env variables for testing
* fixup Use separate step to set env variables for testing
* fixup Use separate step to set env variables for testing
* fixup Use separate step to set env variables for testing (AGAIN)
* use powershell if in powershell
* fixup use powershell if in powershell
* chore: remove no longer needed changes to depot_tools
xref: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/5669094
and https://chromium-review.googlesource.com/c/chromium/src/+/5844046
* chore: try using 7zip on Windows to extract tarball
* Revert "chore: try using 7zip on Windows to extract tarball"
This reverts commit c7432b6a37.
* test: debug failing tests on GHA windows
* fix: ftbfs when including simdjson in Node.js
(cherry picked from commit 48e44c40d6)
* chore: try to track down Windows testing hang
* use correct timeout
* try this
* see if this helps
* try to figure out why node is running
* shard tests to try to narrow down WOA lockup
* try to narrow down problem test
* Narrow down blocking test more
* do we need a combo to repro
* see if this cleans up the tests
* fixup navigator.usb test
* remove logging from problematic tests
* Revert "shard tests to try to narrow down WOA lockup"
This reverts commit a180658376.
* remove logging
* debug keyboard test
* add timeout for Windows since arm64 sometimes hangs
* see if this helps
* put back original timeout
* try to use screenCapture to get screenshots of what is going on on WOA
* try using electron screencapture to debug WOA hang
* chore: turn off privacy experience
* run screenshot on both shards
* fixup screencap
* try to narrow down hanging spec
* chore: cleanup servers left open
* cleanup tests
* Revert "try to narrow down hanging spec"
This reverts commit a0f959f538.
* cleanup test debugging
* fixup extensions spec
* cleanup unneeded items
* run wtf with 2 shards instead of 6
* Revert "run wtf with 2 shards instead of 6"
This reverts commit ca2d282129.
* debug windows version on woa
* dump more info
* Get detailed CPU info
* revert debugging
* use same args as AppVeyor WOA for GHA WOA
* fixup use same args as AppVeyor WOA for GHA WOA
* fixup use same args as AppVeyor WOA for GHA WOA
* try to track down which tests trigger hang
* one or more of these combinations should hang
* break up web contents spec to find hang
* further break down api-web-contents to find hang
* test: ensure all webContents are closed
* test: fix require is not defined error
* see if api-web-contents spec is now good
* test: ensure all webContents are closed
* Revert "try to track down which tests trigger hang"
This reverts commit 07298d6ffe.
* chore: use alternate location for windows toolchain
* Reapply "try to track down which tests trigger hang"
This reverts commit 0321f76d01.
* try to narrow down problem test
* fix TEST_SHARD env var
* no, really fix TEST_SHARD env var
* see if this fixes it
* test: cleanup any remaining windows and webcontents
* see if new cleanup helps
* dont destroy webcontents for now
* fixup dont destroy webcontents for now
* Only cleanup right before process.exit
* see if this fixes the hang
* actually destroy webcontents
* Revert "Reapply "try to track down which tests trigger hang""
This reverts commit cdee7de049.
* see if this helps
* Revert "see if this helps"
This reverts commit 9a15a69cf7.
* Is it all about the web contents?
* it is all about the webcontents
but which one?
* Narrow down problem webcontents test
* try to speed up git install on WOA
* disable problematic test on WOA
* remove debugging
* remove debugging from choco installs
* Revert "disable problematic test on WOA"
This reverts commit e060fb0839.
* Revert "remove debugging"
This reverts commit f18dd8b1a5.
* run against all the tests in the failing shard
* don't run visibility tests first
* remove debugging
* 3 is a magic number
* Revert "3 is a magic number"
This reverts commit 36b91ccf9f.
* match what Appveyor runs exactly
* Revert "match what Appveyor runs exactly"
This reverts commit 7260dd4322.
* chore: sort files alphabetically
* find out what spec is leaving stuff open
* chore: Checkout PR HEAD commit
instead of merge commit
* try using app.exit instead of process.exit
* test: cleanup BrowserWindows and webContents
* Revert "chore: sort files alphabetically"
This reverts commit d9e217ffb1.
* chore: use win32 to match process.platform
Needed for build-tools to download from PRs
* chore: cache yarn dir
* fixup cache yarn
* fixup use win32 to match process.platform
* fixup use win32 to match process.platform
* fixup cache yarn
* Add debugging for WOA hang
* Add debugging for failing keyboard lock test
* Revert "Add debugging for WOA hang"
This reverts commit 8df03d568d.
* try using process.kill
* add more debugging to keyboard.lock test
* Revert "Add debugging for failing keyboard lock test"
* remove debugging
* test: disable keyboard.lock on Windows
* test: disable fullscreen tests on Windows
* test: only force test suite exit on WOA
* fixup test: only force test suite exit on WOA
* cleanup tests
* extract yarn caching/install to action
* try using bash to run windows tests
* remove left over debugging
* standardize on 'win' for Windows builds
* use 'x86' for arch for manifest files
* fixup try using bash to run windows tests
* fixup use 'x86' for arch for manifest files
* standardize on 'win' for Windows builds
* fixup use 'x86' for arch for manifest files
* fixup try using bash to run windows tests
---------
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* fix: unused variable warning when the PDF viewer is disabled
* fix: unused function error when PDF viewer is disabled
error: unused function ParseManifest [-Werror,-Wunused-function]
* docs: clarify what session.clearData() with data type 'cache' deletes
* docs: include `shadercache`, too
Co-authored-by: John Kleinschmidt <kleinschmidtorama@gmail.com>
---------
Co-authored-by: John Kleinschmidt <kleinschmidtorama@gmail.com>
* chore: remove unused isolate argument from Cookies constructor
unused since the ginify cookies refactor in Mar 2020, commit 22202255
* fix: constructor only takes one arg now, so mark it explicit
* refactor: make kRelauncherArgSeparator private to relauncher.cc
* refactor: make kRelauncherTypeArg private to relauncher.cc
* refactor: remove unused type relauncher::CharType
* refactor: move private constants into standalone private namespace
* refactor: move kWaitEventName into the only function that uses it
* refactor: more return-braced-init-list, this time for v8 and gin objects
* refactor: more return-braced-init-list, this time for v8, gin, std, and base objects
* refactor: misc-use-internal-linkage warnings in context bridge
move impl functions into anonymous namespace so that they're not visible
to other compilation units:
- ExposeAPIInWorld()
- IsCalledFromMainWorld()
- OverrideGlobalPropertyFromIsolatedWorld()
- OverrideGlobalValueFromIsolatedWorld()
- TraceKeyPath()
* refactor: misc-use-internal-linkage warnings in skia util
move impl details into anonymous namespace so that they're not visible
to other compilation units:
- struct ScaleFactorPair
- kScaleFactorPairs[]
- GetScaleFactorFromPath()
- AddImageSkiaRepFromPath()
* refactor: misc-use-internal-linkage warnings in printing util
move impl details into anonymous namespace so that they're not visible
to other compilation units:
- GetFullPagePlugin()
* refactor: misc-use-internal-linkage warnings in blijnk converter
move impl details into anonymous namespace so that they're not visible
to other compilation units:
- GetKeyLocationCode()
- ModifiersToArray()
* refactor: misc-use-internal-linkage warnings in extrension system
move impl details into anonymous namespace so that they're not visible
to other compilation units:
- ParseManifest()
* refactor: misc-use-internal-linkage warnings in skia util
move impl details into anonymous namespace so that they're not visible
to other compilation units:
- GetFrameTokenMap()
- GetFrameTreeNodeIdMap()
* refactor: misc-use-internal-linkage warnings in electron_api_utility_process.cc
move impl details into anonymous namespace so that they're not visible
to other compilation units:
- GetAllUtilityProcessWrappers()
* refactor: misc-use-internal-linkage warnings in electron_api_menu
move impl details into anonymous namespace so that they're not visible
to other compilation units:
- InvokeBoolMethod()
* refactor: misc-use-internal-linkage warnings in platform util
move impl details into anonymous namespace so that they're not visible
to other compilation units:
- struct TrashItemResult
- TrashItemOnBlockingThread()
* refactor: avoid repeating the return type from the declaration; use a braced initializer list instead [modernize-return-braced-init-list]
* refactor: avoid repeating the return type from the declaration; use a braced initializer list instead [modernize-return-braced-init-list]
NB: using the braced-initializer list uncovered an error here:
the float returned by std::floor() can't be implicitly cast to
an int. This is solved by using base::ClampFloor<int>() instead.
std::floor()
* chore: remove unused local non-trivial variable relaunch_executable
became unused in June 2016 in 0d066de5
* chore: only declare program_name local variable if used
We declared it everywhere but only used it on Windows
* chore: remove unused local non-trivial variable path from UnregisterXWindow
it became unused in 2020 by 72a08926
* feat: add query-session-end event for Windows
* fix: remove debug line
* feat: notify with reason on session-end
* docs: add comments and return params
* docs: add same docs to the BrowserWindow
* fix: add shutdown reason if lParam == 0
* docs: remove 'force' word
* docs: revert multithreading.md change
* docs: add reasons documentation, reason variable renamed to reasons
* docs: improve 'shutdown' reason wording
* docs: reword with 'can be'
* fix: pass reasons by reference
* fix: use newer approach which expose reasons value directly on Event object
* docs: add escaping
* style: linter fixes
* fix: project now should compile
* fix: EmitWithoutEvent method added, EmitWithEvent moved to private again
* docs: typo fix
Co-authored-by: Sam Maddock <samuel.maddock@gmail.com>
* docs: dedicated WindowSessionEndEvent type created
* docs: better wording for session-end event description
Co-authored-by: Will Anderson <will@itsananderson.com>
---------
Co-authored-by: Sam Maddock <samuel.maddock@gmail.com>
Co-authored-by: Will Anderson <will@itsananderson.com>
* fix: performance-no-automatic-move in GetLogFileName()
remove `const` from log_filename.
Warning fixed by this commit:
../../electron/shell/common/logging.cc:40:12: warning: constness of 'log_filename' prevents automatic move [performance-no-automatic-move]
* fix: performance-no-automatic-move in GetBundleResourcePath()
remove `const` from request_relative_path.
Warning fixed by this commit:
electron/shell/browser/extensions/electron_extensions_browser_client.cc:187:10: warning: constness of 'request_relative_path' prevents automatic move [performance-no-automatic-move]
* refactor: use gdk_display_beep() to beep on Linux
* chore: make a stub declaration for gdk_display_beep()
* chore: remove unused file electron_gtk.sigs
* chore: remove unused #includes to make gn check happy
* fix: bugprone-narrowing-conversions warning in NativeImage::memory_usage_
- fix signed / unsigned math by using base/numerics/safe_conversions
- make memory_usage_ an int64_t so it can safely take the size_t
returned by computeByteSize()
Warning fixed by this commit:
../../electron/shell/common/api/electron_api_native_image.cc:155:26: warning: narrowing conversion from 'size_t' (aka 'unsigned long') to signed type 'int32_t' (aka 'int') is implementation-defined [bugprone-narrowing-conversions]
155 | new_memory_usage = image_skia->bitmap()->computeByteSize();
* fix: bugprone-narrowing-conversions warnings in NativeImage::CreateFromBitmap()
`SkImageInfo::MakeN32()` and `SkBitmap::allocN32Pixels()` both take int
width and height args, but we were feeding them unsigned ints.
../../electron/shell/common/api/electron_api_native_image.cc:508:36: warning: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined [bugprone-narrowing-conversions]
508 | auto info = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
| ^
../../electron/shell/common/api/electron_api_native_image.cc:508:43: warning: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined [bugprone-narrowing-conversions]
508 | auto info = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType);
| ^
../../electron/shell/common/api/electron_api_native_image.cc:524:25: warning: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined [bugprone-narrowing-conversions]
524 | bitmap.allocN32Pixels(width, height, false);
| ^
../../electron/shell/common/api/electron_api_native_image.cc:524:32: warning: narrowing conversion from 'unsigned int' to signed type 'int' is implementation-defined [bugprone-narrowing-conversions]
524 | bitmap.allocN32Pixels(width, height, false);
| ^
../../electron/shell/common/api/electron_api_native_image.cc:528:48: warning: narrowing conversion from 'double' to 'float' [bugprone-narrowing-conversions]
528 | gfx::ImageSkia::CreateFromBitmap(bitmap, scale_factor);
fix: AutofillPopup warning: use '= default' to define a trivial default constructor [modernize-use-equals-default]
refactor: reduce #indclude scope in autofill_popup.h and autofill_popup_view.h
* chore: reland "fix: utility process exit code for graceful termination"
This reverts commit 1cae73ba09.
* fix: exit code on posix when killed via api
* chore: fix code style
* docs: Make ipcRenderer and ipcMain listener API docs consistent
* test: add some unit tests for ipcRenderer/ipcMain listener behavior
* fix: Mark on/off methods as primary and addListener/removeListener as aliases
* fix: clear all listeners before running ipcMain removeAllListeners tests
* feat: add support for configuring xdg portal version at runtime
* doc: update command-line-switches.md
* doc: update command-line-switches.md
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* doc: required portal version for defaultPath support
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* doc: update more occurrances
* fix: remove warning from save dialogs
* doc: update command-line-switches.md
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
---------
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Closes https://github.com/electron/electron/issues/44569.
Fixes an issue where the WCO buttons were hidden on Linux in fullscreen mode
but not on Windows or macOS. The Windows behavior is the expected one, so this
commit makes the Linux behavior consistent.
Update Squirrel Run at Login docs to be modern
The current docs for setting up Run at Login use the legacy way that
Squirrel does shortcuts. This was replaced by an easier method, let's
use that instead
* fix: flake wait for crash with specific serviceName
* fix: flake when unrelated WebContents exists during BrowserView tests
* fix: wait for crash before forking
* use name
* fix: Use openURL:configuration:completionHandler instead of openUrl
* test: add a test
* fix: add dispatch_async to replace GetUIThreadTaskRunner
* refactor: remove unused import
* fix: update to use BindPostTaskToCurrentDefault
* test: add regression test for window focus
* refactor: update to explicit task runner
* refactor: move uv_setup_args() calls to startup
* refactor: call base::CommandLine::Init() before ContentMain()
* feat: add ElectronCommandLine::AsUtf8()
* refactor: call base::CommandLine::Init() before NodeMain()
* refactor: use ElectronCommandLine::AsUtf8() in NodeMain()
* fix: -Wunsafe-buffer-usage warning in ElectronCommandLine::Init()
* chore: add a DCHECK to confirm ElectronCommandLine was initialized before AsUtf8() is called
* chore: const correctness in ElectronCommandLine::Init() args
* chore: add ElectronCommandLine to macOS Electron Helper app
* chore: move argc, argvc setup into electron_library_main on macOS
* chore: revert BUILD.gn changes
* fix: WideToUTF8() call in ElectronCommandLine::AsUtf8()
* build: add uv to the include paths for app/electron_main_linux
* build: add uv to the include paths for app/electron_library_main.mm
* chore: revert unrelated changes
these were intended for another branch
* refactor: BaseWindow::OnExecuteAppCommand() now takes a std::string_view
* refactor: NativeWindow::NotifyWindowExecuteAppCommand() takes a std::string_view
* refactor: AppCommandToString() returns a std::string_view, is now constexpr
* refactor: make kBrowserBackward, kBrowserForward inline constexpr std::string_view
Xref: https://abseil.io/tips/140https://groups.google.com/a/chromium.org/g/chromium-dev/c/jROTxMo_m2Q/m/HgciN2KsAgAJ
* refactor: use inline constexpr string_view for kDevice*Key constants
Xref: https://abseil.io/tips/140https://groups.google.com/a/chromium.org/g/chromium-dev/c/jROTxMo_m2Q/m/HgciN2KsAgAJ
* refactor: IsEnvSet now takes a base::cstring_view
* refactor: use inline constexpr cstring_view for kRunAsNode
* refactor: use inline constexpr string_view for kPDF*PluginName
* refactor: use base::FilePath::FromASCII() since "internal-pdf-viewer" is ascii
* chore: remove unused shell/common/electron_constants.cc
* fixup! refactor: IsEnvSet now takes a base::cstring_view
* perf: prefer NewFromUtf8Literal() over NewFromUtf8() for string literals
the string length is known at compile time and no need to call ToLocalChecked()
* perf: string length is known when calling NewFromUtf8(), so use it
* perf: remove unnecessary calls to c_str()
these just force the code being called to have to recalculate the string length
* chore: move as_byte_span() to new shell/common/mac_util.h
this way it can be used by multiple mm files
* fix: -Wunsafe-buffer-usage warnings in UNNotificationResponseToNSDictionary
* refactor: use base::HexEncode() instead of rolling our own
* fixup! chore: move as_byte_span() to new shell/common/mac_util.h
* fixup! chore: move as_byte_span() to new shell/common/mac_util.h
fix: move mac_util to the right place in filenames.gni
Node PR: https://github.com/nodejs/node/pull/55306
Do not merge before attached Node PR is merged. This PR updates our NMV to 132 for Electron 34
Please merge this PR before branching 34-x-y
* refactor: const correctness
* refactor: extract-method AsarFileValidator::EnsureHashExists()
* refactor: replace use of deprecated crypto API
https://crbug.com/364687923
* refactor: use span API in AsarFileValidator::OnRead()
* refactor: replace use of deprecated crypto API
https://crbug.com/364687923
* fixup! refactor: use span API in AsarFileValidator::OnRead()
fix: electron-ia32-testing FTBFS
perf: use ArrayBuffer::Data() API
Replace our `GetBackingStore()->Data()` calls with this instead.
Explained by the V8 docs, ArrayBuffer.Data() is
> More efficient shortcut for GetBackingStore()->Data(). The
> returned pointer is valid as long as the ArrayBuffer is alive.
* build: convert all release scripts to typescript
* fix test imports
* build: fix version bumper export
* refactor: use as const
* spec: fix bad type spec
fix: -Wunsafe-buffer-usage warnings in ElectronComponentExtensionResourceManager::AddComponentResourceEntries()
just replace pointer-and-length args with a span
* fix: do not build electron_plugin_info_host_impl.cc when plugins are disabled
it fails to build from source with this error:
../../content/public/browser/plugin_service.h:17:2: error: "Plugins should be enabled"
17 | #error "Plugins should be enabled"
* fix: FTBFS in printing_utils.cc when ENABLE_PDF is false
* fixup! fix: do not build electron_plugin_info_host_impl.cc when plugins are disabled
fix BUILD.gn linting
* feat: add error event for utility process
* chore: use public report api
* chore: fix lint
* doc: mark error event as experimental
---------
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
* fix: -Wunsafe-buffer-usage warnings in GdkPixbufFromSkBitmap()
* refactor: don't change previous behavior for 0-height images
Is a 0x0 image even a thing? I'm not sure; but just in case, let's
treat it the same way the previous implementation did.
test: expect a `sender-pid` hint in Linux notifications.
This PR ensures that the `sender-pid` hint is set for new notifications.
It also updates the spec to confirm that DBus receives the hint and that
it has the correct value.
This fixes a spec failure when running libnotify >= 0.7.12 (2022-05-05).
Starting with that version, libnotify started injecting `sender-pid` if
not provided by the client. So our tests received a slightly different
DBus payload depending on what version of libnotify was installed,
causing our deep-equals tests to fail.
By always providing and testing the `sender-pid` hint, our behavior and
tests should be consistent across distros.
Provide a NativeImage icon in the notification tests and then inspect
the DBus message payload's `image_data` hint to see if it's correct.
This adds test coverage for LibnotifyNotification::Show() and for
GdkPixbufFromSkBitmap().
Right now DelayedNativeViewHost attaches its underlying native view
when it's being attached to a widget but it doesn't detach it when
it's being detached. It may lead to use-after-free and crash.
Add a `base::WeakPtr<WebContents>` field to SerialChooserController and
stop subclassing from WebContentsObserver. This follows the Observer docs:
> don't create a `WebContentsObserver` just to be able to check
> for a null `WebContentsObserver::web_contents()`.
> Use a `base::WeakPtr<WebContents>` instead.
prefactor: prefer member initializers in asar::Archive
prefactor: prefer member initializers in asar::Archive::FileInfo
prefactor: prefer member initializers in asar::IntegrityPayload
* build: add support for fetching github token from sudowoodo
* chore: update release notes cache for tests
* build: support nightlies repo correctly
* build: post token
Because we used decrementing negative source ids for fake video id when
instantating a native macOS screen share picker, we eventually hit the
`DesktopMediaID::kFakeId = -3` in Chromium source code which displayed a
test green screen.
In this change we reserve our own fake id of `-4` and decrement the
window id integer for uniqueness instead.
Co-authored-by: Fedor Indutny <238531+indutny@users.noreply.github.com>
* refactor: CallMethodWithArgs() now takes a span of value handles
* perf: use std::array instead of std::vector to hold Emit arg parameter packs
* chore: remove unused gin_helper::EmitEvent(iso, obj, name, span<Local>)
* chore: iwyu mojom.h headers
* fixup! chore: iwyu mojom.h headers
make previously-indirect include dependency direct
* fixup! fixup! chore: iwyu mojom.h headers
make previously-indirect include dependency direct
Closes https://github.com/electron/electron/issues/43714.
Fixes an issue where the resizing border was not being handled correctly on Linux WCO
caption buttons. This is now taken into account as a part of the NonClientHitTest.
* refactor: move scope scaffolding into SettletScope
idea stolen from SpellCheckScope
* refactor: move impl of PromiseBase::RejectPromise() to the cc file
* chore: remove unused #include
* chore: move Archaeologist to GHA
* chore: test archaelogist changes
* Revert "chore: test archaelogist changes"
This reverts commit a575d6ef3a.
* chore: properly name steps in archaeologist-dig
refactor: avoid redundant Promise.GetContext calls
Several Promise methods call `GetContext()` multiple times. From looking
at the assembly in obj/electron/electron_lib/promise.o, these redundant
calls are actually being made -- they aren't optmized out.
This PR keeps the return value in a local variable to avoid extra calls.
refactor: take a uint8_t span in ValidateIntegrityOrDie()
Doing some groundwork for fixing unsafe base::File() APIs:
- Change ValidateIntegrityOrDie() to take a span<const uint8_t> arg.
We'll need this to migrate asar's base::File API calls away from the
ones tagged `UNSAFE_BUFFER_USAGE` because the safe counterparts use
span<uint8_t> too.
- Simplify ValidateIntegrityOrDie()'s implementation by using
crypto::SHA256Hash() instead of reinventing the wheel.
Use v8::ArrayBufferView::CopyContents() instead of doing the pointer
math + memcpy() ourselves. This not only solves the buffer warnings,
but may also avoid some additional overhead:
> Copy the contents of the ArrayBufferView's buffer to an
> embedder defined memory without additional overhead that
> calling ArrayBufferView::Buffer might incur.
* fix: Launch apps with XDG_ACTIVATION_TOKEN in ozone/wayland
Ensure apps are launched with the activation token received from
xdg_activation_v1 protocol.
* add focus_launched_process option
* fix: remove use of deprecated v8::String::Value
Upstream marked v8::String::Value as `V8_DEPRECATE_SOON` last month,
so let's stop using it.
The replacement code mostly does the same as v8::String::Value();
but since our test only cares about the length and not the contents,
we get a small perf win of not needing to allocate a char array and
not needing to call Local::String::Write().
Upstream V8_DEPRECATE_SOON:
Xref: https://chromium-review.googlesource.com/c/v8/v8/+/5667299kkk
v8::String::Value() implementation:
20226b740b/src/api/api.cc (10883)
History on why we used it:
80c1a9739df49ed30f72
* Update shell/common/gin_converters/file_path_converter.h
Co-authored-by: Robo <hop2deep@gmail.com>
* fixup! Update shell/common/gin_converters/file_path_converter.h
do not return success for all non-Null non-Strings
---------
Co-authored-by: Robo <hop2deep@gmail.com>
When an electron app is launched by another app ensure that the
XDG_ACTIVATION_TOKEN env var is read and used for activation using
xdg_activation_v1 protocol.
* fix: systemMediaPermissionDenied: should check for screen capture perms instead of camera
* Revert "fix: systemMediaPermissionDenied: should check for screen capture perms instead of camera"
This reverts commit e9cc672165.
* should only do these checks for audio or video, but not screenshare
* no service
* oops
---------
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* fix: -Wunsafe-buffer-usage warnings in IsUrlArg()
* chore: improve code comments for CheckCommandLineArguments()
* chore: reduce diffs from main
* refactor: CheckCommandLineArguments takes a StringVector arg
Fixes another buffer warning!
* chore: avoid double-call to url.scheme() in WebContentsZoomController::SetZoomMode()
* perf: use gurl.scheme_piece() in GetAppInfoHelperForProtocol()
* perf: use gurl.scheme_piece() in Browser::GetApplicationNameForProtocol()
* refactor: add std::less<> to HandlersMap
This lets us search it using string_view keys
* refactor: ProtocolRegistry::FindRegistered() now takes a std::string_view
* perf: use gurl.scheme_piece() in InspectableWebContents::LoadNetworkResource()
* refactor: ProtocolRegistry::FindIntercepted() now takes a std::string_view
* perf: use gurl.scheme_piece() in SimpleURLLoaderWrapper::GetURLLoaderFactoryForURL()
* perf: use gurl.scheme_piece() in ProxyingURLLoaderFactory::CreateLoaderAndStart()
* perf: use gurl.host_piece() in ElectronWebUIControllerFactory::GetWebUIType()
* perf: use gurl.host_piece() in ElectronWebUIControllerFactory::CreateWebUIControllerForURL()
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.
description:Only to be created by Electron maintainers
body:
- type:checkboxes
attributes:
label:Confirmation
options:
- label:I am a [maintainer](https://github.com/orgs/electron/people) of the Electron project. (If not, please create a [different issue type](https://github.com/electron/electron/issues/new/).)
- [ ] 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).
We use [semantic commit messages](https://github.com/electron/electron/blob/main/docs/development/pull-requests.md#commit-message-guidelines) to streamline the release process. Before your pull request can be merged, you should **update your pull request title** to start with a semantic prefix.
Examples of commit messages with semantic prefixes:
@@ -10,6 +12,13 @@ newPRWelcomeComment: |
- `feat: add app.isPackaged() method`
- `docs: app.isDefaultProtocolClient is now available on Linux`
### Commit signing
This repo enforces [commit signatures](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits) for all incoming PRs.
To sign your commits, see GitHub's documentation on [Telling Git about your signing key](https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key).
### PR tips
Things that will help get your PR across the finish line:
- Follow the JavaScript, C++, and Python [coding style](https://github.com/electron/electron/blob/main/docs/development/coding-style.md).
# The config is used to bake appveyor images, not for running CI jobs.
# The config expects the following environment variables to be set:
# - "APPVEYOR_BAKE_IMAGE" e.g. 'electron-99.0.4767.0'. Name of the image to be baked.
# Typically named after the Chromium version on which the image is built.
# This can be set dynamically in the prepare-appveyor script.
version:1.0.{build}
build_cloud:electronhq-16-core
image:base-bake-image
environment:
GIT_CACHE_PATH:C:\Users\appveyor\libcc_cache
ELECTRON_OUT_DIR:Default
ELECTRON_ENABLE_STACK_DUMPING:1
MOCHA_REPORTER:mocha-multi-reporters
MOCHA_MULTI_REPORTERS:mocha-appveyor-reporter, tap
DEPOT_TOOLS_WIN_TOOLCHAIN:0
PYTHONIOENCODING:UTF-8
# The following lines are needed when baking from a completely new image (eg MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest via image: base-windows-server2019)
# The following lines are needed when baking from a completely new image (eg MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest via image: base-windows-server2019)
# The following lines are needed when baking from a completely new image (eg MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest via image: base-windows-server2019)
# # Restart VM
# - ps: Start-Sleep -s 5; Restart-Computer
# - ps: Start-Sleep -s 5
# - cd %USERPROFILE%\image-bake-scripts
# - appveyor version
# - ps: .\optimize_dotnet_runtime.ps1
# - ps: .\disable_windows_background_services.ps1
# - ps: .\enforce_windows_firewall.ps1
# - ps: .\cleanup_windows.ps1
# END LINES FOR COMPLETELY NEW IMAGE
on_image_bake:
- ps:>-
echo "Baking image: $env:APPVEYOR_BAKE_IMAGE at dir $PWD"
@@ -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_
@@ -416,7 +422,7 @@ Returns:
*`launch-failed` - Process never successfully launched
*`integrity-failure` - Windows code integrity checks failed
*`exitCode` number - The exit code for the process
(e.g. status from waitpid if on posix, from GetExitCodeProcess on Windows).
(e.g. status from waitpid if on POSIX, from GetExitCodeProcess on Windows).
*`serviceName` string (optional) - The non-localized name of the process.
*`name` string (optional) - The name of the process.
Examples for utility: `Audio Service`, `Content Decryption Module Service`, `Network Service`, `Video Capture`, etc.
@@ -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()`
@@ -514,20 +524,20 @@ and `will-quit` events will not be emitted.
*`args` string[] (optional)
*`execPath` string (optional)
Relaunches the app when current instance exits.
Relaunches the app when the current instance exits.
By default, the new instance will use the same working directory and command line
arguments with current instance. When `args` is specified, the `args` will be
passed as command line arguments instead. When `execPath` is specified, the
`execPath` will be executed for relaunch instead of current app.
arguments as the current instance. When `args` is specified, the `args` will be
passed as the command line arguments instead. When `execPath` is specified, the
`execPath` will be executed for the relaunch instead of the current app.
Note that this method does not quit the app when executed, you have to call
Note that this method does not quit the app when executed. You have to call
`app.quit` or `app.exit` after calling `app.relaunch` to make the app restart.
When `app.relaunch` is called for multiple times, multiple instances will be
started after current instance exited.
When `app.relaunch` is called multiple times, multiple instances will be
started after the current instance exits.
An example of restarting current instance immediately and adding a new command
An example of restarting the current instance immediately and adding a new command
line argument to the new instance:
```js
@@ -679,7 +689,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 +699,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 +727,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()`
@@ -777,16 +794,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 +829,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 +878,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 +918,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 +1024,7 @@ starts:
```js
const{app,BrowserWindow}=require('electron')
letmyWindow=null
constadditionalData={myKey:'myValue'}
@@ -1110,6 +1135,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 +1213,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 +1228,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 +1270,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_
@@ -1302,23 +1337,25 @@ Returns `Object`:
Set the app's login item settings.
To work with Electron's `autoUpdater` on Windows, which uses [Squirrel][Squirrel-Windows],
you'll want to set the launch path to Update.exe, and pass arguments that specify your
application name. For example:
you'll want to set the launch path to your executable's name but a directory up, which is
a stub application automatically generated by Squirrel which will automatically launch the
@@ -26,28 +26,35 @@ requirements, you can read [Server Support][server-support]. Note that
update process. Apps that need to disable ATS can add the
`NSAllowsArbitraryLoads` key to their app's plist.
**Note:** Your application must be signed for automatic updates on macOS.
This is a requirement of `Squirrel.Mac`.
> [!IMPORTANT]
> Your application must be signed for automatic updates on macOS.
> This is a requirement of `Squirrel.Mac`.
### Windows
On Windows, you have to install your app into a user's machine before you can
use the `autoUpdater`, so it is recommended that you use the
[electron-winstaller][installer-lib], [Electron Forge][electron-forge-lib] or the [grunt-electron-installer][installer] package to generate a Windows installer.
use the `autoUpdater`, so it is recommended that you use
[electron-winstaller][installer-lib] or [Electron Forge's Squirrel.Windows maker][electron-forge-lib] to generate a Windows installer.
When using [electron-winstaller][installer-lib] or [Electron Forge][electron-forge-lib] make sure you do not try to update your app [the first time it runs](https://github.com/electron/windows-installer#handling-squirrel-events) (Also see [this issue for more info](https://github.com/electron/electron/issues/7155)). It's also recommended to use [electron-squirrel-startup](https://github.com/mongodb-js/electron-squirrel-startup) to get desktop shortcuts for your app.
Apps built with Squirrel.Windows will trigger [custom launch events](https://github.com/Squirrel/Squirrel.Windows/blob/51f5e2cb01add79280a53d51e8d0cfa20f8c9f9f/docs/using/custom-squirrel-events-non-cs.md#application-startup-commands)
that must be handled by your Electron application to ensure proper setup and teardown.
The installer generated with Squirrel will create a shortcut icon with an
Squirrel.Windows apps will launch with the `--squirrel-firstrun` argument immediately
after installation. During this time, Squirrel.Windows will obtain a file lock on
your app, and `autoUpdater` requests will fail until the lock is released. In practice,
this means that you won't be able to check for updates on first launch for the first
few seconds. You can work around this by not checking for updates when `process.argv`
contains the `--squirrel-firstrun` flag or by setting a 10-second timeout on your
update checks (see [electron/electron#7155](https://github.com/electron/electron/issues/7155)
for more information).
The installer generated with Squirrel.Windows will create a shortcut icon with an
[Application User Model ID][app-user-model-id] in the format of
`com.squirrel.PACKAGE_ID.YOUR_EXE_WITHOUT_DOT_EXE`, examples are
`com.squirrel.slack.Slack` and `com.squirrel.code.Code`. You have to use the
same ID for your app with `app.setAppUserModelId` API, otherwise Windows will
not be able to pin your app properly in task bar.
Like Squirrel.Mac, Windows can host updates on S3 or any other static file host.
You can read the documents of [Squirrel.Windows][squirrel-windows] to get more details
about how Squirrel.Windows works.
## Events
The `autoUpdater` object emits the following events:
@@ -62,7 +69,7 @@ Emitted when there is an error while updating.
### Event: 'checking-for-update'
Emitted when checking if an update has started.
Emitted when checking for an available update has started.
### Event: 'update-available'
@@ -87,8 +94,9 @@ Emitted when an update has been downloaded.
On Windows only `releaseName` is available.
**Note:** It is not strictly necessary to handle this event. A successfully
downloaded update will still be applied the next time the application starts.
> [!NOTE]
> It is not strictly necessary to handle this event. A successfully
> downloaded update will still be applied the next time the application starts.
### Event: 'before-quit-for-update'
@@ -119,8 +127,9 @@ Returns `string` - The current update feed URL.
Asks the server whether there is an update. You must call `setFeedURL` before
using this API.
**Note:** If an update is available it will be downloaded automatically.
Calling `autoUpdater.checkForUpdates()` twice will download the update two times.
> [!NOTE]
> If an update is available it will be downloaded automatically.
> Calling `autoUpdater.checkForUpdates()` twice will download the update two times.
### `autoUpdater.quitAndInstall()`
@@ -131,15 +140,14 @@ Under the hood calling `autoUpdater.quitAndInstall()` will close all application
windows first, and automatically call `app.quit()` after all windows have been
closed.
**Note:** It is not strictly necessary to call this function to apply an update,
as a successfully downloaded update will always be applied the next time the
application starts.
> [!NOTE]
> It is not strictly necessary to call this function to apply an update,
> as a successfully downloaded update will always be applied the next time the
_**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'
Emitted when the window is closed. After you have received this event you should
remove the reference to the window and avoid using it any more.
Emitted when a session is about to end due to a shutdown, machine restart, or user log-off. Once this event fires, there is no way to prevent the session from ending.
#### Event: 'blur'
Returns:
*`event` Event
Emitted when the window loses focus.
#### Event: 'focus'
Returns:
*`event` Event
Emitted when the window gains focus.
#### Event: 'show'
@@ -205,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'
@@ -241,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
@@ -295,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
@@ -309,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:
@@ -349,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.
@@ -372,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`
@@ -382,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`
@@ -403,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_
@@ -444,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 = [
@@ -464,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)`
@@ -479,7 +548,7 @@ Sets the content view of the window.
#### `win.getContentView()`
Returns [View](view.md) - The content view of the window.
Returns [`View`](view.md) - The content view of the window.
#### `win.destroy()`
@@ -561,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()`
@@ -663,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()`
@@ -689,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])`
@@ -707,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)`
@@ -904,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.setIcon(icon)` _Windows_ _Linux_
@@ -1217,6 +1295,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'
Emitted when the window is closed. After you have received this event you should
remove the reference to the window and avoid using it any more.
Emitted when a session is about to end due to a shutdown, machine restart, or user log-off. Once this event fires, there is no way to prevent the session from ending.
#### Event: 'unresponsive'
@@ -309,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'
@@ -353,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
@@ -407,12 +433,12 @@ Emitted when the window has closed a sheet.
Emitted when the native new tab button is clicked.
@@ -483,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.
@@ -506,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`
@@ -516,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`
@@ -537,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_
@@ -597,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()`
@@ -684,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_
@@ -788,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()`
@@ -814,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])`
@@ -832,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)`
@@ -1029,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.showDefinitionForSelection()` _macOS_
@@ -1431,6 +1479,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.
@@ -241,13 +244,21 @@ Force using discrete GPU when there are multiple GPUs available.
Force using integrated GPU when there are multiple GPUs available.
### --xdg-portal-required-version=`version`
Sets the minimum required version of XDG portal implementation to `version`
in order to use the portal backend for file dialogs on linux. File dialogs
will fallback to using gtk or kde depending on the desktop environment when
the required version is unavailable. Current default is set to `3`.
## Node.js Flags
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.
@@ -259,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`.
@@ -281,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-inspector`
Enable support for devtools network inspector events, for visibility into requests made by the nodejs `http` and `https` modules.
### `--no-deprecation`
Silence deprecation warnings.
@@ -306,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.
@@ -74,7 +74,7 @@ The following methods are available on instances of `Cookies`:
`url`. Empty implies retrieving cookies of all URLs.
*`name` string (optional) - Filters cookies by name.
*`domain` string (optional) - Retrieves cookies whose domains match or are
subdomains of `domain`.
subdomains of `domains`.
*`path` string (optional) - Retrieves cookies whose path matches `path`.
*`secure` boolean (optional) - Filters cookies by their Secure property.
*`session` boolean (optional) - Filters out session or persistent cookies.
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.