* chore: remove c-style conversion for vibrantView (#29724)
* fix: ensure set vibrancy with invalid value is a no-op (#29795)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
To enable/disable window resizing we set/unset WS_THICKFRAME style
flag on the window. Window's frame styles are cached so we need to
call SetWindowPos with the SWP_FRAMECHANGED flag set to update
cache properly.
Co-authored-by: Cezary Kulakowski <cezary@openfin.co>
* fix: maximized state calculation for non-resizable windows
* refactor: clean up NSRect comparison
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Images that used the inline link format do not show up on Docusaurus or
the old website infrastructure. There are only 2 guides using it so it
is faster to change the format rather than figuring out why the parsin
logic does not work.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Ref: https://github.com/electron/electronjs.org-new/issues/84
Co-authored-by: Antón Molleda <amolleda@gmail.com>
chrome now use developer.chrome.com/docs/extensions/* instead of developer.chrome.com/extensions/*
Co-authored-by: 祈緒ちゃん - Kiochan <sunxingchen@live.com>
* fix: show maximized frameless window
* test: show maximized transparent window
* fix: test using wrong bounds
BrowserWindow will be sized to the workArea when the Windows taskbar is
visible.
Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>
* Update process-model.md
the demo have two error:
- at macos, close all window, the app will not quite, unless press cmd + q
- attach preload.js, use preload prop that is member of `webPreferences` property of `BrowserWindow` controller argument
* Update docs/tutorial/process-model.md
Co-authored-by: Erick Zhao <erick@hotmail.ca>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
Co-authored-by: Erick Zhao <erick@hotmail.ca>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
* Typo in launch-app-from-url-in-another-app.md
Code snippet for the info.plist example had html formatting. Removed.
* Fix paddings
Co-authored-by: Larry Kluger <larry.kluger@docusign.com>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
* fix: handle nullish WebContentsView in UpdateDraggableRegions
* build: nogncheck on webcontentsimpl include
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
* docs: fix camelcase in menu example and add hint to deal with TS error
hideothers -> hideOthers (the TS compiler caught this)
The TypeScript compiler also did not like the pattern used to
switch between platforms for submenus was loosing the type information
of the literal constants and generalized them as strings which
conflicts with the type definition of MenuItemConstructorOptions.
* docs: Fix spelling, added hint to TypeScript
Without explicitly stating the type for the const template TypeScript does not create a
with the correct shape due to generalization to strings.
* remove ts hints
Co-authored-by: a@b <a@b>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
* chore: more crash-keys for gin::Wrappable debugging
* fix namespace for Event
* Update crash_keys.cc
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* fix: console window popping up when --enable-logging passed on windows
* chore: update patches
* clang format
* chore: update patches
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
* docs: mention sandboxing in security docs
* link to sandboxing tutorial
* Update security.md
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* chore: bump chromium in DEPS to 93.0.4567.0
* chore: update patches
* chore: bump chromium in DEPS to 93.0.4568.0
* chore: bump chromium in DEPS to 93.0.4569.0
* chore: update patches
(cherry picked from commit e710b8ea15f0ec08966e89d37e6ff73414180e6b)
* 3000931: Code health: remove base::ListValue from DevToolsEmbedderMessageDispatcher
https://chromium-review.googlesource.com/c/chromium/src/+/3000931
(cherry picked from commit 44c00b98f27621f6345bcf5d78f3e2649147135b)
* chore: bump chromium in DEPS to 93.0.4570.0
* chore: update patches
* chore: bump chromium in DEPS to 93.0.4571.0
* chore: update patches
* chore: bump chromium in DEPS to 93.0.4573.0
* chore: bump chromium in DEPS to 93.0.4574.0
* chore: bump chromium in DEPS to 93.0.4575.0
* chore: bump chromium in DEPS to 93.0.4576.0
* chore: bump chromium in DEPS to 93.0.4577.0
* chore: bump chromium in DEPS to 93.0.4577.3
* chore: bump chromium in DEPS to 93.0.4577.4
* 3011898: Reland "Roll src/buildtools/third_party/libc++/trunk/ 8fa879467..79a2e924d (426 commits)"
https://chromium-review.googlesource.com/c/chromium/src/+/3011898
(cherry picked from commit c46148eed8)
* 2974072: Swap base/stl_util.h to base/cxx17_backports.h in many files.
https://chromium-review.googlesource.com/c/chromium/src/+/2974072
(cherry picked from commit 4d725e44ca)
* chore: add missing header
(cherry picked from commit f3993e71ce)
* Reland "Roll src/buildtools/third_party/libc++/trunk/ 8fa879467..79a2e924d (426 commits)"
https://chromium-review.googlesource.com/c/chromium/src/+/2988699
(cherry picked from commit 797723ec83)
(cherry picked from commit 4a325c9b24)
* 2925476: Migrate t/b/{public,renderer}/platform/media to blink ns [4/6]
https://chromium-review.googlesource.com/c/chromium/src/+/2925476
(cherry picked from commit 0930c0ee41)
* 2974074: Remove base/cxx17_backports.h from stl_util.h.
https://chromium-review.googlesource.com/c/chromium/src/+/2974074
(cherry picked from commit a7b53b61f4)
* fixup: 2974074: Remove base/cxx17_backports.h from stl_util.h.
(cherry picked from commit af5da4dcb1)
* chore: update patches
* fix: invalid operands compilation error
(cherry picked from commit 6fa6f8acb9)
* 3001416: Fix -Wimplicit-int-float-conversion.
https://chromium-review.googlesource.com/c/chromium/src/+/3001416
(cherry picked from commit b2e9f2212e)
* 3022548: Removing windows.h includes from some base headers
https://chromium-review.googlesource.com/c/chromium/src/+/3022548
(cherry picked from commit 8b48103907)
* 3029258: Remove unused JobEventDetails::Type enum values
https://chromium-review.googlesource.com/c/chromium/src/+/3029258
Cherry picked from c15df3a109
Co-Authored-By: Shelley Vohr <shelley.vohr@gmail.com>
* 3029185: printing: Use mojom::PrinterType instead of PrinterType
https://chromium-review.googlesource.com/c/chromium/src/+/3029185
(cherry picked from commit d16fab76fb)
* Update application_info_win.cc
(cherry picked from commit 6e187f8617)
* include windows.h in process_singleton_win.cc
(cherry picked from commit af58ad2d9d)
* chore: bump chromium in DEPS to 93.0.4577.8
* chore: update patches
* do not create a new UserScriptManager every time the accessor is called
(cherry picked from commit 24a71035ab)
* chore: Revert "Roll clang llvmorg-13-init-14732-g8a7b5ebf-2 : llvmorg-13-init-15040-gc10947b5-1"
* chore: remove no longer needed patch
* Update the "py" wheel to a version that is compatible with pytest-6.2.2.
https://chromium-review.googlesource.com/c/chromium/src/+/3044950
* chore: bump chromium in DEPS to 93.0.4577.15
* chore: update patches
* chore: fixup parallel/test-errors-systemerror node test
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* fix: increace main thread stack size on windows x86
* chore: improve quit-on-crashed-event spec
* chore: add debug logs
* Revert "chore: add debug logs"
This reverts commit 0be81ae07c.
* chore: use a reliable crash endpoint
Co-authored-by: Stephen Wang <wangwenqiang.wwq@bytedance.com>
Co-authored-by: Deepak Mohan <hop2deep@gmail.com>
Change app-quit link definition, so both window-all-closed and app-quit redirects to appropriate sites.
Co-authored-by: Davenury <57959794+Davenury@users.noreply.github.com>
* chore: update releases to 8 weeks in CONTRIBUTING
* chore: update support.md for four version support
Co-authored-by: Keeley Hammond <vertedinde@electronjs.org>
Co-authored-by: VerteDinde <khammond@slack-corp.com>
* fix: window ordering on mac
* chore: fix flaky fullscreen inheritance test
* chore: disable fullscreen test on mac arm
Co-authored-by: deepak1556 <hop2deep@gmail.com>
* build: fix building with enable_plugins = false
* chore: update patches
Co-authored-by: Milan Burda <milan.burda@gmail.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
* docs: mention contextIsolation in ipc-main example
* chore: update patches
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
* feat: enable windows control overlay on macOS
* address review feedback
* chore: address review feedback
* Address review feedback
* update doc per review
* only enable WCO when titleBarStyle is overlay
* Revert "only enable WCO when titleBarStyle is overlay"
This reverts commit 1b58b5b1fc.
* Add new titleBarOverlay property to manage feature
* spelling fix
* Update docs/api/frameless-window.md
Co-authored-by: Samuel Attard <sam@electronjs.org>
* Update shell/browser/api/electron_api_browser_window.cc
Co-authored-by: Samuel Attard <sam@electronjs.org>
* update per review feedback
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Samuel Attard <sam@electronjs.org>
* Update dark-mode.md
Fix the unmatched css file name
* Update docs/tutorial/dark-mode.md
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jenux <ijenux@gmail.com>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
The new installs of the python module, python-dbusmock, is broken for
python2. The tests still run fine on linux machine in Electron's
pipeline setup on CircleCI, because the docker image used has
the non-broken version of python-dbusmock for python2 installed.
But running electron tests on any other linux machine would fail if
they don't have this non-broken version of python-dbusmock for python2
installed, already, which is the case for most of the machines.
Moreover, Python2 is deprecated now. So it would be better if we change
the python interpreter in script/spec-runner.js file to python3, for
which all the python modules are updated and working.
Notes: none
Co-authored-by: Rituka Patwal <rituka.patwal@postman.com>
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: Samuel Attard <sam@electronjs.org>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* fix: do not cancel CORS preflight request on proxy auth. (#29266)
* fix: do not cancel CORS preflight request on proxy auth.
If connecting via proxy, preflight request can receive 407
header response from proxy. This does not mean request
was finished even though it received headers (from proxy,
not the destination server), so prevent "completing"
and most importantly deleting it, which causes request
to be canceled in network layer. Just continue to monitor it
and await proper response from server. Also add circut breaker
to cancel request if proxy auth failed 3 times (for example
user keeps cancelling auth). This behavior happens only
when app registered WebRequest api listeners.
* Port chromium webrequest changes to electron code.
Move relevant parts of chromium WebRequestProxyingURLLoaderFactory from
https://chromium-review.googlesource.com/c/chromium/src/+/2011781
into electron ProxyingURLLoaderFactory.
* Update code to upstreamed version and remove retyr count failsafe.
Co-authored-by: Milan Burda <milan.burda@gmail.com>
* chore: add required header
Co-authored-by: marekharanczyk <48673767+marekharanczyk@users.noreply.github.com>
Co-authored-by: Milan Burda <milan.burda@gmail.com>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* fix: microtasks policy in CreateEnvironment
Microtasks policy should not be updated for the renderer because
`NodeBindings::CreateEnvironment` might be entered with or without
`UvRunOnce()` on stack. One of the examples of such calls is
`window.open()` which is possible to invoke while `uv_run()` is still
running (e.g. with `setImmediate()`).
All in all, it doesn't matter that much which policy we use since
`v8::MicrotasksScope` has a check for the policy in its destructor and
no commits will be made if the policy is `kExplicit`. It is important,
however, to not change the policy in the middle of `UvRunOnce()` so we
should respect whatever we currently have and move on.
Fix: #29463
* Move test to a better place
* Update spec-main/fixtures/crash-cases/setimmediate-window-open-crash/index.html
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* Update spec-main/fixtures/crash-cases/setimmediate-window-open-crash/index.html
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* simplify crash-case
* comment
* fix comment
Co-authored-by: Fedor Indutny <fedor@indutny.com>
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Fedor Indutny <indutny@signal.org>
* ci: run linux arm tests on CircleCI
* cleanup electron dirs after testing
(cherry picked from commit 1c0a6045fb)
* use start-stop-daemon to kill Xvfb
(cherry picked from commit 1d10a68c31)
* Update represented-file fiddle.
* add index and code back to guide
Co-authored-by: Kevin Hartman <kevin@hart.mn>
Co-authored-by: Ethan Arrowood <ethan.arrowood@gmail.com>
* build: restore workspace on osx builds to get docs-only-change file
* build: clean up attached workspace before checking out from cache
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Unlike the other files, this file had its executable bit set in its file
mode. This change removes the executable bit to align its file mode with
the rest of the files.
Signed-off-by: Darshan Sen <raisinten@gmail.com>
Co-authored-by: Darshan Sen <raisinten@gmail.com>
* chore: bump chromium in DEPS to 93.0.4536.0
* chore: update patches
* Make InkDrop a View class property
Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2918475
Replace old views::Button::ink_drop() calls with views::InkDrop::Get()
* Convert use of gfx::ImageSkia to ui::ImageModel for WidgetDelegates
Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2935942
Update GetWindowIcon(), GetWindowAppIcon(), and GetDevToolsWindowIcon()
to return ui::ImageModel instead of gfx::ImageSkia.
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* chore: bump chromium in DEPS to 93.0.4533.0
* chore: update patches
* chore: bump chromium in DEPS to 93.0.4534.0
* chore: update patches
* chore: bump chromium in DEPS to 93.0.4535.0
* chore: remove PdfViewerDocumentProperties from feature-flag conditional
https://chromium-review.googlesource.com/c/chromium/src/+/2938363
This feature is now enabled by default upstream.
* chore: remove kPdfViewerPresentationMode from feature-flag conditional
https://chromium-review.googlesource.com/c/chromium/src/+/2938037
This feature is now enabled by default upstream.
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* remove version information from html
* change format for readability
* clarify which console the message should appear in
* minor changes to renderer.md
* update UI on click instead of developer console
* remove node-integration and fix md
* update content
* chore: remove ****
Co-authored-by: Jeremy Foster <jeremy.foster@live.com>
Co-authored-by: Ethan Arrowood <ethan.arrowood@gmail.com>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
Right now, if executing `xcrun` fails, then the error message prints the
second argument to the `xcrun.py` script, which is the first argument to
the tool that `xcrun` is executing, making the whole error message quite
confusing.
Consider the following error:
```
python ../../third_party/squirrel.mac/build/xcrun.py dtrace -h -s /private/tmp/20210531211008-def376dc/src/third_party/squirrel.mac/vendor/ReactiveObjC/ReactiveObjC/RACSignalProvider.d -o /private/tmp/20210531211008-def376dc/src/out/release/gen/third_party/squirrel.mac/dtrace/RACSignalProvider.h
xcrun script '-h' failed with code '71':
xcrun: error: can't exec '/tmp/20210531211008-def376dc/dtrace' (errno=Permission denied)
```
The command that `xcrun` is executing is `dtrace`, but the error just
mentions the `-h` flag.
Notes: none
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
Co-authored-by: Juan Cruz Viotti <jv@jviotti.com>
* fix: correctly handle shifted char in accelerator
* test: use actual accelerator of NSMenuItem
* chore: simplify KeyboardCodeFromStr
* chore: GetAcceleratorTextAt is testing only
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* feat: add experimental cookie encryption support on macOS
* chore: fix TODO
* update patches
* feat: make cookie encryption work on windows
* chore: update cookie encryption support comments
* fix: only call OSCrypt::Init on windows
* chore: make cookie encryption work on linux
* Update shell/browser/net/system_network_context_manager.cc
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* chore: fix lint
* chore: update patches
* chore: update patches to upstreamed variants
* chore: use chrome ::switches constants
* chore: remove bad patch
* build: disable cookie encryption by default
* chore: update patches
* fix: provide std::string to NoDestructor
* chore: fix macos, nodestructor syntax
* build: fix macOS build due to mismatch in DEFINE
Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Electron already seems to support `cygwin`, so `msys` is a natural
addition. This is the only required change as far as I can see on my
local development environment, as otherwise the build scripts don't
realize that msys = windows.
Notes: none
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
Co-authored-by: Juan Cruz Viotti <jv@jviotti.com>
* improve progress bar fiddle
* add comments to code snippet
* edits to progress-bar tutorial
* remove versions and nodeIntegration
* limit line length to 100
* implement standard linter suggestions
* add indeterminate and clear timers
* update to have reader replace all of main.js
* remove extra button
* loop the progress bar
* add logic to show reset state briefly
* Update docs/tutorial/progress-bar.md
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* chore: fix lint
Co-authored-by: Jeremy Foster <jeremy.foster@live.com>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* refactor: use main in release-notes
* fix: use default_branch in release-notes (#29415)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* remove version info from index.html page
* remove nodeIntegration
* format code and update readme
* add note to user in index.html
Co-authored-by: Jeremy Foster <jeremy.foster@live.com>
* Update docs for keyboard shortcuts
* Add a fiddle for web-apis
* Apply suggestions from code review
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* Cleanup a few formatting errors and missed copies
* Add descriptions to index.html
* Focus on renderer
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* test: re-enable nan test: typedarrays-test.js
Fixes#28414.
I've confirmed this fix wfm on Linux. Pushing into a PR to get CI to run
it out on Win and Mac platforms too.
* chore: clarify comment
* test: fix NAN test string alignment
* test: (wip) add ldflags, archive file for libc++
* test: (wip) add libc++ to CircleCI
* test: (wip) add llvm flags
* test: (wip) change ldflag syntax
* test: (wip) build libc++abi as static
* fix: correct ldflags
* test: add ld env
* fix: do not commit this
* test: add lld from src to circleci
* test: add lld link to ld
* chore: preserve third_party
* seems legit
* sam swears this works kinda sort of sometimes'
:
* build: add gn visibility patch
* chore: update patches
* build: check for flatten_relative_to = false
* build: upload zip files, add to release.js validation
* debug: what the hell gn
* build: add libcxx gni to lint ignore
Linting the file adjusted the licenses array, which only contains
one value, and causes the gn check to fail later
* build: also use nan-spec-runner flags on Windows
* build: add linked flags for win32 only
* build: build libc++ as source on win
* build: clean up patch, add -fPIC for IA32
* build: delete libcxx .a files from root
* build: rename libc++.zip, clean up upload per platform
* build: fix gni lint
* ci: add libcxx gen to circleci config
* build: correct libcxx-object syntax
Co-authored-by: Samuel Attard <sam@electronjs.org>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: clavin <clavin@electronjs.org>
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Samuel Attard <sam@electronjs.org>
* Working
* Working
* Make the native-file drag and drop documents use context bridge
* Add per-file sections
* Use the updated link format
* Use path.join instead of string interpolation.
Co-authored-by: Antón Molleda <molant@users.noreply.github.com>
* Use fs.promises
Co-authored-by: Antón Molleda <molant@users.noreply.github.com>
* Update docs/tutorial/native-file-drag-drop.md
Co-authored-by: Antón Molleda <molant@users.noreply.github.com>
* fix formatting
Co-authored-by: Antón Molleda <molant@users.noreply.github.com>
* Update docs/tutorial/native-file-drag-drop.md
Co-authored-by: Antón Molleda <molant@users.noreply.github.com>
* Use more path.join instead of interpolation
* Update with PR suggestions
* Remove process.cwd() and add more example elements
* Minor text fix
* Fix typo
Co-authored-by: Erick Zhao <erick@hotmail.ca>
Co-authored-by: Antón Molleda <molant@users.noreply.github.com>
Co-authored-by: Erick Zhao <erick@hotmail.ca>
All the other argument headers were h3 (`###`) but `--force-fieldtrials` was h2 (`##`) for some reason.
I changed it to make it consistent with the others.
Checkout fast was slower and checkout-and-save-cache sometimes didn't save a cache... Basically this unifies our checkout-and-save-cache steps under the existing electron-build command so less steps are duplicated and renames checkout-fast and checkout-and-save-cache to be more aligned with what they actually do.
* `checkout-fast` --> `checkout-for-workspace`: Checks out a fully synced directory and then persists to a workspace layer
* `checkout-and-save-cache` --> `make-src-cache`: Ensures that there is a valid and accurate src cache for this commit. It doesn't always check it out, sometimes it early outs via the src-cache-marker
Notes: no-notes
* fix: prevent crash when error occurs during event emitter CallMethod
* wip: emit error event within trycatch
* fix: handle uncaught exceptions within node on web_contents init
* fix: create gin_helper::CallMethodCatchException
* test: add web-contents create crash to test cases
* test: clean up test data for web-contents crash
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* fix: convert CatchException to WebContents static helper method
* fix: restore try_catch to callsite
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
This patch says we can remove it once app.allowRendererProcessReuse was removed, and uh, it has been removed. So let's remove this patch and see what happens.
* fix: allow Node.js to manage microtasks queue
When `uv_run()` resulted in invocation of JS functions the microtask
queue checkpoint in Node's CallbackScope was a no-op because the
expected microtask queue policy was `kExplicit` and Electron ran under
`kScoped` policy. This change switches policy to `kExplicit` right
before `uv_run()` and reverts it back to original value after `uv_run()`
completes to provide better compatibility with Node.
* add comment
* Added loadFile instead of loadURL in the example
For loading a local file the loadFile API is a better way to load any html file in the Renderer process.
Have changed it in the example.
* Changed backticks to single quote to correct for linting error
In order to correct the linting error reported by the bot, I have changed backticks to single quote in the example.
This PR ensures that all API modules are present in the README doc,
as there were a couple missing. It also formats all modules to contain
a level-1 heading and a blockquote description.
This page is just a table writing out the contents of an array in
the Chromium source code. We don't actively maintain it, and
it's only referenced in one API, so it makes sense to just
link directly to the code here.
The `vendor` directory is a remnant of times long since gone when we had
brightray and libchromiumcontent (never forget). It is currently the
hope to a single header file that afaics we do not need anymore and
randomly pyyaml gets cloned there but that is easily movable.
This commit removes all references to the vendor directory from scripts,
docs, helpers, etc. and removes the directory itself.
* build: disable pseudolocales in Electron
* Update build/args/all.gn
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
When creating a widget on linux the bounds are restricted to the screen
size, when calling SetSize / SetBounds they are not. This fixes this
initialization issue by calling SetBounds after widget creation.
Noticed this issue while running linux tests on xvfb with a screen size
smaller than the default electron window size (resulted in a failed
test).
* chore: update ts parser for description comment fixes
* docs: strongly type the getUserDefault API
* spec: add getUserMedia type assertions to smoke run
This fixes a flake on linux CI which started recently where the "write"
promise is being rejected after the request has been aborted /
cancelled. In this case we should drop the error to the floor but
instead we pass it down the stack where it eventually emits a now
unhandled error event.
Example failure: https://app.circleci.com/pipelines/github/electron/electron/38072/workflows/c1faf19b-aa41-4f99-a564-165729222859/jobs/838813
Verified fix by running the test that caused it 10000 times before fix
and 10000 times after. ~50 failures before, 0 after.
* feat: enable nativeWindowOpen by default
* set nativeWindowOpen: false on spec/ main window
* update snapshots
* fix tests
* fix test
* fix webview test missing allowpopups
* fix other test
* update default
* fix: invoke the window open handler for _blank links
* feat: add disposition to setWindowOpenHandler details
* fix: pass postData to new-window event
* postData can be heterogeneous
* fix type of postBody
* fix type of UploadFile and UploadRawData to be discriminated unions
* exclude the empty string from additionalFeatures
* add a test
* add postBody and referrer to setWindowOpenHandler args
* appease typescript
* Update api-browser-window-spec.ts
* update snapshots
* refactor: clean up webFrame implementation to use gin wrappers
The previous implementation of webFrame in the renderer process leaked
sub-frame contexts and global objects across the context boundaries thus
making it possible for apps to either maliciously or accidentally
violate the contextIsolation boundary.
This re-implementation binds all methods in native code directly to
content::RenderFrame instances instead of relying on JS to provide a
"window" with every method request. This is much more consistent with
the rest of the Electron codebase and is substantially safer.
* chore: un-re-order for ease of review
* chore: pass isolate around instead of ErrorThrower
* chore: fix rebase typo
* chore: remove unused variables
As of #28480 we now dynamically determine the LSMinimumSystemVersion
value as part of the build process. To avoid this changing and no one
realizing we now have this assert which will trip during a Chromium
upgrade if they bump the minimum supported macOS version so we can
update our documentation appropriately.
* fix: move widget maximization check
* fix linting error
* change workaround to only effect transparent windows
* disable menu maximize and restore for transparent windows
* disable double clicking title bar max/unmax for transparent windows
* add docs change and address review
* fix: reject task when description exceeds 260 characters
* Switched out wcslen() for size() [linear -> constant time]
* Included comment describing the need for the additional check
* Added information about character limit to documentation
* Added newline character to end of jump-list-category.md
* chore: add types for electron_renderer_web_frame binding
* chore: use keyof for getWebPreference type
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
* feat: Use GtkFileChooserNative if available to support XDG portals
With this commit, users on KDE/plasma will finally have support in
Electron for their native file choosers dialogs.
* fix: namespace
* fix: labels were reversed
* fix: lint issue
* fix: clean up some implementation
* fix: remove deprecation branch
* fix: remove unused header
* fix: remove unused gi18n.h include
Not sure why this is
* fix: add the set_data call into the mirrored SetGtkTransientForAura func
* fix: remove gmodule support and use native for the dialog regardless
* fix: undo yarn.lock changes
* fix: lint
* fix: remove x11 unncessary x11 include
* fix: lint
* fix: remove SetGtkTransientForAura
* Revert "fix: remove gmodule support and use native for the dialog regardless"
This reverts commit 062db5951e59cf99fcce566ab8ebab7ddc031aeb.
* fix: add support in a backwards compatible way
Use GModule to dynamically load functions from libgtk in order to
support GtkNativeDialog.
* fix: lint
* docs: update comment
* Revert "fix: remove x11 unncessary x11 include"
This reverts commit 589cff583add458c25ca5a2202232fdff916c673.
* fix: compiler errors
* fix: int -> x11::time
* fix: move GtkNativeDialog static data to global state
* fix: revert yarn.lock change
* update: for code review comments
* fix: remove functional header
* fix: variable name
* fix: rename GTK native initalization func
* Help out the compiler
* Help out the compiler
* Help out the compiler
* Fix function signature
* Remove unused header
* Rename optional boolean for GtkFileChooserNative support
* Add back in USE_X11 check
* Satisfy linter
* Resatisfy linter
* Fix alignment of if
* Fix alignment of arguments
* linting...
* fix: add back in the i18n hack
* fix: lint
* Respond to some review comments
* fix: lint
* Make adding filter agnostic
* fix: transform is in place
* fix: remove std::transform because not c++17
* Remove unused include
* fix: address Cheng's review
* fix: Remove unused header
When a patch targets a file using CRLF line endings, they need to be
retained in the patch file. Otherwise the patch will fail to apply
due to being unable to find surrounding lines with matching whitespace.
* Fix custom scheme not registered as service worker scheme
* ServiceWorker loaders do not have WebContents associated
* Add test for service worker
* Revert "Fix custom scheme not registered as service worker scheme"
This reverts commit a249235b22.
* Add scheme to ServiceWorkerSchemes
* docs: update Node global symbols example to use contextBridge
* Trigger Build
* docs: change Node API example to show how to expose a crypto API
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* docs: Fix lint warning for crypto code sample
* docs: update node API example description to emphasize APIs instead of symbols
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
desktopCapture.getSources() returns a promise which should resolve
when capturing finishes. Internally it creates an instance of
DesktopCapturer which is responsible for resolving or rejecting
the promise.
Between the time DesktopCapturer starts capturing frames and when
it finishes, it's possible for its handle to be GC'd leading to
it never resolving.
These changes pin the instance of DesktopCapturer until it either
finishes or errors.
fixes#25595
See https://github.com/SeleniumHQ/selenium/issues/9286
The existing snippet works with selenium-webdriver <= 3.6.0, but any more recent version seems to require using 'goog:chromeOptions' and forBrowser('chrome').
* docs: Update Quick Start Guide for Electron 12
With `contextIsolation` enabled by default in Electron 12, the Getting Started Guide no longer works as it is written. In order for the basic example to display values from `process.versions`, we need to add a `preload.js` to the example.
* fix: annotate preload code block with a language
* docs: update quick-start Fiddle example to use preload to provide version info
* fix: ensure example files end in a newline
* docs: add security warning to instructions for turning off contextIsolation
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
* docs: treat preload as an adjective instead of a noun
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
* test: running child app under ASan might receive SIGKILL
* test: renderer process of webview might receive SIGKILL under ASan
* test: increase timeout for asan build
* fix: handle a nil backgroundColor in win.getBackgroundColor()
* spec: add crash case
* fix: update to fix native_views transparent color
* chore: fix lint
* fix: ensure child window transparency works
Windows opened via window.open and intecepted via setWindowOpenHandler
or the `new-window` event should (a) have the correct background color
and (b) that background color should be transparent if specified.
The changes in api_web_contents fix (a) and the changes in
web_contents_preferences fix (b).
Notes: Child windows with specified background colors or transpency now
work as intended
* fix: set background_color in blink prefs apply logic
* chore: update for PR comments
* Add a condition to crashReporter deprecate log
When developer set submitURL to '' crash reports will be saved at `...\AppData\Roaming\...\Crashpad\reports`, will not be uploaded to the server.
So at this time `deprecate.log('Sending uncompressed crash reports....')` is unnecessary.
* Update lib/browser/api/crash-reporter.ts
change to check uploadToServer
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
about: Create a report to help us improve Electron
---
<!-- As an open source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
-->
### Preflight Checklist
<!-- Please ensure you've completed the following steps by replacing [ ] with [x]-->
* [ ] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [ ] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [ ] I have searched the issue tracker for an issue that matches the one I want to file, without success.
### Issue Details
* **Electron Version:**
* <!-- (output of `node_modules/.bin/electron --version`) e.g. 4.0.3 -->
* **Operating System:**
* <!-- (Platform and Version) e.g. macOS 10.13.6 / Windows 10 (1803) / Ubuntu 18.04 x64 -->
* **Last Known Working Electron version:**
* <!-- (if applicable) e.g. 3.1.0 -->
### Expected Behavior
<!-- A clear and concise description of what you expected to happen. -->
### Actual Behavior
<!-- A clear and concise description of what actually happened. -->
### To Reproduce
<!--
Your best chance of getting this bug looked at quickly is to provide an example.
-->
<!--
For bugs that can be encapsulated in a small experiment, you can use Electron Fiddle (https://github.com/electron/fiddle) to publish your example to a GitHub Gist and link it your bug report.
-->
<!--
If Fiddle is insufficient to produce an example, please provide an example REPOSITORY that can be cloned and run. You can fork electron-quick-start (https://github.com/electron/electron-quick-start) and include a link to the branch with your changes.
-->
<!--
If you provide a URL, please list the commands required to clone/setup/run your repo e.g.
```sh
$ git clone $YOUR_URL -b $BRANCH
$ npm install
$ npm start || electron .
```
-->
### Screenshots
<!-- If applicable, add screenshots to help explain your problem. -->
### Additional Information
<!-- Add any other context about the problem here. -->
description:Please ensure you've completed all of the following.
options:
- label:I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
required:true
- label:I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
required:true
- label:I have searched the [issue tracker](https://www.github.com/electron/electron/issues) for a feature request that matches the one I want to file, without success.
required:true
- type:input
attributes:
label:Electron Version
description:What version of Electron are you using?
placeholder:12.0.0
validations:
required:true
- type:dropdown
attributes:
label:What operating system are you using?
options:
- Windows
- macOS
- Ubuntu
- Other Linux
- Other (specify below)
validations:
required:true
- type:input
attributes:
label:Operating System Version
description:What operating system version are you using? On Windows, click Start button > Settings > System > About. On macOS, click the Apple Menu > About This Mac. On Linux, use lsb_release or uname -a.
placeholder:"e.g. Windows 10 version 1909, macOS Catalina 10.15.7, or Ubuntu 20.04"
validations:
required:true
- type:dropdown
attributes:
label:What arch are you using?
options:
- x64
- ia32
- arm64 (including Apple Silicon)
- Other (specify below)
validations:
required:true
- type:input
attributes:
label:Last Known Working Electron version
description:What is the last version of Electron this worked in, if applicable?
placeholder:11.0.0
- type:textarea
attributes:
label:Expected Behavior
description:A clear and concise description of what you expected to happen.
validations:
required:true
- type:textarea
attributes:
label:Actual Behavior
description:A clear description of what actually happens.
validations:
required:true
- type:input
attributes:
label:Testcase Gist URL
description:If you can reproduce the issue in a standalone test case, please use [Electron Fiddle](https://github.com/electron/fiddle) to create one and to publish it as a [GitHub gist](https://gist.github.com) and put the gist URL here. This is **the best way** to ensure this issue is triaged quickly.
placeholder:https://gist.github.com/...
- type:textarea
attributes:
label:Additional Information
description:If your problem needs further explanation, or if the issue you're seeing cannot be reproduced in a gist, please add more information here.
description:Please ensure you've completed the following steps by replacing [ ] with [x]
value:|
* [ ] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [ ] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [ ] I have searched the issue tracker for a feature request that matches the one I want to file, without success.
validations:
required:true
description:Please ensure you've completed all of the following.
options:
- label:I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
required:true
- label:I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
required:true
- label:I have searched the [issue tracker](https://www.github.com/electron/electron/issues) for a feature request that matches the one I want to file, without success.
about: Your app was rejected from the Mac App Store for using private API's
---
<!-- As an open source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
-->
### Preflight Checklist
<!-- Please ensure you've completed the following steps by replacing [ ] with [x]-->
* [ ] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [ ] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
### Issue Details
* **Electron Version:**
* <!-- (output of `node_modules/.bin/electron --version`) e.g. 4.0.3 -->
### Rejection Email
<!-- Paste the contents of your rejection email here, censoring any private information such as app names.-->
### Additional Information
<!-- Add any other context about the problem here. -->
"Chromium has updated the mac_deployment_target, please update this assert, update the supported versions documentation (docs/tutorial/support.md) and flag this as a breaking change")
To create a window without chrome, or a transparent window in arbitrary shape,
you can use the [Frameless Window](frameless-window.md) API.
## Showing window gracefully
## Showing the window gracefully
When loading a page in the window directly, users may see the page load incrementally, which is not a good experience for a native app. To make the window display
without visual flash, there are two solutions for different situations.
When loading a page in the window directly, users may see the page load incrementally,
which is not a good experience for a native app. To make the window display
without a visual flash, there are two solutions for different situations.
## Using `ready-to-show` event
### Using the `ready-to-show` event
While loading the page, the `ready-to-show` event will be emitted when the renderer
process has rendered the page for the first time if the window has not been shown yet. Showing
@@ -48,7 +49,7 @@ event.
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`
## Setting `backgroundColor`
### Setting the `backgroundColor` property
For a complex app, the `ready-to-show` event could be emitted too late, making
the app feel slow. In this case, it is recommended to show the window
@@ -213,16 +214,13 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
*`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.
*`titleBarStyle` String (optional)_macOS__Windows_ - The style of window title bar.
Default is `default`. Possible values are:
*`default` - Results in the standard gray opaque Mac title
bar.
*`hidden` - Results in a hidden title bar and a full size content window, yet
the title bar still has the standard window controls ("traffic lights") in
the top left.
*`hiddenInset` - Results in a hidden title bar with an alternative look
*`default` - Results in the standard title bar for macOS or Windows respectively.
*`hidden` - Results in a hidden title bar and a full size content window. On macOS, the window still has the standard window controls (“traffic lights”) in the top left. On Windows, when combined with `titleBarOverlay: true` it will activate the Window Controls Overlay (see `titleBarOverlay` for more information), otherwise no window controls will be shown.
*`hiddenInset` - Only on macOS, results in a hidden title bar with an alternative look
where the traffic light buttons are slightly more inset from the window edge.
*`customButtonsOnHover` - Results in a hidden title bar and a full size
*`customButtonsOnHover` - Only on macOS, results in a hidden title bar and a full size
content window, the traffic light buttons will display when being hovered
over in the top left of the window. **Note:** This option is currently
experimental.
@@ -273,8 +271,6 @@ 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](../tutorial/sandbox.md).
*`enableRemoteModule` Boolean (optional) - Whether to enable the [`remote`](remote.md) module.
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
@@ -286,13 +282,6 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
same `partition`. If there is no `persist:` prefix, the page will use an
in-memory session. By assigning the same `partition`, multiple pages can share
the same session. Default is the default session.
*`affinity` String (optional) - When specified, web pages with the same
`affinity` will run in the same renderer process. Note that due to reusing
the renderer process, certain `webPreferences` options will also be shared
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`. _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`.
@@ -350,12 +339,10 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
[Chrome Content Scripts][chrome-content-scripts]. 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`. Defaults 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
experimental.
integration disabled unless `nodeIntegrationInSubFrames` is true. **Note:** The default
value will be changing to `true` in Electron 15.
*`webviewTag` Boolean (optional) - Whether to enable the [`<webview>` tag](webview-tag.md).
Defaults to `false`. **Note:** The
`preload` script configured for the `<webview>` will have node integration
@@ -403,6 +390,7 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
contain the layout of the document—without requiring scrolling. Enabling
this will cause the `preferred-size-changed` event to be emitted on the
`WebContents` when the preferred size changes. Default is `false`.
*`titleBarOverlay` [OverlayOptions](structures/overlay-options.md) | Boolean (optional) - When using a frameless window in conjuction with `win.setWindowButtonVisibility(true)` on macOS or using a `titleBarStyle` so that the standard window controls ("traffic lights" on macOS) are visible, this property enables the Window Controls Overlay [JavaScript APIs][overlay-javascript-apis] and [CSS Environment Variables][overlay-css-env-vars]. Specifying `true` will result in an overlay with default system colors. Default is `false`. On Windows, the [OverlayOptions](structures/overlay-options.md) can be used instead of a boolean to specify colors for the overlay.
When setting minimum or maximum window size with `minWidth`/`maxWidth`/
`minHeight`/`maxHeight`, it only constrains the users. It won't prevent you from
@@ -762,6 +750,10 @@ A `Boolean` property that determines whether the window is in simple (pre-Lion)
A `Boolean` property that determines whether the window is in fullscreen mode.
#### `win.focusable` _Windows_ _macOS_
A `Boolean` property that determines whether the window is focusable.
#### `win.visibleOnAllWorkspaces`
A `Boolean` property that determines whether the window is visible on all workspaces.
@@ -985,7 +977,7 @@ the player itself we would call this function with arguments of 16/9 and
are within the content view--only that they exist. Sum any extra width and
height areas you have within the overall content view.
The aspect ratio is not respected when window is resized programmingly with
The aspect ratio is not respected when window is resized programmatically with
APIs like `win.setSize`.
#### `win.setBackgroundColor(backgroundColor)`
@@ -1680,6 +1672,10 @@ Changes whether the window can be focused.
On macOS it does not remove the focus from the window.
#### `win.isFocusable()` _macOS_ _Windows_
Returns whether the window can be focused.
#### `win.setParentWindow(parent)`
*`parent` BrowserWindow | null
@@ -1809,3 +1805,5 @@ removed in future Electron releases.
@@ -127,7 +139,8 @@ green and non-draggable regions will be colored red to aid debugging.
### `ELECTRON_DEBUG_NOTIFICATIONS`
Adds extra logs to [`Notification`](./notification.md) lifecycles on macOS to aid in debugging. Extra logging will be displayed when new Notifications are created or activated. They will also be displayed when common actions are taken: a notification is shown, dismissed, its button is clicked, or it is replied to.
Adds extra logs to [`Notification`](./notification.md) lifecycles on macOS to aid in debugging. Extra logging will be displayed when new Notifications are created or activated. They will also be displayed when common a
tions are taken: a notification is shown, dismissed, its button is clicked, or it is replied to.
There's an alternative way to specify a chromeless window.
There's an alternative way to specify a chromeless window on macOS and Windows.
Instead of setting `frame` to `false` which disables both the titlebar and window controls,
you may want to have the title bar hidden and your content extend to the full window size,
yet still preserve the window controls ("traffic lights") for standard window actions.
yet still preserve the window controls ("traffic lights" on macOS) for standard window actions.
You can do so by specifying the `titleBarStyle` option:
#### `hidden`
Results in a hidden title bar and a full size content window, yet the title bar still has the standard window controls (“traffic lights”) in the top left.
Results in a hidden title bar and a full size content window. On macOS, the title bar still has the standard window controls (“traffic lights”) in the top left.
Results in a hidden title bar with an alternative look where the traffic light buttons are slightly more inset from the window edge.
@@ -61,6 +63,35 @@ const win = new BrowserWindow({ titleBarStyle: 'customButtonsOnHover', frame: fa
win.show()
```
## Windows Control Overlay
When using a frameless window in conjuction with `win.setWindowButtonVisibility(true)` on macOS, using one of the `titleBarStyle`s as described above so
that the traffic lights are visible, or using `titleBarStyle: hidden` on Windows, you can access the Window Controls Overlay [JavaScript APIs][overlay-javascript-apis] and
[CSS Environment Variables][overlay-css-env-vars] by setting the `titleBarOverlay` option to true. Specifying `true` will result in an overlay with default system colors.
On Windows, you can also specify the color of the overlay and its symbols by setting `titleBarOverlay` to an object with the options `color` and `symbolColor`. If an option is not specified, the color will default to its system color for the window control buttons:
```javascript
const{BrowserWindow}=require('electron')
constwin=newBrowserWindow({
titleBarStyle:'hidden',
titleBarOverlay:true
})
win.show()
```
```javascript
const{BrowserWindow}=require('electron')
constwin=newBrowserWindow({
titleBarStyle:'hidden',
titleBarOverlay:{
color:'#2f3241',
symbolColor:'#74b1be'
}
})
win.show()
```
## Transparent window
By setting the `transparent` option to `true`, you can also make the frameless
@@ -186,3 +217,5 @@ behave correctly on all platforms you should never use a custom context menu on
Emitted after `navigator.serial.requestPort` has been called and `select-serial-port` has fired if a new serial port becomes available. For example, this event will fire when a new USB device is plugged in.
*`webContents` ([WebContents](web-contents.md) | null) - WebContents checking the permission. Please note that if the request comes from a subframe you should use `requestingUrl` to check the request origin. Cross origin sub frames making permission checks will pass a `null` webContents to this handler. You should use `embeddingOrigin` and `requestingOrigin` to determine what origin the owning frame and the requesting frame are on respectively.
*`webContents` ([WebContents](web-contents.md) | null) - WebContents checking the permission. Please note that if the request comes from a subframe you should use `requestingUrl` to check the request origin. All cross origin sub frames making permission checks will pass a `null` webContents to this handler, while certain other permission checks such as `notifications` checks will always pass `null`. You should use `embeddingOrigin` and `requestingOrigin` to determine what origin the owning frame and the requesting frame are on respectively.
*`permission` String - Type of permission check. Valid values are `midiSysex`, `notifications`, `geolocation`, `media`,`mediaKeySystem`,`midi`, `pointerLock`, `fullscreen`, `openExternal`, or `serial`.
*`requestingOrigin` String - The origin URL of the permission check
*`details` Object - Some properties are only available on certain permission types.
Returns `WebContents` | undefined - A WebContents instance with the given ID, or
`undefined` if there is no WebContents associated with the given ID.
### `webContents.fromDevToolsTargetId(targetId)`
*`targetId` String - The Chrome DevTools Protocol [TargetID](https://chromedevtools.github.io/devtools-protocol/tot/Target/#type-TargetID) associated with the WebContents instance.
Returns `WebContents` | undefined - A WebContents instance with the given TargetID, or
`undefined` if there is no WebContents associated with the given TargetID.
When communicating with the [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/),
it can be useful to lookup a WebContents instance based on its assigned TargetID.
**Note:** This will be emitted for `BrowserViews` but will _not_ be respected - this is because we have chosen not to tie the `BrowserView` lifecycle to its owning BrowserWindow should one exist per the [specification](https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event).
#### Event: 'crashed' _Deprecated_
Returns:
@@ -839,59 +860,6 @@ Returns:
Emitted when `desktopCapturer.getSources()` is called in the renderer process.
Calling `event.preventDefault()` will make it return empty sources.
#### Event: 'remote-require' _Deprecated_
Returns:
*`event` IpcMainEvent
*`moduleName` String
Emitted when `remote.require()` is called in the renderer process.
Calling `event.preventDefault()` will prevent the module from being returned.
Custom value can be returned by setting `event.returnValue`.
#### Event: 'remote-get-global' _Deprecated_
Returns:
*`event` IpcMainEvent
*`globalName` String
Emitted when `remote.getGlobal()` is called in the renderer process.
Calling `event.preventDefault()` will prevent the global from being returned.
Custom value can be returned by setting `event.returnValue`.
#### Event: 'remote-get-builtin' _Deprecated_
Returns:
*`event` IpcMainEvent
*`moduleName` String
Emitted when `remote.getBuiltin()` is called in the renderer process.
Calling `event.preventDefault()` will prevent the module from being returned.
Custom value can be returned by setting `event.returnValue`.
* Non-standard features (that are not handled by Chromium or Electron) given in
`features` will be passed to any registered `webContents`'s
`did-create-window` event handler in the `additionalFeatures` argument.
`did-create-window` event handler in the `options` argument.
*`frameName` follows the specification of `windowName` located in the [native documentation](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#parameters).
To customize or cancel the creation of the window, you can optionally set an
override handler with `webContents.setWindowOpenHandler()` from the main
@@ -12,9 +12,55 @@ This document uses the following convention to categorize breaking changes:
* **Deprecated:** An API was marked as deprecated. The API will continue to function, but will emit a deprecation warning, and will be removed in a future release.
* **Removed:** An API or feature was removed, and is no longer supported by Electron.
## Planned Breaking API Changes (15.0)
### Default Changed: `nativeWindowOpen` defaults to `true`
Prior to Electron 15, `window.open` was by default shimmed to use
`BrowserWindowProxy`. This meant that `window.open('about:blank')` did not work
to open synchronously scriptable child windows, among other incompatibilities.
`nativeWindowOpen: true` is no longer experimental, and is now the default.
See the documentation for [window.open in Electron](api/window-open.md)
for more details.
## Planned Breaking API Changes (14.0)
### API Changed: `window.(open)`
### Removed: `remote` module
The `remote` module was deprecated in Electron 12, and will be removed in
The `app.allowRendererProcessReuse` property will be removed as part of our plan to
more closely align with Chromium's process model for security, performance and maintainability.
For more detailed information see [#18397](https://github.com/electron/electron/issues/18397).
### Removed: Browser Window Affinity
The `affinity` option when constructing a new `BrowserWindow` will be removed
as part of our plan to more closely align with Chromium's process model for security,
performance and maintainability.
For more detailed information see [#18397](https://github.com/electron/electron/issues/18397).
### API Changed: `window.open()`
The optional parameter `frameName` will no longer set the title of the window. This now follows the specification described by the [native documentation](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#parameters) under the corresponding parameter `windowName`.
@@ -22,12 +68,59 @@ If you were using this parameter to set the title of a window, you can instead u
### Removed: `worldSafeExecuteJavaScript`
In Electron 14, `worldSafeExecuteJavaScript` will be removed. There is no alternative, please
ensure your code works with this property enabled. It has been enabled by default since Electron
In Electron 14, `worldSafeExecuteJavaScript` will be removed. There is no alternative, please
ensure your code works with this property enabled. It has been enabled by default since Electron
12.
You will be affected by this change if you use either `webFrame.executeJavaScript` or `webFrame.executeJavaScriptInIsolatedWorld`. You will need to ensure that values returned by either of those methods are supported by the [Context Bridge API](api/context-bridge.md#parameter--error--return-type-support) as these methods use the same value passing semantics.
### Removed: BrowserWindowConstructorOptions inheriting from parent windows
Prior to Electron 14, windows opened with `window.open` would inherit
BrowserWindow constructor options such as `transparent` and `resizable` from
their parent window. Beginning with Electron 14, this behavior is removed, and
windows will not inherit any BrowserWindow constructor options from their
parents.
Instead, explicitly set options for the new window with `setWindowOpenHandler`:
```js
webContents.setWindowOpenHandler((details)=>{
return{
action:'allow',
overrideBrowserWindowOptions:{
// ...
}
}
})
```
### Removed: `additionalFeatures`
The deprecated `additionalFeatures` property in the `new-window` and
`did-create-window` events of WebContents has been removed. Since `new-window`
uses positional arguments, the argument is still present, but will always be
the empty array `[]`. (Though note, the `new-window` event itself is
deprecated, and is replaced by `setWindowOpenHandler`.) Bare keys in window
features will now present as keys with the value `true` in the options object.
@@ -4,15 +4,39 @@ This page defines some terminology that is commonly used in Electron development
### ASAR
ASAR stands for Atom Shell Archive Format. An [asar][asar] archive is a simple
ASAR stands for Atom Shell Archive Format. An [asar] archive is a simple
`tar`-like format that concatenates files into a single file. Electron can read
arbitrary files from it without unpacking the whole file.
The ASAR format was created primarily to improve performance on Windows... TODO
The ASAR format was created primarily to improve performance on Windows when
reading large quantities of small files (e.g. when loading your app's JavaScript
dependency tree from `node_modules`).
### code signing
Code signing is a process where an app developer digitally signs their code to
ensure that it hasn't been tampered with after packaging. Both Windows and
macOS implement their own version of code signing. As a desktop app developer,
it's important that you sign your code if you plan on distributing it to the
general public.
For more information, read the [Code Signing] tutorial.
### context isolation
Context isolation is a security measure in Electron that ensures that your
preload script cannot leak privileged Electron or Node.js APIs to the web
contents in your renderer process. With context isolation enabled, the
only way to expose APIs from your preload script is through the
`contextBridge` API.
For more information, read the [Context Isolation] tutorial.
See also: [preload script](#preload-script), [renderer process](#renderer-process)
### CRT
The C Run-time Library (CRT) is the part of the C++ Standard Library that
The C Runtime Library (CRT) is the part of the C++ Standard Library that
incorporates the ISO C99 standard library. The Visual C++ libraries that
implement the CRT support native code development, and both mixed native and
managed code, and pure managed code for .NET development.
@@ -20,8 +44,7 @@ managed code, and pure managed code for .NET development.
### DMG
An Apple Disk Image is a packaging format used by macOS. DMG files are
commonly used for distributing application "installers". [electron-builder]
supports `dmg` as a build target.
commonly used for distributing application "installers".
### IME
@@ -31,19 +54,15 @@ keyboards to input Chinese, Japanese, Korean and Indic characters.
### IDL
Interface description language. Write function signatures and data types in a format that can be used to generate interfaces in Java, C++, JavaScript, etc.
Interface description language. Write function signatures and data types in a
format that can be used to generate interfaces in Java, C++, JavaScript, etc.
### IPC
IPC stands for Inter-Process Communication. Electron uses IPC to send
serialized JSON messages between the [main] and [renderer] processes.
IPC stands for inter-process communication. Electron uses IPC to send
serialized JSON messages between the main and renderer processes.
### libchromiumcontent
A shared library that includes the [Chromium Content module] and all its
dependencies (e.g., Blink, [V8], etc.). Also referred to as "libcc".
see also: [main process](#main-process), [renderer process](#renderer-process)
### main process
@@ -68,10 +87,22 @@ MAS, see the [Mac App Store Submission Guide].
### Mojo
An IPC system for communicating intra- or inter-process, and that's important because Chrome is keen on being able to split its work into separate processes or not, depending on memory pressures etc.
An IPC system for communicating intra- or inter-process, and that's important
because Chrome is keen on being able to split its work into separate processes
or not, depending on memory pressures etc.
See https://chromium.googlesource.com/chromium/src/+/master/mojo/README.md
See also: [IPC](#ipc)
### MSI
On Windows, MSI packages are used by the Windows Installer
(also known as Microsoft Installer) service to install and configure
applications.
More information can be found in [Microsoft's documentation][msi].
### native modules
Native modules (also called [addons] in
@@ -85,22 +116,33 @@ likely to use a different V8 version from the Node binary installed in your
system, you have to manually specify the location of Electron’s headers when
building native modules.
See also [Using Native Node Modules].
For more information, read the [Native Node Modules] tutorial.
### NSIS
### notarization
Nullsoft Scriptable Install System is a script-driven Installer
authoring tool for Microsoft Windows. It is released under a combination of
free software licenses, and is a widely-used alternative to commercial
proprietary products like InstallShield. [electron-builder] supports NSIS
as a build target.
Notarization is a macOS-specific process where a developer can send a
code-signed app to Apple servers to get verified for malicious
components through an automated service.
See also: [code signing](#code-signing)
### OSR
OSR (Off-screen rendering) can be used for loading heavy page in
OSR (offscreen rendering) can be used for loading heavy page in
background and then displaying it after (it will be much faster).
It allows you to render page without showing it on screen.
For more information, read the [Offscreen Rendering][osr] tutorial.
### preload script
Preload scripts contain code that executes in a renderer process
before its web contents begin loading. These scripts run within
the renderer context, but are granted more privileges by having
access to Node.js APIs.
See also: [renderer process](#renderer-process), [context isolation](#context-isolation)
### process
A process is an instance of a computer program that is being executed. Electron
@@ -120,13 +162,17 @@ The renderer process is a browser window in your app. Unlike the main process,
there can be multiple of these and each is run in a separate process.
They can also be hidden.
In normal browsers, web pages usually run in a sandboxed environment and are not
allowed access to native resources. Electron users, however, have the power to
use Node.js APIs in web pages allowing lower level operating system
interactions.
See also: [process](#process), [main process](#main-process)
### sandbox
The sandbox is a security feature inherited from Chromium that restricts
your renderer processes to a limited set of permissions.
For more information, read the [Process Sandboxing] tutorial.
See also: [process](#process)
### Squirrel
Squirrel is an open-source framework that enables Electron apps to update
@@ -45,4 +45,4 @@ If the V8 context crashes, the DevTools will display this message.
Chromium logs can be enabled via the `ELECTRON_ENABLE_LOGGING` environment variable. For more information, see the [environment variables documentation](../api/environment-variables.md#electron_enable_logging).
Alternatively, the command line argument `--enable-logging` can be passed. More information is available in the [command line switches documentation](../api/command-line-switches.md#--enable-logging).
Alternatively, the command line argument `--enable-logging` can be passed. More information is available in the [command line switches documentation](../api/command-line-switches.md#--enable-loggingfile).
Context Isolation is a feature that ensures that both your `preload` scripts and Electron's internal logic run in a separate context to the website you load in a [`webContents`](../api/web-contents.md). This is important for security purposes as it helps prevent the website from accessing Electron internals or the powerful APIs your preload script has access to.
This means that the `window` object that your preload script has access to is actually a **different** object than the website would have access to. For example, if you set `window.hello = 'wave'` in your preload script and context isolation is enabled `window.hello` will be undefined if the website tries to access it.
This means that the `window` object that your preload script has access to is actually a **different** object than the website would have access to. For example, if you set `window.hello = 'wave'` in your preload script and context isolation is enabled,`window.hello` will be undefined if the website tries to access it.
Every single application should have context isolation enabled and from Electron 12 it will be enabled by default.
## How do I enable it?
From Electron 12, it will be enabled by default. For lower versions it is an option in the `webPreferences` option when constructing `new BrowserWindow`'s.
```javascript
constmainWindow=newBrowserWindow({
webPreferences:{
contextIsolation:true
}
})
```
Context isolation has been enabled by default since Electron 12, and it is a recommended security setting for _all applications_.
## Migration
> I used to provide APIs from my preload script using `window.X = apiObject` now what?
> Without context isolation, I used to provide APIs from my preload script using `window.X = apiObject`. Now what?
Exposing APIs from your preload script to the loaded website is a common usecase and there is a dedicated module in Electron to help you do this in a painless way.
### Before: context isolation disabled
**Before: With context isolation disabled**
Exposing APIs from your preload script to a loaded website in the renderer process is a common use-case. With context isolation disabled, your preload script would share a common global `window` object with the renderer. You could then attach arbitrary properties to a preload script:
```javascript
```javascript title='preload.js'
// preload with contextIsolation disabled
window.myAPI = {
doAThing: () => {}
}
```
**After: With context isolation enabled**
The `doAThing()` function could then be used directly in the renderer process:
```javascript
```javascript title='renderer.js'
// use the exposed API in the renderer
window.myAPI.doAThing()
```
### After: context isolation enabled
There is a dedicated module in Electron to help you do this in a painless way. The [`contextBridge`](../api/context-bridge.md) module can be used to **safely** expose APIs from your preload script's isolated context to the context the website is running in. The API will also be accessible from the website on `window.myAPI` just like it was before.
The [`contextBridge`](../api/context-bridge.md) module can be used to **safely** expose APIs from the isolated context your preload script runs in to the context the website is running in. The API will also be accessible from the website on `window.myAPI` just like it was before.
```javascript title='renderer.js'
// use the exposed API in the renderer
window.myAPI.doAThing()
```
You should read the `contextBridge` documentation linked above to fully understand its limitations. For instance you can't send custom prototypes or symbols over the bridge.
Please read the `contextBridge` documentation linked above to fully understand its limitations. For instance, you can't send custom prototypes or symbols over the bridge.
## Security Considerations
## Security considerations
Just enabling `contextIsolation` and using `contextBridge` does not automatically mean that everything you do is safe. For instance this code is **unsafe**.
Just enabling `contextIsolation` and using `contextBridge` does not automatically mean that everything you do is safe. For instance, this code is **unsafe**.
```javascript
```javascript title='preload.js'
// ❌ Bad code
contextBridge.exposeInMainWorld('myAPI', {
send: ipcRenderer.send
})
```
It directly exposes a powerful API without any kind of argument filtering. This would allow any website to send arbitrary IPC messages which you do not want to be possible. The correct way to expose IPC-based APIs would instead be to provide one method per IPC message.
It directly exposes a powerful API without any kind of argument filtering. This would allow any website to send arbitrary IPC messages, which you do not want to be possible. The correct way to expose IPC-based APIs would instead be to provide one method per IPC message.
If you're building your Electron app with TypeScript, you'll want to add types to your APIs exposed over the context bridge. The renderer's `window` object won't have the correct typings unless you extend the types with a [declaration file].
You can create a `renderer.d.ts` declaration file and globally augment the `Window` interface:
```typescript title='renderer.d.ts'
export interface IElectronAPI {
loadPreferences: () => Promise<void>,
}
declare global {
interface Window {
electronAPI: IElectronAPI
}
}
```
Doing so will ensure that the TypeScript compiler will know about the `electronAPI` property on your global `window` object when writing scripts in your renderer process:
We will now define the function in charge of creating our browser window and load our application's `index.html` file.
```js
functioncreateWindow(){
```javascript
constcreateWindow=()=>{
// Create the browser window.
mainWindow=newBrowserWindow({
width:800,
@@ -60,11 +61,11 @@ function createWindow () {
In this next step, we will create our `BrowserWindow` and tell our application how to handle an event in which an external protocol is clicked.
This code will be different in WindowsOS compared to MacOS and Linux. This is due to Windows requiring additional code in order to open the contents of the protocol link within the same electron instance. Read more about this [here](https://www.electronjs.org/docs/api/app#apprequestsingleinstancelock).
This code will be different in Windows compared to MacOS and Linux. This is due to Windows requiring additional code in order to open the contents of the protocol link within the same Electron instance. Read more about this [here](https://www.electronjs.org/docs/api/app#apprequestsingleinstancelock).
### Windows code:
#### Windows code:
```js
```javascript
constgotTheLock=app.requestSingleInstanceLock()
if(!gotTheLock){
@@ -83,16 +84,16 @@ if (!gotTheLock) {
createWindow()
})
// handling the protocol. In this case, we choose to show an Error Box.
// Handle the protocol. In this case, we choose to show an Error Box.
Finally, we will add some additional code to handle when someone closes our application
Finally, we will add some additional code to handle when someone closes our application.
```js
```javascript
// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed',function(){
app.on('window-all-closed',() =>{
if(process.platform!=='darwin')app.quit()
})
```
## Important Note:
## Important notes
### Packaging
This feature will only work on macOS when your app is packaged. It will not work when you're launching it in development from the command-line. When you package your app you'll need to make sure the macOS `plist` for the app is updated to include the new protocol handler. If you're using [`electron-packager`](https://github.com/electron/electron-packager) then you
can add the flag `--extend-info` with a path to the `plist` you've created. The one for this app is below:
On macOS and Linux, this feature will only work when your app is packaged. It will not work when
you're launching it in development from the command-line. When you package your app you'll need to
make sure the macOS `Info.plist` and the Linux `.desktop` files for the app are updated to include
the new protocol handler. Some of the Electron tools for bundling and distributing apps handle
this for you.
### Plist
#### [Electron Forge](https://electronforge.io)
```XML
<p>
<h5>macOS plist</h5>
<pre><code>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plistversion="1.0">
<dict>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>electron-api-demos</string>
</array>
<key>CFBundleURLName</key>
<string>Electron API Demos Protocol</string>
</dict>
</array>
<key>ElectronTeamID</key>
<string>VEKTX9H2N7</string>
</dict>
</plist>
</code>
</pre>
<p>
If you're using Electron Forge, adjust `packagerConfig` for macOS support, and the configuration for
the appropriate Linux makers for Linux support, in your [Forge
configuration](https://www.electronforge.io/configuration) _(please note the following example only
shows the bare minimum needed to add the configuration changes)_:
After you start your electron app, you can now enter in a URL in your browser that contains the custom protocol, for example `"electron-fiddle://open"` and observe that the application will respond and show an error dialog box.
After you start your Electron app, you can enter in a URL in your browser that contains the custom
protocol, for example `"electron-fiddle://open"` and observe that the application will respond and
show an error dialog box.
<!--
Because Electron examples usually require multiple files (HTML, CSS, JS
Because the requests made by Auto Update aren't under your direct control, you may find situations that are difficult to handle (such as if the update server is behind authentication). The `url` field does support files, which means that with some effort, you can sidestep the server-communication aspect of the process. [Here's an example of how this could work](https://github.com/electron/electron/issues/5020#issuecomment-477636990).
if(uploadToServer&&!submitURL)thrownewError('submitURL must be specified when uploadToServer is true');
if(!compress){
if(!compress&&uploadToServer){
deprecate.log('Sending uncompressed crash reports is deprecated and will be removed in a future version of Electron. Set { compress: true } to opt-in to the new behavior. Crash reports will be uploaded gzipped, which most crash reporting servers support.');
// Allow setting of backgroundColor as a webPreference even though
@@ -658,11 +720,6 @@ WebContents.prototype._init = function () {
}
});
});
constprefs=this.getWebPreferences()||{};
if(prefs.webviewTag&&prefs.contextIsolation){
deprecate.log('Security Warning: A WebContents was just created with both webviewTag and contextIsolation enabled. This combination is fundamentally less secure and effectively bypasses the protections of contextIsolation. We strongly recommend you move away from webviews to OOPIF or BrowserView in order for your app to be more secure');
}
}
this.on('login',(event,...args)=>{
@@ -723,6 +780,10 @@ export function fromId (id: string) {
consterr=newError(`Could not call remote function '${func.name||'anonymous'}'. Check that the function signature is correct. Underlying error: ${error.message}\nUnderlying stack: ${error.stack}\n`);
consterr=newError(`Could not call remote method '${method}'. Check that the method signature is correct. Underlying error: ${error.message}\nUnderlying stack: ${error.stack}\n`);
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.