* build: fix usage of octokit/rest and make uploading better
* Pull in change from #26414
* Update with changes from #26425
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* fix: renderer crash on setImmediate
* spec: add a crash case
* fix: ensure env exists
* Update spec-main/fixtures/crash-cases/setimmediate-renderer-crash/index.js
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* chore: bump chromium in DEPS to 87.0.4280.47
* update patches
* Make sure angle has full git info
Co-authored-by: Electron Bot <anonymous@electronjs.org>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
* fix: re-enable the spellchecker when new language list set
Chromium recently added prefs logic to disable the spellchecker if the list of languages is empty, but the logic to re-enable if the languages are provided again lives in another part of Chromium. This change makes it so our API re-enables the spellchecker correctly when required.
* chore: fix lint
* disable CalculateNativeWinOcclusion on win ci
* Update appveyor.yml
* disable CalculateNativeWinOcclusion for woa
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* Backport changes for notification timeout neber to version 11
* fix: notifications successfully never timeout with included flag
* Add back SetXmlAudioSilent
Co-authored-by: mlaurencin <mlaurencin@microsoft.com>
If speculative render view host is deleted during naviagation to
page we try to open with call to window.open window is destroyed
right after it is created. It may happen when naviagation triggers
redirect from http to https. To void that we should emit event
current-render-view-deleted only when render view host which was
destroyed is the current webcontent's rvh.
Co-authored-by: Cezary Kulakowski <cezary@openfin.co>
* feat: add webContents.crashProcess() to forcefully terminate a renderer process
* chore: fix up docs and tests
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
`chrome://flash` doesn't seem to exist anymore, but similar information
appears at `chrome://version`.
Co-authored-by: Joe Duncko <JoeDuncko@users.noreply.github.com>
* fix: prevent destroyed view references from causing crashes
* Remove extraneous comments
* Relocate crash test to proper location
* Add WebContentsObserver
* Add nullptr check and inspectable observer
* Remote initial test file
* Add test cases to test file
* Rename and move testing file
* Fix linting errors
* Make functions exit early on check
* Fix setBackgroundColor function call in test file
* Fix styling of test file
* Fix mac name mismatch and make variable name more clear
Co-authored-by: Michaela Laurencin <mlaurencin@microsoft.com>
* fix: call node::Stop on exit
* also call Stop in node_main
* oop, we were already calling set_can_call_into_js(false)??
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* Ensure electron delay loads the appropriate modules as chromium on windows
This change adds the same module delay load list that chromium uses for electron. Some modules were already getting delay loaded from other build files in chromium but not the main list via //build/config/win:delayloads. We do not include the list of delay loads in delayloads_not_for_child_dll as those have issues being loaded in sandboxes processes. This will reduce the overall reference set impact of the electron processes.
* fix: Ensure win modules are properly delayloaded
* chore: fix linting
Co-authored-by: Chris Davis <chrisdavis@outlook.com>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
refactor(extensions): remove unused InitWithBrowserContext method
fix(extensions): release background page WebContents to avoid crash
The background page WebContents instance is managed by the ExtensionHost.
fix(extensions): open background page devtools detached by default
test(extensions): add background page devtools test
chore: test fix for null web_contents()
fix: close background page devtools in test after opening
Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>
* chore: graceful handling of notes with sub-lists
Handle multine release notes that contain their own bullet points.
Also, if a release note begins with a bullet point, remove it because it
will confuse the markdown parser to have two bullet points.
* chore: make lint happy
* test: add tests for release note changes
* chore: only target current octokit
* chore: add commits to release-notes test cache
No behavior change; just includes files that ought to be cached to prevent
hitting octokit for them.
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* ci: cleanup up test app directories
* ci: use electron prefix for a testing apps so that the can be cleaned up
* Revert "ci: cleanup up test app directories"
This reverts commit a47daba812.
* fixup test due to app name change
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
* docs: add restricted header info to docs
* docs: clarify header language
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* tests: fix failing WOA tests
tests: fix startDrag for WOA
tests: fix early-in-memory-session-create crash test on WOA
ci: cleanup user app data directories on WOA
* tests: disable nativeImage.createFromBuffer tests on WOA
* disable failing nativeImage.createFromPath on WOA
* disable another nativeImage test for WOA
* initial commit, mac implementation
* add documentation
* convert createThumbnailFromPath to async function
* windows impl protoype
* add tests
* added test
* fix
* fix test
* clean up
* update docs
* cleaning up code
* fix test
* retrigger CI
* retrigger CI
* refactor from app to native_image
* windows build
* lint
* lint
* add smart pointers, fix test
* change tests and update docs
* fix test, remove nolint
* add renderer-main process routing to fix tests
* lint
* thanks sam
* thanks sam
* feat: add optional font type to macOS tray title
* test: add tests for tray font type
* docs: update API reference for Tray setTitle
* review: change API to use an options object
* review: fix string enum in docs
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
* review: return after throwing errors
* review: don't need thrower anymore now that we have args
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
* build: more space on arm64 builds, running out of ideas here
* build: well this is kinda nuts but off we go
* chore: rollback thingy
* chore: build snapshot for realz
* chore: do not delete hunspell
* build: use the new magic extra-disk-space circle image
* build: remove existing file, it is not a tree
removes an outdated reference to Node Security Project, which was acquired by npm some time ago. The new workflow for the same process (now the npm advisories page) has been added.
* refactor: use js instead of boto for s3put
* replace merge-electron-checksums.py with js, remove boto
* fix auth
* actually pass the env to execute()
* fix: export libuv symbols
* add test for linux and windows
* mac linker flags
* assuming same foo.so path for macos
* use --whole-archive flag for mac as well
* use force_load for mac
* refactor: use napi c api directly
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* fix: increase max crash key value length
* chore: fix linting
* chore: fix linux
* Update spec-main/api-crash-reporter-spec.ts
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
* fix: generate dumps under crashDumps folder in linux
* Update spec-main/api-crash-reporter-spec.ts
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Trop annotations are in the form of "(Also in 7.3, 8, 9)" with links to
the sibling branches.
Previously seen in b43e601b83 but is now
free of optional chaining and nullish coalescing, to run on Node < 14 :)
* feat: add worldSafe flag for executeJS results
* chore: do not log warning for webContents.executeJS
* Apply suggestions from code review
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* chore: apply PR feedback
* chore: split logic a bit
* chore: allow primitives through the world safe checl
* chore: clean up per PR feedback
* chore: flip boolean logic
* chore: update per PR feedback
* chore: fix typo
* chore: fix spec
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* fix: Use ElectronAdaptedContentView
* fix: Actually, nevermind, it's "BrowserAccessebilityCocoa"
* chore: Remove things instead of manually keeping them
* perf: do not convert object keys in ctx bridge as they are always primitives
* Update shell/renderer/api/electron_api_context_bridge.cc
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* build: add arm64 macOS publish jobs
* update ci-release-build to run new arm64 macOS publish jobs
* fixup circleci config validate issues
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
* fix: use Node.js isolate setup logic in bindings
* Flags should be more process-specific
* Remove redundant isolate function setting
* Remove old SetFatalErrorHandler call
* chore: add patches to prevent installation of non-arm pip packages
* chore: add patches for apple-silicon
* build: add apple silicon build
* ci: add testing of new arm binary
* chore: remove / update for upstreamed patches
* Skip content tracing on macos on arm
* build: ensure that spec native modules are rebuilt for arm64 on apple-silicon
* chore: fix patches
* chore: fix broken patch
* chore: fix arm64 DCHECK
* build: add MAS arm64 build
* build: disable arm2 tests
* chore: update patches
* build: actually build MAS version of apple silicon app
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Address incorrect typing for isEnabled. The root cause of this was due
to missing backticks which caused the docs parser to think that the
return type of the `isEnabled` function was null, where it was supposed
to be a boolean type.
The side effect of this was that the generated typescript typings were
incorrect for this function.
Fixes#24409
* build: build squirrel and its dependencies from source
* chore: do not use fork for squirrel.mac
* build: do not ship headers with dependency frameworks
* Update BUILD.gn
* chore: s/striped/stripped
* chore: update as per feedback
* chore: use ARC and fix build errors
* chore: fix ARC Squirrel self retainer
* chore: add deprecation warning for the default of contextIsolation
* chore: add to breaking changes
* Update docs/breaking-changes.md
Co-authored-by: Jeremy Apthorp <jeremya@chromium.org>
* chore: fix specs on windows
Co-authored-by: Jeremy Apthorp <jeremya@chromium.org>
This PR improves the Electron REPL experience. It adds a welcome message to the REPL to let users know what versions of Node.js and Electron they're running, as well as overriding the completer function in the REPL to preload and add tab autocompletion for Electron's own modules.
* fix: let Node.js perform microtask checkpoint in the main process
* fix: don't specify v8::MicrotasksScope for explicit policy
* fix: remove checkpoint from some call-sites
We already perform checkpoint at the end of a task,
either through MicrotaskRunner or through NodeBindings.
There isn't a need to add them again when calling into JS
except when dealing with promises.
* fix: remove checkpoint from some call-sites
We already perform checkpoint at the end of a task,
either through MicrotaskRunner or through NodeBindings.
There isn't a need to add them again when calling into JS
except when dealing with promises.
* fix incorrect specs
* default constructor arguments are considered for explicit mark
* add regression spec
* chore: ensure release notes always come from Clerk
Now with tests!
* chore: move sinon devDependency into `spec-main`
* refactor: tweak note-spec variable for readability
* fix: notify URLLoaderClient about redirect inside intercepted protocol's handler
* fix: update new_request's site_for_coookies
* fix: Unound client, so it an be passed to sub-methods
The devtools profiler is not attached at the point we run out init scripts (or our apps preload scripts), we do not really want to change when we run these init scripts but for when a dev is doing performance work it makes sense to give them an option to make the devtools profiler actually work on both our init scripts and their preload script. This PR adds that logic behind an environment variable ELECTRON_PROFILE_INIT_SCRIPTS.
* chore: bump chromium in DEPS to db7d7b3e7cb2bc925f2abfde526280cfdfc21a41
* Update patches
* chore: bump chromium in DEPS to 5613e1b99a44fcbe22f3910f803ca76903a77ec1
* Update patches
* Network service: Remove primary_network_context bool.
https://chromium-review.googlesource.com/c/chromium/src/+/2204678
* WebContentsObserver now implements OnRendererResponsive
https://chromium-review.googlesource.com/c/chromium/src/+/2211066
* update patches
* Fixup printing patch
* chore: bump chromium in DEPS to e387b972cdd7160c416fa6c64a724e2258aa0218
* update patches
* [printing] Move PrintHostMsg_DidPrintContent_Params to print.mojom
https://chromium-review.googlesource.com/c/chromium/src/+/2212110
* [XProto] Move items from ::x11::XProto to ::x11
https://chromium-review.googlesource.com/c/chromium/src/+/2218476
* revert Add IChromeAccessible
This was added in https://chromium-review.googlesource.com/c/chromium/src/+/2206224 but it breaks WOA builds because third_party/win_build_output/midl/ui/accessibility/platform/arm64 does not exist. The link above says that the new interface is behind a feature flag which is disabled by default so it is safe to remove for now.
* rebaseline ichromeaccessible for Windows arm64
This patch will not be needed once we get the next roll.
* Update to 1b9e01844e8bf1aaafc4a52c0c62af7f56d9637b to get arm64 fix
* update patches
* chore: bump chromium in DEPS to 096aefa04092ea00f7b68d8d19345883f20db3c3
* chore: bump chromium in DEPS to a524a45ffd1d6fd46a7a86138fe2b22df5b6651a
* chore: update patches
* Window Placement: Gate cross-screen fullscreen behavior on permission
https://chromium-review.googlesource.com/c/chromium/src/+/2203268
* chore: add spec for https://crbug.com/1085836
* chore: bump chromium in DEPS to ff6c4f4b826d66c2e32380bf5d1eb5e1fe37faef
* update patches
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Co-authored-by: Electron Bot <anonymous@electronjs.org>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
When application is activated thru macOS app switcher (cmd+tab) the
App's activate event is note emitted. The reason is that
`applicationShouldHandleReopen:hasVisibleWindows:` is sent only when app
is activated via Dock. Using `applicationDidBecomeActive:` is handling
all cases properly.
Co-authored-by: Lukas Weber <luweber@microsoft.com>
* chore: tsify more of lib
* Update lib/browser/api/session.ts
Co-authored-by: Jeremy Apthorp <jeremya@chromium.org>
Co-authored-by: Jeremy Apthorp <jeremya@chromium.org>
* feat: Add Secure Keyboard Entry APIs in macOS
Add methods:
- app.isSecureInputEnabled()
- app.setSecureInputEnabled(enabled)
These enable to prevent other process listens keyboard input events.
* fix: lint error in app.md for #20678
* fix: crash app.setSecureInputEnabled() in password textfield
* fix: export Secure keyboard Entry API to only macOS
* fix: lint error in browser_mac.mm for #20678
* test: add test for app.setSecureKeyboardEntryEnabled in macOS
We weren't serializing nativeImages properly in the remote module, leading to gin conversion errors when trying to, for example, create a new context menu in the renderer with icons using nativeImage. This fixes that by adding a new special case to handle them.
PR numbers are almost always listed parenthetically in the commit message;
but when something is committed manually, it could be missing. This change
uses octokit's listPullRequestsAssociatedWithCommit() as a second approach
to finding a commit's PR.
Last night's Releases WG meeting noted that "re-enable pdf viewer" was
missing from the notes. This PR fixes that omission.
In order for `badgeCount` to properly update the dock icon on
macOS, the application needs to have the permissions to display
notifications.
Cross-refs #22715.
This commit fixes https://github.com/electron/electron/issues/18829
Previously the full preferences set to OS was not given to Chromium.
Also, this commit improves fallback font selection for CJK text.
Chromium uses browser languages to determine fallback fonts on Windows,
especially kanji/han characters in CJK.
For instance, when user sets 'en-US, ja-JP' to Accept-Language,
while Chromium chooses Japanese font for kanji text, but Electron
chooses Chinese font. This is because only the first language was given
to Accept-Language on Electron.
This patch is based on https://github.com/electron/electron/pull/15532
Co-authored-by: Nitish Sakhawalkar <nitsakh@icloud.com>
Co-authored-by: Kasumi Hanazuki <kasumi@rollingapple.net>
Co-authored-by: Nitish Sakhawalkar <nitsakh@icloud.com>
Co-authored-by: Kasumi Hanazuki <kasumi@rollingapple.net>
There are use cases of webview where the container holding the webview is not
actually destroyed first, instead just webview gets removed from DOM, in such
situations the browser process map is not updated accordingly and holds reference
to stale guest contents, and any window operations like scroll, resize or keyboard
events that has to chain through browser embedder will lead to UAF crash.
Ref: https://github.com/microsoft/vscode/issues/92420
* docs: `newGuest` in `WebContents` and `webContents` in `BrowsweWindow`
According to the example codes in the documentation of `new-window`
event in `WebContents`, `webContents` in `BrowsweWindow` constructor
options and `newGuest` in `event` argument of `new-window` handler are
both existing but documented. This patch is for adding the related
documentations. Also, it provides typescript-definitations for these
two properties.
* Remove the documnent of `webContents` in BrowserWindow constructor option.
Prevent issues with menu creation and subsequent pane focus from menu bar by preventing menus from being created from an empty array. I can't conceive a valid use case for this, since if one wants to remove a menu they should be be passing null to win.setMenu() or calling win.removeMenu(). This issue is also specific to top-level menus, and not submenus, so the new check and exception is scoped to top-level menus.
* refactor: port window.open and window.opener to use ctx bridge instead of hole punching
* refactor: only run the isolated init bundle when webview is enabled
In some situations, we can't use auto update to communicate with our update server directly, and proxies can be tricky to get working. I spent a loooong time exploring a lot of options before coming across the comment I linked, so It thought it could be beneficial to people like me of the future.
* test: add pre-change snapshot of new-window event
* move to .ts file for easier diff
* refactor: improve feature string parsing logic
* test: update snapshots
* update type names per review
* update comma-separated parse test
* use for loop instead of reduce per review
* tighten up types
* avoid variable guest contents id returnValue in test snapshot
* fix moveAbove on Windows systems
The documentation for [setWindowPos](https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowpos) second argument `hWndInsertAfter` is a bit confusing...
> A handle to the window to precede the positioned window in the Z order. This parameter must be a window handle or one of the following values.
Since Windows refers to the Z order from low to high it means that the window provided as reference will always _precede_ the electron window, which is the opposite of what we want in this function, since the electron window is displayed behind the referenced window.
The change is simply to ask `SetWindowPos` to position our window *behind* the window that's *above* the reference window, effectively making our window sit just above the reference one.
* lint
* fix: let setAppLogsPath write to disk on UI thread
Otherwise, the DCHECK in thread_restrictions will fire.
* scope the io allowance more tightly
* oops, scope it tightly in the mac version too
* fix: don't assign NSAlert to window which is not visible
Without this change it's possible to create message box which can't
be dismissed on mac.
* fixup! fix: don't assign NSAlert to window which is not visible
* fixup! fix: don't assign NSAlert to window which is not visible
When the electron child process exits with a signal, the close event
handler receives code null and the cli wrapper would silently exit
successfully. Fix it to log a message and exit with a nonzero code in
this case.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
When zip contains files larger than 4GB 4bytes length headers are
not sufficient anymore. Zip64 defines an extra header 0x0001 which
may contain 8byte lengthed (16 exabytes) lengths [uncompressed and compressed].
Read this value when performing extra data cleaning and override the
bogus value if the header is available.
Read https://blog.yaakov.online/zip64-go-big-or-go-home/ for more
information on Zip64 extra header.
This is the first known implementation of zip64 stripping.
* chore: add WebContentsView.webContents helper
* chore: no need to handle webContents option
* chore: Create WebContentsView in C++
* chore: make WebContentsView accept web_preferences
* fix: nativeWindowOpen still passes WebContents to BrowserWindow
* chore: no more need of WebContentsViewRelay
* test: WebContentsView now takes options
* fix: avoid creating 2 constructors
Non full stripping seems to be the cause of limited
non-determinism. Employ similar default as macOS when
stripping away symbols.
--disacard-all Remove all local symbols (saving only global symbols).
--strip-debug Remove the debugging symbol table entries (those created by the -g option to cc(1) and other compilers).
* feat: expose the sameSite value for cookies
* Apply suggestions from code review
Co-Authored-By: Charles Kerr <ckerr@github.com>
* Apply suggestions from code review
Align with cookie samesite values for the extensions API
https://developer.chrome.com/extensions/cookies#type-SameSiteStatus
* chore: add tests for sameSite cookies get/set
* chore: update docs parser
* chore: update docs for MessageChannel and MessagePort to have correct process information
* chore: remove LOG warning
* chore: throw error if the string->samesite conversion fails
Co-authored-by: Charles Kerr <ckerr@github.com>
When propagating the undo and redo events from the menu, Chromium was not
properly sending the events to the focused WebContents. This fixes that by ensuring that the events are sent to the proper WebContents.
* docs: document what experimental means explicitly
* Apply suggestions from code review
Co-Authored-By: Jeremy Apthorp <jeremya@chromium.org>
* Update experimental.md
Co-authored-by: Jeremy Apthorp <jeremya@chromium.org>
* fix: override file:// instead of intercepting
* test: webRequest module should work with file://
* fix: service work with file:// url
* fix: original_response_headers can be null
* fix: only register file:// when necessary
* ci: cleanup extraneous release tests
* Temporarily setup nightly ci to run on demand
* Revert "Temporarily setup nightly ci to run on demand"
This reverts commit 21e50d4f57.
* docs: fix minor grammar error 'punctuations'
* docs: fix minor grammar error pluralizing Chromium
* docs: fix typo 'updateCurrentActiviy'
* docs: use consistent spelling of 'behavior'
* docs: use 'macOS' instead of 'Mac OS' or 'OS X'.
* docs: use 'GTK' instead of 'GTK+'
https://mail.gnome.org/archives/gtk-devel-list/2019-February/msg00000.html
* docs: minor capitalization: use 'TCP' not 'tcp'
* Update docs/development/build-instructions-linux.md
Co-Authored-By: Mark Lee <malept@users.noreply.github.com>
Co-authored-by: Mark Lee <malept@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
* fix: do not crash if the window is closed syncronously with a nativeTheme change
* fix: propogate preferred color scheme to the renderer and keep it up to date
* feat: default gtk darkTheme option to nativeTheme.shouldUseDarkColors for better platform support
* chore: update syntax for PR feedback
* refactor: only define SetGTKDarkThemeEnabled when needed
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* chore: remove unused views API classes
* chore: remove LayoutManager code
* chore: no more need to make View inherit from TrackabeObject
* chore: make enable_view_api default to true
* chore: enable_view_api => enable_views_api
Lack of this change will lead to freeze after call to hide/show
on window which has set flag disable_hidden_. To reproduce the
problem it's necessary to create some number of windows (how many
it depends on number of windows being cached by Chromium's
FrameEvictionManager).
* build: auto-generate the codesigning cert used for macOS CI testing runs
* build: give the cert ALL the trust values
* chore: also import public key
* idek
* docs: Added a note about chromium logs on the debugging page
* docs: Point at existing documentation for environment variables
* chore: remove trailing whitespace
Co-authored-by: Cheng Zhao <zcbenz@electronjs.org>
* refactor: precache the IsWindowStateEvent() atom
XAtoms never change after creation so we can perload the atoms we need.
This is useful in WindowStateWatcher's XEvent handler, which is called
on every XEvent, e.g. mouse movement...
* empty commit for ci
* fix: remove bad usages of for-in and guard against it
* Apply suggestions from code review
Co-Authored-By: Samuel Maddock <samuel.maddock@gmail.com>
* Apply suggestions from code review
Co-Authored-By: Jeremy Apthorp <jeremya@chromium.org>
* Update remote.js
Co-authored-by: Samuel Maddock <samuel.maddock@gmail.com>
Co-authored-by: Jeremy Apthorp <jeremya@chromium.org>
* chore: bump chromium in DEPS to 7f366dc6e2f06228b12b021cc1486a1de81a257d
* chore: bump chromium in DEPS to d785c1a601f5f33627d23e40b1ed9dd94c63d818
* update patches
* Rename an old referrer policy value
https://chromium-review.googlesource.com/c/chromium/src/+/2082856
* chore: bump chromium in DEPS to 735e0d2910b2e55c15e0b9cb9fca9431307ac661
* update v8 patches
* Update DEPS
* update patches
* chore: bump chromium in DEPS to b3d09c15c4460680b85218b7b0eb0849c5a6e840
* Replace blink::WebCursorInfo with ui::Cursor
https://chromium-review.googlesource.com/c/chromium/src/+/1997138
* chore: bump chromium in DEPS to bf433ad6dcfcaac460512bb45a53d5a2ea5356f9
* chore: bump chromium in DEPS to 38fad190ac908b6977ab271acc82c2fe74f6e85e
* chore: bump chromium in DEPS to aa597178119cb37ab54caeda27b2ef30a2f9a003
* update patches
* DownloadURLParameters: Remove NetworkIsolationKey parameter.
https://chromium-review.googlesource.com/c/chromium/src/+/2050987
* fix pdf viewer tests by binding more mojo things
* chore: bump chromium in DEPS to 08835601be331b4a223e6e2bd9d5ce6c37cbdec6
Co-authored-by: Jeremy Apthorp <jeremya@chromium.org>
Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
* fix: add more properties to port.sender.tab
* fix: apply the suggestion
Co-Authored-By: Jeremy Apthorp <nornagon@nornagon.net>
Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
* docs: clean up systemPreferences.effectiveAppearance text
* Grammar fixes
* Add links for Electron Packager & Electron Forge
* Update Packager API links, given https://github.com/electron/electron-packager/pull/1131
* docs: clean up Dark Mode guide
* Grammar fixes
* Add links for Electron Packager & Electron Forge
* docs: adjust based on Electron 8 using 10.14 SDK
* feat(extensions): implement chrome.i18n API
* refactor(extensions): use forward declaration for ScriptExecutor
* fix(extensions): add message filter to handle i18n GetMessageBundle
* test(extensions): add chrome.i18n tests
* fix(extensions): message filter lint error
* fix: remove exclusive test
* fix(extensions): format api feature arrays
Co-Authored-By: Jeremy Apthorp <nornagon@nornagon.net>
* fix(extensions): uncomment chrome.i18n usage in old extensions test
Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
* fix: call focus on native window on call to webContents.focus on mac
On mac call to web_contents()->Focus() is not enough so it's
necessary to call it on native window.
* fixup! fix: call focus on native window on call to webContents.focus on mac
* fixup! fix: call focus on native window on call to webContents.focus on mac
* test: close all windows after test
* fix: also match the behavior on Linux
Co-authored-by: Cheng Zhao <zcbenz@github.com>
* chore: add deprecation warning on setting app.allowRendererProcessReuse to false
* fix: no deprecation warnings in process reuse spec
* chore: add test for new deprecate removeProperty behavior
* feat: set app.enableRendererProcessReuse to true by default
* chore: add context aware info to breaking changes doc
* spec: fix nodeIntegration in child windows test for rendererprocessreuse
* spec: fix remote listeners in destroyed renderers spec as the error is now async
* Update api-browser-window-spec.ts
* chore: deprecate affinity
* chore: fix docs
* spec: handle tests crashing without an exist code
* spec: update tests for new rendererprocessreuse default
* spec: with renderer process re-use we get to destroy less views
* fix(extensions): set lowest isolated world id
* refactor: move world IDs into separate header file
Several files are including electron_render_frame_observer.h just for the world IDs.
* feat: add API for receiving logs from service workers
* feat: add new serviceWorkerContext APIs
* chore: add missing #include's
* refactor: rename serviceWorkerContext to serviceWorkers
* chore: clean up based on review
* chore: remove native_mate
* chore: add tests for the service worker module
* Update spec-main/api-service-workers-spec.ts
Co-Authored-By: Jeremy Apthorp <jeremya@chromium.org>
* chore: fix linting
* chore: handle renames
Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
* ci: fix script to initialize Windows VM
* remove python3 rename statements, python3 is not required nor
installed
* fix a chicken-egg condition where refreshenv is not installed, after
chocolatey install.
* ci: update script to initialize Windows VM
* Add needed component to vc_buildTools install
- Microsoft.VisualStudio.Workload.VCTools
- Microsoft.VisualStudio.Component.VC.140
* Do not install vcredist140 from chocolotey
* build: speed up release builds by using workflows
* Don't get depot-tools twice
* Do not use source from cache
* Checkout boto and requests for release builds
* Make sure vendor dirs are persisted.
* Use git cache for releases.
* show sccache stats right after build
* Make messages easier for sudowoodo to consume.
* fix: web request support proxying websocket
* fix: make tests work
* chore: do not use api:: code outside api/ folder
* chore: do not create proxy when no listener
* test: use separate session to avoid conflicts
* chore: address review
* fix: remove cyclic references in BrowserWindow
* fix: prevent TopLevelWindow from garbage collection
* test: garbage collection of BrowserWindow
* chore: createIDWeakMap is used in tests
* build: preserve timestamps when stripping files
Resolves an issue where the binaries in mksnapshot.zip were not getting stripped.
* Add missing comma
* Update script/strip-binaries.py
Co-Authored-By: Jeremy Apthorp <jeremya@chromium.org>
* Don't try to run strip on macOS
Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
* build: copy chromedriver to correct location
* build: try to free up disk space for macos releases
* get verbose mode working on strip-binaries
* Only use separate chromedriver build arm/arm64
* ci: enable goma for all testing builds
* Use powershell script to start goma on Windows
* Only run ensure_start from PS script.
* add missing percent
* Run stats via command instead of powershell
* use command env var
* Use out cache for faster mac builds
* Disable unneeded logging
* .git directories need to be delete before gn gen
Even though gn gen shows and error about a missing .git directory, the .git delete needs to happen before gn gen.
* build: don't use component_ffmpeg for chromedriver
* Fixup mac chromedriver build
* Update location of chromedriver.zip
* Fixup macos chromedriver build
* compile to right directory
* docs: add references to app.whenReady() in isReady
* refactor: prefer app.whenReady()
In the docs, specs, and lib, replace instances of `app.once('ready')`
(seen occasionally) and `app.on('ready')` (extremely common) with
`app.whenReady()`.
It's better to encourage users to use whenReady():
1. it handles the edge case of registering for 'ready' after it's fired
2. it avoids the minor wart of leaving an active listener alive for
an event that wll never fire again
* chore: bump chromium in DEPS to 68d7ef9b31f3f164a967109212e84a8d756cc80f
* Update patches
* Update location of file_info.h
* Update sysroots
* chore: bump chromium in DEPS to 47114394b1c8a35438d19da7538142380551a2ce
* Update patches
* ci: update docker image to pickup new ia32 dep
* Skip .info files in dist.zip
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
* docs: add links to the issue tracker
Adding links to the issue tracker for existing issues and submission of
new issues makes it easier to do what is otherwise well described in the
issues doc.
There are direct links to the issue tracker in other introductory docs,
so I see no reason not to have them here, to facilitate access.
* docs: update issues TOC
* Changes recommended by malept
* docs: fix missing import, explicitly use nativeTheme api
* Update docs/tutorial/mojave-dark-mode-guide.md
Co-Authored-By: Charles Kerr <ckerr@github.com>
* switch to nativeTheme event
Co-authored-by: Charles Kerr <ckerr@github.com>
* fix: systray icon demotion
Adding support for GUID parameter in Tray API.
In combination with signed binaries this allows to maintain
the position in the systray on Windows.
* unit tests
* make mac and linux compile
* fix: ensure web_contents is not nullptr in UpdateDraggableRegions
This is a speculative fix for a crash in `UpdateDraggableRegions` that we've noticed
* Update atom_api_browser_window_mac.mm
* Update atom_api_browser_window_mac.mm
* fix: no error messages?
* Revert "fix: no error messages?"
This reverts commit 14a1078493.
* fix: add executable to chromedriver's rpath for electron 8+
* chore: bump chromium in DEPS to edc531fae69669e1d2c51901c686b055da965f2d
* Update patches
* Update to use content::DevToolsAgentHostClientChannel.
9d14e4b8a3
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Since electron zip are including build dates the checksum of each of
these zip files is time dependant. In order to fix this issue strip all
the dates contained in each of the zip entries.
The documentation is currently pointing to a download link that leads to a 404 for the ARM64 version of `node.lib`. This change updates the link to the correct download for ARM64 `node.lib`.
* fix: use powerMonitor.on() only after app is ready
powerMonitor can't be used until the app is ready; however, on Linux,
powerMonitor.on() was called as soon as lib/browser/api/power-monitor.ts
was loaded.
This patch takes @vladimiry's suggestion of wrapping that in an
app.on('ready') handler to prevent powerMonitor.on() from being called
prematurely.
Fixes#21716
* fix: ensure tray icon is the proper size on linux
Fixes#21445.
* chore: use correct include order
* chore: use correct include order
* chore: remove use of deprecated casting style
* chore: be more explicit about the 22 pixel height
* chore: remove now-unneeded #include statements
* chore: fix typo and bugs.chromium.org link
* refactor: put GetIconFromImage() in anon namespace
* feat: custom positioning for traffic light buttons
* remove NSLog and unnecessary call-site in IsVisible()
* no longer need to check if entering fullscreen
* change API to take a point object
Co-authored-by: tonyfwoo <55114329+tonyfwoo@users.noreply.github.com>
* chore: bump chromium in DEPS to 46d2d82e84d73806da623c5333dae4dd218172df
* chore: bump chromium in DEPS to cbafe74731a5d1e59844ca59e0fc28f4a5f80a33
* chore: bump chromium in DEPS to d5dcd6b5cc76f4e1732083d775cdd7b533f0abe9
* Update patches
* update for lint
* Fix compilation errors
* chore: bump chromium in DEPS to 1c19360fdaaf65d4ed006736c7f9804104095990
* Replace removed constant
* chore: bump chromium in DEPS to 3b6639f5da26c1772c5d4f3ba634aca65df75fec
* chore: bump chromium in DEPS to cc6b1b930d4b5eca06701820dac54fa0f41e8999
* chore: bump chromium in DEPS to 7d1445641ad1032c67f731ba6ff7798f29349ade
* chore: bump chromium in DEPS to 6f7e5e79cefe982ad84a88927565a88db2e592be
* chore: bump chromium in DEPS to bfb25dafff19cb41bf9781331d19ef0be819d1e4
* chore: bump chromium in DEPS to 1a8196b39f0e0cdc4935fd122fff5625d5fab06e
* chore: bump chromium in DEPS to 9a03d8d2bb38ad8c0cbb9550ca81b2f94ff60c15
* chore: bump chromium in DEPS to 4c67f3505dab2d5457adb418cd3270a4f3236fd0
* chore: bump chromium in DEPS to 652394e7626fc1ae895a53fb34c64070494e648e
* chore: bump chromium in DEPS to 07653652c58cc019af7f833bd63eb0c2eceaab5e
* chore: bump chromium in DEPS to 451a1c5fec1fb073a5bae12a033bb342c72c905f
* chore: bump chromium in DEPS to 86cdba00e233899a232868b412b333d08db63478
* chore: bump chromium in DEPS to 7c322faad1aee8abef2330d74aabf09ecf8c11af
* Update patches
* chore: bump chromium in DEPS to d0044fae7efc29eb201cfdd5fdbed77d48aba212
* Replace IsProcessingUserGesture with HasTransientUserActivation
4baa9a6e85
* Fix 10.15 sdk build
0eaa6db358
* Remove CancelPrerender
5eb3329719
* Remove no longer used WebFloatPoint
43ab96ce6b
* Use base::span<const uint8_t> for devtools messages in content/public
21e19401af
* Update renamed header files
* TODO: update with upstream changes
This code needs to be updated to handle the changes made in:
19be6547a9
* chore: bump chromium in DEPS to 82e5a2c6bd33c2e53634a09fbcbc9fcac1e7ff93
* chore: bump chromium in DEPS to 91f877cadd2995201c276e952b3bf2c60b226c64
* chore: bump chromium in DEPS to 43fcd2ab2677a06d38246b42761dc5b40cf87177
* chore: bump chromium in DEPS to e30957dcb710c0977a7ff95b8d3cf65843df12ca
* chore: bump chromium in DEPS to 6a8335a56db12aae2fd06296f82579d804d92217
* chore: bump chromium in DEPS to a4a436cbc28ace88d71752f8f479e59559e54e46
* chore: bump chromium in DEPS to 982bbd0e4b2e1d57d515f384f6483ffc0d7073ad
* chore: bump chromium in DEPS to 92bb7a99f84ffcdf41d4edca57e90b1f0c7c6c8b
* update patches
* add checkout_google_benchmark gclient var
* FIXME: workaround grit bug
* chore: bump chromium in DEPS to d3623fc53615739e6b59340a5d349e4b397cb7c5
* update patches
* Remove color arg from DidChangeThemeColor().
https://chromium-review.googlesource.com/c/chromium/src/+/1982623
* update CreateFileURLLoader with new suffix
CL: https://chromium-review.googlesource.com/c/chromium/src/+/1981414
* add node patch for removal of task API in v8
CL: https://chromium-review.googlesource.com/c/v8/v8/+/1868620
* add disable_secure_dns param for WillCreateURLLoaderFactory
CL: https://chromium-review.googlesource.com/c/chromium/src/+/1888099
* switch to mojo-ified PrintMsg_PrintPreview
CL: https://chromium-review.googlesource.com/c/chromium/src/+/1972307
* chore: bump chromium in DEPS to e7a6d173632660b6aeb9806e9132c34a315331c2
* update missing chrome/browser/ssl:proto dependency after chrome removal
CL: https://chromium-review.googlesource.com/c/chromium/src/+/1986082
* chore: add libvulkan.so to the linux manifest
CL: https://chromium-review.googlesource.com/c/chromium/src/+/1973042
* revert DidChangeThemeColor ternary change due to templates
* match Chrome's mojo-ified implementation in geolocation_permission_context.cc
CL: https://chromium-review.googlesource.com/c/chromium/src/+/1963371
* add vulkan-1.dll to zips
2d6f74c6d4
* add bug link to fixme_grit_conflicts.patch
* Introduce device.mojom.DeviceService
https://chromium-review.googlesource.com/c/chromium/src/+/1956277
* PDF Compositor rename to Print Compositor
https://chromium-review.googlesource.com/c/chromium/src/+/1981135
* chore: bump chromium_version 00362ea584735b4acf4c5a0e1912d7987f8645ab
* chore: update patches
* Use a virtual base class to provide GetWidget().
https://chromium-review.googlesource.com/c/chromium/src/+/1996948
* [base] Remove usage of base::CurrentThread
https://chromium-review.googlesource.com/c/chromium/src/+/1962019
* chore: gn format
* Revert "ci: Use Visual Studio Build Tools instead of VS Studio (#21771)"
This reverts commit 9c1310dadc.
* fix: trigger resize when iframe requests fullscreen
* fix: Locking scheme registry is not necessary
https://chromium-review.googlesource.com/c/chromium/src/+/1973198
* chore: bump chromium f707f1d6d428f84cf14b64bc2ca74372e25c6ce7
* chore: update patches
* ui/base/clipboard: Remove redundant ANSI format functions
https://chromium-review.googlesource.com/c/chromium/src/+/1992015
* [base] Prepare //chrome for Value::GetList() switch
https://chromium-review.googlesource.com/c/chromium/src/+/1962255
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Co-authored-by: loc <andy@slack-corp.com>
Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
Co-authored-by: Robo <hop2deep@gmail.com>
* test: fix some failing and disabled node specs
These tests were failing due to mismatched stacktraces as a result of
our Module._load hook. This fixes those by adding a flag to optionally
not hook those calls and instead do the asar override eagily.
* ELECTRON_EAGER_ASAR_HOOK => ELECTRON_EAGER_ASAR_HOOK_FOR_TESTING
* test: parallel/test-zlib-unused-weak consistently fails
Co-authored-by: Cheng Zhao <zcbenz@github.com>
This commit uploads the output of the windows toolchain profiler.
The windows toolchain profiler is aimed at allowing the compilation
of electron release artifacts using the same windows toolchain on user
builder. This combined with the ability of electron of outputting
deterministic build should allow in future to check electron build
artifacts against CI artifacts.
See: 97959b5e5c include windows toolchain profiler (contd #20949)
* add: New fiddle for Manage Windows section example
* Delete package.json
Not needed
* Address issue with .gitignore file, load new window, removing unwanted css class
* Delete package.json
* Pushing change regarding the use of shell.OpenExternal API with an event listener for the href tag on the link
* Update online-offline-events.md
NodeIntegration is required for online/offline and the default changed, so the example should reflect the need for that config
* chore: fix lint warning
Co-authored-by: Cheng Zhao <zcbenz@github.com>
* chore: bump node in DEPS to v12.13.1
* chore: remove redundant patches
* disable node tests
disable prepareStackTrack test since Node.js won't handle our case, and disable new es-module tests since it's still flagged and requires flags to run properly
* fix missing files
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
* fix: don't error if can't find advapi32.dll
* fixup! chore: bump node in DEPS to v12.13.1
* Disable native tests for now
* test: clean up some stale code in renderer spec runner
* remove jquery from spec
* remove extraneous close tag
* Revert "remove jquery from spec"
This reverts commit 7b885c8ca8.
* re-clean-up html
* don't highlight tags
* update session docs; clear cache on boot
* clear user-data-dir before running tests
* doc: update Chinese Electron mirror URL
* doc: replace remaining references of electron-download with @electron/get
* doc: update cache dir example based on recent @electron/get cache changes
* fix: correctly set cookie date
* fix: name is not required for setting cookie
* test: clear cookie after each cookie test
* test: should test session property
* chore: style fixes
* fix: restore parts of original ResourceRequestBody V8 conversion
Restore some of the original conversion logic in order to fix target=_blank post form submissions.
* test: add test for POST form submission
Electron's `AtomNSWindow` implements `accessibilityAttributeValue` to
provide various accessibility info to the OS, including window titles.
Chromium 75 changed to Apple's newer accessibility API for window titles
in the super class that `AtomNSWindow` inherits from. macOS still
supports both the old and new style APIs, but it will prefer the new
style if it is implemented. This means the Electron window title is
being ignored because the newer API at the Chromium level has taken
precedence.
By implementing the newer accessibility API in `AtomNSWindow`, this
restores correct accessibility window titles in macOS Electron apps.
This is a regression has been present since Electron 6.0.0 (the first
release including the Chromium change above).
* fix: menu visibility should not be overwritten on startup
* fix: removing menu for window without global menubar
* test: setMenu tests are not for mac
* docs: improve Windows build variable documentation
Documents an additional and possibly unclear variable, `DRIVE:`, in the example global variables for building with Windows
* docs: update formatting in build-instructions-windows.md to align with styleguide
In #20829, we fixed compositor recycling when switching between
BrowserViews, but it turns out that there is one additional case that we
need to handle. When we create a completely new BrowserView instance, it
starts of as visible (even when it hasn't been added to the window),
which means that it will need its own compositor instead of using the
recycled compositor.
To fix this, lets make BrowserViews hidden by default until they're
added to the window. See also #19988. This is a potentially breaking
change given that the initial value of `document.visibilityState` will
now be `hidden`, but given the experimental status of BrowserViews, I
think this is a fine change to make. The old behavior can be restored
with `webPreferences: { show: true }`.
Notes: Fix compositor recycling when creating new BrowserView
* build: cache the out directory for exact deps hash matches
* chore: generate a target based depshash discriminator
* fix: hash on gn args
* build: share logic on the mac builds
* build: ensure that the mksnapshot binary is built before stripping before zipping
* build: attach the workspace on macOS
* build: optimize the macOS checkout path for testing
* build: fix mksnapshot zip generation
* build: make the mac src cache restore work
* build: v2 out cache
* build: macOS cache restore is just stupidly slow
* build: strip more binaries
* build: attach the out cache to the workspace for macOS builds
* build: allow linux boxes to restore darwin out caches
* build: cat the deps hash target file
* build: ensure that the deps target hash matches on the linux box
* build: do not use host arch in target key
* build: force undefined in the target hash file
* build: only restore out cache when it isn't in the workspace
* build: fix the macOS cache workspace trick
* build: do not double restore
* build: remove the big stuff from the out dir
* build: workaround layer issue
* build: try it back on macOS again but with smaller thingy
* build: macOS needs the out cache now
* build: clean up for omptimal macOS path
* build: use old docker image
* build: idek at this point
* build: we need a deps hash
* build: yeah we need a checkout too
* chore: use testing env on save cache job
* chore: well that should fix the cache key thing
* chore: handle cross-OS path mismatch for src cache restore
* build: use a /portal directory to transfer the src cache appropriately
* build: use the correct docker image
* build: super perms for /portal
* build: increment out cache number
* build: ensure target hash is correct for args + disable pre-compiled headers on macOS
* build: wipe the cross-arch libffmpeg before building Electron
* fix(urlrequest): allow non-2xx repsponse results
- closes#21046
* test(net): add test cases to verify non-2xx body
* test(session): update spec to match clientrequest behavior
* test(net): update test cases to match clientrequest behavior
* spec: clean up async net spec
* test: update DOM storage quota limits test
* fix: update dom_storage_limits.patch (fixes#13465)
The previous version of this patch did not include
changes required to circumvent the quota enforcement
performed by StorageAreaImpl. Consequently when
the quota was exceeded, things still "appeared to
work" at first but then would later fail silently.
That is, the cache would be updated but the backing
store would not.
This could be fixed by disabling the code below
(from `content/browser/dom_storage/storage_area_impl.cc`)
```
// Only check quota if the size is increasing, this allows
// shrinking changes to pre-existing maps that are over budget.
if (new_item_size > old_item_size && new_storage_used > max_size_) {
if (map_state_ == MapState::LOADED_KEYS_ONLY) {
receivers_.ReportBadMessage(
"The quota in browser cannot exceed when there is only one "
"renderer.");
} else {
std::move(callback).Run(false);
}
return;
}
```
However, since this seems to have some unintended side-effects
(see updated notes in dom_storage_limits.patch) it seems
more prudent to simply increase the quota to a larger
yet still reasonable size rather than attempt to circumvent
the storage quota altogether.
* build: delete unneeded files when running a release
Needed to free up disk space on MacOS.
* Delete all the .git directories
* Update comment
* Run gn gen after deleting .git dirs
* Revert "fix: handle WM_GETMINMAXINFO instead of letting chromium do it (#19928)"
This reverts commit 27ce6a9cd3.
* fix: don't reset the width and height when correcting window placement
* fix: always use extraHeaders mode
* fix: clear pending callbacks
* fix: do not use "extraHeaders" for net module
* test: webRequest should be able to modify CROS headers
* chore: CROS => CORS
Co-Authored-By: Milan Burda <milan.burda@gmail.com>
* chore: CROS => CORS
Co-Authored-By: Milan Burda <milan.burda@gmail.com>
* docs: added windows -> create frameless window example from electron-api-docs
* fixed style in accord with StandardJS
* removed class tag from button
This commit allows any electron user to compile electron
artifacts by themselves in production mode. When the source code
is reproducibly buildable with a given toolchain this change
allows them to verify the hash of their build, with the same
windows toolchain agains the CI version.
This change was tested on top of version fb9837799b
which was buildable and reproducible for chromium and electron as well.
Further tests may be introduced to allows checking for local reproducibility.
EG: building twice an artifact on the same machine, with different time
and output directory should yield similar hashes.
* Add GetApplicationNameForProtocol.
* Fix Windows implementation.
* Fix up test.
* Add documentation.
* Implement for real on Linux using xdg-mime.
Also ensure we allow blocking calls here to avoid errant DCHECKing.
* Improve docs for Linux.
* Clean up tests.
* Add a note about not relying on the precise format.
* Update docs/api/app.md
Co-Authored-By: Shelley Vohr <codebytere@github.com>
* Remove needless `done()`s from tests.
* Use vector list initialization.
* Add a simple test for isDefaultProtocolClient.
* Remove unneeded include and skip a test on Linux CI.
* We no longer differentiate between CI and non-CI test runs.
* ci: speed up src retrieval
* Don't save zip on ia32
* Update external binaries if src zip already exists
* Apply suggestions from code review
Co-Authored-By: Jeremy Apthorp <jeremya@chromium.org>
* Update appveyor.yml
This was a regression in #16125, which unintentionally put
`GlobalShortcutListener::RegisterAccelerator` into a
`#if defined(OS_MACOSX)` block.
Notes: Fix broken `globalShortcut.registerAll()` on Windows and Linux
* fix: explicitly resize the contents when exiting html fullscreen while in OS fullscreen
* test: ensure HTML fullscreen toggles while in OS fullscreen
* refactor: use gin in Promise
* refactor: separate Promise impl that returns nothing
* refactor: use Promise<void> for promise that returns nothing
* fix: methods should be able to run on both browser and renderer process
* fix: should not pass base::StringPiece across threads
* refactor: no more need to use different ResolvePromise for empty Promise
* refactor: move Promise to gin_helper
* build: enable sccache on windows
* chore: temporarily disable the docs only check
* build: fix escaping in sccache path on windows
* Update appveyor.yml
* Update appveyor.yml
* Use sccache settings from CI
* Use Azure enabled sccache for Windows
* chore: add code required to use chromes spellchecker
* chore: fix linting
* chore: manifests needs buildflags now
* chore: add dictionarySuggestions to the context menu event when the spellchecker is active
* chore: enable by default for windows builds
* chore: add patch to remove incognito usage in the spellchecker
* chore: add dependencies on spellcheck common and flags
* chore: conditionally include spell check panel impl
* chore: fix deps for spellcheck feature flags
* chore: add patch for electron resources
* chore: add dependency on //components/language/core/browser
* chore: patches to make hunspell work on windows
* build: collect hunspell dictionaries into a zip file and publish
* chore: clean up patches
* chore: add docs and set spell checker url method
* chore: fix error handling
* chore: fix hash logic
* build: update hunspell filename generator
* fix: default spellchecker list to the current system locale if we can
* docs: document the language getter
* chore: patch IDS_ resources for linux builds
* feat: add spellcheck webpref flag to disable the builtin spellchecker
* chore: fix docs typo
* chore: clean up spellchecker impl as per feedback
* remove unneeded deps
In #19873, we completely disabled compositor recycling. This has adverse
effects in our tabbed app where switching tabs (i.e. `BrowserView`s) now
results in a flicker because we now also switch compositors.
To fix this without regressing the original fix, we now recycle the
compositor when the view is removed from a window. This situation can
only happen with `BrowserView`s and the common case with `BrowserWindow`
is unaffected.
* refactor: move the arg instead of const reference it
* refactor: avoid unnecessary copies of base::Value in arg
* refactor: pass-by-value in dict_util
* refactor: avoid unnecessary reference
* build: change to download sysroots from the new sysroot bucket
* build: add json config files to deps hash to can influence the src dir
* build: update to latest sysroot hash
* build: fix doc only change when there isn't a PR
Fixes issue where CI was mistakenly marking a PR as a doc only change because the CI was kicked off before the PR was created.
* refactor: convert Menu and globalShortcut to gin
* refactor: convert api::Cookies to gin
* refactor: convert View and WebContentsView to gin
* refactor: convert WebContents related classes to gin
* refactor: convert powerMonitor to gin
* refactor: prepare for header change
* refactor: remove last uses of mate::EventEmitter
* refactor: remove mate::EventEmitter
* refactor: move trackable_object to gin_helper
* fix: custom converter should not use Handle
* fix: no more need to check if icon is empty
It was a bug that the Handle<NativeImage> can be non-empty when the
image file does not exist. The bug was caused by the converter code
writing out the image even when the convertion fails.
The bug was work-arounded by adding an additional check, but since the
original bug had been fixed, the additional check is no longer needed.
* fix: should always set frameId even when callback is null
* fix: do not mix gin/mate handles for NativeImage
* fix: set proper constraints for windows with defined maxWidth
When BrowserWindow has set constraints for width (max or min) it
won't behave correctly during first attempt of resizing it. When
maxWidth is defined and maxWidth equals its width it will shrink
rapidly when user tries to expand its width. On the other hand
when minWidth is defined and minWidth equals its width it's
possible to decrease its width with a few pixels.
Notes: Fixed improper behaviour of window with width constraint set during resize.
* fix: prevent crash when WM_GETMINMAXINFO is called on initing window
* refactor: remove direct uses of event_emitter_deprecated.h
* refactor: remove event_emitter_deprecated.h in api::App
* refactor: use std::move to save a copy
* fix: windows and linux builds
* ci: skip build on doc only changes
* Try using exit codes on doc-only-change
* Fixup
* Fixup circleci doc-only check
* Update appveyor.yml
Co-Authored-By: Samuel Attard <sattard@slack-corp.com>
* Properly detect doc only change on Windows
* Flip exit code per review
* chore: update build_bring_back_node_with_ltcg_configuration.patch
set default value for node_with_ltcg=true
* fix: move ltcg definition to Release configuration
* docs: First draft of perf checklist
* docs: More words
* docs: Use standard in code example
* docs: fix broken link
* Update docs/tutorial/performance.md
Co-Authored-By: Charles Kerr <ckerr@github.com>
* Update docs/tutorial/performance.md
Co-Authored-By: Charles Kerr <ckerr@github.com>
* Update docs/tutorial/performance.md
Co-Authored-By: loc <andy@slack-corp.com>
* Update docs/tutorial/performance.md
Co-Authored-By: loc <andy@slack-corp.com>
* docs: Implement suggestions
* docs: Include VSCode talk
* chore: Pass linter
* Update docs/tutorial/performance.md
Co-Authored-By: Mark Lee <malept@users.noreply.github.com>
* Update docs/tutorial/performance.md
Co-Authored-By: Mark Lee <malept@users.noreply.github.com>
* Update docs/tutorial/performance.md
Co-Authored-By: Mark Lee <malept@users.noreply.github.com>
* Update docs/tutorial/performance.md
Co-Authored-By: Mark Lee <malept@users.noreply.github.com>
* Update docs/tutorial/performance.md
Co-Authored-By: Mark Lee <malept@users.noreply.github.com>
* Update docs/tutorial/performance.md
Co-Authored-By: Mark Lee <malept@users.noreply.github.com>
* Apply suggestions from code review
Co-Authored-By: Mark Lee <malept@users.noreply.github.com>
* Update performance.md
* fix: The process link
* refactor: remove a few uses of native_mate/gfx_converter.h
* refactor: deprecate mate::EventEmitter
* refactor: add gin_helper::EventEmitter
* refactor: convert a few classes to use gin_helper::EventEmitter
* refactor: get rid of native_mate_converters/gfx_converter.h
* fix: follow native_mate on reporting errors
* fix: gin is weak at guessing parameter types
* fix: incorrect full class name
* fix: gin::Handle does not accept null
* feat: add a new contextBridge module
* chore: fix docs linting
* feat: add support for function arguments being proxied
* chore: ensure that contextBridge can only be used when contextIsolation is enabled
* docs: getReverseBinding can be null
* docs: fix broken links in md file
* feat: add support for promises in function parameters
* fix: linting failure for explicit constructor
* Update atom_api_context_bridge.cc
* chore: update docs and API design as per feedback
* refactor: remove reverse bindings and handle GC'able functions across the bridge
* chore: only expose debugGC in testing builds
* fix: do not proxy promises as objects
* spec: add complete spec coverage for contextBridge
* spec: add tests for null/undefined and the anti-overwrite logic
* chore: fix linting
* spec: add complex nested back-and-forth function calling
* fix: expose contextBridge in sandboxed renderers
* refactor: improve security of default_app using the new contextBridge module
* s/bindAPIInMainWorld/exposeInMainWorld
* chore: sorry for this commit, its a big one, I fixed like everything and refactored a lot
* chore: remove PassedValueCache as it is unused now
Values transferred from context A to context B are now cachde in the RenderFramePersistenceStore
* chore: move to anonymous namespace
* refactor: remove PassValueToOtherContextWithCache
* chore: remove commented unused code blocks
* chore: remove .only
* chore: remote commented code
* refactor: extract RenderFramePersistenceStore
* spec: ensure it works with numbered keys
* fix: handle number keys correctly
* fix: sort out the linter
* spec: update default_app asar spec for removed file
* refactor: change signatures to return v8 objects directly rather than the mate dictionary handle
* refactor: use the v8 serializer to support cloneable buffers and other object types
* chore: fix linting
* fix: handle hash collisions with a linked list in the map
* fix: enforce a recursion limit on the context bridge
* chore: fix linting
* chore: remove TODO
* chore: adapt for PR feedback
* chore: remove .only
* chore: clean up docs and clean up the proxy map when objects are released
* chore: ensure we cache object values that are cloned through the V8 serializer
* fix: support fitToPageEnabled and scaleFactor
Support fitToPageEnabled and scaleFactor in `WebContents.printToPDF()`
* fix: change default value of scaleFactor
* refactor: convert methods of AutoUpdater to gin
* refactor: converter in map_converter.h is no more needed
* refactor: use gin in crash_reporter
* refactor: remove native_mate_converters/map_converter.h
* refactor: implement gfx_converter with gin
* refactor: convert methods of NativeImage to gin
* refactor: add gin_helper::Arguments
* fix: use gin_helper::Arguments to parse multi-type parameters
* refactor: use gin converters in api::Protocol
* refactor: convert JS constructor impl to gin
* refactor: use InitWithArgs helper
* fix: gin_helper::Dictionary should behave the same with mate
* fix cpplint warnings
* refactor: no more need to patch gin/dictionary.h
* test: remove remote usage from chromium specs
* disable tts test
* port navigator.mediaDevices tests
* fake camera and microphone
* Update spec-main/chromium-spec.ts
Co-Authored-By: John Kleinschmidt <jkleinsc@github.com>
* docs: add clipboard paste Fiddle example
* docs: add clipboard copy Fiddle example
* docs: add appropriate title to Fiddles
Co-Authored-By: John Kleinschmidt <jkleinsc@github.com>
* refactor: use v8 serialization for ipc
* cloning process.env doesn't work
* serialize host objects by enumerating key/values
* new serialization can handle NaN, Infinity, and undefined correctly
* can't allocate v8 objects during GC
* backport microtasks fix
* fix compile
* fix node_stream_loader reentrancy
* update subframe spec to expect undefined instead of null
* write undefined instead of crashing when serializing host objects
* fix webview spec
* fix download spec
* buffers are transformed into uint8arrays
* can't serialize promises
* fix chrome.i18n.getMessage
* fix devtools tests
* fix zoom test
* fix debug build
* fix lint
* update ipcRenderer tests
* fix printToPDF test
* update patch
* remove accidentally re-added remote-side spec
* wip
* don't attempt to serialize host objects
* jump through different hoops to set options.webContents sometimes
* whoops
* fix lint
* clean up error-handling logic
* fix memory leak
* fix lint
* convert host objects using old base::Value serialization
* fix lint more
* fall back to base::Value-based serialization
* remove commented-out code
* add docs to breaking-changes.md
* Update breaking-changes.md
* update ipcRenderer and WebContents docs
* lint
* use named values for format tag
* save a memcpy for ~30% speedup
* get rid of calls to ShallowClone
* extra debugging for paranoia
* d'oh, use the correct named tags
* apparently msstl doesn't like this DCHECK
* funny story about that DCHECK
* disable remote-related functions when enable_remote_module = false
* nits
* use EnableIf to disable remote methods in mojom
* fix include
* review comments
Versions didn't show and I was getting errors in the Developer Tools: `Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'"`. The cause is probably that Chrome has implemented extra security since this tutorial was created. Added 'unsafe-inline' and it works.
Patch which this pr removes adds new version of
BrowserCompositorMac::GetCompositor. There is this function in
BrowserCompositorMac with specifier const. Chromium's function
returns parent's compositor if parent is set. Electron's version
doesn't and - as a result - constrained dialogs won't be displayed
correctly if they don't have its own compositor.
* test: remove usage of remote module from node tests
* isTTY is undefined in the renderer process on all platforms
* Update spec/node-spec.js
* Update node-spec.js
* deprecate native_mate/native_mate/object_template_builder.h
* add gin_helper/object_template_builder.h
* add patch to avoid ambiguous error
* remove usage of object_template_builder_deprecated.h in a few files
* add note we should remove gin_helper/object_template_builder.h in future
* fix: use coordinate offsets in ShowAutofillPopup
* fix: silence coord int->float narrowing conversion
Minor fix to silence clang-tidy warning about implicit range narrowing.
Not a huge deal but the revision is also easier to read.
clang-tidy: bugprone-narrowing-conversions
* fix: emit updated on NativeTheme on the UI thread to avoid DCHECK
* Update atom_api_native_theme.cc
* spec: wait a few ticks for async events to emit so that test events do not leak into each other
Exposing these in the renderer didn't make sense as they weren't backed
by the same instance / value store. This API should be browser only
especially now that we have nativeTheme.themeSource. Exposing in
//common was a mistake from the beginning.
* build: yolo a theoretical speed improvement
* chore: persist src/electron and friends for testing purposes
* build: do not generate dist.zip on debug builds
* chore: ensure licenses and version file exist for zip-symbols script
* refactor: fix clang-tidy vector operation warnings
Fix vector population performance-inefficient-vector-operation warnings
generated by clang-tidy
* refactor: fix clang-tidy emplace_back warnings
In cases where a temporary is created to be passed
to push_back(), replace it with emplace_back().
Warning: modernize-use-emplace
* refactor: fix clang-tidy loop iteration warnings
When practical, use range-based for loops instead of C-style for loops.
clang-tiny check: modernize-loop-convert
* refactor: fix clang-tidy string initialize warning
Remove redundant empty string initialization.
clang-tidy check: readability-redundant-string-init
* use gin converter in atom_api_menu
* please only put necessary includes in header
Having include in header means they have dependency relationship,
putting arbitrary includes really really really really really makes
refacoring much harder.
* remove some simple uses of callback_converter_deprecated.h
* use gin callback converter in file_dialog code
* use gin in ErrorThrower
* use gin in atom_bundle_mover
* fix mistake in node stream
* deprecate native_mate version of event_emitter_caller
* use gin in node_bindings
* remove usages of native_mate event_emitter_caller.h except for EventEmitter
* fix compilation on Windows
* gin::Arguments behaves differently on GetNext
* just use StringToV8
* feat: add nativeTheme.shouldUseDarkColorsOverride to allow apps to override Chromiums theme choice
* spec: add tests for shouldUseDarkColorsOverride
* chore: add missing forward declarations
* refactor: rename overrideShouldUseDarkColors to themeSource
* chore: only run appLevelAppearance specs on Mojave and up
* chore: update patch with more info and no define
* Update spec-main/api-native-theme-spec.ts
Co-Authored-By: Jeremy Apthorp <jeremya@chromium.org>
* Update api-native-theme-spec.ts
* Update api-native-theme-spec.ts
* Update api-native-theme-spec.ts
This is a speculative fix for a crash we are seeing in `menuDidClose`. We
can't repro the crash but the traces have it happening in this method
and just by reading through the impl the only part that jumps out as
Might Crash is this `model_` call. Other methods in the menu controller
check `model_` before using it so it probably makes sense to do that here
as well.
* build: add WOA release to list of releases
* Add job count info for sudowoodo
* Add verification of all assets
* Fix linting and add logic to wait before printing out results
* add notice to files being removed
* add gin version of function_template.h
* rename callback.h to avoid confliction
* add gin version of callback_converter
* add gin converter for OnceCallback
* remove callback_converter_gin_adapter.h
* remove gin_util.h and gin_utils.h
* fix lint warning
* add helper for setting methods
* move Destroyable utilities out of native_mate
* do not set "destroy" in ObjectTemplateBuilder
* remove ObjectTemplateBuilder::MakeDestroyable
* do not pollute gin namespace
* add more comments
* remove hack of Arguments
On multi-monitor setups where the monitors are not all origined at 0 on
the Y coordinate (E.g. vertical stacked monitors) the maximize
calculation was incorrect as it assumed top was "0". This instead
adjusts the math to calculate the correct top value.
* test: tsify more WebContents specs
* getFocusedWebContents
* setDevToolsWebContents, isFocused, isCurrentlyAudible
* getWebPreferences, openDevTools
* before-input-event
* zoom-changed
* sendInputEvent
* insertCSS
* startDrag
* focus, getOSProcessId
* zoom api
* more closeAllWindows
* fix detached dev tools test
* fix zoom-changed test
* compare the correct kind of id 🤦♂️
* 'fix' openDevTools test to wait for multiple focus events
* fix tests? 🤞
* use request instead of blur to detect openExternal success
* try not timing out the keychain for testing
* use blur event on mac, sigh
* oh, right, still gotta open an actual url
I've asked #19775 because I was frustrated with how hard it was to find a way to fix (instead of hide) the CSP warning in Electron and I complained that even the official quick start guide wasn't compliant with the security checklist at https://electronjs.org/docs/tutorial/security. Someone helped me out with a CSP meta tag which I have later noticed is indeed mentioned in the checklist, too: https://electronjs.org/docs/tutorial/security#csp-meta-tag. I have not used the checklist one verbatim because it prevents a `script` tag from working when serving `index.html` through the `file:` protocol as the quick start does. I instead used the one the person in my issue recommended which seems to work well to me. I am not that well versed in CSP so there might be a better policy to include with the quick start, but this is what I've got for now.
* refactor: don't walk maps twice to remove elements
* refactor: don't walk maps twice to read elements
* refactor: don't walk maps twice to insert elements
* refactor: don't walk map 3x on UvTaskRunner timeout
* refactor: more don't-walk-maps-twice cleanup
* fixup! refactor: don't walk maps twice to insert elements
* refactor: don't walk containers twice when erasing
* refactor: omit excess lookups in RemoteObjectFreer
* fix: remove WM_GETMINMAXINFO workaround since it's no longer needed
* fix: handle WM_GETMINMAXINFO ourselves
* fix: remove part of the chromium WM_GETMINMAXINFO handler
Sometimes it's necessary to convey more information about the window to screen reader users only (simply putting everything to the window title might be unnecessarily noisy).
For example, Chromium uses that technique to tell screen reader users that the window is in incognito mode (the incognito window looks differently and doesn't have «incognito» in the title, but for blind users the screen reader will announce that it's incognito).
* no need to get WebContents for URLLoaderFactory
* consult embedder for network_factory created in net module
* set disable_web_security to false
* re-enable webRequest tests in net module
* fix: i18n of gtk msgbox buttons
similar to #19756 (12df0e8) but for messageboxes
* refactor: DRY the gtk+ button mnemonics
* fix: don't compile gtk_util on non-Linux platforms
rename from `gtk_util.[cc,h]` to `util_gtk.[cc,h]` so that it gets
picked up by the `extra_source_filters` rule in `BUILD.gn`.
* fix: make linter happy
It really shows that I cannot build locally atm... :P
* fix: command-line scheme switch values' spillover
The value of one of the scheme command-line switches
shouldn't spill over into other switches.
Fixes#19911
* chore: make linter happy
* refactor: make util::Promise type safe when chaining in native
* fixup! refactor: make util::Promise type safe when chaining in native
* chore: remove spare brackets
* fix: extern Parse impl for Windows debug builds
Applies a patch to node.
Externs node::options_parser::Parse implementation for
node::DebugOptions to fix the Windows Debug build.
* fixup: merge extern parse impl patch
* feat: enable picture in picture mode for video tags
* test: add test to verify picture in picture support
* lint: fix indent
* fix: clean up after rebase
* test: update test with 16:9 test video
* fix: .paches after rebase
* build: add zip manifest for Windows on Arm
* ci: add Windows On Arm testing
(cherry picked from commit 4064e1f4874ff7a37c52c2ad974f92418c7e71c4)
* Fix path to invoke CI on WOA hardware
* Explicitly call 7z.exe to unzip files
* Make sure GCLIENT_EXTRA_ARGS set for WOA builds get prepended on release build
* set proper arch for npm
* Try using Compress-Archive/Expand-Archive
* Revert "Try using Compress-Archive/Expand-Archive"
* disable woa hardware test for now
Currently the happy checkout takes 7 minutes and the sad checkout takes
30 minutes. This updates our CI to run checkout twice for every job to
make the sad checkout take nearer 10 minutes instead.
* fix: fill uploadData property
* fix: requestHeaders in onBeforeSendHeaders
* fix: responseHeaders in onHeadersReceived
* fix: header keys should not be lowercased
* fix: gin::Dictionary::Get succeeds even though key does not exist...
* fix: throw for invalid filters
* test: re-enable api-web-request-spec
* chore: do not use deprecated base::Value API
* fix: gin treats Function as Dictionary when doing convertions
* fix: check if listener exists
* fix: listener callback should be executed in next tick
* feat: make InProgressRequest work
* test: re-enable protocol test that relies on webRequest
* chore: merge conditions
* chore: bump node in DEPS to v12.8.1
* test: disable parallel/test-http2-reset-flood
Disabled new Worker test owing to a threading issue where the Worker
segfaults on worker.on('message', () => {}). We've disabled failing
worker tests previously as we don't offer first-class support for them
in Electron.
In the `dialog` documentation (and the generated typings in `electron.d.ts`), it is mentionned that the `icon` property only supports `NativeImage`, but the `nativeImage` documentation says that:
```
In Electron, for the APIs that take images, you can pass either file paths or NativeImage
```
* feat: Implement BrowserWindow.moveAbove(mediaSourceId)
BrowserWindow.{focus,blur,moveTop}() are not enough in some
situations. For example when implementing an overlay that
follows another window that can lose focus. In that case
it is useful to move the overlay above the tracked window.
sourceId is a string in the format of DesktopCapturerSource.id,
for example "window:1869:0".
Notes: Added BrowserWindow.moveAbove(mediaSourceId)
https://github.com/electron/electron/issues/18922
* feat: Implement BrowserWindow.getMediaSourceId
Return the Window id in the format of DesktopCapturerSource's id.
For example "window:1234:0".
https://github.com/electron/electron/issues/16460
Notes: Added BrowserWindow.getMediaSourceId
* feat: add new nativeTheme API
* chore: deprecate and clean up old systemPreferences theme APIs in favor of new nativeTheme module
* chore: clean up and deprecate things per feedback
* chore: add tests for deprecate and clean up invert impl
* build: when is a boolean not a boolean???
* Pass WebRequest to ProxyingURLLoaderFactory
* Call WebRequestAPI in InProgressRequest
* Store the listeners
* Pass the request and response
* Add stub to handle the events
* Use extensions::WebRequestInfo
* Make sure webRequest is managed by Session
* chore: make creation of WebRequestNS more clear
* fix: check WebContents for service workers
* chore: bump node in DEPS to v12.7.0
* chore: update node patches v12.6 to v12.7
Removed patches that are no longer necessary because we've upstreamed few changes already, and 3 way merge others
* fix: update build gn patch
* chore: bump node in DEPS to v12.8.0
* chore: update node patches v12.7 to v12.8
Removed patches that are no longer necessary because we've upstreamed few changes already, and 3 way merge others
* fix: Add patch to revert crypto createhash changes
The original node commit contains changes/calls to functions that are not supported in boringssl.
* disable node tests
* Remove outdated patch, already merged upstream
* fix: don't handle browser messages before document element is created
* fix: bind ElectronApiServiceImpl later
DidCreateDocumentElement is called before the ElectronApiServiceImpl
gets bound.
* chore: add comment
* docs: remove implicit 'any' and 'Object' types from the docs
* docs: more docs improvements, remove all remaining empty interfaces
* chore: update tests for better types
- [ ] PR title follows semantic [commit guidelines](https://github.com/electron/electron/blob/master/docs/development/pull-requests.md#commit-message-guidelines)
- [ ] [PR release notes](https://github.com/electron/clerk/blob/master/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/master/README.md#examples).
- [ ] This is **NOT A BREAKING CHANGE**. Breaking changes may not be merged to master until 11-x-y is branched.
#### Release Notes
Notes: <!-- Please add a one-line description for app developers to read in the release notes, or `no-notes` if no notes relevant to app developers. Examples and help on special cases: https://github.com/electron/clerk/blob/master/README.md#examples -->
Notes: <!-- Please add a one-line description for app developers to read in the release notes, or 'none' if no notes relevant to app developers. Examples and help on special cases: https://github.com/electron/clerk/blob/master/README.md#examples -->
As a member project of the OpenJS Foundation, Electron uses [Contributor Covenant v2.0](https://contributor-covenant.org/version/2/0/code_of_conduct) as their code of conduct. The full text is included [below](#contributor-covenant-code-of-conduct) in English, and translations are available from the Contributor Covenant organisation:
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
Examples of behavior that contributes to creating a positive environment include:
### Our Pledge
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
Examples of unacceptable behavior by participants include:
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
### Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
### Enforcement Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
### Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an officialsocial media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
### Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [coc@electronjs.org](mailto:coc@electronjs.org). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
[coc@electronjs.org](mailto:coc@electronjs.org).
All complaints will be reviewed and investigated promptly and fairly.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Attribution
### Enforcement Guidelines
This Code of Conduct is adapted from the [Contributor-Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4][version]
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
@@ -20,13 +20,11 @@ Issues are created [here](https://github.com/electron/electron/issues/new).
* [Triaging a Bug Report](https://electronjs.org/docs/development/issues#triaging-a-bug-report)
* [Resolving a Bug Report](https://electronjs.org/docs/development/issues#resolving-a-bug-report)
### Issue Maintenance and Closure
* If an issue is inactive for 45 days (no activity of any kind), it will be
marked for closure with `stale`.
* If after this label is applied, no further activity occurs in the next 7 days,
the issue will be closed.
* If an issue has been closed and you still feel it's relevant, feel free to
ping a maintainer or add a comment!
### Issue Closure
Bug reports will be closed if the issue has been inactive and the latest affected version no longer receives support. At the moment, Electron maintains its three latest major versions, with a new major version being released every 12 weeks. (For more information on Electron's release cadence, see [this blog post](https://electronjs.org/blog/12-week-cadence).)
_If an issue has been closed and you still feel it's relevant, feel free to ping a maintainer or add a comment!_
### Languages
@@ -49,17 +47,17 @@ dependencies, and tools contained in the `electron/electron` repository.
@@ -6,7 +6,11 @@ To report a security issue, email [security@electronjs.org](mailto:security@elec
The Electron team will send a response indicating the next steps in handling your report. After the initial reply to your report, the security team will keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance.
Report security bugs in third-party modules to the person or team maintaining the module. You can also report a vulnerability through the [Node Security Project](https://nodesecurity.io/report).
Report security bugs in third-party modules to the person or team maintaining the module. You can also report a vulnerability through the [npm contact form](https://www.npmjs.com/support) by selecting "I'm reporting a security vulnerability".
## The Electron Security Notification Process
For context on Electron's security notification process, please see the [Notifications](https://github.com/electron/governance/blob/master/wg-security/membership-and-notifications.md#notifications) section of the Security WG's [Membership and Notifications](https://github.com/electron/governance/blob/master/wg-security/membership-and-notifications.md) Governance document.
## Learning More About Security
To learn more about securing an Electron application, please see the [security tutorial](docs/tutorial/security.md).
- gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") %GN_EXTRA_ARGS%"
- set BUILD_CONFIG_PATH=//electron/build/args/%GN_CONFIG%.gn
- if DEFINED GN_GOMA_FILE (gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") import(\"%GN_GOMA_FILE%\") %GN_EXTRA_ARGS% ") else (gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") %GN_EXTRA_ARGS% cc_wrapper=\"%SCCACHE_PATH%\"")
- gn check out/Default //electron:electron_lib
- gn check out/Default //electron:electron_app
- gn check out/Default //electron:manifests
- gn check out/Default //electron/shell/common/api:mojo
- ninja -C out/Default electron:electron_app
- if "%GN_CONFIG%"=="testing" ( python C:\Users\electron\depot_tools\post_build_ninja_summary.py -C out\Default )
- if DEFINED GN_GOMA_FILE (ninja -j 300 -C out/Default electron:electron_app) else (ninja -C out/Default electron:electron_app)
- if "%GN_CONFIG%"=="testing" ( python C:\depot_tools\post_build_ninja_summary.py -C out\Default )
- gn gen out/ffmpeg "--args=import(\"//electron/build/args/ffmpeg.gn\") %GN_EXTRA_ARGS%"
- if "%RUN_TESTS%"=="true" ( echo Running test suite & node script/yarn test -- --ci --enable-logging)
# CalculateNativeWinOcclusion is disabled due to https://bugs.chromium.org/p/chromium/issues/detail?id=1139022
- if "%RUN_TESTS%"=="true" ( echo Running test suite & node script/yarn test -- --trace-uncaught --enable-logging --disable-features=CalculateNativeWinOcclusion )
- cd ..
- if "%RUN_TESTS%"=="true" ( echo Verifying non proprietary ffmpeg & python electron\script\verify-ffmpeg.py --build-dir out\Default --source-root %cd% --ffmpeg-path out\ffmpeg )
@@ -32,12 +32,14 @@ In most cases, you should do everything in the `ready` event handler.
Returns:
*`launchInfo` Object _macOS_
*`event` Event
*`launchInfo` Record<string, any> _macOS_
Emitted when Electron has finished initializing. On macOS, `launchInfo` holds
the `userInfo` of the `NSUserNotification` that was used to open the application,
if it was launched from Notification Center. You can call `app.isReady()` to
check if this event has already fired.
Emitted once, when Electron has finished initializing. On macOS, `launchInfo`
holds the `userInfo` of the `NSUserNotification` that was used to open the
application, if it was launched from Notification Center. 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.
### Event: 'window-all-closed'
@@ -74,7 +76,7 @@ Returns:
*`event` Event
Emitted when all windows have been closed and the application will quit.
Calling `event.preventDefault()` will prevent the default behaviour, which is
Calling `event.preventDefault()` will prevent the default behavior, which is
terminating the application.
See the description of the `window-all-closed` event for the differences between
@@ -139,6 +141,16 @@ this event, such as launching the application for the first time, attempting
to re-launch the application when it's already running, or clicking on the
application's dock or taskbar icon.
### Event: 'did-become-active' _macOS_
Returns:
*`event` Event
Emitted when mac application become active. Difference from `activate` event is
that `did-become-active` is emitted every time the app becomes active, not only
when Dock icon is clicked or application is re-launched.
### Event: 'continue-activity' _macOS_
Returns:
@@ -146,7 +158,7 @@ Returns:
*`event` Event
*`type` String - A string identifying the activity. Maps to
[`NSUserActivity.activityType`][activity-type].
*`userInfo`Object - Contains app-specific state stored by the activity on
*`userInfo`unknown - Contains app-specific state stored by the activity on
another device.
Emitted during [Handoff][handoff] when an activity from a different device wants
@@ -189,7 +201,7 @@ Returns:
*`event` Event
*`type` String - A string identifying the activity. Maps to
[`NSUserActivity.activityType`][activity-type].
*`userInfo`Object - Contains app-specific state stored by the activity.
*`userInfo`unknown - Contains app-specific state stored by the activity.
Emitted during [Handoff][handoff] after an activity from this device was successfully
resumed on another one.
@@ -201,9 +213,9 @@ Returns:
*`event` Event
*`type` String - A string identifying the activity. Maps to
[`NSUserActivity.activityType`][activity-type].
*`userInfo`Object - Contains app-specific state stored by the activity.
*`userInfo`unknown - Contains app-specific state stored by the activity.
Emitted when [Handoff][handoff] is about to be resumed on another device. If you need to update the state to be transferred, you should call `event.preventDefault()` immediately, construct a new `userInfo` dictionary and call `app.updateCurrentActiviy()` in a timely manner. Otherwise, the operation will fail and `continue-activity-error` will be called.
Emitted when [Handoff][handoff] is about to be resumed on another device. If you need to update the state to be transferred, you should call `event.preventDefault()` immediately, construct a new `userInfo` dictionary and call `app.updateCurrentActivity()` in a timely manner. Otherwise, the operation will fail and `continue-activity-error` will be called.
### Event: 'new-window-for-tab' _macOS_
@@ -314,10 +326,8 @@ Returns:
*`event` Event
*`webContents` [WebContents](web-contents.md)
*`request` Object
*`method` String
*`authenticationResponseDetails` Object
*`url` URL
*`referrer` URL
*`authInfo` Object
*`isProxy` Boolean
*`scheme` String
@@ -325,8 +335,8 @@ Returns:
*`port` Integer
*`realm` String
*`callback` Function
*`username` String
*`password` String
*`username` String (optional)
*`password` String (optional)
Emitted when `webContents` wants to do basic auth.
@@ -337,17 +347,21 @@ should prevent the default behavior with `event.preventDefault()` and call
Emitted when `<webview>.getWebContents()` is called in the renderer process of `webContents`.
Calling `event.preventDefault()` will prevent the object from being returned.
Custom value can be returned by setting `event.returnValue`.
## Methods
The `app` object has the following methods:
@@ -555,6 +618,7 @@ app.exit(0)
### `app.isReady()`
Returns `Boolean` - `true` if Electron has finished initializing, `false` otherwise.
See also `app.whenReady()`.
### `app.whenReady()`
@@ -562,11 +626,17 @@ Returns `Promise<void>` - fulfilled when Electron is initialized.
May be used as a convenient alternative to checking `app.isReady()`
and subscribing to the `ready` event if the app is not ready yet.
### `app.focus()`
### `app.focus([options])`
*`options` Object (optional)
*`steal` Boolean _macOS_ - Make the receiver the active app even if another app is
currently active.
On Linux, focuses on the first visible window. On macOS, makes the application
the active app. On Windows, focuses on the application's first window.
You should seek to use the `steal` option as sparingly as possible.
### `app.hide()` _macOS_
Hides all application windows without minimizing them.
@@ -582,7 +652,7 @@ them.
Sets or creates a directory your app's logs which can then be manipulated with `app.getPath()` or `app.setPath(pathName, newPath)`.
Calling `app.setAppLogsPath()` without a `path` parameter will result in this directory being set to `/Library/Logs/YourAppName` on _macOS_, and inside the `userData` directory on _Linux_ and _Windows_.
Calling `app.setAppLogsPath()` without a `path` parameter will result in this directory being set to `~/Library/Logs/YourAppName` on _macOS_, and inside the `userData` directory on _Linux_ and _Windows_.
### `app.getAppPath()`
@@ -608,12 +678,16 @@ Returns `String` - The current application directory.
*`music` Directory for a user's music.
*`pictures` Directory for a user's pictures.
*`videos` Directory for a user's videos.
*`recent` Directory for the user's recent files (Windows only).
*`logs` Directory for your app's log folder.
*`pepperFlashSystemPlugin` Full path to the system version of the Pepper Flash plugin.
*`crashDumps` Directory where crash dumps are stored.
Returns `String` - A path to a special directory or file associated with `name`. On
failure, an `Error` is thrown.
If `app.getPath('logs')` is called without called `app.setAppLogsPath()` being called first, a default log directory will be created equivalent to calling `app.setAppLogsPath()` without a `path` parameter.
### `app.getFileIcon(path[, options])`
*`path` String
@@ -665,21 +739,19 @@ to the npm modules spec. You should usually also specify a `productName`
field, which is your application's full capitalized name, and which will be
**Note:** This function overrides the name used internally by Electron; it does not affect the name that the OS uses.
### `app.getLocale()`
Returns `String` - The current application locale. Possible return values are documented [here](locales.md).
To set the locale, you'll want to use a command line switch at app startup, which may be found [here](https://github.com/electron/electron/blob/master/docs/api/chrome-command-line-switches.md).
To set the locale, you'll want to use a command line switch at app startup, which may be found [here](https://github.com/electron/electron/blob/master/docs/api/command-line-switches.md).
**Note:** When distributing your packaged app, you have to also ship the
`locales` folder.
@@ -707,34 +779,34 @@ Clears the recent documents list.
*`protocol` String - The name of your protocol, without `://`. If you want your
app to handle `electron://` links, call this method with`electron` as the
parameter.
*`path` String (optional) _Windows_ - Defaults to `process.execPath`
*`args` String[] (optional) _Windows_ - Defaults to an empty array
*`protocol` String - The name of your protocol, without `://`. For example,
if you want your app to handle `electron://` links, call this method with
`electron` as the parameter.
*`path` String (optional) _Windows_ - The path to the Electron executable.
Defaults to `process.execPath`
*`args` String[] (optional) _Windows_ - Arguments passed to the executable.
Defaults to an empty array
Returns `Boolean` - Whether the call succeeded.
This method sets the current executable as the default handler for a protocol
(aka URI scheme). It allows you to integrate your app deeper into the operating
system. 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.
On Windows, you can provide optional parameters path, the path to your executable,
and args, an array of arguments to be passed to your executable when it launches.
Sets the current executable as the default handler for a protocol (aka URI
scheme). It allows you to integrate your app deeper into the operating system.
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. You can however
change the file with a simple text editor or script during build time.
Please refer to [Apple's documentation][CFBundleURLTypes] for details.
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://docs.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-uap-protocol).
The API uses the Windows Registry and LSSetDefaultHandlerForURLScheme internally.
The API uses the Windows Registry and `LSSetDefaultHandlerForURLScheme` internally.
*`url` String - a URL with the protocol name to check. Unlike the other
methods in this family, this accepts an entire URL, including `://` at a
minimum (e.g. `https://`).
Returns `Promise<Object>` - Resolve with an object containing the following:
*`icon` NativeImage - the display icon of the app handling the protocol.
*`path` String - installation path of the app handling the protocol.
*`name` String - display name of the app handling the protocol.
This method returns a promise that contains the application name, icon and path of the default handler for the protocol
(aka URI scheme) of a URL.
### `app.setUserTasks(tasks)` _Windows_
@@ -926,7 +1025,8 @@ if (!gotTheLock) {
})
// Create myWindow, load the rest of the app, etc...
app.on('ready',()=>{
app.whenReady().then(()=>{
myWindow=createWindow()
})
}
```
@@ -949,7 +1049,7 @@ allow multiple instances of the application to once again run side by side.
*`type` String - Uniquely identifies the activity. Maps to
[`NSUserActivity.activityType`][activity-type].
*`userInfo`Object - App-specific state to store for use by another device.
*`userInfo`any - App-specific state to store for use by another device.
*`webpageURL` String (optional) - The webpage to load in a browser if no suitable app is
installed on the resuming device. The scheme must be `http` or `https`.
@@ -972,7 +1072,7 @@ Marks the current [Handoff][handoff] user activity as inactive without invalidat
*`type` String - Uniquely identifies the activity. Maps to
[`NSUserActivity.activityType`][activity-type].
*`userInfo`Object - App-specific state to store for use by another device.
*`userInfo`any - App-specific state to store for use by another device.
Updates the current activity if its type matches `type`, merging the entries from
`userInfo` into its current `userInfo` dictionary.
@@ -983,6 +1083,17 @@ Updates the current activity if its type matches `type`, merging the entries fro
Changes the [Application User Model ID][app-user-model-id] to `id`.
### `app.setActivationPolicy(policy)` _macOS_
*`policy` String - Can be 'regular', 'accessory', or 'prohibited'.
Sets the activation policy for a given app.
Activation policy types:
* 'regular' - The application is an ordinary app that appears in the Dock and may have a user interface.
* 'accessory' - The application doesn’t appear in the Dock and doesn’t have a menu bar, but it may be activated programmatically or by clicking on one of its windows.
* 'prohibited' - The application doesn’t appear in the Dock and may not create windows or be activated.
Returns `Boolean` - Whether the current desktop environment is Unity launcher.
@@ -1106,6 +1217,13 @@ Returns `Object`:
should restore the state from the previous session. This indicates that the
app should restore the windows that were open the last time the app was
closed. This setting is not available on [MAS builds][mas-builds].
* `executableWillLaunchAtLogin` Boolean _Windows_ - `true` if app is set to open at login and its run key is not deactivated. This differs from `openAtLogin` as it ignores the `args` option, this property will be true if the given executable would be launched at login with **any** arguments.
*`launchItems` Object[] _Windows_
*`name` String _Windows_ - name value of a registry entry.
*`path` String _Windows_ - The executable to an app that corresponds to a registry entry.
*`args` String[] _Windows_ - the command-line arguments to pass to the executable.
*`scope` String _Windows_ - one of `user` or `machine`. Indicates whether the registry entry is under `HKEY_CURRENT USER` or `HKEY_LOCAL_MACHINE`.
*`enabled` Boolean _Windows_ - `true` if the app registry key is startup approved and therefore shows as `enabled` in Task Manager and Windows settings.
*`args` String[] (optional) _Windows_ - The command-line arguments to pass to
the executable. Defaults to an empty array. Take care to wrap paths in
quotes.
*`enabled` Boolean (optional) _Windows_ - `true` will change the startup approved registry key and `enable / disable` the App in Task Manager and Windows Settings.
Defaults to `true`.
*`name` String (optional) _Windows_ - value name to write into registry. Defaults to the app's AppUserModelId().
Set the app's login item settings.
To work with Electron's `autoUpdater` on Windows, which uses [Squirrel][Squirrel-Windows],
@@ -1151,8 +1271,6 @@ technologies, such as screen readers, has been detected. See
https://www.chromium.org/developers/design-documents/accessibility for more
* `authors` String[] (optional) _Linux_ - List of app authors.
* `website` String (optional) _Linux_ - The app's website.
* `iconPath` String (optional) _Linux_ - Path to the app's icon. Will be shown as 64x64 pixels while retaining aspect ratio.
* `iconPath` String (optional) _Linux_ _Windows_ - Path to the app's icon in a JPEG or PNG file format. On Linux, will be shown as 64x64 pixels while retaining aspect ratio.
Set the about panel options. This will override the values defined in the app's
`.plist` file on MacOS. See the [Apple docs][about-panel-options] for more details. On Linux, values must be set in order to be shown; there are no defaults.
Set the about panel options. This will override the values defined in the app's `.plist` file on macOS. See the [Apple docs][about-panel-options] for more details. On Linux, values must be set in order to be shown; there are no defaults.
If you do not set `credits` but still wish to surface them in your app, AppKit will look for a file named "Credits.html", "Credits.rtf", and "Credits.rtfd", in that order, in the bundle returned by the NSBundle class method main. The first file found is used, and if none is found, the info area is left blank. See Apple [documentation](https://developer.apple.com/documentation/appkit/nsaboutpaneloptioncredits?language=objc) for more information.
Start accessing a security scoped resource. With this method Electron applications that are packaged for the Mac App Store may reach outside their sandbox to access files chosen by the user. See [Apple's documentation](https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW16) for a description of how this system works.
### `app.enableSandbox()` _Experimental_
### `app.enableSandbox()`
Enables full sandbox mode on the app.
Enables full sandbox mode on the app. This means that all renderers will be launched sandboxed, regardless of the value of the `sandbox` flag in WebPreferences.
This method can only be called before app is ready.
@@ -1224,7 +1341,7 @@ systems Application folder. Use in combination with `app.moveToApplicationsFolde
* `conflictHandler` Function<Boolean> (optional) - A handler for potential conflict in move failure.
* `conflictHandler` Function\<Boolean> (optional) - A handler for potential conflict in move failure.
* `conflictType` String - The type of move conflict encountered by the handler; can be `exists` or `existsAndRunning`, where `exists` means that an app of the same name is present in the Applications directory and `existsAndRunning` means both that it exists and that it's presently running.
Returns `Boolean` - Whether the move was successful. Please note that if
@@ -1240,7 +1357,7 @@ method returns false. If we fail to perform the copy, then this method will
throw an error. The message in the error should be informative and tell
you exactly what went wrong.
By default, if an app of the same name as the one being moved exists in the Applications directory and is _not_ running, the existing app will be trashed and the active app moved into its place. If it _is_ running, the pre-existing running app will assume focus and the the previously active app will quit itself. This behavior can be changed by providing the optional conflict handler, where the boolean returned by the handler determines whether or not the move conflict is resolved with default behavior. i.e. returning `false` will ensure no further action is taken, returning `true` will result in the default behavior and the method continuing.
By default, if an app of the same name as the one being moved exists in the Applications directory and is _not_ running, the existing app will be trashed and the active app moved into its place. If it _is_ running, the pre-existing running app will assume focus and the previously active app will quit itself. This behavior can be changed by providing the optional conflict handler, where the boolean returned by the handler determines whether or not the move conflict is resolved with default behavior. i.e. returning `false` will ensure no further action is taken, returning `true` will result in the default behavior and the method continuing.
Would mean that if an app already exists in the user directory, if the user chooses to 'Continue Move' then the function would continue with its default behavior and the existing app will be trashed and the active app moved into its place.
### `app.isSecureKeyboardEntryEnabled()` _macOS_
Returns `Boolean` - whether `Secure Keyboard Entry` is enabled.
Breaking changes will be documented here, and deprecation warnings added to JS code where possible, at least [one major version](../tutorial/electron-versioning.md#semver) before the change is made.
## `FIXME` comments
The `FIXME` string is used in code comments to denote things that should be fixed for future releases. See https://github.com/electron/electron/search?q=fixme
## Planned Breaking API Changes (7.0)
### Node Headers URL
This is the URL specified as `disturl` in a `.npmrc` file or as the `--dist-url`
command line flag when building native Node modules. Both will be supported for
the foreseeable future but it is recommended that you switch.
Deprecated: https://atom.io/download/electron
Replace with: https://electronjs.org/headers
### `session.clearAuthCache(options)`
The `session.clearAuthCache` API no longer accepts options for what to clear, and instead unconditionally clears the whole cache.
Under macOS Catalina our former Tray implementation breaks.
Apple's native substitute doesn't support changing the highlighting behavior.
```js
// Deprecated
tray.setHighlightMode(mode)
// API will be removed in v7.0 without replacement.
```
## Planned Breaking API Changes (5.0)
### `new BrowserWindow({ webPreferences })`
The following `webPreferences` option default values are deprecated in favor of the new defaults listed below.
| Property | Deprecated Default | New Default |
|----------|--------------------|-------------|
| `contextIsolation` | `false` | `true` |
| `nodeIntegration` | `true` | `false` |
| `webviewTag` | `nodeIntegration` if set else `true` | `false` |
E.g. Re-enabling the webviewTag
```js
constw=newBrowserWindow({
webPreferences:{
webviewTag:true
}
})
```
### `nativeWindowOpen`
Child windows opened with the `nativeWindowOpen` option will always have Node.js integration disabled, unless `nodeIntegrationInSubFrames` is `true.
### Privileged Schemes Registration
Renderer process APIs `webFrame.setRegisterURLSchemeAsPrivileged` and `webFrame.registerURLSchemeAsBypassingCSP` as well as browser process API `protocol.registerStandardSchemes` have been removed.
A new API, `protocol.registerSchemesAsPrivileged` has been added and should be used for registering custom schemes with the required privileges. Custom schemes are required to be registered before app ready.
@@ -177,13 +177,14 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
*`simpleFullscreen` Boolean (optional) - Use pre-Lion fullscreen on macOS. Default is `false`.
*`skipTaskbar` Boolean (optional) - Whether to show the window in taskbar. Default is
`false`.
*`kiosk` Boolean (optional) - The kiosk mode. Default is `false`.
*`kiosk` Boolean (optional) - Whether the window is in kiosk mode. Default is `false`.
*`title` String (optional) - Default window title. Default is `"Electron"`. If the HTML tag `<title>` is defined in the HTML file loaded by `loadURL()`, this property will be ignored.
*`icon` ([NativeImage](native-image.md) | String) (optional) - The window icon. On Windows it is
recommended to use `ICO` icons to get best visual effects, you can also
leave it undefined so the executable's icon will be used.
*`show` Boolean (optional) - Whether window should be shown when created. Default is
`true`.
*`paintWhenInitiallyHidden` Boolean (optional) - Whether the renderer should be active when `show` is `false` and it has just been created. In order for `document.visibilityState` to work correctly on first load with `show: false` you should set this to `false`. Setting this to `false` will cause the `ready-to-show` event to not fire. Default is `true`.
*`frame` Boolean (optional) - Specify `false` to create a
[Frameless Window](frameless-window.md). Default is `true`.
*`parent` BrowserWindow (optional) - Specify parent window. Default is `null`.
@@ -202,8 +203,7 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
*`backgroundColor` String (optional) - Window's background color as a hexadecimal value,
like `#66CD00` or `#FFF` or `#80FFFFFF` (alpha in #AARRGGBB format is supported if
`transparent` is set to `true`). Default is `#FFF` (white).
*`hasShadow` Boolean (optional) - Whether window should have a shadow. This is only
implemented on macOS. Default is `true`.
*`hasShadow` Boolean (optional) - Whether window should have a shadow. Default is `true`.
*`opacity` Number (optional) - Set the initial opacity of the window, between 0.0 (fully
transparent) and 1.0 (fully opaque). This is only implemented on Windows and macOS.
*`darkTheme` Boolean (optional) - Forces using dark theme for the window, only works on
@@ -212,6 +212,10 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
Default is `false`. On Windows, does not work unless the window is frameless.
*`type` String (optional) - The type of window, default is normal window. See more about
this below.
*`visualEffectState` String (optional) - Specify how the material appearance should reflect window activity state on macOS. Must be used with the `vibrancy` property. Possible values are:
*`followWindow` - The backdrop should automatically appear active when the window is active, and inactive when it is not. This is the default.
*`active` - The backdrop should always appear active.
*`inactive` - The backdrop should always appear inactive.
*`titleBarStyle` String (optional) - The style of window title bar.
Default is `default`. Possible values are:
*`default` - Results in the standard gray opaque Mac title
@@ -226,6 +230,7 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
unless hovered over in the top left of the window. These custom buttons prevent
issues with mouse events that occur with the standard window toolbar buttons.
**Note:** This option is currently experimental.
*`trafficLightPosition` [Point](structures/point.md) (optional) - Set a custom position for the traffic light buttons. Can only be used with `titleBarStyle` set to `hidden`
*`fullscreenWindowTitle` Boolean (optional) - Shows the title in the
title bar in full screen mode on macOS for all `titleBarStyle` options.
Default is `false`.
@@ -269,10 +274,8 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
OS-level sandbox and disabling the Node.js engine. This is not the same as
the `nodeIntegration` option and the APIs available to the preload script
are more limited. Read more about the option [here](sandbox-option.md).
**Note:** This option is currently experimental and may change or be
removed in future Electron releases.
*`enableRemoteModule` Boolean (optional) - Whether to enable the [`remote`](remote.md) module.
Default is `true`.
Default is `false`.
*`session` [Session](session.md#class-session) (optional) - Sets the session used by the
page. Instead of passing the Session object directly, you can also choose to
use the `partition` option instead, which accepts a partition string. When
@@ -290,7 +293,7 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
between the web pages even when you specified different values for them,
including but not limited to `preload`, `sandbox` and `nodeIntegration`.
So it is suggested to use exact same `webPreferences` for web pages with
the same `affinity`. _This property is experimental_
the same `affinity`. _Deprecated_
*`zoomFactor` Number (optional) - The default zoom factor of the page, `3.0` represents
`300%`. Default is `1.0`.
*`javascript` Boolean (optional) - Enables JavaScript support. Default is `true`.
@@ -349,6 +352,9 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
You can access this context in the dev tools by selecting the
'Electron Isolated Context' entry in the combo box at the top of the
Console tab.
*`worldSafeExecuteJavaScript` Boolean (optional) - If true, values returned from `webFrame.executeJavaScript` will be sanitized to ensure JS values
can't unsafely cross between worlds when using `contextIsolation`. The default
is `false`. In Electron 12, the default will be changed to `true`. _Deprecated_
*`nativeWindowOpen` Boolean (optional) - Whether to use native
`window.open()`. Defaults to `false`. Child windows will always have node
integration disabled unless `nodeIntegrationInSubFrames` is true. **Note:** This option is currently
@@ -370,6 +376,8 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
consecutive dialog protection is triggered. If not defined the default
message would be used, note that currently the default message is in
English and not localized.
*`disableDialogs` Boolean (optional) - Whether to disable dialogs
completely. Overrides `safeDialogs`. Default is `false`.
*`navigateOnDragDrop` Boolean (optional) - Whether dragging and dropping a
file or link onto the page causes a navigation. Default is `false`.
*`autoplayPolicy` String (optional) - Autoplay policy to apply to
@@ -379,6 +387,20 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
*`disableHtmlFullscreenWindowResize` Boolean (optional) - Whether to
prevent the window from resizing when entering HTML Fullscreen. Default
is `false`.
*`accessibleTitle` String (optional) - An alternative title string provided only
to accessibility tools such as screen readers. This string is not directly
visible to users.
*`spellcheck` Boolean (optional) - Whether to enable the builtin spellchecker.
Default is `true`.
*`enableWebSQL` Boolean (optional) - Whether to enable the [WebSQL api](https://www.w3.org/TR/webdatabase/).
Default is `true`.
*`v8CacheOptions` String (optional) - Enforces the v8 code caching policy
used by blink. Accepted values are
*`none` - Disables code caching
*`code` - Heuristic based code caching
*`bypassHeatCheck` - Bypass code caching heuristics but with lazy compilation
*`bypassHeatCheckAndEagerCompile` - Same as above except compilation is eager.
Default policy is `code`.
When setting minimum or maximum window size with `minWidth`/`maxWidth`/
`minHeight`/`maxHeight`, it only constrains the users. It won't prevent you from
@@ -485,6 +507,9 @@ Emitted when the window is hidden.
Emitted when the web page has been rendered (while not being shown) and window can be displayed without
a visual flash.
Please note that using this event implies that the renderer will be considered "visible" and
paint even though `show` is false. This event will never fire if you use `paintWhenInitiallyHidden: false`
#### Event: 'maximize'
Emitted when window is maximized.
@@ -506,7 +531,7 @@ Emitted when the window is restored from a minimized state.
Returns:
*`event` Event
*`newBounds` [`Rectangle`](structures/rectangle.md) - Size the window is being resized to.
*`newBounds` [Rectangle](structures/rectangle.md) - Size the window is being resized to.
Emitted before the window is resized. Calling `event.preventDefault()` will prevent the window from being resized.
@@ -516,14 +541,20 @@ Note that this is only emitted when the window is being resized manually. Resizi
Emitted after the window has been resized.
#### Event: 'will-move' _Windows_
#### Event: 'resized' _macOS_ _Windows_
Emitted once when the window has finished being resized.
This is usually emitted when the window has been resized manually. On macOS, resizing the window with `setBounds`/`setSize` and setting the `animate` parameter to `true` will also emit this event once resizing has finished.
#### Event: 'will-move' _macOS_ _Windows_
Returns:
*`event` Event
*`newBounds` [`Rectangle`](structures/rectangle.md) - Location the window is being moved to.
*`newBounds` [Rectangle](structures/rectangle.md) - Location the window is being moved to.
Emitted before the window is moved. Calling `event.preventDefault()` will prevent the window from being moved.
Emitted before the window is moved. On Windows, calling `event.preventDefault()` will prevent the window from being moved.
Note that this is only emitted when the window is being resized manually. Resizing the window with `setBounds`/`setSize` will not emit this event.
@@ -531,12 +562,12 @@ Note that this is only emitted when the window is being resized manually. Resizi
Emitted when the window is being moved to a new position.
__Note__: On macOS this event is an alias of `moved`.
#### Event: 'moved' _macOS_
#### Event: 'moved' _macOS_ _Windows_
Emitted once when the window is moved to a new position.
__Note__: On macOS this event is an alias of `move`.
#### Event: 'enter-full-screen'
Emitted when the window enters a full-screen state.
@@ -579,7 +610,7 @@ e.g. `APPCOMMAND_BROWSER_BACKWARD` is emitted as `browser-backward`.
```javascript
const{BrowserWindow}=require('electron')
letwin=newBrowserWindow()
constwin=newBrowserWindow()
win.on('app-command',(e,cmd)=>{
// Navigate the window back when the user hits their mouse back button
Objects created with `new BrowserWindow` have the following properties:
@@ -746,7 +816,7 @@ Objects created with `new BrowserWindow` have the following properties:
```javascript
const{BrowserWindow}=require('electron')
// In this example `win` is our instance
letwin=newBrowserWindow({width:800,height:600})
constwin=newBrowserWindow({width:800,height:600})
win.loadURL('https://github.com')
```
@@ -760,7 +830,7 @@ events.
#### `win.id` _Readonly_
A `Integer` property representing the unique ID of the window.
A `Integer` property representing the unique ID of the window. Each ID is unique among all `BrowserWindow` instances of the entire Electron application.
#### `win.autoHideMenuBar`
@@ -769,6 +839,51 @@ A `Boolean` property that determines whether the window menu bar should hide its
If the menu bar is already visible, setting this property to `true` won't
hide it immediately.
#### `win.simpleFullScreen`
A `Boolean` property that determines whether the window is in simple (pre-Lion) fullscreen mode.
#### `win.fullScreen`
A `Boolean` property that determines whether the window is in fullscreen mode.
#### `win.visibleOnAllWorkspaces`
A `Boolean` property that determines whether the window is visible on all workspaces.
**Note:** Always returns false on Windows.
#### `win.shadow`
A `Boolean` property that determines whether the window has a shadow.
#### `win.menuBarVisible` _Windows_ _Linux_
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.
#### `win.kiosk`
A `Boolean` property that determines whether the window is in kiosk mode.
#### `win.documentEdited` _macOS_
A `Boolean` property that specifies whether the window’s document has been edited.
The icon in title bar will become gray when set to `true`.
#### `win.representedFilename` _macOS_
A `String` property that determines the pathname of the file the window represents,
and the icon of the file will show in window's title bar.
#### `win.title`
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.
#### `win.minimizable`
A `Boolean` property that determines whether the window can be manually minimized by user.
@@ -821,6 +936,12 @@ const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
```
#### `win.accessibleTitle`
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.
### Instance Methods
Objects created with `new BrowserWindow` have the following instance methods:
@@ -918,7 +1039,7 @@ Returns `Boolean` - Whether the window is in fullscreen mode.
Enters or leaves simple fullscreen mode.
Simple fullscreen mode emulates the native fullscreen behavior found in versions of MacOS X prior to Lion (10.7).
Simple fullscreen mode emulates the native fullscreen behavior found in versions of macOS prior to Lion (10.7).
#### `win.isSimpleFullScreen()` _macOS_
@@ -928,11 +1049,11 @@ Returns `Boolean` - Whether the window is in simple (pre-Lion) fullscreen mode.
Returns `Boolean` - Whether the window is in normal state (not maximized, not minimized, not in fullscreen mode).
The following example shows how to write a string to the clipboard:
```javascript
const{clipboard}=require('electron')
clipboard.writeText('Example String')
```
On Linux, there is also a `selection` clipboard. To manipulate it
you need to pass `selection` to each method:
```javascript
const{clipboard}=require('electron')
clipboard.writeText('Example String','selection')
console.log(clipboard.readText('selection'))
```
@@ -28,56 +22,106 @@ The `clipboard` module has the following methods:
### `clipboard.readText([type])`
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Returns `String` - The content in the clipboard as plain text.
```js
const{clipboard}=require('electron')
clipboard.writeText('hello i am a bit of text!')
consttext=clipboard.readText()
console.log(text)
// hello i am a bit of text!'
```
### `clipboard.writeText(text[, type])`
*`text` String
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Writes the `text` into the clipboard as plain text.
```js
const{clipboard}=require('electron')
consttext='hello i am a bit of text!'
clipboard.writeText(text)
```
### `clipboard.readHTML([type])`
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Returns `String` - The content in the clipboard as markup.
```js
const{clipboard}=require('electron')
clipboard.writeHTML('<b>Hi</b>')
consthtml=clipboard.readHTML()
console.log(html)
// <meta charset='utf-8'><b>Hi</b>
```
### `clipboard.writeHTML(markup[, type])`
*`markup` String
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Writes `markup` to the clipboard.
```js
const{clipboard}=require('electron')
clipboard.writeHTML('<b>Hi</b')
```
### `clipboard.readImage([type])`
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Returns [`NativeImage`](native-image.md) - The image content in the clipboard.
### `clipboard.writeImage(image[, type])`
*`image` [NativeImage](native-image.md)
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Writes `image` to the clipboard.
### `clipboard.readRTF([type])`
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Returns `String` - The content in the clipboard as RTF.
```js
const{clipboard}=require('electron')
clipboard.writeRTF('{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\pard\nThis is some {\\b bold} text.\\par\n}')
constrtf=clipboard.readRTF()
console.log(rtf)
// {\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\pard\nThis is some {\\b bold} text.\\par\n}
```
### `clipboard.writeRTF(text[, type])`
*`text` String
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Writes the `text` into the clipboard in RTF.
```js
const{clipboard}=require('electron')
constrtf='{\\rtf1\\ansi{\\fonttbl\\f0\\fswiss Helvetica;}\\f0\\pard\nThis is some {\\b bold} text.\\par\n}'
clipboard.writeRTF(rtf)
```
### `clipboard.readBookmark()` _macOS_ _Windows_
Returns `Object`:
@@ -93,7 +137,7 @@ bookmark is unavailable.
*`title` String
*`url` String
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Writes the `title` and `url` into the clipboard as a bookmark.
@@ -102,7 +146,9 @@ you can use `clipboard.write` to write both a bookmark and fallback text to the
clipboard.
```js
clipboard.write({
const{clipboard}=require('electron')
clipboard.writeBookmark({
text:'https://electronjs.org',
bookmark:'Electron Homepage'
})
@@ -110,39 +156,50 @@ clipboard.write({
### `clipboard.readFindText()` _macOS_
Returns `String` - The text on the find pasteboard. This method uses synchronous
IPC when called from the renderer process. The cached value is reread from the
find pasteboard whenever the application is activated.
Returns `String` - The text on the find pasteboard, which is the pasteboard that holds information about the current state of the active application’s find panel.
This method uses synchronous IPC when called from the renderer process.
The cached value is reread from the find pasteboard whenever the application is activated.
### `clipboard.writeFindText(text)` _macOS_
*`text` String
Writes the `text` into the find pasteboard as plain text. This method uses
synchronous IPC when called from the renderer process.
Writes the `text` into the find pasteboard (the pasteboard that holds information about the current state of the active application’s find panel) as plain text. This method uses synchronous IPC when called from the renderer process.
### `clipboard.clear([type])`
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Clears the clipboard content.
### `clipboard.availableFormats([type])`
*`type` String (optional) - Can be `selection` or `clipboard`. `selection` is only available on Linux.
*`type` String (optional) - Can be `selection` or `clipboard`; default is 'clipboard'. `selection` is only available on Linux.
Returns `String[]` - An array of supported formats for the clipboard `type`.
Ignore the connections limit for `domains` list separated by `,`.
### --auth-server-whitelist=`url`
## --disable-http-cache
Disables the disk cache for HTTP requests.
## --disable-http2
Disable HTTP/2 and SPDY/3.1 protocols.
## --lang
Set a custom locale.
## --inspect=`port` and --inspect-brk=`port`
Debug-related flags, see the [Debugging the Main Process][debugging-main-process] guide for details.
## --remote-debugging-port=`port`
Enables remote debugging over HTTP on the specified `port`.
## --disk-cache-size=`size`
Forces the maximum disk space to be used by the disk cache, in bytes.
## --js-flags=`flags`
Specifies the flags passed to the Node.js engine. It has to be passed when starting
Electron if you want to enable the `flags` in the main process.
```sh
$ electron --js-flags="--harmony_proxies --harmony_collections" your-app
```
See the [Node.js documentation][node-cli] or run `node --help` in your terminal for a list of available flags. Additionally, run `node --v8-options` to see a list of flags that specifically refer to Node.js's V8 JavaScript engine.
## --proxy-server=`address:port`
Use a specified proxy server, which overrides the system setting. This switch
only affects requests with HTTP protocol, including HTTPS and WebSocket
requests. It is also noteworthy that not all proxy servers support HTTPS and
WebSocket requests. The proxy URL does not support username and password
then any `url` ending with `example.com`, `foobar.com`, `baz` will be considered
for integrated authentication. Without `*` prefix the URL has to match exactly.
## --auth-negotiate-delegate-whitelist=`url`
A comma-separated list of servers for which delegation of user credentials is required.
Without `*` prefix the URL has to match exactly.
## --ignore-certificate-errors
### --ignore-certificate-errors
Ignores certificate related errors.
## --ppapi-flash-path=`path`
### --ignore-connections-limit=`domains`
Sets the `path` of the pepper flash plugin.
Ignore the connections limit for `domains` list separated by `,`.
## --ppapi-flash-version=`version`
### --js-flags=`flags`
Sets the `version` of the pepper flash plugin.
Specifies the flags passed to the Node.js engine. It has to be passed when starting
Electron if you want to enable the `flags` in the main process.
## --log-net-log=`path`
```sh
$ electron --js-flags="--harmony_proxies --harmony_collections" your-app
```
See the [Node.js documentation][node-cli] or run `node --help` in your terminal for a list of available flags. Additionally, run `node --v8-options` to see a list of flags that specifically refer to Node.js's V8 JavaScript engine.
### --lang
Set a custom locale.
### --log-net-log=`path`
Enables net log events to be saved and writes them to `path`.
## --disable-renderer-backgrounding
### --no-proxy-server
Prevents Chromium from lowering the priority of invisible pages' renderer
processes.
Don't use a proxy server and always make direct connections. Overrides any other
proxy server flags that are passed.
This flag is global to all renderer processes, if you only want to disable
throttling in one window, you can take the hack of
[playing silent audio][play-silent-audio].
### --no-sandbox
## --enable-logging
Disables Chromium sandbox, which is now enabled by default.
Should only be used for testing.
Prints Chromium's logging into console.
### --proxy-bypass-list=`hosts`
This switch can not be used in `app.commandLine.appendSwitch` since it is parsed
earlier than user's app is loaded, but you can set the `ELECTRON_ENABLE_LOGGING`
environment variable to achieve the same effect.
Instructs Electron to bypass the proxy server for the given semi-colon-separated
list of hosts. This flag has an effect only if used in tandem with
Enables remote debugging over HTTP on the specified `port`.
### --ppapi-flash-path=`path`
Sets the `path` of the pepper flash plugin.
### --ppapi-flash-version=`version`
Sets the `version` of the pepper flash plugin.
### --v=`log_level`
Gives the default maximal active V-logging level; 0 is the default. Normally
positive values are used for V-logging levels.
This switch only works when `--enable-logging` is also passed.
## --vmodule=`pattern`
### --vmodule=`pattern`
Gives the per-module maximal V-logging levels to override the value given by
`--v`. E.g. `my_module=2,foo*=3` would change the logging level for all code in
@@ -181,10 +198,46 @@ logging level for all code in the source files under a `foo/bar` directory.
This switch only works when `--enable-logging` is also passed.
## --no-sandbox
### --force_high_performance_gpu
Disables Chromium sandbox, which is now enabled by default.
Should only be used for testing.
Force using discrete GPU when there are multiple GPUs available.
### --force_low_power_gpu
Force using integrated GPU when there are multiple GPUs available.
## 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.
### --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.
Aliased to `--debug-brk=[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]
Activate inspector on `host:port`. Default is `127.0.0.1:9229`.
V8 inspector integration allows tools such as Chrome DevTools and IDEs to debug and profile Electron instances. The tools attach to Electron instances via a TCP port and communicate using the [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/).
See the [Debugging the Main Process][debugging-main-process] guide for more details.
Aliased to `--debug[=[host:]port`.
### --inspect-publish-uid=stderr,http
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.
| `Object` | Complex | ✅ | ✅ | Keys must be supported using only "Simple" types in this table. Values must be supported in this table. Prototype modifications are dropped. Sending custom classes will copy values but not the prototype. |
| `Array` | Complex | ✅ | ✅ | Same limitations as the `Object` type |
| `Error` | Complex | ✅ | ✅ | Errors that are thrown are also copied, this can result in the message and stack trace of the error changing slightly due to being thrown in a different context |
| `Promise` | Complex | ✅ | ✅ | Promises are only proxied if they are the return value or exact parameter. Promises nested in arrays or objects will be dropped. |
| `Function` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending classes or constructors will not work. |
| [Cloneable Types](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) | Simple | ✅ | ✅ | See the linked document on cloneable types |
| `Symbol` | N/A | ❌ | ❌ | Symbols cannot be copied across contexts so they are dropped |
If the type you care about is not in the above table, it is probably not supported.
*`expirationDate` Double (optional) - The expiration date of the cookie as the number of
seconds since the UNIX epoch. If omitted then the cookie becomes a session
cookie and will not be retained between sessions.
*`sameSite` String (optional) - The [Same Site](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#SameSite_cookies) policy to apply to this cookie. Can be `unspecified`, `no_restriction`, `lax` or `strict`. Default is `no_restriction`.
Returns `Promise<void>` - A promise which resolves when the cookie has been set
to monitor and report crashes. On Linux, Electron uses
[breakpad](https://chromium.googlesource.com/breakpad/breakpad/+/master/). This
is an implementation detail driven by Chromium, and it may change in future. In
particular, crashpad is newer and will likely eventually replace breakpad on
all platforms.
## Methods
@@ -43,40 +46,67 @@ The `crashReporter` module has the following methods:
### `crashReporter.start(options)`
*`options` Object
*`companyName` String
*`submitURL` String - URL that crash reports will be sent to as POST.
*`productName` String (optional) - Defaults to `app.name`.
*`uploadToServer` Boolean (optional) - Whether crash reports should be sent to the server. Default is `true`.
*`ignoreSystemCrashHandler` Boolean (optional) - Default is `false`.
*`extra` Object (optional) - An object you can define that will be sent along with the
report. Only string properties are sent correctly. Nested objects are not
supported. When using Windows, the property names and values must be fewer than 64 characters.
*`crashesDirectory` String (optional) - Directory to store the crash reports temporarily (only used when the crash reporter is started via `process.crashReporter.start`).
*`companyName` String (optional) _Deprecated_ - Deprecated alias for
`{ globalExtra: { _companyName: ... } }`.
*`uploadToServer` Boolean (optional) - Whether crash reports should be sent
to the server. If false, crash reports will be collected and stored in the
crashes directory, but not uploaded. Default is `true`.
*`ignoreSystemCrashHandler` Boolean (optional) - If true, crashes generated
in the main process will not be forwarded to the system crash handler.
Default is `false`.
*`rateLimit` Boolean (optional) _macOS__Windows_ - If true, limit the
number of crashes uploaded to 1/hour. Default is `false`.
*`compress` Boolean (optional) - If true, crash reports will be compressed
and uploaded with `Content-Encoding: gzip`. Default is `false`.
*`extra` Record<String, String> (optional) - Extra string key/value
annotations that will be sent along with crash reports that are generated
in the main process. Only string values are supported. Crashes generated in
child processes will not contain these extra
parameters to crash reports generated from child processes, call
[`addExtraParameter`](#crashreporteraddextraparameterkey-value) from the
child process.
*`globalExtra` Record<String, String> (optional) - Extra string key/value
annotations that will be sent along with any crash reports generated in any
process. These annotations cannot be changed once the crash reporter has
been started. If a key is present in both the global extra parameters and
the process-specific extra parameters, then the global one will take
precedence. By default, `productName` and the app version are included, as
well as the Electron version.
You are required to call this method before using any other `crashReporter` APIs
and in each process (main/renderer) from which you want to collect crash reports.
You can pass different options to `crashReporter.start` when calling from different processes.
This method must be called before using any other `crashReporter` APIs. Once
initialized this way, the crashpad handler collects crashes from all
subsequently created processes. The crash reporter cannot be disabled once
started.
**Note** Child processes created via the `child_process` module will not have access to the Electron modules.
Therefore, to collect crash reports from them, use `process.crashReporter.start` instead. Pass the same options as above
along with an additional one called `crashesDirectory` that should point to a directory to store the crash
reports temporarily. You can test this out by calling `process.crash()` to crash the child process.
This method should be called as early as possible in app startup, preferably
before`app.on('ready')`. If the crash reporter is not initialized at the time
a renderer process is created, then that renderer process will not be monitored
by the crash reporter.
**Note:**If you need send additional/updated `extra` parameters after your
first call `start` you can call `addExtraParameter` on macOS or call `start`
again with the new/updated `extra` parameters on Linux and Windows.
**Note:**You can test out the crash reporter by generating a crash using
`process.crash()`.
**Note:**On macOS and windows, Electron uses a new `crashpad` client for crash collection and reporting.
If you want to enable crash reporting, initializing `crashpad` from the main process using `crashReporter.start` is required
regardless of which process you want to collect crashes from. Once initialized this way, the crashpad handler collects
crashes from all processes. You still have to call `crashReporter.start` from the renderer or child process, otherwise crashes from
them will get reported without `companyName`, `productName` or any of the `extra` information.
**Note:**If you need to send additional/updated `extra` parameters after your
first call `start` you can call `addExtraParameter`.
**Note:** Parameters passed in `extra`, `globalExtra` or set with
`addExtraParameter` have limits on the length of the keys and values. Key names
must be at most 39 bytes long, and values must be no longer than 127 bytes.
Keys with names longer than the maximum will be silently ignored. Key values
longer than the maximum length will be truncated.
**Note:** Calling this method from the renderer process is deprecated.
Returns [`CrashReport`](structures/crash-report.md) - The date and ID of the
last crash report. Only crash reports that have been uploaded will be returned;
even if a crash report is present on disk it will not be returned until it is
uploaded. In the case that there are no uploaded reports, `null` is returned.
Returns the date and ID of the last crash report. Only crash reports that have been uploaded will be returned; even if a crash report is present on disk it will not be returned until it is uploaded. In the case that there are no uploaded reports, `null` is returned.
**Note:** Calling this method from the renderer process is deprecated.
*`key`String - Parameter key, must be less than 64 characters long.
*`value` String - Parameter value, must be less than 64 characters long.
Returns `String` - The directory where crashes are temporarily stored before being uploaded.
Set an extra parameter to be sent with the crash report. The values
specified here will be sent in addition to any values set via the `extra` option when `start` was called. This API is only available on macOS and windows, if you need to add/update extra parameters on Linux after your first call to `start` you can call `start` again with the updated `extra` options.
**Note:** This method is deprecated, use `app.getPath('crashDumps')` instead.
The following example shows how to capture video from a desktop window whose
title is `Electron`:
@@ -91,7 +91,11 @@ The `desktopCapturer` module has the following methods:
Returns `Promise<DesktopCapturerSource[]>` - Resolves with an array of [`DesktopCapturerSource`](structures/desktop-capturer-source.md) objects, each `DesktopCapturerSource` represents a screen or an individual window that can be captured.
**Note** Capturing the screen contents requires user consent on macOS 10.15 Catalina or higher,
which can detected by [`systemPreferences.getMediaAccessStatus`].
@@ -48,10 +48,13 @@ The `dialog` module has the following methods:
their target path.
*`treatPackageAsDirectory`_macOS_ - Treat packages, such as `.app` folders,
as a directory instead of a file.
*`dontAddToRecent`_Windows_ - Do not add the item being opened to the recent documents list.
*`message` String (optional) _macOS_ - Message to display above input
boxes.
*`securityScopedBookmarks` Boolean (optional) _macOS__mas_ - Create [security scoped bookmarks](https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW16) when packaged for the Mac App Store.
Returns `String[] | undefined`, the file paths chosen by the user; if the dialog is cancelled it returns `undefined`.
The `browserWindow` argument allows the dialog to attach itself to a parent window, making it modal.
The `filters` specifies an array of file types that can be displayed or
*`treatPackageAsDirectory`_macOS_ - Treat packages, such as `.app` folders,
as a directory instead of a file.
*`dontAddToRecent`_Windows_ - Do not add the item being opened to the recent documents list.
*`message` String (optional) _macOS_ - Message to display above input
boxes.
*`securityScopedBookmarks` Boolean (optional) _macOS__mas_ - Create [security scoped bookmarks](https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW16) when packaged for the Mac App Store.
@@ -116,7 +120,7 @@ Returns `Promise<Object>` - Resolve with an object containing the following:
*`canceled` Boolean - whether or not the dialog was canceled.
*`filePaths` String[] - An array of file paths chosen by the user. If the dialog is cancelled this will be an empty array.
*`bookmarks` String[] (optional) _macOS__mas_ - An array matching the `filePaths` array of base64 encoded strings which contains security scoped bookmark data. `securityScopedBookmarks` must be enabled for this to be populated.
*`bookmarks` String[] (optional) _macOS__mas_ - An array matching the `filePaths` array of base64 encoded strings which contains security scoped bookmark data. `securityScopedBookmarks` must be enabled for this to be populated. (For return values, see [table here](#bookmarks-array).)
The `browserWindow` argument allows the dialog to attach itself to a parent window, making it modal.
*`showsTagField` Boolean (optional) _macOS_ - Show the tags input box,
defaults to `true`.
*`properties` String[] (optional)
*`showHiddenFiles` - Show hidden files in dialog.
*`createDirectory`_macOS_ - Allow creating new directories from dialog.
*`treatPackageAsDirectory`_macOS_ - Treat packages, such as `.app` folders,
as a directory instead of a file.
*`showOverwriteConfirmation`_Linux_ - Sets whether the user will be presented a confirmation dialog if the user types a file name that already exists.
*`dontAddToRecent`_Windows_ - Do not add the item being saved to the recent documents list.
*`securityScopedBookmarks` Boolean (optional) _macOS__mas_ - Create a [security scoped bookmark](https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW16) when packaged for the Mac App Store. If this option is enabled and the file doesn't already exist a blank file will be created at the chosen path.
Returns `String | undefined`, the path of the file chosen by the user; if the dialog is cancelled it returns `undefined`.
@@ -191,14 +202,20 @@ The `filters` specifies an array of file types that can be displayed, see
*`message` String (optional) _macOS_ - Message to display above text fields.
*`nameFieldLabel` String (optional) _macOS_ - Custom label for the text
displayed in front of the filename text field.
*`showsTagField` Boolean (optional) _macOS_ - Show the tags input box,
defaults to `true`.
*`showsTagField` Boolean (optional) _macOS_ - Show the tags input box, defaults to `true`.
*`properties` String[] (optional)
*`showHiddenFiles` - Show hidden files in dialog.
*`createDirectory`_macOS_ - Allow creating new directories from dialog.
*`treatPackageAsDirectory`_macOS_ - Treat packages, such as `.app` folders,
as a directory instead of a file.
*`showOverwriteConfirmation`_Linux_ - Sets whether the user will be presented a confirmation dialog if the user types a file name that already exists.
*`dontAddToRecent`_Windows_ - Do not add the item being saved to the recent documents list.
*`securityScopedBookmarks` Boolean (optional) _macOS__mas_ - Create a [security scoped bookmark](https://developer.apple.com/library/content/documentation/Security/Conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html#//apple_ref/doc/uid/TP40011183-CH3-SW16) when packaged for the Mac App Store. If this option is enabled and the file doesn't already exist a blank file will be created at the chosen path.
Returns `Promise<Object>` - Resolve with an object containing the following:
*`canceled` Boolean - whether or not the dialog was canceled.
*`filePath` String (optional) - If the dialog is canceled, this will be `undefined`.
*`bookmark` String (optional) _macOS__mas_ - Base64 encoded string which contains the security scoped bookmark data for the saved file. `securityScopedBookmarks` must be enabled for this to be present.
*`bookmark` String (optional) _macOS__mas_ - Base64 encoded string which contains the security scoped bookmark data for the saved file. `securityScopedBookmarks` must be enabled for this to be present. (For return values, see [table here](#bookmarks-array).)
The `browserWindow` argument allows the dialog to attach itself to a parent window, making it modal.
@@ -227,7 +244,7 @@ expanding and collapsing the dialog.
include a checkbox with the given label.
*`checkboxChecked` Boolean (optional) - Initial checked state of the
Restores finished transactions. This method can be called either to install purchases on additional devices, or to restore purchases for an application that the user deleted and reinstalled.
[The payment queue](https://developer.apple.com/documentation/storekit/skpaymentqueue?language=objc) delivers a new transaction for each previously completed transaction that can be restored. Each transaction includes a copy of the original transaction.
@@ -55,13 +55,23 @@ Removes all listeners, or those of the specified `channel`.
*`channel` String
*`...args` any[]
Send a message to the main process asynchronously via `channel`, you can also
send arbitrary arguments. Arguments will be serialized as JSON internally and
hence no functions or prototype chain will be included.
Send an asynchronous message to the main process via `channel`, along with
arguments. Arguments will be serialized with the [Structured Clone
Algorithm][SCA], just like [`window.postMessage`][], so prototype chains will not be
included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will
throw an exception.
> **NOTE**: Sending non-standard JavaScript types such as DOM objects or
> special Electron objects is deprecated, and will begin throwing an exception
> starting with Electron 9.
The main process handles it by listening for `channel` with the
[`ipcMain`](ipc-main.md) module.
If you need to transfer a [`MessagePort`][] to the main process, use [`ipcRenderer.postMessage`](#ipcrendererpostmessagechannel-message-transfer).
If you want to receive a single response from the main process, like the result of a method call, consider using [`ipcRenderer.invoke`](#ipcrendererinvokechannel-args).
### `ipcRenderer.invoke(channel, ...args)`
*`channel` String
@@ -69,9 +79,15 @@ The main process handles it by listening for `channel` with the
Returns `Promise<any>` - Resolves with the response from the main process.
Send a message to the main process asynchronously via `channel` and expect an
asynchronous result. Arguments will be serialized as JSON internally and
hence no functions or prototype chain will be included.
Send a message to the main process via `channel` and expect a result
asynchronously. Arguments will be serialized with the [Structured Clone
Algorithm][SCA], just like [`window.postMessage`][], so prototype chains will not be
included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will
throw an exception.
> **NOTE**: Sending non-standard JavaScript types such as DOM objects or
> special Electron objects is deprecated, and will begin throwing an exception
The Electron team is currently undergoing an initiative to modernize our API in a few concrete ways. These include: updating our modules to use idiomatic JS properties instead of separate `getPropertyX` and `setpropertyX`, converting callbacks to promises, and removing some other anti-patterns present in our APIs. The current status of the Promise intiative can be tracked in the [promisification](promisification.md) tracking file.
The Electron team is currently undergoing an initiative to modernize our API in a few concrete ways. These include: updating our modules to use idiomatic JS properties instead of separate `getPropertyX` and `setpropertyX`, converting callbacks to promises, and removing some other anti-patterns present in our APIs. The current status of the Promise initiative can be tracked in the [promisification](promisification.md) tracking file.
As we work to perform these updates, we seek to create the least disruptive amount of change at any given time, so as many changes as possible will be introduced in a backward compatible manner and deprecated after enough time has passed to give users a chance to upgrade their API calls.
The Electron team is currently undergoing an initiative to convert callback-based functions in Electron to return Promises. During this transition period, both the callback and Promise-based versions of these functions will work correctly, and will both be documented.
To enable deprecation warnings for these updated functions, use the `process.enablePromiseAPI` runtime flag.
When a majority of affected functions are migrated, this flag will be enabled by default and all developers will be able to see these deprecation warnings. At that time, the callback-based versions will also be removed from documentation. This document will be continuously updated as more functions are converted.
@@ -5,14 +5,7 @@ The Electron team is currently undergoing an initiative to convert separate gett
## Candidates
*`BrowserWindow`
*`fullscreen`
*`simpleFullscreen`
*`alwaysOnTop`
*`title`
*`documentEdited`
*`hasShadow`
*`menubarVisible`
*`visibleOnAllWorkspaces`
*`crashReporter` module
*`uploadToServer`
*`webFrame` modules
@@ -41,13 +34,8 @@ The Electron team is currently undergoing an initiative to convert separate gett
*`fullscreenable`
*`movable`
*`closable`
*`backgroundThrottling`
*`NativeImage`
*`isMacTemplateImage`
*`SystemPreferences` module
*`appLevelAppearance`
*`webContents` module
*`audioMuted`
*`frameRate`
*`userAgent`
*`zoomFactor`
*`zoomLevel`
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.