* 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>
* fix: prevent crash when error occurs during event emitter CallMethod
* wip: emit error event within trycatch
* fix: handle uncaught exceptions within node on web_contents init
* fix: create gin_helper::CallMethodCatchException
* test: add web-contents create crash to test cases
* test: clean up test data for web-contents crash
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* fix: convert CatchException to WebContents static helper method
* fix: restore try_catch to callsite
Co-authored-by: VerteDinde <keeleymhammond@gmail.com>
Co-authored-by: VerteDinde <khammond@slack-corp.com>
Co-authored-by: Keeley Hammond <vertedinde@electronjs.org>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* 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>
* feat: add session.storagePath to get path on disk for session data
* spec: add session.storagePath tests
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.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>
* build: give ASAN tests more memory
* test: re-eanble asan tests
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* docs: note that new-window event is deprecated
* Update breaking-changes.md
* Update docs/breaking-changes.md
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
* 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: pass postData to new-window event
* fix type of postBody
* fix type of UploadFile and UploadRawData to be discriminated unions
* exclude the empty string from additionalFeatures
* add a test
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* 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
Co-authored-by: mlaurencin <mlaurencin@electronjs.org>
* 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
* docs: add missing curly brace to quick start example code
* test: running child app under ASan might receive SIGKILL
* test: renderer process of webview might receive SIGKILL under ASan
* test: increase timeout for asan build
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* 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>
* fix: ensure child window transparency works
Windows opened via window.open and intecepted via setWindowOpenHandler
or the `new-window` event should (a) have the correct background color
and (b) that background color should be transparent if specified.
The changes in api_web_contents fix (a) and the changes in
web_contents_preferences fix (b).
Notes: Child windows with specified background colors or transpency now
work as intended
* fix: set background_color in blink prefs apply logic
* chore: update for PR comments
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
* 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: John Kleinschmidt <jkleinsc@electronjs.org>
* fix: navigator.bluetooth.requestDevice
* cleanup lint and add test
* update bluetooth test to handle no bluetooth adapter available
* update bluetooth test to handle bluetooth permission denied
* Transparent window disabled while dev tools opened
Read that on some external website. I think this should be added to the official docs.
* Update frameless-window.md
Co-authored-by: Cheng Zhao <github@zcbenz.com>
Per discussions with the Foundation, we are making an update to all copyright headers to follow the Linux Foundation guidance on copyright notices. In particular, we are broadening them to cover all contributors, and eliminating the year to avoid the need to keep them up to date.
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.
* 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>
* 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
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
* fix: optionally transform processes on win.SetVisibleOnAllWorkspaces on macOS, making it backwards-compatible with v9.2.1 (#27101)
* fix: optionally transform processes on win.SetVisibleOnAllWorkspaces on macOS, making it backwards-compatible with v9.2.1 (#27101)
Co-authored-by: Cyrus Roshan <cyrusroshan@users.noreply.github.com>
* Update ipc-main.md
Include information about ipcMain.handle() error handling and workaround included in issue #24427
* Update ipc-main.md
fixed a typo
* Update ipc-main.md
Remove the exception passing workaround from ipcMain.handle() and refer to open issue only.
* Remove trailing spaces
Co-authored-by: Cheng Zhao <github@zcbenz.com>
* Rewrite titleBarStyle impls with WindowButtonsView
* Remove fullscreenWindowTitle option
* Make buttons show correctly under RTL
* Fix docs about traffic lights position
* Fix test on fullscreen resizable
* Fix button states with closabe/minimizable/fullscreenable
* Fix typo
* Deprecate the fullscreenWindowTitle option
* 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
* 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
* 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.
* test: add invalid icon test
* refactor: be explicit about when to throw or warn.
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.
```
* 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
* 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>
The certificate authority mentioned "Comodo" has recently been renamed
"Sectigo". This updates the name of the certificate authority, and the
link to get the code signing certificates for Sectigo/Comodo.
* docs: correction meaning of DesktopCapturerSource.id
Corrected the meaning of the id string to match observed behavior
(verified on Windows 10 and Ubuntu).
* chore: adjust wordings
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* Document coordinate system of badly named method getCursorScreenPoint
[Electron inherits this confusing name from Chromium](99314be815/ui/display/win/screen_win.cc (L677-L681)). We can also see there that the return value is a DIPPoint, due to `ScreenToDIPPoint` call:
gfx::Point ScreenWin::GetCursorScreenPoint() {
POINT pt;
::GetCursorPos(&pt);
return gfx::ToFlooredPoint(ScreenToDIPPoint(gfx::PointF(gfx::Point(pt))));
}
I lost over a day due to debugging this. I don't think we can change the method name due to backwards compatibility, but we can at least make amends in the documentation.
* Remove advice
* Softer wording
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* build: fix missing dependency resulting in a random build failure
* Update chromium_src/BUILD.gn
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
* sort deps
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
* chore: bump chromium in DEPS to 1d6b29cd85c1c3cba093b8b69b2727cc26eaac97
* 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: bump chromium in DEPS to 69cb7c65ad845cdab1cd5f4256237e72fceba2dd
* 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
* chore: bump chromium in DEPS to c6d97a240d30e5f5166856f5ae6ee14d95b9a4f0
* 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
* chore: bump chromium in DEPS to 0df9a85ffa0ad4711b41a089842e40b87ba88055
* 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.
* chore: bump chromium in DEPS to 43d6c496251e08d3781bfadbe9727688551f74a9
* update patches
* chore: bump chromium in DEPS to 1fb5c9825be4e2271c4fef0e802f5d970b32f62f
* update patches
* chore: bump chromium in DEPS to 8a1f078d67825e727a598b89a8924699df8d3850
* chore: bump chromium in DEPS to 28ff715b3a97d8cedc143bad671edb08b6de5fc2
* 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: bump chromium in DEPS to 75b464e6357190ca302ba9ce8f8c2bf5a3b709ae
* chore: update patches
* chore: bump chromium@b884b9b2f647c59a75f5d2055030afa33d50ca10
* chore: bump chromium in DEPS to 829261dadcefdc54ce5fdf7c5fac2929786a63ce
* chore: bump chromium in DEPS to 5df3e69605c7c0130374aaccb91fc4726a558db2
* chore: bump chromium in DEPS to 22db748d5b7b90f87e6e97ef4c92a727ac753ea4
* chore: bump chromium in DEPS to 1475df80282b7eeeb0e153d8375bfe651f083bf8
* chore: bump chromium in DEPS to 6d34fe9e9b7386edd90574617bfa4008de972d72
* chore: update patches
* Disable CertVerifierService for now
2559260: Enable CertVerifierService by default | https://chromium-review.googlesource.com/c/chromium/src/+/2559260
* 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
* chore: bump chromium in DEPS to 95aeb1c59ebc03d19ba077b0cd707463d1b2865e
* update patches
* Set site_for_cookies to request url so that URLLoader::ShouldForceIgnoreSiteForCookies returns true
* 2490383: a11y inspect reorg: implement accessible tree formatter factory
https://chromium-review.googlesource.com/c/chromium/src/+/2490383
* 2485887: [Extensions][web_accessible_resources] Use |matches|.
https://chromium-review.googlesource.com/c/chromium/src/+/2485887
* update v8 headers
* chore: bump chromium in DEPS to 38587dc379a8cf4d4a13e482a6e89f2fe681144e
* update patches
* 2555005: [api] Simplify ScriptOrigin
https://chromium-review.googlesource.com/c/v8/v8/+/2555005
* 2563553: Remove Flash from PermissionRequestTypes and PermissionTypes.
https://chromium-review.googlesource.com/c/chromium/src/+/2563553
* 2546146: Remove browser-hosted InterfaceProvider
https://chromium-review.googlesource.com/c/chromium/src/+/2546146
* Actually apply nan patch
* update patches
* chore: bump chromium in DEPS to 6718d4b50c9db975c5642ca5b68e8dc7ee1b7615
* update patches
* 2546146: Remove browser-hosted InterfaceProvider
https://chromium-review.googlesource.com/c/chromium/src/+/2546146
* chore: bump chromium in DEPS to 338cc300e3fe3a4cb4883e9ccdc34a32f3dfe034
* chore: bump chromium in DEPS to d9baeb1d192c23ceb1e1c4bbe6af98380b263bc1
* chore: bump chromium in DEPS to 3ca3051932683739b304e721cc394b6c66f841fe
* chore: bump chromium in DEPS to 89292a4ae29096e5313aaf19dfa0c4710145c34d
* 2571639: mac: Remove code to support OS X 10.10 in //sandbox
https://chromium-review.googlesource.com/c/chromium/src/+/2571639
* Fixup patch indices
* Do not build MTLManagedObjectAdapter
It's been removed in newer Mantle versions and uses a deprecated enum
* update patches
* Remove sendToAll
https://github.com/electron/electron/pull/26771
* 2569367: Remove dead fullscreen code in RenderWidgetHostView and friends
https://chromium-review.googlesource.com/c/chromium/src/+/2569367
* Remove deprecated performFileOperation usage
* 2568359: mac: Ignore Wdeprecated-declarations for LSSharedFileList* functions.
https://chromium-review.googlesource.com/c/chromium/src/+/2568359
* 2561401: Add OutputPresenterX11 which uses X11 present extension.
https://chromium-review.googlesource.com/c/chromium/src/+/2561401
* 2565511: [objects] Remove MakeExternal case for uncached internal strings
https://chromium-review.googlesource.com/c/v8/v8/+/2565511
* fixup: Add disconnect logic to ElectronBrowserHandlerImpl
* Allow local networking override for ATS
https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html
* Refactor: clean up rfh getters in ElectronBrowserHandlerImpl
* Update patches
* Remove unneeded BindTo
* Don't assign ElectronBrowserHandlerImpl at all
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: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
If you --ignore-scripts when installing electron currently, it'll fail
to write the path.txt file and thus fail to use the override dist path.
Open to other solutions - just hoping to be able to use a prebuilt
electron binary with the default package without having to muck around
with it installing an unused version.
* docs: first draft of the app distribution page
* docs: second iteration of the app distribution page. Fixed mentions
* docs: third iteration of the app distribution page. Fixed mentions
* docs: reworked app distribution page according to mentions
* docs: minor fixes to the app distribution page according to mentions
* fix: add check in IsMaximized for non-WS_THICKFRAME windows
* remove logs
* change GetPosition for GetNativeWindow
* change GetPosition for GetNativeWindow in IsMaximize
* add top left corner check
* add transparent maximization test
* replace window and display comparison
* rebase off master
* 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
* docs: added fiddle support for code samples in quick start guide and features
* docs: removed excessive fiddle links for not final steps
* docs: added eof newlines to fiddle examples
* docs: reworked fiddle examples to be more self-sufficient
* docs: reworked fiddle examples according to mentions
* docs: changed http to https in the offscreen rendering fiddle
* docs: fix recent documents fiddle to be more consistent
<!-- As an open source project with a dedicated but small maintainer team, it can sometimes take a long time for issues to be addressed so please be patient and we will get back to you as soon as we can.
-->
### Preflight Checklist
<!-- Please ensure you've completed the following steps by replacing [ ] with [x]-->
* [ ] I have read the [Contributing Guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md) for this project.
* [ ] I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/master/CODE_OF_CONDUCT.md) that this project adheres to.
* [ ] I have searched the issue tracker for a feature request that matches the one I want to file, without success.
### Problem Description
<!-- Is your feature request related to a problem? Please add a clear and concise description of what the problem is. -->
### Proposed Solution
<!-- Describe the solution you'd like in a clear and concise manner -->
### Alternatives Considered
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
### Additional Information
<!-- Add any other context about the problem here. -->
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:
@@ -13,4 +13,5 @@ Report security bugs in third-party modules to the person or team maintaining th
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).
@@ -753,7 +753,8 @@ Overrides the current application's name.
### `app.getLocale()`
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).
@@ -929,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:
and minimize buttons on macOS frameless windows. These buttons will not display
unless hovered over in the top left of the window. These custom buttons prevent
issues with mouse events that occur with the standard window toolbar buttons.
**Note:** This option is currently experimental.
*`trafficLightPosition` [Point](structures/point.md) (optional) - Set a custom position for the traffic light buttons. Can only be used with `titleBarStyle` set to `hidden`
*`fullscreenWindowTitle` Boolean (optional) - Shows the title in the
title bar in full screen mode on macOS for all `titleBarStyle` options.
*`customButtonsOnHover`- Results in a hidden title bar and a full size
content window, the traffic light buttons will display when being hovered
over in the top left of the window. **Note:** This option is currently
experimental.
*`trafficLightPosition` [Point](structures/point.md) (optional) - Set a
custom position for the traffic light buttons in frameless windows.
*`roundedCorners` Boolean (optional) - Whether frameless window should have
rounded corners on macOS. Default is `true`.
*`fullscreenWindowTitle` Boolean (optional) _Deprecated_ - Shows the title in
the title bar in full screen mode on macOS for `hiddenInset` titleBarStyle.
Default is `false`.
*`thickFrame` Boolean (optional) - Use `WS_THICKFRAME` style for frameless windows on
Windows, which adds standard window frame. Setting it to `false` will remove
window shadow and window animations. Default is `true`.
*`vibrancy` String (optional) - Add a type of vibrancy effect to the window, only on
macOS. Can be `appearance-based`, `light`, `dark`, `titlebar`, `selection`,
`menu`, `popover`, `sidebar`, `medium-light`, `ultra-dark`, `header`, `sheet`, `window`, `hud`, `fullscreen-ui`, `tooltip`, `content`, `under-window`, or `under-page`. Please note that using `frame: false` in combination with a vibrancy value requires that you use a non-default `titleBarStyle` as well. Also note that `appearance-based`, `light`, `dark`, `medium-light`, and `ultra-dark`have been deprecated and will be removed in an upcoming version of macOS.
`menu`, `popover`, `sidebar`, `medium-light`, `ultra-dark`, `header`, `sheet`, `window`, `hud`, `fullscreen-ui`, `tooltip`, `content`, `under-window`, or `under-page`. Please note that `appearance-based`, `light`, `dark`, `medium-light`, and `ultra-dark`are deprecated and have been removed in macOS Catalina (10.15).
*`zoomToPageWidth` Boolean (optional) - Controls the behavior on macOS when
option-clicking the green stoplight button on the toolbar or by clicking the
Window > Zoom menu item. If `true`, the window will grow to the preferred
@@ -265,12 +267,12 @@ 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
@@ -106,6 +106,26 @@ has been included below for completeness:
| `Promise` | Complex | ✅ | ✅ | Promises are only proxied if they are the return value or exact parameter. Promises nested in arrays or objects will be dropped. |
| `Function` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending classes or constructors will not work. |
| [Cloneable Types](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) | Simple | ✅ | ✅ | See the linked document on cloneable types |
| `Element` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending custom elements will not work. |
| `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.
Adds coloration to draggable regions on [`BrowserView`](./browser-view.md)s on macOS - draggable regions will be colored
green and non-draggable regions will be colored red to aid debugging.
### `ELECTRON_DEBUG_NOTIFICATIONS`
Adds extra logs to [`Notification`](./notification.md) lifecycles on macOS to aid in debugging. Extra logging will be displayed when new Notifications are created or activated. They will also be displayed when common actions are taken: a notification is shown, dismissed, its button is clicked, or it is replied to.
Sample output:
```sh
Notification created (com.github.Electron:notification:EAF7B87C-A113-43D7-8E76-F88EC9D73D44)
* 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
> Create native application menus and context menus.
@@ -22,8 +24,10 @@ Sets `menu` as the application menu on macOS. On Windows and Linux, the
Also on Windows and Linux, you can use a `&` in the top-level item name to
indicate which letter should get a generated accelerator. For example, using
`&File` for the file menu would result in a generated `Alt-F` accelerator that
opens the associated menu. The indicated character in the button label gets an
underline. The `&` character is not displayed on the button label.
opens the associated menu. The indicated character in the button label then gets an
underline, and the `&` character is not displayed on the button label.
In order to escape the `&` character in an item name, add a proceeding `&`. For example, `&&File` would result in `&File` displayed on the button label.
Passing `null` will suppress the default menu. On Windows and Linux,
this has the additional effect of removing the menu bar from the window.
Emitted when a service worker logs something to the console.
#### Event: 'registration-completed'
Returns:
*`event` Event
*`details` Object - Information about the registered service worker
*`scope` String - The base URL that a service worker is registered for
Emitted when a service worker has been registered. Can occur after a call to [`navigator.serviceWorker.register('/sw.js')`](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register) successfully resolves or when a Chrome extension is loaded.
### Instance Methods
The following methods are available on instances of `ServiceWorkers`:
*`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.
*`unknown` - An unrecognized permission request
*`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.
*`webContents`([WebContents](web-contents.md) | null) - WebContents checking the permission. Please note that if the request comes from a subframe you should use `requestingUrl` to check the request origin. Cross origin sub frames making permission checks will pass a `null` webContents to this handler. You should use `embeddingOrigin` and `requestingOrigin` to determine what origin the owning frame and the requesting frame are on respectively.
*`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 origin of the `media` check.
*`mediaType` String - The type of media access being requested, can be `video`,
*`embeddingOrigin` String (optional) - The origin of the frame embedding the frame that made the permission check. Only set for cross-origin sub frames making permission checks.
*`securityOrigin` String (optional) - The security origin of the `media` check.
*`mediaType` String (optional) - The type of media access being requested, can be `video`,
`audio` or `unknown`
*`requestingUrl` String - The last URL the requesting frame loaded
*`requestingUrl` String (optional) - The last URL the requesting frame loaded. This is not provided for cross-origin sub frames making permission checks.
*`isMainFrame` Boolean - Whether the frame making the request is the main frame
Sets the handler which can be used to respond to permission checks for the `session`.
Returning `true` will allow the permission and `false` will reject it.
Returning `true` will allow the permission and `false` will reject it. Please note that
you must also implement `setPermissionRequestHandler` to get complete permission handling.
Most web APIs do a permission check and then make a permission request if the check is denied.
To clear the handler, call `setPermissionCheckHandler(null)`.
@@ -130,6 +130,8 @@ This is necessary for events such as `NSUserDefaultsDidChangeNotification`.
*`userInfo` Record<String, unknown>
*`object` String
Returns `Number` - The ID of this subscription
Same as `subscribeNotification`, but uses `NSWorkspace.sharedWorkspace.notificationCenter`.
This is necessary for events such as `NSWorkspaceDidActivateApplicationNotification`.
@@ -433,7 +435,7 @@ It will always return `granted` for `screen` and for all media types on older ve
Returns `Promise<Boolean>` - A promise that resolves with `true` if consent was granted and `false` if it was denied. If an invalid `mediaType` is passed, the promise will be rejected. If an access request was denied and later is changed through the System Preferences pane, a restart of the app will be required for the new permissions to take effect. If access has already been requested and denied, it _must_ be changed through the preference pane; an alert will not pop up and the promise will resolve with the existing access status.
**Important:** In order to properly leverage this API, you [must set](https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_macos?language=objc) the `NSMicrophoneUsageDescription` and `NSCameraUsageDescription` strings in your app's `Info.plist` file. The values for these keys will be used to populate the permission dialogs so that the user will be properly informed as to the purpose of the permission request. See [Electron Application Distribution](https://electronjs.org/docs/tutorial/application-distribution#macos) for more information about how to set these in the context of Electron.
**Important:** In order to properly leverage this API, you [must set](https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_macos?language=objc) the `NSMicrophoneUsageDescription` and `NSCameraUsageDescription` strings in your app's `Info.plist` file. The values for these keys will be used to populate the permission dialogs so that the user will be properly informed as to the purpose of the permission request. See [Electron Application Distribution](../tutorial/application-distribution.md#macos) for more information about how to set these in the context of Electron.
This user consent was not required until macOS 10.14 Mojave, so this method will always return `true` if your system is running 10.13 High Sierra or lower.
*`additionalFeatures` String[] - The non-standard features (features not
handled Chromium or Electron) _Deprecated_
*`referrer` [Referrer](structures/referrer.md) - The referrer that will be
passed to the new window. May or may not result in the `Referer` header
being sent, depending on the referrer policy.
*`postBody` [PostBody](structures/post-body.md) (optional) - The post data
that will be sent to the new window, along with the appropriate headers
that will be set. If no post data is to be sent, the value will be `null`.
Only defined when the window is being created by a form that set
`target=_blank`.
*`disposition` String - Can be `default`, `foreground-tab`,
`background-tab`, `new-window`, `save-to-disk` and `other`.
Emitted _after_ successful creation of a window via `window.open` in the renderer.
Not emitted if the creation of the window is canceled from
@@ -642,8 +643,15 @@ Returns:
*`isEditable` Boolean - Whether the context is editable.
*`selectionText` String - Text of the selection that the context menu was
invoked on.
*`titleText` String - Title or alt text of the selection that the context
was invoked on.
*`titleText` String - Title text of the selection that the context menu was
invoked on.
*`altText` String - Alt text of the selection that the context menu was
invoked on.
*`suggestedFilename` String - Suggested filename to be used when saving file through 'Save
Link As' option of context menu.
*`selectionRect` [Rectangle](structures/rectangle.md) - Rect representing the coordinates in the document space of the selection.
*`selectionStartOffset` Number - Start position of the selection text.
*`referrerPolicy` [Referrer](structures/referrer.md) - The referrer policy of the frame on which the menu is invoked.
*`misspelledWord` String - The misspelled word under the cursor, if any.
*`dictionarySuggestions` String[] - An array of suggested words to show the
user to replace the `misspelledWord`. Only available if there is a misspelled
@@ -653,8 +661,9 @@ Returns:
*`inputFieldType` String - If the context menu was invoked on an input
field, the type of that field. Possible values are `none`, `plainText`,
`password`, `other`.
*`spellcheckEnabled` Boolean - If the context is editable, whether or not spellchecking is enabled.
*`menuSourceType` String - Input source that invoked the context menu.
Can be `none`, `mouse`, `keyboard`, `touch` or `touchMenu`.
Can be `none`, `mouse`, `keyboard`, `touch`, `touchMenu`, `longPress`, `longTap`, `touchHandle`, `stylus`, `adjustSelection`, or `adjustSelectionReset`.
*`mediaFlags` Object - The flags for the media element the context menu was
invoked on.
*`inError` Boolean - Whether the media element has crashed.
@@ -666,16 +675,22 @@ Returns:
visible.
*`canToggleControls` Boolean - Whether the media element's controls are
toggleable.
*`canPrint` Boolean - Whether the media element can be printed.
*`canSave` Boolean - Whether or not the media element can be downloaded.
*`canShowPictureInPicture` Boolean - Whether the media element can show picture-in-picture.
*`isShowingPictureInPicture` Boolean - Whether the media element is currently showing picture-in-picture.
*`canRotate` Boolean - Whether the media element can be rotated.
*`canLoop` Boolean - Whether the media element can be looped.
*`editFlags` Object - These flags indicate whether the renderer believes it
is able to perform the corresponding action.
*`canUndo` Boolean - Whether the renderer believes it can undo.
*`canRedo` Boolean - Whether the renderer believes it can redo.
*`canCut` Boolean - Whether the renderer believes it can cut.
*`canCopy` Boolean - Whether the renderer believes it can copy
*`canCopy` Boolean - Whether the renderer believes it can copy.
*`canPaste` Boolean - Whether the renderer believes it can paste.
*`canDelete` Boolean - Whether the renderer believes it can delete.
*`canSelectAll` Boolean - Whether the renderer believes it can select all.
*`canEditRichly` Boolean - Whether the renderer believes it can edit text richly.
Emitted when there is a new context menu that needs to be handled.
@@ -1169,6 +1184,7 @@ Ignore application menu shortcuts while this web contents is focused.
*`url` String - The _resolved_ version of the URL passed to `window.open()`. e.g. opening a window with `window.open('foo')` will yield something like `https://the-origin/the/current/path/foo`.
*`frameName` String - Name of the window provided in `window.open()`
*`features` String - Comma separated list of window features provided to `window.open()`.
Returns `{action: 'deny'} | {action: 'allow', overrideBrowserWindowOptions?: BrowserWindowConstructorOptions}` - `deny` cancels the creation of the new
window. `allow` will allow the new window to be created. Specifying `overrideBrowserWindowOptions` allows customization of the created window.
Returning an unrecognized value such as a null, undefined, or an object
@@ -1305,8 +1321,7 @@ Inserts `text` to the focused element.
*`text` String - Content to be searched, must not be empty.
*`options` Object (optional)
*`forward` Boolean (optional) - Whether to search forward or backward, defaults to `true`.
*`findNext` Boolean (optional) - Whether the operation is first request or a followup,
defaults to `false`.
*`findNext` Boolean (optional) - Whether to begin a new text finding session with this request. Should be `true` for initial requests, and `false` for follow-up requests. Defaults to `false`.
*`matchCase` Boolean (optional) - Whether search should be case-sensitive,
defaults to `false`.
@@ -1348,19 +1363,21 @@ Captures a snapshot of the page within `rect`. Omitting `rect` will capture the
Returns `Boolean` - Whether this page is being captured. It returns true when the capturer count
*`worldId` Integer - The ID of the world to run the javascript in, `0` is the default world, `999` is the world used by Electron's `contextIsolation` feature. You can provide any integer here.
*`code` String
*`userGesture` Boolean (optional) - Default is `false`.
Returns `Promise<unknown>` - A promise that resolves with the result of the executed
code or is rejected if execution throws or results in a rejected promise.
Works like `executeJavaScript` but evaluates `scripts` in an isolated context.
#### `frame.reload()`
Returns `boolean` - Whether the reload was initiated successfully. Only results in `false` when the frame has no history.
Electron's `webview` tag is based on [Chromium's `webview`][chrome-webview], which
is undergoing dramatic architectural changes. This impacts the stability of `webviews`,
including rendering, navigation, and event routing. We currently recommend to not
use the `webview` tag and to consider alternatives, like `iframe`, Electron's `BrowserView`,
use the `webview` tag and to consider alternatives, like `iframe`, [Electron's `BrowserView`](browser-view.md),
or an architecture that avoids embedded content altogether.
## Enabling
@@ -515,8 +515,7 @@ Inserts `text` to the focused element.
*`text` String - Content to be searched, must not be empty.
*`options` Object (optional)
*`forward` Boolean (optional) - Whether to search forward or backward, defaults to `true`.
*`findNext` Boolean (optional) - Whether the operation is first request or a followup,
defaults to `false`.
*`findNext` Boolean (optional) - Whether to begin a new text finding session with this request. Should be `true` for initial requests, and `false` for follow-up requests. Defaults to `false`.
*`matchCase` Boolean (optional) - Whether search should be case-sensitive,
@@ -6,14 +6,20 @@ Breaking changes will be documented here, and deprecation warnings added to JS c
This document uses the following convention to categorize breaking changes:
- **API Changed:** An API was changed in such a way that code that has not been updated is guaranteed to throw an exception.
- **Behavior Changed:** The behavior of Electron has changed, but not in such a way that an exception will necessarily be thrown.
- **Default Changed:** Code depending on the old default may break, not necessarily throwing an exception. The old behavior can be restored by explicitly specifying the value.
- **Deprecated:** An API was marked as deprecated. The API will continue to function, but will emit a deprecation warning, and will be removed in a future release.
- **Removed:** An API or feature was removed, and is no longer supported by Electron.
* **API Changed:** An API was changed in such a way that code that has not been updated is guaranteed to throw an exception.
* **Behavior Changed:** The behavior of Electron has changed, but not in such a way that an exception will necessarily be thrown.
* **Default Changed:** Code depending on the old default may break, not necessarily throwing an exception. The old behavior can be restored by explicitly specifying the value.
* **Deprecated:** An API was marked as deprecated. The API will continue to function, but will emit a deprecation warning, and will be removed in a future release.
* **Removed:** An API or feature was removed, and is no longer supported by Electron.
## Planned Breaking API Changes (14.0)
### API Changed: `window.(open)`
The optional parameter `frameName` will no longer set the title of the window. This now follows the specification described by the [native documentation](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#parameters) under the corresponding parameter `windowName`.
If you were using this parameter to set the title of a window, you can instead use [win.setTitle(title)](https://www.electronjs.org/docs/api/browser-window#winsettitletitle).
### Removed: `worldSafeExecuteJavaScript`
In Electron 14, `worldSafeExecuteJavaScript` will be removed. There is no alternative, please
@@ -24,6 +30,28 @@ You will be affected by this change if you use either `webFrame.executeJavaScrip
## Planned Breaking API Changes (13.0)
### API Changed: `session.setPermissionCheckHandler(handler)`
The `handler` methods first parameter was previously always a `webContents`, it can now sometimes be `null`. You should use the `requestingOrigin`, `embeddingOrigin` and `securityOrigin` properties to respond to the permission check correctly. As the `webContents` can be `null` it can no longer be relied on.
The following `systemPreferences` methods have been deprecated:
*`systemPreferences.isDarkMode()`
*`systemPreferences.isInvertedColorScheme()`
*`systemPreferences.isHighContrastColorScheme()`
Use the following `nativeTheme` properties instead:
*`nativeTheme.shouldUseDarkColors`
*`nativeTheme.shouldUseInvertedColorScheme`
*`nativeTheme.shouldUseHighContrastColors`
```js
// Removed in Electron 13
systemPreferences.isDarkMode()
// Replace with
nativeTheme.shouldUseDarkColors
// Removed in Electron 13
systemPreferences.isInvertedColorScheme()
// Replace with
nativeTheme.shouldUseInvertedColorScheme
// Removed in Electron 13
systemPreferences.isHighContrastColorScheme()
// Replace with
nativeTheme.shouldUseHighContrastColors
```
### Deprecated: WebContents `new-window` event
The `new-window` event of WebContents has been deprecated. It is replaced by [`webContents.setWindowOpenHandler()`](api/web-contents.md#contentssetwindowopenhandlerhandler).
```js
// Deprecated in Electron 13
webContents.on('new-window',(event)=>{
event.preventDefault()
})
// Replace with
webContents.setWindowOpenHandler((details)=>{
return{action:'deny'}
})
```
## Planned Breaking API Changes (12.0)
### Removed: Pepper Flash support
@@ -60,6 +176,9 @@ the previous behavior, `contextIsolation: false` must be specified in WebPrefere
We [recommend having contextIsolation enabled](https://github.com/electron/electron/blob/master/docs/tutorial/security.md#3-enable-context-isolation-for-remote-content) for the security of your application.
Another implication is that `require()` cannot be used in the renderer process unless
`nodeIntegration` is `true` and `contextIsolation` is `false`.
For more details see: https://github.com/electron/electron/issues/23506
Follow the guidelines below for building Electron.
Follow the guidelines below for building **Electron itself**, for the purposes of creating custom Electron binaries. For bundling and distributing your app code with the prebuilt Electron binaries, see the [application distribution][application-distribution] guide.
Follow the guidelines below for building Electron on Linux.
Follow the guidelines below for building **Electron itself** on Linux, for the purposes of creating custom Electron binaries. For bundling and distributing your app code with the prebuilt Electron binaries, see the [application distribution][application-distribution] guide.
Follow the guidelines below for building Electron on macOS.
Follow the guidelines below for building **Electron itself** on macOS, for the purposes of creating custom Electron binaries. For bundling and distributing your app code with the prebuilt Electron binaries, see the [application distribution][application-distribution] guide.
Follow the guidelines below for building Electron on Windows.
Follow the guidelines below for building **Electron itself** on Windows, for the purposes of creating custom Electron binaries. For bundling and distributing your app code with the prebuilt Electron binaries, see the [application distribution][application-distribution] guide.
* For unordered lists, use asterisks instead of dashes.
## Picking words
@@ -59,14 +67,15 @@ For API references, there are exceptions to this rule.
The following rules only apply to the documentation of APIs.
### Page title
### Title and description
Each page must use the actual object name returned by `require('electron')`
as the title, such as `BrowserWindow`, `autoUpdater`, and `session`.
Each module's API doc must use the actual object name returned by `require('electron')`
as its title (such as `BrowserWindow`, `autoUpdater`, and `session`).
Under the page title must be a one-line description starting with `>`.
Directly under the page title, add a one-line description of the module
as a markdown quote (beginning with `>`).
Using `session`as example:
Using the `session`module as an example:
```markdown
# session
@@ -98,14 +107,19 @@ Using `autoUpdater` as an example:
* API classes or classes that are part of modules must be listed under a
`## Class: TheClassName` chapter.
* One page can have multiple classes.
* Constructors must be listed with `###`-level titles.
* [Static Methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static) must be listed under a `### Static Methods` chapter.
* [Instance Methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Prototype_methods) must be listed under an`### Instance Methods` chapter.
*All methods that have a return value must start their description with "Returns `[TYPE]` - Return description"
* If the method returns an `Object`, its structure can be specified using a colon followed by a newline then an unordered list of properties in the same style as function parameters.
* Constructors must be listed with `###`-level headings.
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.