* 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>
* 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>
* ci: run linux arm tests on CircleCI
(cherry picked from commit c0d93a1772)
* cleanup electron dirs after testing
* use start-stop-daemon to kill Xvfb
(cherry picked from commit 1d10a68c31)
* actually call cleanup step
* 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>
* fix: don't warn about enableRemoteModule when it's undefined
* fix tests
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
They are in DIP points (rather than screen points). We can use
screen.dipToScreen* to convert to screen points.
Co-authored-by: Jim Fisher <jameshfisher@gmail.com>
* 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>
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>
* 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>
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>
Remove index.html from offscreen-rendering tutorial.
It is not used.
Update offscreen-rendering.md to reflect changes to fiddle.
Co-authored-by: Kevin Hartman <kevin@hart.mn>
* 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: Tony Ferrell <anf@microsoft.com>
Co-authored-by: Tony Ferrell <tonyjf@gmail.com>
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* Update the macos Dock Instructions
* Remove preload and ;'s
* Mixed ;s
* Update dock doc
* Add informational text to index.html
Co-authored-by: Tony Ferrell <anf@microsoft.com>
* 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: Tony Ferrell <anf@microsoft.com>
Co-authored-by: Tony Ferrell <tonyjf@gmail.com>
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.
Co-authored-by: Noelle Leigh <5957867+noelleleigh@users.noreply.github.com>
* Add that that menu must be added on whenReady
When an application menu is added before 'whenReady' all items seem to work except 'recent documents'
This causes the issue listed here: https://github.com/electron/electron/issues/17388
* Make example more complete
* Remove semicolons
* Update docs/tutorial/recent-documents.md
Co-authored-by: Erick Zhao <erick@hotmail.ca>
Co-authored-by: Matthijs Groen <matthijs.groen@gmail.com>
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* 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
Co-authored-by: Fedor Indutny <fedor@indutny.com>
* docs: remove reference to global Electron install
This is a pattern that we actively want to discourage.
* docs: update as per review suggestion
Co-authored-by: Erick Zhao <erick@hotmail.ca>
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.
Co-authored-by: Erick Zhao <erick@hotmail.ca>
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.
Co-authored-by: Erick Zhao <erick@hotmail.ca>
* fix: shell.trashItem crash when called in renderer
* Update api-shell-spec.ts
* Update spec-main/api-shell-spec.ts
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
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).
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
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.
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
* 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: call `UnregisterIsolate` consistently
`JavascriptEnvironment` is the class that calls `RegisterIsolate()`
so it should be the one to call `UnregisterIsolate`, and this can happen
right before disposing the aforementioned `isolate`.
See: https://github.com/electron/electron/pull/28468
* fix
Co-authored-by: Fedor Indutny <fedor@indutny.com>
* 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
Co-authored-by: SushiJackal <weingaben@gmail.com>
* chore: the minimum supported version is now 10.11
Chromium bumped this version back in December
* Update support.md
Co-authored-by: Samuel Attard <sam@electronjs.org>
This seems to just have been missing here, leaking memory
(and breaking the API contract for Node.js embedding).
Co-authored-by: Anna Henningsen <anna@addaleax.net>
* Update web-contents.md
The text block was rendered as part of the `features` property, not the `handler`
* fix linting
Co-authored-by: Alexander Prinzhorn <alexander@prinzhorn.it>
* fix: isolate Pepper plugins
Following suit with a recent change to the same method in Chromium, we
should also isloate Pepper plugins.
* docs: add more context to comment
* fix: remove unsupported test flag behavior
Co-authored-by: clavin <cwatford@slack-corp.com>
* 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
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
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
Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>
* 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.
* Trigger Build
* fix: handle a nil backgroundColor in win.getBackgroundColor()
* spec: add crash case
* fix: update to fix native_views transparent color
* chore: fix lint
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
Co-authored-by: Samuel Attard <sam@electronjs.org>
* wip?
* attempt to use weakptr
* apply posttask change to other balloon events
* chore: add clarifying comment on weakptr
* refactor: move weakptr include to implementation
(it's not needed in the header file)
* refactor: use default initializer for weak factory
* refactor: move weakptr usage outside of loop
* fix: convert mouse events as well
* refactor: use member function for balloon events
* fix: check if wicon is truthy in callback
* refactor: bind mouse events with member function
* refactor: inline lparams
* refactor: inline getkeyboardmodifiers()
* chore: correct GetKeyboardModifiers typo
* 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
* fix: apply changes for 12
* fix: background_color patch simplification
* update patches
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
Co-authored-by: Electron Bot <electron@github.com>
* 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: liulun <xland@live.cn>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* feat: enable context isolation by default
* chore: set default in ctx iso getter
* spec: make all specs work with the new contextIsolation default
* spec: fix affinity specs
* spec: update tests for new ctx iso default
* spec: update tests for new ctx iso default
* spec: update tests for new ctx iso default
* spec: update tests for new ctx iso default
* chore: move stray prod deps to dev deps
* spec: update tests for new ctx iso default
* turn off contextIsolation for visibility tests
* turn off contextIsolation for <webview> tag nodeintegration attribute loads native modules when navigation happens
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Move it from LoadURL to RenderViewCreated which is present
in all window creation cases and is called early enough to be
relevant from user prespective and after RenderWidgetHostView
is already present.
Co-authored-by: marekharanczyk <48673767+marekharanczyk@users.noreply.github.com>
* chore: bump chromium in DEPS to 89.0.4389.47
* chore: bump chromium in DEPS to 89.0.4389.58
* update patches
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
* feat: Raise a browser view via `BrowserWindow.setTopBrowserView()`.
This is similar to removing and re-adding a browser view, but avoids a visible flicker as the browser view is not removed from the window when using `setTopBrowserView`. Note: if the given browser view is not attached to the window, it will be added.
This commit contains the macOS implementation.
* feat: setTopBrowserView support for Windows and Linux
* docs: add info about setTopBrowserView
* docs: Clarify behavior when browserView is not yet attached.
* fix: throw en error when browserView is not attached to the window
* fix: build error
* fix: test
* fix: add test case
* fix: tests
* fix: reparenting
* fix: close second window in tests
Co-authored-by: sentialx <sentialx@gmail.com>
Co-authored-by: Stewart Lord <stew@offbynone.com>
* Use std::forward_list instead of base::LinkedList for better perf,
more consistent memory management. Better than std::list because we
don't need the double-linked-list behavior of std::list
* Use std::unordered_map instead of std::map for the v8 hash table
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
* fix: only run display check on restored wndow if minimized
* fix: don't run display check on hidden, non-minimized windows
Co-authored-by: VerteDinde <keeleymhammond@gmail.com>
base::LinkedList does not delete its members on destruction. We need to
manually ensure the linkedlist is empty when the ObjectCache is
destroyed.
Fixes#27039
Notes: Fixed memory leak when sending non-primitives over the context
bridge
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
* refactor: replace default frameName title with null check
* add isNativeWindowOpen check in makeBrowserWindowOptions
* modify snapshot test files
* replace title with frame-name again for proxy - not native open
* modify proxy snapshot title key-value to come after height key-value
Co-authored-by: mlaurencin <mlaurencin@electronjs.org>
* feat: enable world safe JS by default
* refactor: use the ctx bridge to send executeJavaScript results in a world safe way
* docs: add more info about the breaking change
* include default in IsEnabled check
* test: fix failing http spec
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
* fix: do not throw if NativeImage conversion fails.
Throwing is an unannounced semver/major breaking change, so revert that
behavior but keep the rest of the #26546 refactor.
* feat: add frame and webContents to webRequest details
* chore: use frame_converter.h
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
The call stack for one of our top crashes looks like this:
```
node::Abort (node_errors.cc:241)
node::Assert (node_errors.cc:256)
node::MakeCallback (callback.cc:226)
gin_helper::internal::CallMethodWithArgs (event_emitter_caller.cc:23)
gin_helper::EmitEvent<T> (event_emitter_caller.h:51)
gin_helper::EventEmitterMixin<T>::Emit<T> (event_emitter_mixin.h:81)
electron::api::DownloadItem::OnDownloadUpdated (electron_api_download_item.cc:115)
download::DownloadItemImpl::UpdateObservers (download_item_impl.cc:482)
content::DownloadManagerImpl::Shutdown (download_manager_impl.cc:508)
content::BrowserContext::~BrowserContext (browser_context.cc:476)
```
Full stack here: https://sentry.io/share/issue/9b030a0601b547188181b543c16ecda2/
During browser shutdown, the `DownloadManager` was being cleaned up
*after* the Node environment had already been destroyed. This caused the
`DownloadItem::OnDownloadUpdated` callback to crash when trying to emit
the JS `done` event.
To prevent this, we now manually shut down the `DownloadManager`
earlier. This is also mentioned in the comment on
`DownloadManager::Shutdown`:
```
// Shutdown the download manager. Content calls this when BrowserContext is
// being destructed. If the embedder needs this to be called earlier, it can
// call it. In that case, the delegate's Shutdown() method will only be called
// once.
```
Co-authored-by: Biru Mohanathas <birunthan@mohanathas.com>
* fix: prevent crash when destroyed widget receives keyboard event
Activating a key to close a window will cause a silent crash. Handling the keyboard
event will lead to a nullptr dereferenced in Chromium code if the window widget has
already been destroyed.
* test: ensure BrowserWindow doesn't crash from keyboard events during close
Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>
* feat: ExposeAPIInMainWorld allow to process non-object APIs cpp part
* fix: add IsTypedArray check before DeepFreeze of the api
* feat: ExposeAPIInMainWorld allow to process non-object APIs js part - ts types change
* test: add new context bridge tests
* docs: ctx bridge exposeInMainWorld change documentation for any API
Co-authored-by: nikitakot <nikitakot@microsoft.com>
* docs: update devtools extension tutorial
* Update docs/tutorial/devtools-extension.md
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* update
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* chore: upgrade to chromium 89.0.4336.0
* update patches
* chore: use 'libvulkan.so.1' in the linux manifests
CL: https://chromium-review.googlesource.com/c/angle/angle/+/2538430
Upstream renamed libvulkan.so to libvulkan.so.1, so sync our manifests.
* chore: update expected window-open default policy.
CL: https://chromium-review.googlesource.com/c/chromium/src/+/2429247
Upstream CL contiues the work to make `strict-origin-when-cross-origin`
the default referrer policy. This commit changes our window-open tests
to expect that policy over the previous `no-referrer-when-downgrade`.
* chore: re-export chromium patches
No code changes; just line numbers. `git am` failed because the upstream
changes were just large enough to require patching to fail w/o fuzzing.
The broken patch was
patches/chromium/feat_allow_disabling_blink_scheduler_throttling_per_renderview.patch
* update patches
* update patches
* fixup! chore: update expected window-open default policy.
* chore: disallow copying CppHeapCreateParams
Experimental commit to resolve FTBS https://ci.appveyor.com/project/electron-bot/electron-ljo26/builds/36405680#L25345
which introduces a new struct CppHeapCreateParams that aggregates a
vector of unique_ptrs. Our Windows CI is unhappy that this struct
implicitly deletes its copy ctor, so this commit makes it explicit.
Xref: https://chromium-review.googlesource.com/c/v8/v8/+/2536642
* update patches
* update patches
* fixup! chore: bump chromium to ac06d6903a2c981ab90a8162f1ba0 (master) (#26499)
* chore: update calls to gfx::RemoveAcceleratorChar.
The call signature for gfx::RemoveAccelerator changed in
https://chromium-review.googlesource.com/c/chromium/src/+/2546471 .
This commit updates use to match that.
* update patches
* update patches
* chore: update patches
* Remove most service manifest remnants from Content
https://chromium-review.googlesource.com/c/chromium/src/+/2296482
* Reland "Portals: Fix a11y for orphaned portals"
https://chromium-review.googlesource.com/c/chromium/src/+/2542812
* Convert CallbackList::Subscription to a standalone class.
https://chromium-review.googlesource.com/c/chromium/src/+/2522860
* fix: actually apply the zlib patch
* chore: update patches
* chore: update patches
* clear out cache
* Revert "clear out cache"
This reverts commit 6e811fae4b7f4eeb736225ce2460857922763b66.
* Update to 89.0.4342.2
* Remove force_ignore_site_for_cookies until we figure out what to do instead
2499162: Remove |force_ignore_site_for_cookies| from IPCs (e.g. ResourceRequest). | https://chromium-review.googlesource.com/c/chromium/src/+/2499162
(cherry picked from commit 102a2a3b8d57b6cddb85e9d24e44de77730c81c3)
* Set site_for_cookies to request url so that URLLoader::ShouldForceIgnoreSiteForCookies returns true
(cherry picked from commit 7a2510a9f68339a252a25df3839e9e215a476d4b)
* 2485887: [Extensions][web_accessible_resources] Use |matches|.
https://chromium-review.googlesource.com/c/chromium/src/+/2485887
(cherry picked from commit b67d89155d87c86aa295cda645fdee591dacd512)
* 2490383: a11y inspect reorg: implement accessible tree formatter factory
https://chromium-review.googlesource.com/c/chromium/src/+/2490383
(cherry picked from commit 8cd4ee013eec12205832d0f763ab4480cdb10c28)
* Disable CertVerifierService for now
2559260: Enable CertVerifierService by default | https://chromium-review.googlesource.com/c/chromium/src/+/2559260
(cherry picked from commit 56a4a87dec21c1332e508adae4638bf00371dc73)
* 2555005: [api] Simplify ScriptOrigin
https://chromium-review.googlesource.com/c/v8/v8/+/2555005
(cherry picked from commit 338d4304bc9c0abcd24306aa4901558b9db9368b)
* Actually apply nan patch
(cherry picked from commit bf20236386f83229ec09c434d21aca4712d0d53b)
* update patches
* update to 89.0.4348.1
see if this resolves Windows crashes
* Do not build MTLManagedObjectAdapter
It's been removed in newer Mantle versions and uses a deprecated enum
(cherry picked from commit 36accef04a9047da4f31f214f133866e48f7942c)
* 2569367: Remove dead fullscreen code in RenderWidgetHostView and friends
https://chromium-review.googlesource.com/c/chromium/src/+/2569367
(cherry picked from commit cab78df863acfb6ca24830eac8f9df11d7d877fd)
* 2563553: Remove Flash from PermissionRequestTypes and PermissionTypes.
https://chromium-review.googlesource.com/c/chromium/src/+/2563553
(cherry picked from commit d0ba1ec443e5ea234706ee93b5b413ed6c9095d7)
* 2568359: mac: Ignore Wdeprecated-declarations for LSSharedFileList* functions.
https://chromium-review.googlesource.com/c/chromium/src/+/2568359
(cherry picked from commit 1ca2fa5a3c7bd39419b50a439eb9eec4582ced28)
* Remove deprecated performFileOperation usage
(cherry picked from commit d2dca0c24950cbc81cec80beac9ba640e200d6fa)
* 2546146: Remove browser-hosted InterfaceProvider
https://chromium-review.googlesource.com/c/chromium/src/+/2546146
(cherry picked from commit 944da70791253e9a564317f93814ab544c944a8e)
* fixup: Add disconnect logic to ElectronBrowserHandlerImpl
(cherry picked from commit e4582a10bbdd20d08d94389953cad8a4ea2b7a1d)
* 2561401: Add OutputPresenterX11 which uses X11 present extension.
https://chromium-review.googlesource.com/c/chromium/src/+/2561401
(cherry picked from commit ef1d0164bdd8b730c51d46c3099d7d4efea0133b)
* Allow local networking override for ATS
https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html
(cherry picked from commit f4a0b5834b78d189acb03d3b43b2160dcc749a7e)
* 2565511: [objects] Remove MakeExternal case for uncached internal strings
https://chromium-review.googlesource.com/c/v8/v8/+/2565511
(cherry picked from commit cf09a792f0)
* Update patches after rebase
* Refactor: clean up rfh getters in ElectronBrowserHandlerImpl
(cherry picked from commit be270753e1)
* Remove unneeded BindTo
(cherry picked from commit ca3287895a)
* Don't assign ElectronBrowserHandlerImpl at all
(cherry picked from commit 899ef067ed)
* update patches
Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
* fix: handle BrowserView reparenting
* Fix case where webContents is destroyed
* Add a reparenting test
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
* docs: webFrameMain.fromId() can return undefined
* docs: webFrameMain.fromId() can return undefined
Co-authored-by: Milan Burda <milan.burda@gmail.com>
* refactor: remove path from nativeImage converter
* chore: address some review feedback
* Abstract out conversion
* Use converter for DockSetIcon
* Fix startDrag error
* Remove unnecessary FromV8 converter
* Allow DockSetIcon to take null
* Update shell/browser/browser_mac.mm
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>
* refactor: remove last use of InternalCallbackScope
* update patches
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: Electron Bot <electron@github.com>
This fixes#26905. The patch was obtained from @deepak1556, who in turn
got it from the Microsoft Teams folks.
I believe the crash started happening due to the changes in
5c6c8e994b%5E!/#F15
This affects Electron 9 and later.
Notes: Fix occasional crash on Windows
Co-authored-by: Biru Mohanathas <birunthan@mohanathas.com>
* fix: add a "set" trap to the "screen" module proxy
* fixup! fix: add a "set" trap to the "screen" module proxy
Co-authored-by: Aleksei Kuzmin <alkuzmin@microsoft.com>
This restores accessibility of screen methods via remote.screen.
Fixes#26610.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Co-authored-by: Anders Kaseorg <andersk@mit.edu>
* docs: first draft of the restructred docs directory
* docs: first working version of the restructred docs directory
* docs: finalized version of the restructred docs directory
* docs: reverted architecture section back to the toc
* chore: bump chromium in DEPS to c04c17506a1b5941370b91dfa44eda7ec31e9793
* update patches
* chore: bump chromium in DEPS to 8a4687263763f306659d04cef8f0a12a9e504d57
* chore: bump chromium in DEPS to 3a75ada69d1ac06d6903a2c981ab90a8162f1ba0
* update patches
* chore: sync StartRemoteDebuggingPipeHandler usage
CL: https://chromium-review.googlesource.com/c/chromium/src/+/2536354
Added 'on_disconnect' OnceClosure arg to StartRemoteDebuggingPipeHandler
* chore: add WebSocketHandshakeClient::OnFailurea
CL: https://chromium-review.googlesource.com/c/chromium/src/+/2527889
Add an empty stub to satisfy parent class' pure virtual method OnFailure().
NB: Use of empty impl comes from WebRequestProxyingWebSocket.
Co-authored-by: Charles Kerr <charles@charleskerr.com>
* fix: use the gin PageAllocator instead of V8::PageAllocator
This makes browser-process JS allocate pages using the base/gin allocator thus ensuring flags such as MAP_JIT are appropriately applied.
* chore: add gin patch
* update patches
Co-authored-by: Electron Bot <electron@github.com>
* docs: revised dark mode page
* docs: fixed lint errors in dark mode page
* docs: fixed mentions, revised doc structure in the dark mode feature page
* docs: fixed mentions, made all the steps more verbose in the dark mode feature page
* fix: correctly identify clipboard read permission
* Update tests for variable clipboard content
* chore: add all possible permission conversions
* VIDEO_CAPTURE and AUDIO_CAPTURE were already defined
* Handle all PermissionTypes
* use skewer case for accessibility events to match permissions api
https://developer.mozilla.org/en-US/docs/Web/API/Permissions_API
* feat: add new 'fuses' feature for package-time build-flag style feature control
* feat: put ENABLE_RUN_AS_NODE behind a fuse as well
* chore: address PR feedback
* build: move FUSE_EXPORT to headers
* build: use hex codes for kFuseWire char[]
* docs: add fuse wire documentation
* chore: update fuses.json info
* Apply suggestions from code review
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* chore: add link to fuse schema
* Update shell/app/electron_library_main.mm
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* feat: Added support for all proxy modes
This commit extended setProxy to support all proxy modes including
direct, auto_detect, pac_script, fixed_servers and system.
* feat: New api for reload proxy configurations
* docs: add snapcraft + electron-packager example
Add example to snap electron app (electron-quick-start)
using snapcraft & electron-packager.
Include notes on how to apply this to an existing project.
Signed-off-by: Chris Patterson <chris.patterson@canonical.com>
* Update snapcraft.md
* Update snapcraft.md
* Update snapcraft.md
* Update docs/tutorial/snapcraft.md
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
* feat: add osProcessId / name properties to webFrameMain
* Update docs/api/web-frame-main.md
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* 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
* docs: revised the application progress bar feature page
* docs: fixed mentions, added screenshots to make the guide more consistent
* docs: added an extra phrase about indeterminate mode
* docs: revised paragraph about indeterminate mode
* docs: fixed lint errors, broken links
* docs: revised the web embeds feature page
* docs: minor styling updates to the web embeds feature page
* docs: fixed text and grammar mentions
* docs: changed placement of the webviews warning
* docs: added a few missing commas
* docs: revised Notifications feature page
* docs: fixed mentions and updated content according to style guide in the notifications feature page
* docs: fixed lint errors in the notifications feature page
* docs: slightly improved consistency of steps in the notifications feature page
* docs: fixed mentions in the notifications feature page
* feat: support exclude from capture on Windows
Check for WDA_EXCLUDEFROMCAPTURE support, and fallback to WDA_MONITOR. Windows versions that support exclude from capture will exclude the window entirely when `setContentProtection` is enabled similar to how Mac behaves. Fall back to `WDA_MONITOR` for windows verisions that do not support.
This flag is mentioned at the very end of a Microsoft blog post here: https://blogs.windows.com/windowsdeveloper/2019/09/16/new-ways-to-do-screen-capture/
Use WDA_EXCLUDEFROMCAPTURE for content protection on windows
Starting with Windows 10, version 2004 this will exclude a window similar to the expected behavior on mac. It is safe to use WDA_EXCLUDEFROMCAPTURE on older Windows versions, as it will still behave as if WDA_MONITOR is applied.
https://github.com/microsoft/Windows.UI.Composition-Win32-Samples/issues/64#issuecomment-697074762
See the docs here: https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowdisplayaffinity
* docs: update setContentProtection docs
Update `setContentProtection` docs with `WDA_EXCLUDEFROMCAPTURE` info. This is to support screen capture fully excluding a particular window instead of showing it as a black screen.
* docs: revised the drag and drop feature page
* docs: fixed mentions in the drag and drop feature page
* docs: fixed mentions in the drag and drop feature page
* build: fix missing dependency resulting in a random build failure
* build: pref_names.h #includes files generated by separate GN targets,
any sources that include that file have to live in a target that depends
on the target it comes from
* fixup! build: fix missing dependency resulting in a random build failure
* fixup! build: fix missing dependency resulting in a random build failure
These methods are needed for closing all idle and in-flight connections after
switching to another proxy from same origin for a session, otherwise
these connections may be reused for future requests which is
unexpected for most of users.
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.
* fix: don't delete loader factory when request is pending
When intercepted request is pending we need to make sure that
loader factory is not deleted, especially when redirect occurs.
Otherwise, it may cause access violation.
* fix: added logic that removes requests from collection
* fix: fixed lint errors
* fix: fixed review remark
* fix: fixed review remarks
Removed intercepted_requests_ collection
and leverage pending_receivers_.
* fix: brought back removed line
* fix: pass content length if avilable in headers
* fix: fixed unit test after changes
video is being played for standard scheme when
content-length is available
* fix: fixed review remakrs
added is_string check and changed stol to StringToInt64
* fix: fix test case name
* fix: fixed typo
* fix: allow net streams to be throttled [WIP]
* fix: handle resume throttling within IncomingMessage [WIP]
* fix: fix urlLoader typing, add throttle test
* fix: fix lint and increase test timeout for Linux
* fix: increase test chunk limit to 20 and timeout to 2000
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
In the existing documentation only "npm start" is given as the
instruction to run the project, however the definition of the 'start'
script is not mentioned anywhere. Hence I feel it is important for the
users to know the exact contents of the 'start' scirpt and have
accordingly updated the documentation.
* feat: add serial api support
resolves#22478
* Put serial port support behind a flag and mark as experimental
* Update docs/api/session.md
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* Use enable-blink-features=Serial instead of enable-experimental-web-platform-features
* Set enableBlinkFeatures on webPreferences instead of commandline
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* feat(extensions): expose ExtensionRegistryObserver events in Session
Extensions can be loaded and unloaded for various reasons. In some cases this can
occur by no means of the Electron programmer, such as in the case of chrome.runtime.reload().
In order to be able to manage state about extensions outside of Electron's APIs, events
reloaded to loading and unloaded are needed.
* docs(extensions): elaborate on extension-loaded/unloaded details
* fix: remove scoped extension registry observer
* docs: update extension-unloaded
* docs: add more info about downloadItem.setSavePath api
add more info about downloadItem.setSavePath api
* Update docs/api/download-item.md
^_^
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Closes#21666.
This PR is fixing crashes caused by referencing and attempting to modify previously destroyed views.
Before, when a view was destroyed and then the contents were referenced for modification, the system would crash as undefined memory was accessed. This fix explicitly makes the pointer to the destroyed view's contents null, so that this will not happen.
* refactor: add a wrapper for wrangling uv handles.
Part 1 of a fix for #25248, #22069.
Place the uv_asyncs owned by NodeBindings, ElectronBindings inside a new
UvHandle wrapper class which manages uv_handles' need for their closed()
callback to be invoked before the handles' memory can be freed.
* chore: make lint happy
* refactor: use DCHECK_EQ() instead of DCHECK()
* refactor: fix oops
* 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: 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
* 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.
* 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
* adopt per monitor scale factor
* fix: client area inset calculation when maximized
* address review feedback
* pass correct glass insets to GetDwmFrameInsetsInPixels
* remove unused code
* Windows 8 and 10 use the same DWM frame calculation
Co-authored-by: Cheng Zhao <zcbenz@gmail.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.
- [ ] tests are [changed or added](https://github.com/electron/electron/blob/master/docs/development/testing.md)
- [ ] relevant documentation is changed or added
- [ ] 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).
#### 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:
View these docs in other languages at [electron/i18n](https://github.com/electron/i18n/tree/master/content/).
The Electron framework lets you write cross-platform desktop applications
@@ -28,15 +29,12 @@ The preferred method is to install Electron as a development dependency in your
app:
```sh
npm install electron --save-dev[--save-exact]
npm install electron --save-dev
```
The `--save-exact` flag is recommended for Electron prior to version 2, as it does not follow semantic
versioning. As of version 2.0.0, Electron follows semver, so you don't need `--save-exact` flag. For info on how to manage Electron versions in your apps, see
@@ -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).
- set BUILD_CONFIG_PATH=//electron/build/args/%GN_CONFIG%.gn
- if DEFINED RAW_GOMA_AUTH (gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") import(\"//electron/build/args/goma.gn\") %GN_EXTRA_ARGS% ") else (gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") %GN_EXTRA_ARGS% cc_wrapper=\"%SCCACHE_PATH%\"")
- gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") import(\"%GN_GOMA_FILE%\") %GN_EXTRA_ARGS% "
- 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
- if DEFINED RAW_GOMA_AUTH (ninja -j 300 -C out/Default electron:electron_app) else (ninja -C out/Default electron:electron_app)
- 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 -- --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 )
- echo "About to verify mksnapshot"
- if "%RUN_TESTS%"=="true" ( gn desc out\Default v8:run_mksnapshot_default args > out\Default\mksnapshot_args )
"_comment":"Modifying the fuse schema in any breaking way should result in the _version prop being incremented. NEVER remove a fuse or change its meaning, instead mark it as removed with 'r'",
Emitted once, when Electron has finished initializing. On macOS, `launchInfo`
holds the `userInfo` of the `NSUserNotification`that was used to open the
holds the `userInfo` of the `NSUserNotification`or information from
[`UNNotificationResponse`](structures/notification-response.md) 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.
@@ -75,7 +77,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
@@ -140,6 +142,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:
@@ -204,7 +216,7 @@ Returns:
[`NSUserActivity.activityType`][activity-type].
*`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_
@@ -350,7 +362,7 @@ page.
Emitted whenever there is a GPU info update.
### Event: 'gpu-process-crashed'
### Event: 'gpu-process-crashed' _Deprecated_
Returns:
@@ -359,7 +371,12 @@ Returns:
Emitted when the GPU process crashes or is killed.
### Event: 'renderer-process-crashed'
**Deprecated:** This event is superceded by the `child-process-gone` event
which contains more information about why the child process disappeared. It
isn't always because it crashed. The `killed` boolean can be replaced by
checking `reason === 'killed'` when you switch to that event.
Returns `String` - The current application locale. Possible return values are documented [here](locales.md).
Returns `String` - The current application locale, fetched using Chromium's `l10n_util` library.
Possible return values are documented [here](https://source.chromium.org/chromium/chromium/src/+/master:ui/base/l10n/l10n_util.cc).
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).
@@ -703,34 +784,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_
*`tasks` [Task[]](structures/task.md) - Array of `Task` objects
@@ -836,6 +930,10 @@ re-add a removed item to a custom category earlier than that will result in the
entire custom category being omitted from the Jump List. The list of removed
items can be obtained using `app.getJumpListSettings()`.
**Note:** The maximum length of a Jump List item's `description` property is
260 characters. Beyond this limit, the item will not be added to the Jump
List, nor will it be displayed.
Here's a very simple example of creating a custom Jump List:
```javascript
@@ -938,6 +1036,7 @@ if (!gotTheLock) {
// Create myWindow, load the rest of the app, etc...
app.whenReady().then(()=>{
myWindow=createWindow()
})
}
```
@@ -1001,6 +1100,7 @@ Changes the [Application User Model ID][app-user-model-id] to `id`.
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.
@@ -1015,7 +1115,7 @@ Activation policy types:
Imports the certificate in pkcs12 format into the platform certificate store.
`callback` is called with the `result` of import operation, a value of `0`
indicates success while any other value indicates failure according to Chromium [net_error_list](https://code.google.com/p/chromium/codesearch#chromium/src/net/base/net_error_list.h).
indicates success while any other value indicates failure according to Chromium [net_error_list](https://source.chromium.org/chromium/chromium/src/+/master:net/base/net_error_list.h).
### `app.disableHardwareAcceleration()`
@@ -1027,7 +1127,7 @@ This method can only be called before app is ready.
By default, Chromium disables 3D APIs (e.g. WebGL) until restart on a per
domain basis if the GPU processes crashes too frequently. This function
disables that behaviour.
disables that behavior.
This method can only be called before app is ready.
@@ -1052,9 +1152,12 @@ For `infoType` equal to `complete`:
For `infoType` equal to `basic`:
Promise is fulfilled with `Object` containing fewer attributes than when requested with `complete`. Here's an example of basic response:
```js
{auxAttributes:
{amdSwitchable:true,
{
auxAttributes:
{
amdSwitchable:true,
canSupportThreadedTextureMailbox:false,
directComposition:false,
directRendering:true,
@@ -1067,19 +1170,21 @@ For `infoType` equal to `basic`:
sandboxed:false,
softwareRendering:false,
supportsOverlays:false,
videoDecodeAcceleratorFlags:0},
gpuDevice:
[{active:true,deviceId:26657,vendorId:4098},
{active:false,deviceId:3366,vendorId:32902}],
machineModelName:'MacBookPro',
machineModelVersion:'11.5'}
videoDecodeAcceleratorFlags:0
},
gpuDevice:
[{active:true,deviceId:26657,vendorId:4098},
{active:false,deviceId:3366,vendorId:32902}],
machineModelName:'MacBookPro',
machineModelVersion:'11.5'
}
```
Using `basic` should be preferred if only basic information like `vendorId` or `driverId` is needed.
### `app.setBadgeCount(count)` _Linux_ _macOS_
### `app.setBadgeCount([count])` _Linux_ _macOS_
*`count` Integer
*`count` Integer (optional) - If a value is provided, set the badge to the provided value otherwise, on macOS, display a plain white dot (e.g. unknown number of notifications). On Linux, if a value is not provided the badge will not display.
Returns `Boolean` - Whether the call succeeded.
@@ -1091,14 +1196,10 @@ On macOS, it shows on the dock icon. On Linux, it only works for Unity launcher.
**Note:** Unity launcher requires the existence of a `.desktop` file to work,
for more information please read [Desktop Environment Integration][unity-requirement].
Returns `Boolean` - Whether the current desktop environment is Unity launcher.
@@ -1128,6 +1229,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],
@@ -1173,8 +1283,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_ _Windows_ - Path to the app's icon. On Linux, 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.
@@ -1247,7 +1353,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
@@ -1263,7 +1369,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.
@@ -177,7 +174,7 @@ 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
@@ -212,6 +209,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
@@ -264,14 +265,14 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
be the absolute file path to the script.
When node integration is turned off, the preload script can reintroduce
Node global symbols back to the global scope. See example
e.returnValue=false// equivalent to `return false` but not recommended
}
```
_**Note**: There is a subtle difference between the behaviors of `window.onbeforeunload = handler` and `window.addEventListener('beforeunload', handler)`. It is recommended to always set the `event.returnValue` explicitly, instead of only returning a value, as the former works more consistently within Electron._
#### Event: 'closed'
@@ -523,6 +542,12 @@ Note that this is only emitted when the window is being resized manually. Resizi
Emitted after the window has been resized.
#### 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:
@@ -538,12 +563,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.
@@ -586,7 +611,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
*`baseURLForDataURL` String (optional) - Base URL (with trailing path separator) for files to be loaded by the data URL. This is needed only if the specified `url` is a data URL and needs to load other files.
Returns `Promise<void>` - the promise will resolve when the page has finished loading
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 the Chromium [sandbox](https://www.chromium.org/developers/design-documents/sandbox).
Forces renderer process and Chromium helper processes to run un-sandboxed.
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
Force using discrete GPU when there are multiple GPUs available.
## --no-sandbox
### --force_low_power_gpu
Disables Chromium sandbox, which is now enabled by default.
Should only be used for testing.
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.
*`apiKey` String - The key to inject the API onto `window` with. The API will be accessible on `window[apiKey]`.
*`api` Record<String, any> - Your API object, more information on what this API can be and how it works is available below.
*`api` any - Your API, more information on what this API can be and how it works is available below.
## Usage
### API Objects
### API
The `api` object provided to [`exposeInMainWorld`](#contextbridgeexposeinmainworldapikey-api-experimental) must be an object
The `api` provided to [`exposeInMainWorld`](#contextbridgeexposeinmainworldapikey-api-experimental) must be a `Function`, `String`, `Number`, `Array`, `Boolean`, or an object
whose keys are strings and values are a `Function`, `String`, `Number`, `Array`, `Boolean`, or another nested object that meets the same conditions.
`Function` values are proxied to the other context and all other values are **copied** and **frozen**. Any data / primitives sent in
the API object become immutable and updates on either side of the bridge do not result in an update on the other side.
the API become immutable and updates on either side of the bridge do not result in an update on the other side.
An example of a complex API object is shown below:
An example of a complex API is shown below:
```javascript
const{contextBridge}=require('electron')
@@ -108,5 +108,23 @@ has been included below for completeness:
| [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.
### Exposing Node Global Symbols
The `contextBridge` can be used by the preload script to give your renderer access to Node APIs.
The table of supported types described above also applies to Node APIs that you expose through `contextBridge`.
Please note that many Node APIs grant access to local system resources.
Be very cautious about which globals and APIs you expose to untrusted remote content.
@@ -45,6 +45,8 @@ The following events are available on instances of `Cookies`:
#### Event: 'changed'
Returns:
*`event` Event
*`cookie` [Cookie](structures/cookie.md) - The cookie that was changed.
*`cause` String - The cause of the change with one of the following values:
@@ -96,6 +98,7 @@ the response.
*`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
See [`crashReporter.removeExtraParameter(key)`](#crashreporterremoveextraparameterkey).
## Methods
@@ -43,40 +77,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` Record<String, String> (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 `true`.
*`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:** This method is only available in the main process.
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:** This method is only available in the main process.
*`key` String - Parameter key, must be less than 64 characters long.
*`value` String - Parameter value, must be less than 64 characters long.
*`key` String - Parameter key, must be no longer than 39 bytes.
*`value` String - Parameter value, must be no longer than 127 bytes.
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.
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
*`properties` String[](optional) - Contains which features the dialog should
*`properties` String[] (optional) - Contains which features the dialog should
use. The following values are supported:
*`openFile` - Allow files to be selected.
*`openDirectory` - Allow directories to be selected.
@@ -120,7 +112,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. (For return values, see [table here](#bookmarks-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. (For return values, see [table here](#bookmarks-array).)
The `browserWindow` argument allows the dialog to attach itself to a parent window, making it modal.
*`buttonLabel` String (optional) - Custom label for the confirmation button, when
@@ -203,7 +195,7 @@ The `filters` specifies an array of file types that can be displayed, see
*`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`.
*`properties` String[](optional)
*`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,
@@ -213,9 +205,10 @@ The `filters` specifies an array of file types that can be displayed, see
*`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. (For return values, see [table here](#bookmarks-array).)
*`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. (For return values, see [table here](#bookmarks-array).)
The `browserWindow` argument allows the dialog to attach itself to a parent window, making it modal.
@@ -229,16 +222,16 @@ expanding and collapsing the dialog.
* The `blur` filter only applies to the web page, so there is no way to apply
blur effect to the content below the window (i.e. other applications open on
the user's system).
*On Windows operating systems, transparent windows will not work when DWM is
*The window will not be transparent when DevTools is opened.
* On Windows operating systems,
* transparent windows will not work when DWM is
disabled.
* transparent windows can not be maximized using the Windows system menu or by double clicking the title bar. The reasoning behind this can be seen on [this pull request](https://github.com/electron/electron/pull/28207).
* On Linux, users have to put `--enable-transparent-visuals --disable-gpu` in
the command line to disable GPU and allow ARGB to make transparent window,
this is caused by an upstream bug that [alpha channel doesn't work on some
NVidia drivers](https://code.google.com/p/chromium/issues/detail?id=369209) on
NVidia drivers](https://bugs.chromium.org/p/chromium/issues/detail?id=369209) on
Linux.
* On Mac, the native window shadow will not be shown on a transparent window.
@@ -100,7 +102,7 @@ API:
```javascript
const{BrowserWindow}=require('electron')
letwin=newBrowserWindow()
constwin=newBrowserWindow()
win.setIgnoreMouseEvents(true)
```
@@ -112,13 +114,19 @@ optional parameter can be used to forward mouse move messages to the web page,
allowing events such as `mouseleave` to be emitted:
@@ -57,17 +57,25 @@ Removes all listeners, or those of the specified `channel`.
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 [`postMessage`][], so prototype chains will not be
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.
> **NOTE:** Sending non-standard JavaScript types such as DOM objects or
> special Electron objects will throw an exception.
>
> Since the main process does not have support for DOM objects such as
> `ImageBitmap`, `File`, `DOMMatrix` and so on, such objects cannot be sent over
> Electron's IPC to the main process, as the main process would have no way to decode
> them. Attempting to send such objects over IPC will result in an error.
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
@@ -77,18 +85,23 @@ Returns `Promise<any>` - Resolves with the response from the main process.
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 [`postMessage`][], so prototype chains will not be
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.
> **NOTE:** Sending non-standard JavaScript types such as DOM objects or
> special Electron objects will throw an exception.
>
> Since the main process does not have support for DOM objects such as
> `ImageBitmap`, `File`, `DOMMatrix` and so on, such objects cannot be sent over
> Electron's IPC to the main process, as the main process would have no way to decode
> them. Attempting to send such objects over IPC will result in an error.
@@ -94,7 +97,6 @@ The `role` property can have following values:
The following additional roles are available on _macOS_:
*`appMenu` - Whole default "App" menu (About, Services, etc.)
*`about` - Map to the `orderFrontStandardAboutPanel` action.
*`hide` - Map to the `hide` action.
*`hideOthers` - Map to the `hideOtherApplications` action.
*`unhide` - Map to the `unhideAllApplications` action.
@@ -112,12 +114,13 @@ The following additional roles are available on _macOS_:
*`services` - The submenu is a ["Services"](https://developer.apple.com/documentation/appkit/nsapplication/1428608-servicesmenu?language=objc) menu. This is only intended for use in the Application Menu and is *not* the same as the "Services" submenu used in context menus in macOS apps, which is not implemented in Electron.
*`recentDocuments` - The submenu is an "Open Recent" menu.
*`clearRecentDocuments` - Map to the `clearRecentDocuments` action.
*`shareMenu` - The submenu is [share menu][ShareMenu]. The `sharingItem` property must also be set to indicate the item to share.
When specifying a `role` on macOS, `label` and `accelerator` are the only
options that will affect the menu item. All other options will be ignored.
Lowercase `role`, e.g. `toggledevtools`, is still supported.
**Nota Bene:** The `enabled` and `visibility` properties are not available for top-level menu items in the tray on MacOS.
**Nota Bene:** The `enabled` and `visibility` properties are not available for top-level menu items in the tray on macOS.
### Instance Properties
@@ -136,6 +139,7 @@ A `String` indicating the item's visible label.
A `Function` that is fired when the MenuItem receives a click event.
It can be called with `menuItem.click(event, focusedWindow, focusedWebContents)`.
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.
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.
This document and its child documents will be updated to reflect the latest status of our API changes.
The Electron team is currently undergoing an initiative to convert separate getter and setter functions in Electron to bespoke properties with `get` and `set` functionality. During this transition period, both the new properties and old getters and setters of these functions will work correctly and be documented.
*`path` String - path to a file that we intend to construct a thumbnail out of.
*`maxSize` [Size](structures/size.md) - the maximum width and height (positive numbers) the thumbnail returned can be. The Windows implementation will ignore `maxSize.height` and scale the height according to `maxSize.width`.
Returns `Promise<NativeImage>` - fulfilled with the file's thumbnail preview image, which is a [NativeImage](native-image.md).
### `nativeImage.createFromPath(path)`
*`path` String
@@ -266,9 +273,13 @@ image instead of a copy, so you _must_ ensure that the associated
Returns `Boolean` - Whether the image is empty.
#### `image.getSize()`
#### `image.getSize([scaleFactor])`
Returns [`Size`](structures/size.md)
*`scaleFactor` Double (optional) - Defaults to 1.0.
Returns [`Size`](structures/size.md).
If `scaleFactor` is passed, this will return the size corresponding to the image representation most closely matching the passed value.
@@ -26,12 +26,12 @@ The `Notification` class has the following static methods:
Returns `Boolean` - Whether or not desktop notifications are supported on the current system
### `new Notification([options])` _Experimental_
### `new Notification([options])`
*`options` Object (optional)
*`title` String - A title for the notification, which will be shown at the top of the notification window when it is shown.
*`title` String (optional) - A title for the notification, which will be shown at the top of the notification window when it is shown.
*`subtitle` String (optional) _macOS_ - A subtitle for the notification, which will be displayed below the title.
*`body` String - The body text of the notification, which will be displayed below the title or subtitle.
*`body` String (optional) - The body text of the notification, which will be displayed below the title or subtitle.
*`silent` Boolean (optional) - Whether or not to emit an OS notification noise when showing the notification.
*`icon` (String | [NativeImage](native-image.md)) (optional) - An icon to use in the notification.
*`hasReply` Boolean (optional) _macOS_ - Whether or not to add an inline reply option to the notification.
@@ -41,6 +41,7 @@ Returns `Boolean` - Whether or not desktop notifications are supported on the cu
*`urgency` String (optional) _Linux_ - The urgency level of the notification. Can be 'normal', 'critical', or 'low'.
*`actions` [NotificationAction[]](structures/notification-action.md) (optional) _macOS_ - Actions to add to the notification. Please read the available actions and limitations in the `NotificationAction` documentation.
*`closeButtonText` String (optional) _macOS_ - A custom title for the close button of an alert. An empty string will cause the default localized text to be used.
*`toastXml` String (optional) _Windows_ - A custom description of the Notification on Windows superseding all properties above. Provides full customization of design and behavior of the notification.
### Instance Events
@@ -94,6 +95,15 @@ Returns:
*`event` Event
*`index` Number - The index of the action that was activated.
#### Event: 'failed' _Windows_
Returns:
*`event` Event
*`error` String - The error encountered during execution of the `show()` method.
Emitted when an error is encountered while creating and showing the native notification.
### Instance Methods
Objects created with `new Notification` have the following instance methods:
@@ -162,6 +172,10 @@ If `timeoutType` is set to 'never', the notification never expires. It stays ope
A [`NotificationAction[]`](structures/notification-action.md) property representing the actions of the notification.
#### `notification.toastXml` _Windows_
A `String` property representing the custom Toast XML of the notification.
### Playing Sounds
On macOS, you can specify the name of the sound you'd like to play when the
This module cannot be used until the `ready` event of the `app`
module is emitted.
For example:
```javascript
const{app,powerMonitor}=require('electron')
app.whenReady().then(()=>{
powerMonitor.on('suspend',()=>{
console.log('The system is going to sleep')
})
})
```
## Events
The `powerMonitor` module emits the following events:
### Event: 'suspend'
### Event: 'suspend' _macOS_ _Windows_
Emitted when the system is suspending.
### Event: 'resume'
### Event: 'resume' _macOS_ _Windows_
Emitted when system is resuming.
### Event: 'on-ac' _Windows_
### Event: 'on-ac' _macOS_ _Windows_
Emitted when the system changes to AC power.
### Event: 'on-battery' _Windows_
### Event: 'on-battery' _macOS_ _Windows_
Emitted when system changes to battery power.
@@ -55,6 +39,14 @@ Emitted when the system is about to lock the screen.
Emitted as soon as the systems screen is unlocked.
### Event: 'user-did-become-active' _macOS_
Emitted when a login session is activated. See [documentation](https://developer.apple.com/documentation/appkit/nsworkspacesessiondidbecomeactivenotification?language=objc) for more information.
### Event: 'user-did-resign-active' _macOS_
Emitted when a login session is deactivated. See [documentation](https://developer.apple.com/documentation/appkit/nsworkspacesessiondidresignactivenotification?language=objc) for more information.
## Methods
The `powerMonitor` module has the following methods:
@@ -73,3 +65,18 @@ before considered idle. `locked` is available on supported systems only.
Returns `Integer` - Idle time in seconds
Calculate system idle time in seconds.
### `powerMonitor.isOnBatteryPower()`
Returns `Boolean` - Whether the system is on battery power.
To monitor for changes in this property, use the `on-battery` and `on-ac`
events.
## Properties
### `powerMonitor.onBatteryPower`
A `Boolean` property. True if the system is on battery power.
See [`powerMonitor.isOnBatteryPower()`](#powermonitorisonbatterypower).
if(error)console.error('Failed to register protocol')
})
})
```
@@ -26,9 +24,15 @@ of the `app` module gets emitted.
## Using `protocol` with a custom `partition` or `session`
A protocol is registered to a specific Electron [`session`](./session.md) object. If you don't specify a session, then your `protocol` will be applied to the default session that Electron uses. However, if you define a `partition` or `session` on your `browserWindow`'s `webPreferences`, then that window will use a different session and your custom protocol will not work if you just use `electron.protocol.XXX`.
A protocol is registered to a specific Electron [`session`](./session.md)
object. If you don't specify a session, then your `protocol` will be applied to
the default session that Electron uses. However, if you define a `partition` or
`session` on your `browserWindow`'s `webPreferences`, then that window will use
a different session and your custom protocol will not work if you just use
`electron.protocol.XXX`.
To have your custom protocol work in combination with a custom session, you need to register it to that session explicitly.
To have your custom protocol work in combination with a custom session, you need
**Note:** This method can only be used before the `ready` event of the `app`
module gets emitted and can be called only once.
Registers the `scheme` as standard, secure, bypasses content security policy for resources,
allows registering ServiceWorker and supports fetch API.
Registers the `scheme` as standard, secure, bypasses content security policy for
resources, allows registering ServiceWorker, supports fetch API, and streaming
video/audio. Specify a privilege with the value of `true` to enable the capability.
Specify a privilege with the value of `true` to enable the capability.
An example of registering a privileged scheme, with bypassing Content Security Policy:
An example of registering a privileged scheme, that bypasses Content Security
Policy:
```javascript
const{protocol}=require('electron')
@@ -84,7 +80,7 @@ A standard scheme adheres to what RFC 3986 calls [generic URI
syntax](https://tools.ietf.org/html/rfc3986#section-3). For example `http` and
`https` are standard schemes, while `file` is not.
Registering a scheme as standard, will allow relative and absolute resources to
Registering a scheme as standard allows relative and absolute resources to
be resolved correctly when served. Otherwise the scheme will behave like the
`file` protocol, but without the ability to resolve relative URLs.
@@ -102,168 +98,107 @@ Registering a scheme as standard will allow access to files through the
[FileSystem API][file-system-api]. Otherwise the renderer will throw a security
error for the scheme.
By default web storage apis (localStorage, sessionStorage, webSQL, indexedDB, cookies)
are disabled for non standard schemes. So in general if you want to register a
custom protocol to replace the `http` protocol, you have to register it as a standard scheme.
By default web storage apis (localStorage, sessionStorage, webSQL, indexedDB,
cookies) are disabled for non standard schemes. So in general if you want to
register a custom protocol to replace the `http` protocol, you have to register
it as a standard scheme.
`protocol.registerSchemesAsPrivileged` can be used to replicate the functionality of the previous `protocol.registerStandardSchemes`, `webFrame.registerURLSchemeAs*` and `protocol.registerServiceWorkerSchemes` functions that existed prior to Electron 5.0.0, for example:
Protocols that use streams (http and stream protocols) should set `stream: true`.
The `<video>` and `<audio>` HTML elements expect protocols to buffer their
responses by default. The `stream` flag configures those elements to correctly
The following events are available on instances of `ServiceWorkers`:
#### Event: 'console-message'
Returns:
*`event` Event
*`messageDetails` Object - Information about the console message
*`message` String - The actual console message
*`versionId` Number - The version ID of the service worker that sent the log message
*`source` String - The type of source for this message. Can be `javascript`, `xml`, `network`, `console-api`, `storage`, `app-cache`, `rendering`, `security`, `deprecation`, `worker`, `violation`, `intervention`, `recommendation` or `other`.
*`level` Number - The log level, from 0 to 3. In order it matches `verbose`, `info`, `warning` and `error`.
*`sourceUrl` String - The URL the message came from
*`lineNumber` Number - The line number of the source that triggered this console message
Emitted when a service worker logs something to the console.
### Instance Methods
The following methods are available on instances of `ServiceWorkers`:
#### `serviceWorkers.getAllRunning()`
Returns `Record<Number, ServiceWorkerInfo>` - A [ServiceWorkerInfo](structures/service-worker-info.md) object where the keys are the service worker version ID and the values are the information about that service worker.
#### `serviceWorkers.getFromVersionID(versionId)`
*`versionId` Number
Returns [`ServiceWorkerInfo`](structures/service-worker-info.md) - Information about this service worker
If the service worker does not exist or is not running this method will throw an exception.
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.
#### Event: 'serial-port-removed' _Experimental_
Returns:
*`event` Event
*`port` [SerialPort](structures/serial-port.md)
*`webContents` [WebContents](web-contents.md)
Emitted after `navigator.serial.requestPort` has been called and `select-serial-port` has fired if a serial port has been removed. For example, this event will fire when a USB device is unplugged.
### Instance Methods
The following methods are available on instances of `Session`:
@@ -140,6 +284,27 @@ Writes any unwritten DOMStorage data to disk.
#### `ses.setProxy(config)`
*`config` Object
*`mode` String (optional) - The proxy mode. Should be one of `direct`,
`auto_detect`, `pac_script`, `fixed_servers` or `system`. If it's
unspecified, it will be automatically determined based on other specified
options.
*`direct`
In direct mode all connections are created directly, without any proxy involved.
*`auto_detect`
In auto_detect mode the proxy configuration is determined by a PAC script that can
be downloaded at http://wpad/wpad.dat.
*`pac_script`
In pac_script mode the proxy configuration is determined by a PAC script that is
retrieved from the URL specified in the `pacScript`. This is the default mode
if `pacScript` is specified.
*`fixed_servers`
In fixed_servers mode the proxy configuration is specified in `proxyRules`.
This is the default mode if `proxyRules` is specified.
*`system`
In system mode the proxy configuration is taken from the operating system.
Note that the system mode is different from setting no proxy configuration.
In the latter case, Electron falls back to the system settings
only if no command-line options influence the proxy configuration.
*`pacScript` String (optional) - The URL associated with the PAC file.
*`proxyRules` String (optional) - Rules indicating which proxies to use.
*`proxyBypassRules` String (optional) - Rules indicating which URLs should
@@ -149,9 +314,12 @@ Returns `Promise<void>` - Resolves when the proxy setting process is complete.
Sets the proxy settings.
When `pacScript` and `proxyRules` are provided together, the `proxyRules`
When `mode` is unspecified, `pacScript` and `proxyRules` are provided together, the `proxyRules`
option is ignored and `pacScript` configuration is applied.
You may need `ses.closeAllConnections` to close currently in flight connections to prevent
pooled sockets using previous proxy from being reused by future requests.
The `proxyRules` has to follow the rules below:
```sh
@@ -187,7 +355,7 @@ The `proxyBypassRules` is a comma separated list of rules described below:
@@ -220,6 +388,10 @@ The `proxyBypassRules` is a comma separated list of rules described below:
Returns `Promise<String>` - Resolves with the proxy information for `url`.
#### `ses.forceReloadProxyConfig()`
Returns `Promise<void>` - Resolves when the all internal states of proxy service is reset and the latest proxy configuration is reapplied if it's already available. The pac script will be fetched from `pacScript` again if the proxy mode is `pac_script`.
> **NOTE:** The result of this procedure is cached by the network service.
#### `ses.setPermissionRequestHandler(handler)`
*`handler` Function | null
*`webContents` [WebContents](web-contents.md) - WebContents requesting the permission. Please note that if the request comes from a subframe you should use `requestingUrl` to check the request origin.
*`permission` String - Enum of 'media', 'geolocation', 'notifications', 'midiSysex',
'pointerLock', 'fullscreen', 'openExternal'.
*`permission` String - The type of requested permission.
*`clipboard-read` - Request access to read from the clipboard.
*`media` - Request access to media devices such as camera, microphone and speakers.
*`display-capture` - Request access to capture the screen.
*`mediaKeySystem` - Request access to DRM protected content.
*`geolocation` - Request access to user's current location.
*`notifications` - Request notification creation and the ability to display them in the user's system tray.
*`midi` - Request MIDI access in the `webmidi` API.
*`midiSysex` - Request the use of system exclusive messages in the `webmidi` API.
*`pointerLock` - Request to directly interpret mouse movements as an input method. Click [here](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API) to know more.
*`fullscreen` - Request for the app to enter fullscreen mode.
*`openExternal` - Request to open links in external applications.
*`callback` Function
*`permissionGranted` Boolean - Allow or deny the permission.
*`details` Object - Some properties are only available on certain permission types.
*`webContents` [WebContents](web-contents.md) - WebContents checking the permission. Please note that if the request comes from a subframe you should use `requestingUrl` to check the request origin.
*`permission` String - Enum of 'media'.
*`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.
*`securityOrigin` String - The security orign of the `media` check.
*`securityOrigin` String - The security origin of the `media` check.
*`mediaType` String - The type of media access being requested, can be `video`,
`audio` or `unknown`
*`requestingUrl` String - The last URL the requesting frame loaded
@@ -400,10 +590,40 @@ example `"en-US,fr,de,ko,zh-CN,ja"`.
This doesn't affect existing `WebContents`, and each `WebContents` can use
`webContents.setUserAgent` to override the session-wide user agent.
#### `ses.isPersistent()`
Returns `Boolean` - Whether or not this session is a persistent one. The default
`webContents` session of a `BrowserWindow` is persistent. When creating a session
from a partition, session prefixed with `persist:` will be persistent, while others
will be temporary.
#### `ses.getUserAgent()`
Returns `String` - The user agent for this session.
#### `ses.setSSLConfig(config)`
*`config` Object
*`minVersion` String (optional) - Can be `tls1`, `tls1.1`, `tls1.2` or `tls1.3`. The
minimum SSL version to allow when connecting to remote servers. Defaults to
`tls1`.
*`maxVersion` String (optional) - Can be `tls1.2` or `tls1.3`. The maximum SSL version
to allow when connecting to remote servers. Defaults to `tls1.3`.
*`disabledCipherSuites` Integer[] (optional) - List of cipher suites which
should be explicitly prevented from being used in addition to those
disabled by the net built-in policy.
Supported literal forms: 0xAABB, where AA is `cipher_suite[0]` and BB is
`cipher_suite[1]`, as defined in RFC 2246, Section 7.4.1.2. Unrecognized but
parsable cipher suites in this form will not return an error.
Ex: To disable TLS_RSA_WITH_RC4_128_MD5, specify 0x0004, while to
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.