Compare commits

...

284 Commits

Author SHA1 Message Date
Electron Bot
00e846f6cc Bump v12.0.6 2021-04-30 11:57:27 -07:00
trop[bot]
d20fcb30ba build: add release-env context to publish-macos (#28941)
Co-authored-by: Keeley Hammond <vertedinde@electronjs.org>
2021-04-29 15:24:04 -07:00
trop[bot]
b95db701f1 docs: uniformize module API doc format (#28925)
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>
2021-04-29 17:33:13 +02:00
trop[bot]
fb436d81a4 docs: remove api/locales page (#28917)
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>
2021-04-28 15:39:14 -07:00
Pedro Pontes
74fe6e024c chore: cherry-pick 7c299aede5 from v8 (#28901)
Co-authored-by: Electron Bot <electron@github.com>
2021-04-28 12:49:09 -07:00
trop[bot]
09267722f2 fix: emit window-all-closed after closing the window (#28913)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-04-28 12:47:30 -07:00
Pedro Pontes
8c87d0d3bb chore: cherry-pick 619083c7d8 from v8 (#28904) 2021-04-28 19:26:10 +02:00
trop[bot]
b2fe673d6c docs: the tools folder does not exist anymore (#28889)
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-04-28 02:13:17 -07:00
trop[bot]
85103fdc60 test: disable shell.trashItem in renderer test on win-ia32 (#28878)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-04-28 11:12:36 +02:00
Pedro Pontes
cd093d2359 chore: cherry-pick c768895b3f, 58393127e7 and c2f6803bdd from chromium (#28821)
* chore: cherry-pick c768895b3f, 58393127e7 and c2f6803bdd from chromium

* update patches

Co-authored-by: Electron Bot <electron@github.com>
2021-04-28 02:11:44 -07:00
Pedro Pontes
57a5a31139 chore: cherry-pick ed5f62c36d from angle. (#28872) 2021-04-28 02:11:12 -07:00
trop[bot]
2aef36998a build: actually use SSL when downloading things via python (#28892)
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-04-28 02:06:57 -07:00
Shelley Vohr
e360f357b9 fix: recalibrate simpleFullscreen when display metrics change (#28869) 2021-04-27 20:12:08 -07:00
Pedro Pontes
9cdb4a37fa chore: cherry-pick aa2154a9c1 from v8 (#28861) 2021-04-27 10:17:35 -04:00
Pedro Pontes
089ccbff04 chore: cherry-pick 66b9ad64f4a4 from chromium (#28815)
* chore: cherry-pick 66b9ad64f4a4 from chromium

* update patches

Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-04-27 16:47:34 +09:00
Pedro Pontes
3c841e7ded chore: cherry-pick 7dd3b1c86795 from chromium (#28818)
* chore: cherry-pick 7dd3b1c86795 from chromium

* update patches

Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-04-27 09:49:19 +09:00
trop[bot]
ba255cd25b build: fix releases that failed halfway through npm publish actions (#28853)
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-04-26 20:36:48 -04:00
Pedro Pontes
33036aa044 chore: cherry-pick 1536a564d959 from chromium (#28812)
* chore: cherry-pick 1536a564d959 from chromium

* update patches

Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-04-26 20:09:17 +09:00
trop[bot]
37d42ec6a9 fix: only set backgroundColor in default-app for default index.html (#28841)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-04-26 11:48:58 +02:00
Shelley Vohr
8995a6b64a fix: handle async nature of [NSWindow -toggleFullScreen] (#28772) 2021-04-26 09:38:09 +02:00
Pedro Pontes
2ebd4ea9b5 chore: cherry-pick e4abe032f3ad from chromium (#28806)
* chore: cherry-pick e4abe032f3ad from chromium

* update patches

Co-authored-by: Electron Bot <electron@github.com>
2021-04-26 16:33:19 +09:00
trop[bot]
70d3856829 fix: shell.trashItem crash when called in renderer (#28787)
* 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>
2021-04-26 16:23:06 +09:00
Pedro Pontes
6ad59a30e6 chore: cherry-pick c87b3c1157 from v8 (#28809) 2021-04-26 09:16:46 +02:00
trop[bot]
909bfde816 docs: fix unintentional emoji in win.getMediaSourceId description (#28783)
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2021-04-22 13:33:02 -07:00
trop[bot]
9702a90291 fix: ensure widget size is set correctly on linux on small screens (#28755)
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>
2021-04-21 11:53:48 -04:00
Electron Bot
84fe1d7c7b chore: cherry-pick 512cd5e179f4 from v8 (#28752)
* chore: cherry-pick 512cd5e179f4 from v8

* update patches
2021-04-21 11:00:08 -04:00
trop[bot]
393b3ecbdb fix: end attached sheet when calling window.hide() (#28695)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-04-21 12:03:11 +02:00
Electron Bot
258f245e74 Bump v12.0.5 2021-04-20 16:32:33 -07:00
trop[bot]
d0fdf5a374 build: fix docs only change script to pull all files not just 30 (#28742)
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-04-19 18:28:45 -07:00
trop[bot]
3d82985602 docs(build-instructions): clarify that these are for building Electron itself (#28727)
Co-authored-by: Mark Lee <electronjs@lazymalevolence.com>
2021-04-19 20:11:13 -04:00
trop[bot]
93342d9302 build: read node files as binary files (#28736)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-04-19 19:58:40 -04:00
trop[bot]
50094b3a25 chore: clean up some spec things (#28730)
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-04-19 12:54:54 -07:00
trop[bot]
13284a3a57 fix: do not handle write errors after request is aborted (#28721)
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>
2021-04-19 11:26:16 -07:00
Keeley Hammond
5da6ee1fc1 fix: invoke the window open handler for _blank links (#28498) (#28664)
* fix: invoke the window open handler for _blank links

* add test
2021-04-15 14:22:14 -07:00
Electron Bot
4de3e451ac chore: bump chromium to 89.0.4389.128 (12-x-y) (#28659)
* chore: bump chromium in DEPS to 89.0.4389.128

* update patches
2021-04-14 13:27:11 -04:00
trop[bot]
d27046272e build: do not require vsts token for releases (#28650)
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
2021-04-14 11:44:27 +02:00
Electron Bot
9ce7c51247 Bump v12.0.4 2021-04-13 13:40:56 -07:00
Electron Bot
840ac755b8 chore: cherry-pick 02f84c745fc0 from v8 (#28638)
* chore: cherry-pick 02f84c745fc0 from v8

* update patches
2021-04-13 13:29:19 -07:00
Electron Bot
8115520d2a Bump v12.0.3 2021-04-13 07:40:27 -07:00
trop[bot]
92e3b1305c build: better error handling for release builds (#28628)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-04-13 10:27:57 -04:00
Michaela Laurencin
93dab148c8 fix: enable system maximization for frameless windows except if transparent (#28207) (#28622)
* 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
2021-04-13 09:49:42 -04:00
trop[bot]
e100c22a26 fix: crash on invalid select-serial-port callback (#28618)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-04-12 11:58:25 -04:00
Jeremy Rose
4efeaa090a chore: cherry-pick 162efe98330e from chromium (#28601)
* chore: cherry-pick 162efe98330e from chromium

* update patches

Co-authored-by: Electron Bot <electron@github.com>
2021-04-12 01:39:33 -07:00
trop[bot]
93c6c8c103 docs: define the name of the preload script (#28610)
Co-authored-by: KSneijders <32707500+KSneijders@users.noreply.github.com>
2021-04-12 00:13:53 -07:00
trop[bot]
df9a01bb53 docs: systemPreferences.subscribeWorkspaceNotification return type (#28614)
Co-authored-by: Samuel Maddock <samuel.maddock@gmail.com>
2021-04-12 00:13:07 -07:00
Robo
5c10eb4c26 fix: load source maps from custom protocols and asar bundles (#28616) 2021-04-11 23:57:09 -07:00
trop[bot]
f836ef0f47 chore: don't minimize js in development (#28585)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-04-09 16:09:41 +09:00
Cheng Zhao
274f6f75b5 fix: allow accessing file:// when web security is disabled (#28560)
* fix: allow accessing file:// when web security is disabled

* fixup lint after merge

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-04-09 09:46:36 +09:00
Cheng Zhao
2f42c2c76e fix: support wasm-eval csp behind WebAssemblyCSP flag (#28575)
* feat: support wasm-eval csp behind WebAssemblyCSP flag

* update patches

Co-authored-by: Electron Bot <electron@github.com>
2021-04-08 04:31:44 -07:00
Fedor Indutny
1cf09e7aab backport 3b21b6d from v8 to fix profiler crash (#28531) 2021-04-07 14:49:20 +09:00
trop[bot]
06580db96d fix: call UnregisterIsolate consistently (#28555)
* 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>
2021-04-07 10:08:06 +09:00
Jeremy Rose
337e691089 fix: pass postData to new-window event (#28543)
* fix: pass postData to new-window event (#28513)

* Update api-browser-window-spec.ts
2021-04-07 10:00:16 +09:00
trop[bot]
731fe11db6 ci: Add goma fallback flag (#28545)
* ci: fallback to local compile if goma auth fails

* use correct flag

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-04-07 09:48:16 +09:00
trop[bot]
9e4f6bf8b4 fix: dialog DCHECK on Linux (#28533)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-04-06 11:30:33 -04:00
trop[bot]
59328b6f8f fix: reject task append to JumpList when description exceeds 260 characters (#28525)
* 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>
2021-04-05 23:57:13 -07:00
trop[bot]
facc12eafa docs: the minimum supported version of macOS is now 10.11 (#28515)
* 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>
2021-04-05 13:03:41 -07:00
trop[bot]
d9ce3ac776 fix: free IsolateData in ~NodeEnvironment (#28483)
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>
2021-04-02 00:15:54 -07:00
Jeremy Rose
6314637ae9 fix: put RemoteCertVerifier upstream from the caching and coalescing layers (#28358) (#28465) 2021-03-31 13:56:53 -07:00
Electron Bot
00d5c6ad53 chore: bump chromium to 89.0.4389.114 (12-x-y) (#28461)
* chore: bump chromium in DEPS to 89.0.4389.114

* update patches
2021-03-31 13:56:35 -07:00
Antón Molleda
7ac905dd77 docs: remove application-packaging.md (#28457)
This tutorial was removed as part of
https://github.com/electron/electron/pull/26239 but was not deleted when
the documentation was backported in
https://github.com/electron/electron/pull/28396
2021-03-31 01:33:29 -07:00
trop[bot]
d99ab3fb41 chore: update Community link in default menu (#28458)
Co-authored-by: Erick Zhao <erick@hotmail.ca>
2021-03-31 01:32:00 -07:00
trop[bot]
80ca7be524 fix: handle an unparsable pdf manifest (#28452)
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
2021-03-30 23:21:06 -07:00
Shelley Vohr
deb667054c fix: errors thrown in functions over the contextBridge (#28447)
* fix: errors thrown in functions over the contextBridge

* spec: add a test

* fix: ensure exception is a v8::Object
2021-03-30 23:20:43 -07:00
Antón Molleda
22f6abc4f5 docs: backport current tutorials to 12-x-y (#28396) 2021-03-30 11:53:59 -07:00
trop[bot]
c023c480bb feat: initialize field trials from command line arguments (#28403)
Fixes: #27877

Co-authored-by: Saúl Ibarra Corretgé <s@saghul.net>
2021-03-29 00:25:36 -07:00
Erick Zhao
dd24a4b0f6 fix: make TouchBarPopover and TouchBarGroup work (#27901) (#28411)
* fix: use correct `orderedItem` touchbar property

* fix: correct parent in touchbar group and popover

* fix: preserve property hook order
2021-03-29 00:10:41 -07:00
trop[bot]
bb612d7a05 docs: add missing line in web-contents.md (#28400)
* 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>
2021-03-26 12:39:00 -05:00
trop[bot]
cf69f9a4ce fix: disappearing thumbar after win.hide() (#28389)
* fix: disappearing thumbar after win.hide()

* Add descriptive comment

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-03-25 12:16:53 -07:00
Will Anderson
d4eed90145 docs: update Node API renderer example to use contextBridge (#28371) 2021-03-24 19:42:47 -04:00
trop[bot]
8f05f313ce fix: isolate Pepper plugins (#28373)
* 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>
2021-03-24 19:31:07 -04:00
trop[bot]
592a1aed0f doc: desktopCapturer menu position (#28363)
desktopCapturer can be used in both main process and renderer process

Co-authored-by: liulun <xland@live.cn>
2021-03-24 16:59:21 +09:00
Erick Zhao
fc2762c66a docs: MessagePorts guide (#27678) (#28357)
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2021-03-24 10:44:50 +09:00
trop[bot]
9f48ef1c78 fix: make sure service worker scheme is registered with allowServiceWorkers (#28355)
* 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>
2021-03-24 10:43:20 +09:00
trop[bot]
574b705f22 fix: window.print() in pdf plugin (#28352)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-03-24 10:02:14 +09:00
Electron Bot
17c970b6a2 Bump v12.0.2 2021-03-23 12:19:10 -07:00
trop[bot]
1f4ffe4f68 fix: escape URL passed to shell.openExternal on windows (#28341)
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
2021-03-23 05:15:40 -07:00
trop[bot]
d121bcbbb5 fix: libuv hang on Windows (#28337)
* fix: libuv hang on Windows

* test: add a hang test

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-03-23 03:00:36 -07:00
trop[bot]
d2a342c74d refactor: prefer embedder-focused InitializeNodeWithArgs (#28324)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-03-22 12:37:13 -07:00
trop[bot]
c19e1ee30e fix: DesktopCapturer gc'd prior to capture completion (#28281)
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>
2021-03-22 11:02:51 +09:00
trop[bot]
508075f870 fix: drag region offsets in BrowserViews (#28296)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-03-22 10:58:58 +09:00
trop[bot]
c34103d912 test: use new uuid for each ServiceWorker test (#28311)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-03-22 10:57:16 +09:00
trop[bot]
7487fe91fe fix: bad menu position when no positioning item specified (#28277)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-03-19 10:21:10 +09:00
Will Anderson
7b21bc543b docs: Update Quick Start Guide for Electron 12 (#28227)
* 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
2021-03-18 15:12:27 +09:00
trop[bot]
6c09c2c644 docs: document the parameter structure of hookWindowMessage (#28214)
Fixes #28178

Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-03-16 15:44:06 -07:00
trop[bot]
44eb30fa71 fix: revert "refactor: mmap asar files (#24470)" (#28202)
This reverts commit 01a2e23194.

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-03-16 19:21:02 +09:00
Electron Bot
c528ed5a8d chore: bump chromium to 89.0.4389.90 (12-x-y) (#28174)
* chore: bump chromium in DEPS to 89.0.4389.90

* update patches
2021-03-15 14:13:36 -04:00
trop[bot]
15f29aa971 chore: cherry-pick 1fe571a from node (#28109)
* chore: cherry-pick 1fe571a from node

Backports https://github.com/nodejs/node/pull/37000

* Fix merge error

Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-03-15 11:53:06 -04:00
trop[bot]
312682d655 test: reliably wait for spellchecker to load (#28190)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-03-15 00:28:48 -07:00
trop[bot]
8397716dab fix: handle a nil backgroundColor in win.getBackgroundColor() (#28188)
* 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>
2021-03-15 11:45:19 +09:00
trop[bot]
23075f8620 fix: convert system colors to device color space in systemPreferences (#28172)
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
2021-03-13 05:01:19 -08:00
Erick Zhao
90d94e468e fix: delay emitting NotifyIcon events on Windows (#26668) (#28111)
* 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
2021-03-13 10:47:07 +09:00
trop[bot]
5cc6d79d17 fix: change #if defined(OS_MACOSX) to #if defined(OS_MAC) (#28152)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-03-12 16:43:45 +09:00
trop[bot]
8f825d35f7 docs: fix cookies event documentation for type generation (#28139)
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
2021-03-11 16:22:39 -08:00
Electron Bot
05972074e3 Bump v12.0.1 2021-03-10 13:11:09 -08:00
Keeley Hammond
21ac61270a fix: ensure child window transparency (#28107)
* 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>
2021-03-10 13:08:44 -08:00
trop[bot]
f0500fae4c fix: capturePage not resolving with hidden windows (#28075)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-03-10 09:38:30 +09:00
trop[bot]
5f2f4182c4 fix: pass IsScreen via parameter instead of sync IPC method (#28080)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-03-10 09:21:53 +09:00
Electron Bot
ac8db00a70 chore: bump chromium to 89.0.4389.82 (12-x-y) (#27960)
* chore: bump chromium in DEPS to 89.0.4389.72

* chore: bump chromium in DEPS to 89.0.4389.82
2021-03-09 11:08:06 -08:00
trop[bot]
ab5d0f4c8b chore: remove obsolete native node module patch (#28056)
* chore: remove obsolete native node module patch

* update patches

* Fix merge error

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-03-09 19:51:16 +09:00
trop[bot]
203116867b build: call goma_ctl.py ensure_start directly (#28060)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-03-09 16:05:42 +09:00
trop[bot]
67a67270f5 test: ignore the ready event from PDF Viewer (#28049)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-03-09 09:11:34 +09:00
trop[bot]
83a3eb64ec docs: setWindowOpenHandler should show object return (#28036)
* Should use object return

* Fix lint

Co-authored-by: Domenic Horner <domenic@tgxn.net>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
2021-03-08 11:21:14 -05:00
trop[bot]
8b1260184a docs: update WebPreferences default values for Electron 12 (#28037)
Updates the values for `contextIsolation` and `worldSafeExecuteJavaScript` for Electron 12.

Co-authored-by: Erick Zhao <erick@hotmail.ca>
2021-03-08 11:07:20 -05:00
trop[bot]
f13ddca55f fix: navigator.setAppBadge/clearAppBadge from a service worker (#28011)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-03-08 09:32:50 +09:00
trop[bot]
f1c4265072 chore: Add a condition to crashReporter deprecate log (#28013)
* 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>
2021-03-07 16:31:37 +09:00
trop[bot]
f5de5e9131 fix: warning when worldSafeExecuteJavaScript is disabled (#27969)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-03-05 10:15:11 +09:00
trop[bot]
a73949315c test: fix contextIsolation value for later added test (#28005)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-03-05 10:03:25 +09:00
trop[bot]
189f7e0e4e feat: expose des-ede3 cipher (#27992)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-03-04 15:52:46 -05:00
Robo
2950f03e83 chore: cherry-pick 67fe5a41bff from chromium (#27991)
Backports https://chromium-review.googlesource.com/c/chromium/src/+/2666008
2021-03-04 15:39:59 -05:00
trop[bot]
ca417e435c fix: check web_contents() for destroyed WebContents (#27966)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-03-04 17:01:15 +09:00
trop[bot]
5237108396 fix: offset browserview drag regions on macOS (#27988)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-03-04 16:33:11 +09:00
Electron Bot
3ae63c9a06 Bump v12.0.0 2021-03-01 16:47:13 -08:00
trop[bot]
8828382b23 feat: enable context isolation by default (#27949)
* 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>
2021-03-01 19:35:03 -05:00
trop[bot]
0e714d19c5 fix: ensure owner window valid (#27947)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-03-01 19:33:45 -05:00
Electron Bot
aec412e35d chore: bump chromium to 89.0.4389.69 (12-x-y) (#27907)
* chore: bump chromium in DEPS to 89.0.4389.69

* update patches

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-03-01 16:48:59 -05:00
John Kleinschmidt
4b2d791212 chore: revert webFrameMain.executeJavaScriptInIsolatedWorld method (#27926) (#27937)
(cherry picked from commit 84d0e827a3)

Co-authored-by: Keeley Hammond <VerteDinde@users.noreply.github.com>
2021-03-01 13:34:40 -08:00
Shelley Vohr
fd629c16cb fix: set WebContents background color ubiquitously #27592 (#27593) (#27942)
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>
2021-03-01 13:32:35 -08:00
Keeley Hammond
007c960f3c fix: values return from the ctx bridge with dynamic property support should themselves support dynamic properties (#27940)
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
2021-03-01 15:17:47 -05:00
Keeley Hammond
b2636e171a ci: ignore errors deleting user app directories on WOA testing (#27939) 2021-03-01 13:58:34 -05:00
Keeley Hammond
e7e1801443 fix: race-condition in electron.net (#27938) 2021-03-01 13:50:03 -05:00
Keeley Hammond
0baf9997ad fix: navigator.bluetooth.requestDevice (#27927)
* fix: navigator.bluetooth.requestDevice

* remove permission observer methods not implemented in 12-x-y

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-03-01 13:14:41 -05:00
Electron Bot
e65e989650 Bump v12.0.0-beta.31 2021-03-01 07:00:59 -08:00
Shelley Vohr
26a18c26d7 chore: bump node in DEPS to v14.16.0 (#27911)
* chore: bump node in DEPS to v14.16.0

* bootstrap: refactor to use more primordials

https://github.com/nodejs/node/pull/35999

* chore: update filenames list

Co-authored-by: Electron Bot <electron@github.com>
2021-03-01 20:47:44 +09:00
Electron Bot
a52c88ec4d Bump v12.0.0-beta.30 2021-02-25 07:01:19 -08:00
Erick Zhao
0ee559cd29 fix: cherry-pick 5c7ad5393f74 from chromium (#27598)
* fix: cherry-pick 5c7ad5393f74 from chromium

* patch

* mas fix

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-02-24 12:44:13 -08:00
trop[bot]
dfed04b71b docs: fix header level of some events in app.md (#27887)
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2021-02-24 20:36:34 +09:00
trop[bot]
d628fa07b5 fix: cap sendInputEvent text length at n-1 (#27855)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-02-24 18:07:27 +09:00
Jeremy Rose
f0c7789544 fix: ECDH.setPrivateKey correctly sets the key (#27688) (#27856)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-02-24 18:06:49 +09:00
trop[bot]
d00e869560 fix: isFullScreen typo (#27864)
* fix isFullScreen typo

* Update lib/browser/api/base-window.ts

Co-authored-by: John Kleinschmidt <jkleinsc@github.com>

Co-authored-by: Tony Wu <tonywoo@fb.com>
Co-authored-by: Tony <TonyWuu@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
2021-02-24 18:05:32 +09:00
Shelley Vohr
b70e42024a fix: libuv hang when nodeIntegrationInSubframes enabled (#27879) 2021-02-24 17:58:32 +09:00
Electron Bot
44adc8ddb4 chore: bump chromium to 89.0.4389.58 (12-x-y) (#27759)
* 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>
2021-02-23 16:27:25 -05:00
Electron Bot
9e30fe0f96 Bump v12.0.0-beta.29 2021-02-23 08:35:33 -08:00
Erick Zhao
7180b2b13f docs: remove v5 and v6 modernization docs (#27858) 2021-02-22 12:21:21 -08:00
trop[bot]
c734baf8d4 fix: gather crash data for unexpected helper path (#27828)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-02-22 11:42:25 -05:00
trop[bot]
a859436f7a revert: patch libuv to use posix_spawn on macOS (#27026) (#27810)
* Revert "perf: patch libuv to use posix_spawn on macOS (#27026)"

This reverts commit f69c11105f.

* Update .patches

Co-authored-by: VerteDinde <khammond@slack-corp.com>
Co-authored-by: Robo <hop2deep@gmail.com>
2021-02-22 10:06:29 -05:00
Electron Bot
3144f992f7 Bump v12.0.0-beta.28 2021-02-22 07:01:39 -08:00
trop[bot]
98f57a20e7 fix: enableBlinkFeatures warning in webviews (#27790)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-02-19 15:46:36 +09:00
trop[bot]
f6007654f9 fix: don't create last saved path if none exists (#27806)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-02-19 15:44:10 +09:00
trop[bot]
84a4a7a944 fix: restore window event redispatching on mac (#27769)
Co-authored-by: clavin <cwatford@slack-corp.com>
2021-02-19 15:41:35 +09:00
Electron Bot
1b6e3596f2 Bump v12.0.0-beta.27 2021-02-18 07:01:33 -08:00
Eryk Rakowski
573784967c feat: add win.setTopBrowserView() so that BrowserViews can be raised (#27007) (#27713)
* 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>
2021-02-18 17:09:26 +09:00
trop[bot]
d55b399976 fix: check WebContents before emitting render-process-gone event (#27756)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-02-18 10:15:46 +09:00
trop[bot]
b8941d084d fix: pdf viewer missing resources (#27747)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-02-17 13:24:13 -08:00
trop[bot]
afffbadf5b test: fix flaky did-change-theme-color test (#27746)
* test: move did-change-theme-color test to main

* test: enable did-change-theme-color test for WOA

Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-02-17 10:58:56 +09:00
Jeremy Rose
c3bce9c664 feat: implement allowFileAccess loadExtension option (#27702)
Co-authored-by: Сковорода Никита Андреевич <chalkerx@gmail.com>
Co-authored-by: Samuel Maddock <samuel.maddock@gmail.com>
2021-02-16 15:20:20 -08:00
Electron Bot
33f6ff40fc chore: bump chromium to 89.0.4389.47 (12-x-y) (#27591)
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-02-16 15:17:43 -08:00
Keeley Hammond
777f23af0d feat: add display-capture api to session permissions (#27696) 2021-02-16 08:00:15 -08:00
Electron Bot
f6992db54b Bump v12.0.0-beta.26 2021-02-15 07:01:13 -08:00
trop[bot]
8cdd20e97a feat: add exit code to render-process-gone details (#27677)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-02-15 09:39:49 +09:00
trop[bot]
962f1aa7d4 fix: crash in crypto.createDiffieHellman (#27700)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-02-11 11:04:27 -05:00
Electron Bot
0961044dc8 Bump v12.0.0-beta.25 2021-02-11 07:03:07 -08:00
trop[bot]
e1f06510f8 refactor: load preload script directly as a string (#27661)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-02-10 10:16:25 -06:00
trop[bot]
b6bdbcf485 chore: cherry-pick 0c8b6e41 from v8 (#27685)
* chore: cherry-pick 0c8b6e41 from v8

Backports https://chromium-review.googlesource.com/c/v8/v8/+/2679688

* update patches

* update patches

Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: Electron Bot <electron@github.com>
2021-02-09 20:55:49 -08:00
trop[bot]
417230a67a perf: patch libuv to use posix_spawn on macOS (#27656)
* perf: patch libuv to use posix_spawn on macOS

patch libuv to fix a performance regression in macOS >= 11

Spawning child processes in an Electron application with a hardened
runtime has become slow in macOS Big Sur. This patch is a squashed
version of https://github.com/libuv/libuv/pull/3064

This patch should be removed when libuv PR 3064 is merged.

Fixes: https://github.com/libuv/libuv/issues/3050
Fixes: https://github.com/electron/electron/issues/26143
PR-URL: https://github.com/libuv/libuv/pull/3064

Authored-by: Juan Pablo Canepa <jpcanepa@gmail.com>
Co-authored-by: Marcello Bastéa-Forte <marcello@descript.com>
Electron patch prepared by: Pat DeSantis <pdesantis3@gmail.com>

* Remove trailing whitespaces from patch file

* update patches

* Update patch description

Co-authored-by: Pat DeSantis <pdesantis3@gmail.com>
Co-authored-by: Electron Bot <electron@github.com>
2021-02-09 20:52:23 -08:00
Shelley Vohr
fe876bd55b fix: BrowserView rendering flicker (#27658) 2021-02-09 15:05:40 -05:00
Electron Bot
4e372b888f Bump v12.0.0-beta.24 2021-02-09 08:41:06 -08:00
trop[bot]
74ef45315b perf: optimize data structures in context_bridge::ObjectCache (#27666)
* 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>
2021-02-09 08:32:34 -08:00
trop[bot]
f7d8c806ae fix: early GC of WebFrameMain instances (#27663)
Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>
2021-02-09 08:32:24 -08:00
trop[bot]
d4de0b5e50 build: make sure fuses.h gets generated (#27671)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-02-09 08:31:44 -08:00
trop[bot]
35daa4801a fix: do not run display check on "closed" windows in tray (#27668)
* 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>
2021-02-08 14:01:43 -08:00
Electron Bot
5db929ffc1 Bump v12.0.0-beta.23 2021-02-08 07:02:02 -08:00
trop[bot]
f6b81990fc fix: memory leak in BrowserWindow (#27641)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-02-08 17:36:25 +09:00
trop[bot]
7c67c1d0ee fix: clean up base::LinkedList in context_bridge::ObjectCache (#27636)
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>
2021-02-05 14:24:50 -08:00
Erick Zhao
509efee4af fix: cherry-pick 5902d1aa722a from chromium (#27596)
* patch

* apply patch from CI?
2021-02-04 15:42:45 -05:00
Electron Bot
7fa87565c0 Bump v12.0.0-beta.22 2021-02-04 07:01:18 -08:00
trop[bot]
c67c3aaf74 build: fix buildflags.h generation on macos (#27595)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-02-03 16:30:04 +09:00
trop[bot]
cc4db3359d fix: crash when loadExtension fails (#27589)
Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>
2021-02-03 16:28:47 +09:00
Electron Bot
5dbb6356ef Bump v12.0.0-beta.21 2021-02-02 09:39:17 -08:00
Electron Bot
0c5b6bfd30 chore: bump chromium to 89.0.4388.2 (12-x-y) (#27280)
* chore: bump chromium in DEPS to 89.0.4386.0

* update patches

* 2596667: Reland "[printing] Mojofy PrintHostMsg_CheckForCancel"

https://chromium-review.googlesource.com/c/chromium/src/+/2596667
(cherry picked from commit 70fb0fe694)

* fixup for 2596667: Reland "[printing] Mojofy PrintHostMsg_CheckForCancel

* 2596880: Refactor frame detach helpers to return a bool indicating success.

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2596880

* 2596880: Refactor frame detach helpers to return a bool indicating success.

https://chromium-review.googlesource.com/c/chromium/src/+/2596880

* 2615203: [Code health] Convert DispatchCallback to OnceCallback

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2615203

* 2587618: Refactor contrast tracking in NativeTheme

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2587618

* 2596289: Use ContextMenuDataMediaType Mojo enum instead of the native one

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2596289

* 2587049: Move blink.mojom.DragOperation to //ui/base/dragdrop

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2587049

* 2585255: Move web_isolated_world_ids.h from public/platform to renderer/platform/bindings in blink

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2585255

* 2602887: Convert CheckForUpdates callback to OnceCallback

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2602887

* 2601061: Convert ChromeManagementAPIDelegate to OnceCallback

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2601061

* 2600391: Convert MessagingDelegate to OnceCallback

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2600391

* 2583590: webui: Remove UseWebUIBindingsForURL

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2583590

* 2562002: Deprecate ResourceType in ExtensionsBrowserClient

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2562002

* chore: handle AXPropertyFilter::SCRIPT in accessibility_ui

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2563923

* chore: add DISPLAY_CAPTURE permission to converter

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/2551098

* fix: add utility class for linting

* 2614784: Remove SchemeRegistry APIs for handling local and secure schemes

Ref; https://chromium-review.googlesource.com/c/chromium/src/+/2614784

* chore: bump chromium in DEPS to 89.0.4387.0

* 2618392: Rename PAGE to ENTRY in NAVIGATION_TYPE values.

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2618392

* 2616421: Factor out DnsConfigService::Watcher logic

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2616421

* chore: update Chromium patch indices

* 2617866: Componentize OptimizationHintsComponentInstaller for reuse on iOS

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2617866

* refactor: refactor x11 event handling, xeventobserver is now x11:eventobserver

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2577887
Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2585750

* 2595524: [XProto] Use x11 namespace instead of gfx for //ui/gfx/x

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2595524

* build: change ui namespace to x11

Ref: c38f8571a8:ui/gfx/x/xproto_util.h;dlc=ba9145d0c7f2b10e869e2ba482ca05b75ca35812

* 2600437: [XProto] Remove old property setters/getters from x11_util

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2600437

* chore: remove deleted headers

* 2402398: Adding ViewsAXTreeManager output to chrome://accessibility

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2402398

* chore: revert to old version of circleci for mac builds

Ref: https://gn.googlesource.com/gn/+/0d67e272bdb8145f87d238bc0b2cb8bf80ccec90

* fix: remove outdated --experimental-wasm-bigint flag

* chore: bump chromium in DEPS to 89.0.4389.0

* update patches

* 2592803: [Extensions] Use policy-enforced update URL in ManagementApi

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2592803

* 2599731: Make network::DataElement a union with absl::variant

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2599731

* 2614784: Remove SchemeRegistry APIs for handling local and secure schemes

https://chromium-review.googlesource.com/c/chromium/src/+/2614784

* 2624711: Inline and remove peekLast()

https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2624711

* chore: add patch to fix blink prefs fetching during frame swap

Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>

* update patches

* fix: do not make invalid SKImageRep in FrameSubscriber

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2572896

* Revert "2616421: Factor out DnsConfigService::Watcher logic"

This reverts commit 7214406ecb.

* 2616421: Factor out DnsConfigService::Watcher logic

https://chromium-review.googlesource.com/c/chromium/src/+/2616421

* chore: bump chromium in DEPS to 89.0.4388.2

* chore: update patches

* 2581958: [api] Dehandlify FunctionTemplate initialization

Ref: https://chromium-review.googlesource.com/c/v8/v8/+/2581958

* Revert "2592803: [Extensions] Use policy-enforced update URL in ManagementApi"

This reverts commit 00f4041cc9.

* 2572896: Prevent making invalid SkImageReps

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/2572896

* fix: sandbox exit event to preload test

* fix: restore clipboard_win patch

* ci: force delete user app data directories

* chore: clean up typing on webview-spec

* docs: undocument display-capture ses.permission option

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: VerteDinde <khammond@slack-corp.com>
Co-authored-by: VerteDinde <keeleymhammond@gmail.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-02-01 16:42:43 -05:00
Electron Bot
9faf23509d Bump v12.0.0-beta.20 2021-02-01 07:01:03 -08:00
trop[bot]
b4ae35a63d fix: pass button callback in constructor (#27555)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-01-31 09:30:10 +09:00
trop[bot]
025abfc1ba docs: update Xcode / macOS SDK version in build-instructions-macos.md (#27536)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-29 12:49:12 -08:00
trop[bot]
563bb8559f docs: Update Readme, don't mention Electron < 2 (#27541)
* chore: Update Readme, don't mention Electron < 2

* chore: Add back versioning info

Co-authored-by: Felix Rieseberg <felix@felixrieseberg.com>
2021-01-29 12:44:08 -08:00
trop[bot]
30be5bfa4b fix: replace default frameName title with null check (#27552)
* 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>
2021-01-29 12:42:34 -08:00
trop[bot]
28fa60fbcb feat: enable world safe JS by default (#27502)
* 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>
2021-01-29 12:39:56 -08:00
Electron Bot
37c68d56d6 Bump v12.0.0-beta.19 2021-01-28 07:01:38 -08:00
trop[bot]
da58ded8f9 docs: update verb tenses for structured clone notes (#27501)
Co-authored-by: Erick Zhao <erick@hotmail.ca>
2021-01-27 17:06:17 +09:00
trop[bot]
80a3f10b6b docs: add missing contextBridge API to README (#27511)
Co-authored-by: Erick Zhao <erick@hotmail.ca>
2021-01-27 17:03:10 +09:00
Milan Burda
889abd0c8e docs: update OSR max FPS number (#26805) (#27508)
Co-authored-by: Erick Zhao <erick@hotmail.ca>
2021-01-27 16:34:45 +09:00
trop[bot]
0305f08888 refactor: cleanup WebFrameMain + improve tests (#27500)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-26 19:58:07 -08:00
Milan Burda
0604f8727c fix: CSP with unsafe-eval detection with Trusted Types (#27446) (#27471) 2021-01-26 21:42:16 -06:00
trop[bot]
551896c4ce build: fix build with enable_printing=false (#27474)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-26 14:12:05 -08:00
trop[bot]
c11a5dcf29 fix: hiddenInset missing maximize button (#27462)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-25 11:29:09 -08:00
trop[bot]
b86eb74fbf fix: don't throw on bad icons in BrowserWindow constructor (#27463)
* 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.
2021-01-25 11:32:32 -06:00
trop[bot]
e49a88ba53 fix: <webview> not working with Trusted Types (#27467)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-25 08:42:02 -08:00
Electron Bot
4ab817768d Bump v12.0.0-beta.18 2021-01-25 07:01:21 -08:00
trop[bot]
f730284113 fix: add eyedropper tool functionality to browser view (#27442)
Co-authored-by: mlaurencin <mlaurencin@electronjs.org>
2021-01-21 16:19:07 -08:00
trop[bot]
6122f4bece fix: actually clear pending requests in DevToolsAgentHost (#27440)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-21 13:58:16 -08:00
Milan Burda
017628f84d fix: apply tzdata2020f to ICU (#27370)
Co-authored-by: Milan Burda <miburda@microsoft.com>
2021-01-21 13:01:01 -08:00
Electron Bot
eb132d8b3e Bump v12.0.0-beta.17 2021-01-21 11:21:36 -08:00
trop[bot]
f26025301a fix: enable navigator.setAppBadge/clearAppBadge (#27431)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-01-21 12:16:21 -05:00
John Kleinschmidt
a79750b871 Revert "Bump v12.0.0-beta.17"
This reverts commit 870d8c0307.
2021-01-21 10:29:05 -05:00
Electron Bot
870d8c0307 Bump v12.0.0-beta.17 2021-01-21 07:02:20 -08:00
trop[bot]
1f22b2bfdc feat: add frame and webContents to webRequest details (#27334)
* 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>
2021-01-21 15:55:30 +09:00
Milan Burda
e25de07657 feat: add webFrameMain.send() / webFrameMain.postMessage() (#26807) (#27366) 2021-01-21 15:49:02 +09:00
trop[bot]
6bfccca157 fix: Shutdown crash in DownloadItem callback (#27418)
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>
2021-01-21 15:31:05 +09:00
Shelley Vohr
58c1ce50d4 fix: incorrect case in content::PermissionType mapping (#27422) 2021-01-20 15:59:05 -08:00
trop[bot]
c46ed96421 fix: increase stack size on windows (#27384)
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2021-01-20 11:48:05 -05:00
trop[bot]
9278459c46 fix: prevent crash when keyboard event immediately precedes calling BrowserWindow.close() (#27359)
* 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>
2021-01-19 15:51:09 +09:00
Milan Burda
a6af3bd8df chore: remove unused sendToAll + related APIs (#26771) (#27354) 2021-01-19 15:49:54 +09:00
trop[bot]
c74780117e feat: exposeInMainWorld allow to expose non-object APIs (#26834)
* 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>
2021-01-19 15:46:01 +09:00
Electron Bot
a6f01ded4d Bump v12.0.0-beta.16 2021-01-18 07:01:42 -08:00
trop[bot]
25e4475444 fix: crash in renderer process with non-context-aware modules (#27317)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-14 13:57:15 -08:00
Electron Bot
162d40cd23 Bump v12.0.0-beta.15 2021-01-14 07:02:37 -08:00
trop[bot]
a73f00cd47 Revert "test: use emittedUntil in PDF Viewer tests (#27248)" (#27316)
This reverts commit 36f4ee87df.

Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-14 14:56:36 +09:00
Erick Zhao
897fd34253 docs: update devtools extension tutorial (#26326) (#27310)
* 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>
2021-01-14 14:54:25 +09:00
trop[bot]
0d48f3944d refactor: use platform-specific TaskRunner to print (#27307)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-13 13:45:06 -08:00
trop[bot]
82bc14362c test: disable flaky reporting API test (#27270)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-01-12 10:17:15 +09:00
Jeremy Rose
4010890edd chore: upgrade to chromium 89.0.4336.0 (#26700)
* 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>
2021-01-11 16:06:19 -05:00
trop[bot]
b10a908187 build: fix installing of code-signing identity on macOS (#27266)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-11 10:15:55 -08:00
Electron Bot
0e7ff69a4e Bump v12.0.0-beta.14 2021-01-11 07:01:53 -08:00
Milan Burda
f5af20d1d6 feat: add event.senderFrame property returning the originating webFrameMain (#26764) (#27047) 2021-01-11 14:31:23 +09:00
trop[bot]
3f2ccce9e1 fix: set presentationModeEnabled value for PDF viewer (#27262)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-11 12:24:01 +09:00
trop[bot]
8e7862ed4b test: use emittedUntil in PDF Viewer tests (#27261)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-11 12:23:39 +09:00
trop[bot]
48a8fdfdb6 feat: add webFrameMain.executeJavaScriptInIsolatedWorld() (#27195)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-11 10:47:42 +09:00
trop[bot]
e9c39163bf fix: broken PDF viewer (#27241)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-11 10:38:34 +09:00
trop[bot]
dc657515b7 test: skip media-started-playing media-paused events test when media not supported (#27236)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-08 09:31:06 -08:00
trop[bot]
8eb4ab0ae1 ci: fix broken homebrew cache (#27231) 2021-01-08 09:30:36 -08:00
trop[bot]
92c8614e14 test: skip PictureInPicture video when media not supported (#27233)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-07 21:39:15 -08:00
trop[bot]
f3ce79936a test: skip protocol.registerSchemesAsPrivileged stream test when media not supported (#27230)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-07 14:42:55 -08:00
trop[bot]
d498d4bf18 feat: make win.setAspectRatio() work on Windows (#27202) 2021-01-07 11:46:14 -08:00
Electron Bot
df21f17131 Bump v12.0.0-beta.13 2021-01-07 07:03:02 -08:00
trop[bot]
c6d144d550 fix: handle BrowserView reparenting (#27187)
* fix: handle BrowserView reparenting

* Fix case where webContents is destroyed

* Add a reparenting test

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-05 14:11:17 -05:00
trop[bot]
6553c4418f docs: webFrameMain.fromId() can return undefined (#27193)
* docs: webFrameMain.fromId() can return undefined

* docs: webFrameMain.fromId() can return undefined

Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-01-05 17:20:32 +09:00
trop[bot]
ecf981a91a docs: document frameId meaning (#27191)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-01-04 20:27:18 -08:00
trop[bot]
b5cfa03a63 fix: default offset when no drag regions (#27184)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-05 12:14:06 +09:00
trop[bot]
1bbf71c090 feat: add support for webContents option in BrowserView (#27032)
* feat: add support for webContents option in BrowserView

* tests: add tests

Co-authored-by: sentialx <sentialx@gmail.com>
2021-01-05 11:47:03 +09:00
trop[bot]
97b40e4e45 refactor: remove path from nativeImage converter (#27181)
* 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>
2021-01-05 11:43:24 +09:00
Eryk Rakowski
975123b6bf fix(extensions): implement missing web_request hooks (#22655) (#27098)
Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>

Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
Co-authored-by: samuelmaddock <samuel.maddock@gmail.com>
2021-01-05 11:30:01 +09:00
trop[bot]
011315574c fix: make webContents.id work even after destroy (#27070)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2021-01-05 11:14:00 +09:00
trop[bot]
cfd848c32f docs: update broken Chrome webview URL (#27179)
Co-authored-by: Erick Zhao <erick@hotmail.ca>
2021-01-04 14:05:59 -08:00
trop[bot]
81db78daec fix: unclickable regions in some draggable BrowserViews (#27177)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-01-04 14:04:32 -08:00
Electron Bot
ce0faeed90 Bump v12.0.0-beta.12 2020-12-21 07:01:39 -08:00
Electron Bot
e6885668d4 Bump v12.0.0-beta.11 2020-12-17 07:01:35 -08:00
trop[bot]
a1df860b66 refactor: remove last use of InternalCallbackScope (#27049)
* 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>
2020-12-17 20:29:43 +09:00
trop[bot]
ba76f6846e fix: memory leak in desktopCapturer.getSources (#27058)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2020-12-16 20:47:42 -08:00
trop[bot]
ce8d301921 fix: throw when using globalShortcut before ready (#27022)
* fix: throw when using globalShortcut before ready

* fix

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2020-12-17 10:06:32 +09:00
trop[bot]
39f865e4e3 fix: make protocol wrapper remote-friendly again (#27043)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2020-12-16 12:10:41 -08:00
trop[bot]
e6727fb7bd fix: crash on exit in Event destructor (#27034)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2020-12-16 17:29:04 +09:00
trop[bot]
c9564ff648 refactor: use public node::CallbackScope where possible (#27028)
* refactor: use public node::CallbackScope where possible

* Remove unused node_env() getter

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2020-12-15 16:36:51 -08:00
trop[bot]
76be3b9211 fix(asar): readdir(withFileTypes) fails on deep directory when using readdirSync on a deep directory within the archive, the code fails to get the stats of child paths. (#27011)
Co-authored-by: Avi Vahl <avi.vahl@wix.com>
2020-12-16 08:42:32 +09:00
trop[bot]
d132800944 ci: ignore failures on Ninja summary (#26994)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2020-12-15 13:50:54 -08:00
trop[bot]
558bcc65bc fix: window with CustomButtonsOnHover should have rounded corner (#26960)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2020-12-15 10:06:43 +09:00
trop[bot]
bf25d484a4 fix: add SafeForTerminationScopes for SIGINT interruptions (#26971)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2020-12-14 16:44:16 -08:00
Shelley Vohr
d2c4b594bd fix: screen EventEmitter methods with remote (#26988) 2020-12-14 11:51:20 -08:00
trop[bot]
601af0b016 fix: properly emit after hooks after exception (#26990)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2020-12-14 10:25:32 -08:00
trop[bot]
130a65d008 fix: Update Squirrel.mac to fix permissions bug. (#26968)
* fix: Update Squirrel.mac to fix permissions bug.

* Update patches.

Co-authored-by: Devin Foley <dfoley@slack-corp.com>
2020-12-14 08:23:15 -08:00
trop[bot]
fe022df628 fix: stack traces in non-Node.js contexts (#26912)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2020-12-14 11:19:37 -05:00
Electron Bot
5b47fd7cbf Bump v12.0.0-beta.10 2020-12-14 07:02:28 -08:00
Electron Bot
9b1913b613 Bump v12.0.0-beta.9 2020-12-11 13:02:55 -08:00
Jeremy Rose
36c695ce2a fix: restrict sendToFrame to same-process frames by default (#26875) (#26925) 2020-12-11 13:00:17 -08:00
trop[bot]
afcdf661a0 fix: Upload all *.dll.pdb to symbol server (#26966)
Fixes #26961.

Notes: Add Electron DLLs like libGLESv2.dll to symbol server

Co-authored-by: Biru Mohanathas <birunthan@mohanathas.com>
2020-12-11 12:53:54 -08:00
trop[bot]
3d01b83daa fix: Avoid crashing in NativeViewHost::SetParentAccessible on Windows (#26952)
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>
2020-12-11 12:52:33 -08:00
trop[bot]
e77d9ff3b9 docs: add missing deprecated systemPreferences APIs to breaking-changes (#26937)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2020-12-11 11:00:53 -08:00
trop[bot]
fb35356b47 fix: message box missing an "OK" button in GTK (#26917)
Co-authored-by: Mimi <1119186082@qq.com>
2020-12-10 13:06:29 -08:00
Electron Bot
37d21bb80e Bump v12.0.0-beta.8 2020-12-10 07:01:47 -08:00
trop[bot]
e84539f2e0 fix: systemPreferences.effectiveAppearance returning systemPreferences.getAppLevelAppearance() (#26879)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2020-12-09 14:58:52 +09:00
trop[bot]
d2591ed4f8 fix: handle security warnings promise when JS is disabled (#26869)
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2020-12-07 13:03:48 -08:00
trop[bot]
6b54fe37de fix: add a "set" trap to the "screen" module proxy (#26868)
* 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>
2020-12-07 10:52:51 -08:00
Electron Bot
561fe63813 Bump v12.0.0-beta.7 2020-12-07 07:00:58 -08:00
trop[bot]
9543f8b30a fix: send IPC_MESSAGES.RENDERER_RELEASE_CALLBACK as internal message (#26833)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2020-12-04 13:36:27 -08:00
Electron Bot
cec2c73733 Bump v12.0.0-beta.6 2020-12-03 07:01:08 -08:00
Erick Zhao
2e9305d964 docs: added fiddle support for code samples (#26767)
Co-authored-by: Antonio <bandantonio@users.noreply.github.com>
2020-12-03 15:54:43 +09:00
trop[bot]
0491cc6906 docs: fix contentTracing code sample (#26778)
According to the API docs, the property is called included_categories, not include_categories.

Co-authored-by: Jim Fisher <jameshfisher@gmail.com>
2020-12-02 14:29:54 -05:00
trop[bot]
badcdd6566 fix: draggable views on BrowserViews on Windows (#26775) 2020-12-01 21:34:52 -08:00
trop[bot]
a0d0bd60a5 docs: BrowserWindow extension APIs are deprecated in Electron 9 (#26783)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2020-12-01 21:31:36 -08:00
Vadim
c0f0a02419 fix: internalModuleReadJSON for unpacked JSON (#26750) 2020-12-01 18:21:28 -06:00
Michaela Laurencin
8046f0560a fix: add check in IsMaximized for non-WS_THICKFRAME windows (#26772) 2020-12-01 18:20:24 -06:00
trop[bot]
2a8961b52f fix: Add default Bluetooth permission strings (#26769)
Co-authored-by: PalmerAL <PalmerAL@users.noreply.github.com>
2020-12-01 15:02:12 -08:00
trop[bot]
36163af228 fix: draggable regions calculation in BrowserWindow/BrowserView (#26755)
* fix: draggable regions calculation in bw/bv

* Address review feedback

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2020-12-01 15:37:16 -06:00
trop[bot]
29f42e943e build: use all-for-one goma (#26741)
* Revert "Revert "build: use one-for-all goma (#26679)" (#26689)"

This reverts commit 38ab829ea6.

* build: ensure file descriptor limit is higher on macOS

Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2020-11-30 14:25:38 -08:00
Electron Bot
4597cb6499 Bump v12.0.0-beta.5 2020-11-30 07:02:00 -08:00
trop[bot]
4ba78b81c1 fix: uaf in WebContents::DidStopLoading (#26733)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2020-11-30 19:30:26 +09:00
trop[bot]
80e0473649 chore: remove deprecated crashReporter APIs (#26709)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2020-11-30 16:54:17 +09:00
Electron Bot
db0d4c8224 Bump v12.0.0-beta.4 2020-11-26 07:01:59 -08:00
trop[bot]
4fbb58020c fix: make screen wrapper remote-friendly again (#26661)
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>
2020-11-24 16:19:41 -05:00
trop[bot]
c9801ab5a5 fix: segfault on webContents.fromId(xxx) (#26651)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2020-11-24 16:12:53 -05:00
Jeremy Rose
46441c1bd7 chore: cherry-pick 47e21abe349a from chromium (#26653)
* chore: cherry-pick 47e21abe349a from chromium

* update patches

Co-authored-by: Electron Bot <electron@github.com>
2020-11-23 17:17:06 -05:00
trop[bot]
1cac3354e7 fix: reject contentTracing.stopRecording on failure (#26656)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2020-11-23 12:20:42 -08:00
trop[bot]
57c69ab3ac build: fix build with enable_printing=false (#26600)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2020-11-23 14:11:56 -05:00
Electron Bot
39b9c40a05 Bump v12.0.0-beta.3 2020-11-23 07:01:30 -08:00
trop[bot]
66a22a28a5 docs: fix relative link (#26601)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2020-11-19 12:41:26 -05:00
Electron Bot
17a8b7724b Bump v12.0.0-beta.2 2020-11-19 07:01:18 -08:00
Electron Bot
c512995426 Bump v12.0.0-beta.1 2020-11-18 14:04:12 -08:00
555 changed files with 21046 additions and 4333 deletions

View File

@@ -295,10 +295,10 @@ step-setup-goma-for-build: &step-setup-goma-for-build
run:
name: Setup Goma
command: |
if [ "`uname`" == "Linux" ]; then
echo 'export NUMBER_OF_NINJA_PROCESSES=300' >> $BASH_ENV
else
echo 'export NUMBER_OF_NINJA_PROCESSES=25' >> $BASH_ENV
echo 'export NUMBER_OF_NINJA_PROCESSES=300' >> $BASH_ENV
if [ "`uname`" == "Darwin" ]; then
echo 'ulimit -n 10000' >> $BASH_ENV
echo 'sudo launchctl limit maxfiles 65536 200000' >> $BASH_ENV
fi
if [ ! -z "$RAW_GOMA_AUTH" ]; then
echo $RAW_GOMA_AUTH > ~/.goma_oauth2_config
@@ -307,24 +307,27 @@ step-setup-goma-for-build: &step-setup-goma-for-build
cd build-tools
npm install
mkdir third_party
node -e "require('./src/utils/goma.js').downloadAndPrepare()"
node -e "require('./src/utils/goma.js').ensure()"
node -e "require('./src/utils/goma.js').downloadAndPrepare({ gomaOneForAll: true })"
third_party/goma/goma_ctl.py ensure_start
echo 'export GN_GOMA_FILE='`node -e "console.log(require('./src/utils/goma.js').gnFilePath)"` >> $BASH_ENV
echo 'export LOCAL_GOMA_DIR='`node -e "console.log(require('./src/utils/goma.js').dir)"` >> $BASH_ENV
echo 'export GOMA_FALLBACK_ON_AUTH_FAILURE=true' >> $BASH_ENV
cd ..
step-restore-brew-cache: &step-restore-brew-cache
restore_cache:
paths:
- /usr/local/Homebrew
- /usr/local/Cellar/gnu-tar
- /usr/local/bin/gtar
keys:
- v2-brew-cache-{{ arch }}
- v4-brew-cache-{{ arch }}
step-save-brew-cache: &step-save-brew-cache
save_cache:
paths:
- /usr/local/Homebrew
key: v2-brew-cache-{{ arch }}
- /usr/local/Cellar/gnu-tar
- /usr/local/bin/gtar
key: v4-brew-cache-{{ arch }}
name: Persisting brew cache
step-get-more-space-on-mac: &step-get-more-space-on-mac
@@ -445,9 +448,6 @@ step-fix-sync-on-mac: &step-fix-sync-on-mac
# Fix Clang Install (wrong binary)
rm -rf src/third_party/llvm-build
python src/tools/clang/scripts/update.py
# Fix Framework Header Installs (symlinks not retained)
rm -rf src/electron/external_binaries
python src/electron/script/update-external-binaries.py
fi
step-install-signing-cert-on-mac: &step-install-signing-cert-on-mac
@@ -464,8 +464,10 @@ step-install-gnutar-on-mac: &step-install-gnutar-on-mac
name: Install gnu-tar on macos
command: |
if [ "`uname`" == "Darwin" ]; then
brew update
brew install gnu-tar
if [ ! -d /usr/local/Cellar/gnu-tar/ ]; then
brew update
brew install gnu-tar
fi
ln -fs /usr/local/bin/gtar /usr/local/bin/tar
fi
@@ -483,7 +485,6 @@ step-gn-check: &step-gn-check
cd src
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
# Check the hunspell filenames
node electron/script/gen-hunspell-filenames.js --check
@@ -893,6 +894,8 @@ step-ninja-summary: &step-ninja-summary
run:
name: Print ninja summary
command: |
set +e
set +o pipefail
python depot_tools/post_build_ninja_summary.py -C src/out/Default
step-ninja-report: &step-ninja-report
@@ -1196,7 +1199,6 @@ steps-electron-ts-compile-for-doc-change: &steps-electron-ts-compile-for-doc-cha
- *step-depot-tools-add-to-path
- *step-setup-env-for-build
- *step-setup-goma-for-build
- *step-restore-brew-cache
- *step-get-more-space-on-mac
- *step-install-npm-deps-on-mac
- *step-fix-sync-on-mac
@@ -2535,15 +2537,19 @@ workflows:
- osx-publish-x64-skip-checkout:
requires:
- mac-checkout
context: release-env
- mas-publish-x64-skip-checkout:
requires:
- mac-checkout
context: release-env
- osx-publish-arm64-skip-checkout:
requires:
- mac-checkout
context: release-env
- mas-publish-arm64-skip-checkout:
requires:
- mac-checkout
context: release-env
lint:
when: << pipeline.parameters.run-lint >>

View File

@@ -4,4 +4,3 @@
APPVEYOR_CLOUD_TOKEN=
CIRCLE_TOKEN=
ELECTRON_GITHUB_TOKEN=
VSTS_TOKEN=

4
.gitignore vendored
View File

@@ -68,4 +68,6 @@ ts-gen
.depshash-target
# Used to accelerate builds after sync
patches/mtime-cache.json
patches/mtime-cache.json
spec/fixtures/logo.png

View File

@@ -265,21 +265,6 @@ if (is_linux) {
}
}
source_set("manifests") {
sources = [
"//electron/shell/app/manifests.cc",
"//electron/shell/app/manifests.h",
]
include_dirs = [ "//electron" ]
deps = [
"//electron/shell/common/api:mojo",
"//printing/buildflags",
"//services/service_manager/public/cpp",
]
}
npm_action("electron_version_args") {
script = "generate-version-json"
@@ -328,7 +313,6 @@ source_set("electron_lib") {
":electron_fuses",
":electron_js2c",
":electron_version_header",
":manifests",
":resources",
"buildflags",
"chromium_src:chrome",
@@ -353,7 +337,6 @@ source_set("electron_lib") {
"//components/viz/service",
"//content/public/browser",
"//content/public/child",
"//content/public/common:service_names",
"//content/public/gpu",
"//content/public/renderer",
"//content/public/utility",
@@ -508,6 +491,7 @@ source_set("electron_lib") {
}
}
if (is_linux) {
libs = [ "xshmfence" ]
deps += [
":libnotify_loader",
"//build/config/linux/gtk",
@@ -664,6 +648,7 @@ source_set("electron_lib") {
}
if (enable_pdf_viewer) {
deps += [
"//chrome/browser/resources/pdf:pdf_resources",
"//components/pdf/browser",
"//components/pdf/renderer",
"//pdf:pdf_ppapi",
@@ -1007,6 +992,9 @@ if (is_mac) {
deps = [
":electron_app_framework_bundle_data",
":electron_app_resources",
":electron_fuses",
"//base",
"//electron/buildflags",
]
if (is_mas_build) {
deps += [ ":electron_login_helper_app" ]
@@ -1170,6 +1158,19 @@ if (is_mac) {
ldflags += [ "/guard:cf,nolongjmp" ]
}
if (current_cpu == "x86") {
# Set the initial stack size to 0.5MiB, instead of the 1.5MiB needed by
# Chrome's main thread. This saves significant memory on threads (like
# those in the Windows thread pool, and others) whose stack size we can
# only control through this setting. Because Chrome's main thread needs
# a minimum 1.5 MiB stack, the main thread (in 32-bit builds only) uses
# fibers to switch to a 1.5 MiB stack before running any other code.
ldflags += [ "/STACK:0x80000" ]
} else {
# Increase the initial stack size. The default is 1MB, this is 8MB.
ldflags += [ "/STACK:0x800000" ]
}
# This is to support renaming of electron.exe. node-gyp has hard-coded
# executable names which it will recognise as node. This module definition
# file claims that the electron executable is in fact named "node.exe",

6
DEPS
View File

@@ -14,13 +14,13 @@ gclient_gn_args = [
vars = {
'chromium_version':
'3a75ada69d1ac06d6903a2c981ab90a8162f1ba0',
'89.0.4389.128',
'node_version':
'v14.15.1',
'v14.16.0',
'nan_version':
'2c4ee8a32a299eada3cd6e468bbd0a473bfea96d',
'squirrel.mac_version':
'a3a5b3f03b824441c014893b18f99a103b2603e9',
'cdc0729c8bf8576bfef18629186e1e9ecf1b0d9f',
'pyyaml_version': '3.12',
'requests_version': 'e4d59bedfd3c7f4f254f4f5d036587bcd8152458',

View File

@@ -1 +1 @@
12.0.0-nightly.20201118
12.0.6

View File

@@ -29,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
[Electron versioning](docs/tutorial/electron-versioning.md).
For more installation options and troubleshooting tips, see
[installation](docs/tutorial/installation.md).
[installation](docs/tutorial/installation.md). For info on how to manage Electron versions in your apps, see
[Electron versioning](docs/tutorial/electron-versioning.md).
## Quick start & Electron Fiddle

View File

@@ -36,6 +36,7 @@ environment:
ELECTRON_ENABLE_STACK_DUMPING: 1
MOCHA_REPORTER: mocha-multi-reporters
MOCHA_MULTI_REPORTERS: mocha-appveyor-reporter, tap
GOMA_FALLBACK_ON_AUTH_FAILURE: true
notifications:
- provider: Webhook
url: https://electron-mission-control.herokuapp.com/rest/appveyor-hook
@@ -141,7 +142,8 @@ build_script:
- cd build-tools
- npm install
- mkdir third_party
- node -e "require('./src/utils/goma.js').downloadAndPrepare()"
- ps: >-
node -e "require('./src/utils/goma.js').downloadAndPrepare({ gomaOneForAll: true })"
- ps: $env:GN_GOMA_FILE = node -e "console.log(require('./src/utils/goma.js').gnFilePath)"
- ps: $env:LOCAL_GOMA_DIR = node -e "console.log(require('./src/utils/goma.js').dir)"
- cd ..
@@ -151,7 +153,6 @@ build_script:
- 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 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 )

View File

@@ -93,6 +93,6 @@ steps:
condition: always()
- powershell: |
Remove-Item -path $env:APPDATA/Electron* -Recurse
Remove-Item -path $env:APPDATA/Electron* -Recurse -Force -ErrorAction Ignore
displayName: 'Delete user app data directories'
condition: always()

View File

@@ -163,7 +163,7 @@ if ((globalThis.process || binding.process).argv.includes("--profile-electron-in
setImmediate: false
},
optimization: {
minimize: true,
minimize: env.mode === 'production',
minimizer: [
new TerserPlugin({
terserOptions: {

View File

@@ -22,6 +22,11 @@ template("webpack_build") {
"//electron/typings/internal-electron.d.ts",
] + invoker.inputs
mode = "development"
if (is_official_build) {
mode = "production"
}
args = [
"--config",
rebase_path(invoker.config_file),
@@ -29,6 +34,7 @@ template("webpack_build") {
"--output-path=" + rebase_path(get_path_info(invoker.out_file, "dir")),
"--env.buildflags=" +
rebase_path("$target_gen_dir/buildflags/buildflags.h"),
"--env.mode=" + mode,
]
deps += [ "buildflags" ]

View File

@@ -143,10 +143,17 @@ static_library("chrome") {
"//chrome/browser/platform_util.h",
"//chrome/browser/ui/browser_dialogs.h",
"//chrome/browser/ui/color_chooser.h",
"//chrome/browser/ui/views/eye_dropper/eye_dropper.cc",
"//chrome/browser/ui/views/eye_dropper/eye_dropper.h",
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view.cc",
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view.h",
]
if (use_aura) {
sources += [ "//chrome/browser/platform_util_aura.cc" ]
sources += [
"//chrome/browser/platform_util_aura.cc",
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view_aura.cc",
]
if (!is_win) {
sources += [
@@ -163,6 +170,8 @@ static_library("chrome") {
"//chrome/browser/media/webrtc/window_icon_util_mac.mm",
"//chrome/browser/ui/cocoa/color_chooser_mac.h",
"//chrome/browser/ui/cocoa/color_chooser_mac.mm",
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view_mac.h",
"//chrome/browser/ui/views/eye_dropper/eye_dropper_view_mac.mm",
]
deps += [
"//components/remote_cocoa/app_shim",
@@ -208,8 +217,6 @@ static_library("chrome") {
"//chrome/browser/printing/print_view_manager_basic.h",
"//chrome/browser/printing/printer_query.cc",
"//chrome/browser/printing/printer_query.h",
"//chrome/browser/printing/printing_message_filter.cc",
"//chrome/browser/printing/printing_message_filter.h",
"//chrome/browser/printing/printing_service.cc",
"//chrome/browser/printing/printing_service.h",
]

View File

@@ -41,14 +41,14 @@ ipcMain.handle('bootstrap', (event) => {
return isTrustedSender(event.sender) ? electronPath : null;
});
async function createWindow () {
async function createWindow (backgroundColor?: string) {
await app.whenReady();
const options: Electron.BrowserWindowConstructorOptions = {
width: 960,
height: 620,
autoHideMenuBar: true,
backgroundColor: '#2f3241',
backgroundColor,
webPreferences: {
preload: path.resolve(__dirname, 'preload.js'),
contextIsolation: true,
@@ -96,7 +96,7 @@ export const loadURL = async (appUrl: string) => {
};
export const loadFile = async (appPath: string) => {
mainWindow = await createWindow();
mainWindow = await createWindow(appPath === 'index.html' ? '#2f3241' : undefined);
mainWindow.loadFile(appPath);
mainWindow.focus();
};

View File

@@ -91,11 +91,6 @@ These individual tutorials expand on topics discussed in the guide above.
* Electron Releases & Developer Feedback
* [Versioning Policy](tutorial/electron-versioning.md)
* [Release Timelines](tutorial/electron-timelines.md)
* [Packaging App Source Code with asar](tutorial/application-packaging.md)
* [Generating asar Archives](tutorial/application-packaging.md#generating-asar-archives)
* [Using asar Archives](tutorial/application-packaging.md#using-asar-archives)
* [Limitations](tutorial/application-packaging.md#limitations-of-the-node-api)
* [Adding Unpacked Files to asar Archives](tutorial/application-packaging.md#adding-unpacked-files-to-asar-archives)
* [Testing Widevine CDM](tutorial/testing-widevine-cdm.md)
---
@@ -131,6 +126,8 @@ These individual tutorials expand on topics discussed in the guide above.
* [ipcMain](api/ipc-main.md)
* [Menu](api/menu.md)
* [MenuItem](api/menu-item.md)
* [MessageChannelMain](api/message-channel-main.md)
* [MessagePortMain](api/message-port-main.md)
* [net](api/net.md)
* [netLog](api/net-log.md)
* [nativeTheme](api/native-theme.md)
@@ -140,6 +137,7 @@ These individual tutorials expand on topics discussed in the guide above.
* [protocol](api/protocol.md)
* [screen](api/screen.md)
* [session](api/session.md)
* [ShareMenu](api/share-menu.md)
* [systemPreferences](api/system-preferences.md)
* [TouchBar](api/touch-bar.md)
* [Tray](api/tray.md)
@@ -148,15 +146,15 @@ These individual tutorials expand on topics discussed in the guide above.
### Modules for the Renderer Process (Web Page):
* [desktopCapturer](api/desktop-capturer.md)
* [contextBridge](api/context-bridge.md)
* [ipcRenderer](api/ipc-renderer.md)
* [remote](api/remote.md)
* [webFrame](api/web-frame.md)
### Modules for Both Processes:
* [clipboard](api/clipboard.md)
* [crashReporter](api/crash-reporter.md)
* [desktopCapturer](api/desktop-capturer.md)
* [nativeImage](api/native-image.md)
* [shell](api/shell.md)

18
docs/api/app.md Normal file → Executable file
View File

@@ -391,7 +391,7 @@ which contains more information about why the render 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.
#### Event: 'render-process-gone'
### Event: 'render-process-gone'
Returns:
@@ -406,11 +406,14 @@ Returns:
* `oom` - Process ran out of memory
* `launch-failed` - Process never successfully launched
* `integrity-failure` - Windows code integrity checks failed
* `exitCode` Integer - The exit code of the process, unless `reason` is
`launch-failed`, in which case `exitCode` will be a platform-specific
launch failure error code.
Emitted when the renderer process unexpectedly disappears. This is normally
because it was crashed or killed.
#### Event: 'child-process-gone'
### Event: 'child-process-gone'
Returns:
@@ -750,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).
@@ -926,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
@@ -1174,9 +1182,9 @@ For `infoType` equal to `basic`:
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.

View File

@@ -1,14 +1,16 @@
## Class: BrowserView
> Create and control views.
Process: [Main](../glossary.md#main-process)
# BrowserView
A `BrowserView` can be used to embed additional web content into a
[`BrowserWindow`](browser-window.md). It is like a child window, except that it is positioned
relative to its owning window. It is meant to be an alternative to the
`webview` tag.
## Class: BrowserView
> Create and control views.
Process: [Main](../glossary.md#main-process)
### Example
```javascript

View File

@@ -265,7 +265,7 @@ 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
[here](process.md#event-loaded).
[here](context-bridge.md#exposing-node-global-symbols).
* `sandbox` Boolean (optional) - If set, this will sandbox the renderer
associated with the window, making it compatible with the Chromium
OS-level sandbox and disabling the Node.js engine. This is not the same as
@@ -337,7 +337,7 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
more details.
* `contextIsolation` Boolean (optional) - Whether to run Electron APIs and
the specified `preload` script in a separate JavaScript context. Defaults
to `false`. The context that the `preload` script runs in will only have
to `true`. The context that the `preload` script runs in will only have
access to its own dedicated `document` and `window` globals, as well as
its own set of JavaScript builtins (`Array`, `Object`, `JSON`, etc.),
which are all invisible to the loaded content. The Electron API will only
@@ -349,8 +349,7 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
context in the dev tools by selecting the 'Electron Isolated Context'
entry in the combo box at the top of the Console tab.
* `worldSafeExecuteJavaScript` Boolean (optional) - If true, values returned from `webFrame.executeJavaScript` will be sanitized to ensure JS values
can't unsafely cross between worlds when using `contextIsolation`. The default
is `false`. In Electron 12, the default will be changed to `true`. _Deprecated_
can't unsafely cross between worlds when using `contextIsolation`. Defaults to `true`. _Deprecated_
* `nativeWindowOpen` Boolean (optional) - Whether to use native
`window.open()`. Defaults to `false`. Child windows will always have node
integration disabled unless `nodeIntegrationInSubFrames` is true. **Note:** This option is currently
@@ -735,7 +734,7 @@ The method will also not return if the extension's manifest is missing or incomp
is emitted.
**Note:** This method is deprecated. Instead, use
[`ses.loadExtension(path)`](session.md#sesloadextensionpath).
[`ses.loadExtension(path)`](session.md#sesloadextensionpath-options).
#### `BrowserWindow.removeExtension(name)` _Deprecated_
@@ -777,7 +776,7 @@ The method will also not return if the extension's manifest is missing or incomp
is emitted.
**Note:** This method is deprecated. Instead, use
[`ses.loadExtension(path)`](session.md#sesloadextensionpath).
[`ses.loadExtension(path)`](session.md#sesloadextensionpath-options).
#### `BrowserWindow.removeDevToolsExtension(name)` _Deprecated_
@@ -1051,7 +1050,7 @@ Returns `Boolean` - Whether the window is in simple (pre-Lion) fullscreen mode.
Returns `Boolean` - Whether the window is in normal state (not maximized, not minimized, not in fullscreen mode).
#### `win.setAspectRatio(aspectRatio[, extraSize])` _macOS_ _Linux_
#### `win.setAspectRatio(aspectRatio[, extraSize])`
* `aspectRatio` Float - The aspect ratio to maintain for some portion of the
content view.
@@ -1072,6 +1071,9 @@ the player itself we would call this function with arguments of 16/9 and
are within the content view--only that they exist. Sum any extra width and
height areas you have within the overall content view.
The aspect ratio is not respected when window is resized programmingly with
APIs like `win.setSize`.
#### `win.setBackgroundColor(backgroundColor)`
* `backgroundColor` String - Window's background color as a hexadecimal value,
@@ -1384,7 +1386,7 @@ can be be used to listen to changes to tablet mode.
#### `win.getMediaSourceId()`
Returns `String` - Window id in the format of DesktopCapturerSource's id. For example "window:1234:0".
Returns `String` - Window id in the format of DesktopCapturerSource's id. For example "window:1324:0".
More precisely the format is `window:id:other_id` where `id` is `HWND` on
Windows, `CGWindowID` (`uint64_t`) on macOS and `Window` (`unsigned long`) on
@@ -1402,6 +1404,8 @@ The native type of the handle is `HWND` on Windows, `NSView*` on macOS, and
* `message` Integer
* `callback` Function
* `wParam` any - The `wParam` provided to the WndProc
* `lParam` any - The `lParam` provided to the WndProc
Hooks a windows message. The `callback` is called when
the message is received in the WndProc.
@@ -1454,7 +1458,7 @@ Returns `Boolean` - Whether the window's document has been edited.
Returns `Promise<NativeImage>` - Resolves with a [NativeImage](native-image.md)
Captures a snapshot of the page within `rect`. Omitting `rect` will capture the whole visible page.
Captures a snapshot of the page within `rect`. Omitting `rect` will capture the whole visible page. If the page is not visible, `rect` may be empty.
#### `win.loadURL(url[, options])`
@@ -1864,6 +1868,13 @@ Replacement API for setBrowserView supporting work with multi browser views.
* `browserView` [BrowserView](browser-view.md)
#### `win.setTopBrowserView(browserView)` _Experimental_
* `browserView` [BrowserView](browser-view.md)
Raises `browserView` above other `BrowserView`s attached to `win`.
Throws an error if `browserView` is not attached to `win`.
#### `win.getBrowserViews()` _Experimental_
Returns `BrowserView[]` - an array of all BrowserViews that have been attached

View File

@@ -80,6 +80,12 @@ 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.
## --force-fieldtrials=`trials`
Field trials to be forcefully enabled or disabled.
For example: `WebRTC-Audio-Red-For-Opus/Enabled/`
### --host-rules=`rules`
A comma-separated list of `rules` that control how hostnames are mapped.

View File

@@ -16,7 +16,7 @@ const { app, contentTracing } = require('electron')
app.whenReady().then(() => {
(async () => {
await contentTracing.startRecording({
include_categories: ['*']
included_categories: ['*']
})
console.log('Tracing started')
await new Promise(resolve => setTimeout(resolve, 5000))

View File

@@ -33,7 +33,7 @@ page you load in your renderer executes code in this world.
### Isolated World
When `contextIsolation` is enabled in your `webPreferences`, your `preload` scripts run in an
When `contextIsolation` is enabled in your `webPreferences` (this is the default behavior since Electron 12.0.0), your `preload` scripts run in an
"Isolated World". You can read more about context isolation and what it affects in the
[security](../tutorial/security.md#3-enable-context-isolation-for-remote-content) docs.
@@ -44,19 +44,19 @@ The `contextBridge` module has the following methods:
### `contextBridge.exposeInMainWorld(apiKey, api)` _Experimental_
* `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')
@@ -109,3 +109,22 @@ has been included below for completeness:
| `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.
```javascript
const { contextBridge } = require('electron')
const crypto = require('crypto')
contextBridge.exposeInMainWorld('nodeCrypto', {
sha256sum (data) {
const hash = crypto.createHash('sha256')
hash.update(data)
return hash.digest('hex')
}
})
```

View File

@@ -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:

View File

@@ -128,7 +128,7 @@ must be at most 39 bytes long, and values must be no longer than 127 bytes.
Keys with names longer than the maximum will be silently ignored. Key values
longer than the maximum length will be truncated.
**Note:** Calling this method from the renderer process is deprecated.
**Note:** This method is only available in the main process.
### `crashReporter.getLastCrashReport()`
@@ -137,7 +137,7 @@ last crash report. Only crash reports that have been uploaded will be returned;
even if a crash report is present on disk it will not be returned until it is
uploaded. In the case that there are no uploaded reports, `null` is returned.
**Note:** Calling this method from the renderer process is deprecated.
**Note:** This method is only available in the main process.
### `crashReporter.getUploadedReports()`
@@ -146,14 +146,14 @@ Returns [`CrashReport[]`](structures/crash-report.md):
Returns all uploaded crash reports. Each report contains the date and uploaded
ID.
**Note:** Calling this method from the renderer process is deprecated.
**Note:** This method is only available in the main process.
### `crashReporter.getUploadToServer()`
Returns `Boolean` - Whether reports should be submitted to the server. Set through
the `start` method or `setUploadToServer`.
**Note:** Calling this method from the renderer process is deprecated.
**Note:** This method is only available in the main process.
### `crashReporter.setUploadToServer(uploadToServer)`
@@ -162,13 +162,7 @@ the `start` method or `setUploadToServer`.
This would normally be controlled by user preferences. This has no effect if
called before `start` is called.
**Note:** Calling this method from the renderer process is deprecated.
### `crashReporter.getCrashesDirectory()` _Deprecated_
Returns `String` - The directory where crashes are temporarily stored before being uploaded.
**Note:** This method is deprecated, use `app.getPath('crashDumps')` instead.
**Note:** This method is only available in the main process.
### `crashReporter.addExtraParameter(key, value)`

View File

@@ -15,7 +15,7 @@ extension capabilities.
Electron only supports loading unpacked extensions (i.e., `.crx` files do not
work). Extensions are installed per-`session`. To load an extension, call
[`ses.loadExtension`](session.md#sesloadextensionpath):
[`ses.loadExtension`](session.md#sesloadextensionpath-options):
```js
const { session } = require('electron')
@@ -115,3 +115,9 @@ The following methods of `chrome.management` are supported:
- `chrome.management.getPermissionWarningsByManifest`
- `chrome.management.onEnabled`
- `chrome.management.onDisabled`
### `chrome.webRequest`
All features of this API are supported.
> **NOTE:** Electron's [`webRequest`](web-request.md) module takes precedence over `chrome.webRequest` if there are conflicting handlers.

View File

@@ -82,8 +82,11 @@ win.show()
* 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

View File

@@ -9,7 +9,7 @@ with the operating system so that you can customize the operations for various
shortcuts.
**Note:** The shortcut is global; it will work even if the app does
not have the keyboard focus. You should not use this module until the `ready`
not have the keyboard focus. This module cannot be used before the `ready`
event of the app module is emitted.
```javascript

View File

@@ -62,10 +62,9 @@ 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:** Since the main process does not have support for DOM objects such as
> 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.
@@ -90,11 +89,10 @@ Algorithm][SCA], just like [`window.postMessage`][], so prototype chains will no
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:** Since the main process does not have support for DOM objects such as
> **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.
@@ -134,11 +132,10 @@ Algorithm][SCA], just like [`window.postMessage`][], so prototype chains will no
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:** Since the main process does not have support for DOM objects such as
> **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.

View File

@@ -1,142 +0,0 @@
# Locales
> Locale values returned by `app.getLocale()`.
Electron uses Chromium's `l10n_util` library to fetch the locale. Possible
values are listed below:
| Language Code | Language Name |
|---------------|---------------|
| af | Afrikaans |
| am | Amharic |
| ar | Arabic |
| az | Azerbaijani |
| be | Belarusian |
| bg | Bulgarian |
| bh | Bihari |
| bn | Bengali |
| br | Breton |
| bs | Bosnian |
| ca | Catalan |
| co | Corsican |
| cs | Czech |
| cy | Welsh |
| da | Danish |
| de | German |
| de-AT | German (Austria) |
| de-CH | German (Switzerland) |
| de-DE | German (Germany) |
| el | Greek |
| en | English |
| en-AU | English (Australia) |
| en-CA | English (Canada) |
| en-GB | English (UK) |
| en-NZ | English (New Zealand) |
| en-US | English (US) |
| en-ZA | English (South Africa) |
| eo | Esperanto |
| es | Spanish |
| es-419 | Spanish (Latin America) |
| et | Estonian |
| eu | Basque |
| fa | Persian |
| fi | Finnish |
| fil | Filipino |
| fo | Faroese |
| fr | French |
| fr-CA | French (Canada) |
| fr-CH | French (Switzerland) |
| fr-FR | French (France) |
| fy | Frisian |
| ga | Irish |
| gd | Scots Gaelic |
| gl | Galician |
| gn | Guarani |
| gu | Gujarati |
| ha | Hausa |
| haw | Hawaiian |
| he | Hebrew |
| hi | Hindi |
| hr | Croatian |
| hu | Hungarian |
| hy | Armenian |
| ia | Interlingua |
| id | Indonesian |
| is | Icelandic |
| it | Italian |
| it-CH | Italian (Switzerland) |
| it-IT | Italian (Italy) |
| ja | Japanese |
| jw | Javanese |
| ka | Georgian |
| kk | Kazakh |
| km | Cambodian |
| kn | Kannada |
| ko | Korean |
| ku | Kurdish |
| ky | Kyrgyz |
| la | Latin |
| ln | Lingala |
| lo | Laothian |
| lt | Lithuanian |
| lv | Latvian |
| mk | Macedonian |
| ml | Malayalam |
| mn | Mongolian |
| mo | Moldavian |
| mr | Marathi |
| ms | Malay |
| mt | Maltese |
| nb | Norwegian (Bokmal) |
| ne | Nepali |
| nl | Dutch |
| nn | Norwegian (Nynorsk) |
| no | Norwegian |
| oc | Occitan |
| om | Oromo |
| or | Oriya |
| pa | Punjabi |
| pl | Polish |
| ps | Pashto |
| pt | Portuguese |
| pt-BR | Portuguese (Brazil) |
| pt-PT | Portuguese (Portugal) |
| qu | Quechua |
| rm | Romansh |
| ro | Romanian |
| ru | Russian |
| sd | Sindhi |
| sh | Serbo-Croatian |
| si | Sinhalese |
| sk | Slovak |
| sl | Slovenian |
| sn | Shona |
| so | Somali |
| sq | Albanian |
| sr | Serbian |
| st | Sesotho |
| su | Sundanese |
| sv | Swedish |
| sw | Swahili |
| ta | Tamil |
| te | Telugu |
| tg | Tajik |
| th | Thai |
| ti | Tigrinya |
| tk | Turkmen |
| to | Tonga |
| tr | Turkish |
| tt | Tatar |
| tw | Twi |
| ug | Uighur |
| uk | Ukrainian |
| ur | Urdu |
| uz | Uzbek |
| vi | Vietnamese |
| xh | Xhosa |
| yi | Yiddish |
| yo | Yoruba |
| zh | Chinese |
| zh-CN | Chinese (Simplified) |
| zh-TW | Chinese (Traditional) |
| zu | Zulu |

View File

@@ -1,3 +1,5 @@
# Menu
## Class: Menu
> Create native application menus and context menus.

View File

@@ -9,12 +9,15 @@ channel messaging.
## Class: MessageChannelMain
> Channel interface for channel messaging in the main process.
Process: [Main](../glossary.md#main-process)
Example:
```js
// Main process
const { MessageChannelMain } = require('electron')
const { port1, port2 } = new MessageChannelMain()
w.webContents.postMessage('port', null, [port2])
port1.postMessage({ some: 'message' })

View File

@@ -14,6 +14,8 @@ channel messaging.
## Class: MessagePortMain
> Port interface for channel messaging in the main process.
Process: [Main](../glossary.md#main-process)
### Instance Methods

View File

@@ -1,10 +0,0 @@
## Modernization
The Electron team is currently undergoing an initiative to modernize our API in a few concrete ways. These include: updating our modules to use idiomatic JS properties instead of separate `getPropertyX` and `setPropertyX`, converting callbacks to promises, and removing some other anti-patterns present in our APIs. The current status of the Promise initiative can be tracked in the [promisification](promisification.md) tracking file.
As we work to perform these updates, we seek to create the least disruptive amount of change at any given time, so as many changes as possible will be introduced in a backward compatible manner and deprecated after enough time has passed to give users a chance to upgrade their API calls.
This document and its child documents will be updated to reflect the latest status of our API changes.
* [Promisification](promisification.md)
* [Property Updates](property-updates.md)

View File

@@ -1,42 +0,0 @@
## Promisification
The Electron team recently underwent an initiative to convert callback-based APIs to Promise-based ones. See converted functions below:
- [app.getFileIcon(path[, options], callback)](https://github.com/electron/electron/blob/master/docs/api/app.md#getFileIcon)
- [contents.capturePage([rect, ]callback)](https://github.com/electron/electron/blob/master/docs/api/web-contents.md#capturePage)
- [contents.executeJavaScript(code[, userGesture, callback])](https://github.com/electron/electron/blob/master/docs/api/web-contents.md#executeJavaScript)
- [contents.printToPDF(options, callback)](https://github.com/electron/electron/blob/master/docs/api/web-contents.md#printToPDF)
- [contents.savePage(fullPath, saveType, callback)](https://github.com/electron/electron/blob/master/docs/api/web-contents.md#savePage)
- [contentTracing.getCategories(callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#getCategories)
- [contentTracing.startRecording(options, callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#startRecording)
- [contentTracing.stopRecording(resultFilePath, callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#stopRecording)
- [contentTracing.getTraceBufferUsage(callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#getTraceBufferUsage)
- [cookies.flushStore(callback)](https://github.com/electron/electron/blob/master/docs/api/cookies.md#flushStore)
- [cookies.get(filter, callback)](https://github.com/electron/electron/blob/master/docs/api/cookies.md#get)
- [cookies.remove(url, name, callback)](https://github.com/electron/electron/blob/master/docs/api/cookies.md#remove)
- [cookies.set(details, callback)](https://github.com/electron/electron/blob/master/docs/api/cookies.md#set)
- [debugger.sendCommand(method[, commandParams, callback])](https://github.com/electron/electron/blob/master/docs/api/debugger.md#sendCommand)
- [desktopCapturer.getSources(options, callback)](https://github.com/electron/electron/blob/master/docs/api/desktop-capturer.md#getSources)
- [dialog.showOpenDialog([browserWindow, ]options[, callback])](https://github.com/electron/electron/blob/master/docs/api/dialog.md#showOpenDialog)
- [dialog.showSaveDialog([browserWindow, ]options[, callback])](https://github.com/electron/electron/blob/master/docs/api/dialog.md#showSaveDialog)
- [inAppPurchase.purchaseProduct(productID, quantity, callback)](https://github.com/electron/electron/blob/master/docs/api/in-app-purchase.md#purchaseProduct)
- [inAppPurchase.getProducts(productIDs, callback)](https://github.com/electron/electron/blob/master/docs/api/in-app-purchase.md#getProducts)
- [dialog.showMessageBox([browserWindow, ]options[, callback])](https://github.com/electron/electron/blob/master/docs/api/dialog.md#showMessageBox)
- [dialog.showCertificateTrustDialog([browserWindow, ]options, callback)](https://github.com/electron/electron/blob/master/docs/api/dialog.md#showCertificateTrustDialog)
- [netLog.stopLogging([callback])](https://github.com/electron/electron/blob/master/docs/api/net-log.md#stopLogging)
- [protocol.isProtocolHandled(scheme, callback)](https://github.com/electron/electron/blob/master/docs/api/protocol.md#isProtocolHandled)
- [ses.clearHostResolverCache([callback])](https://github.com/electron/electron/blob/master/docs/api/session.md#clearHostResolverCache)
- [ses.clearStorageData([options, callback])](https://github.com/electron/electron/blob/master/docs/api/session.md#clearStorageData)
- [ses.setProxy(config, callback)](https://github.com/electron/electron/blob/master/docs/api/session.md#setProxy)
- [ses.resolveProxy(url, callback)](https://github.com/electron/electron/blob/master/docs/api/session.md#resolveProxy)
- [ses.getCacheSize(callback)](https://github.com/electron/electron/blob/master/docs/api/session.md#getCacheSize)
- [ses.clearAuthCache(options[, callback])](https://github.com/electron/electron/blob/master/docs/api/session.md#clearAuthCache)
- [ses.clearCache(callback)](https://github.com/electron/electron/blob/master/docs/api/session.md#clearCache)
- [ses.getBlobData(identifier, callback)](https://github.com/electron/electron/blob/master/docs/api/session.md#getBlobData)
- [shell.openExternal(url[, options, callback])](https://github.com/electron/electron/blob/master/docs/api/shell.md#openExternal)
- [webFrame.executeJavaScript(code[, userGesture, callback])](https://github.com/electron/electron/blob/master/docs/api/web-frame.md#executeJavaScript)
- [webFrame.executeJavaScriptInIsolatedWorld(worldId, scripts[, userGesture, callback])](https://github.com/electron/electron/blob/master/docs/api/web-frame.md#executeJavaScriptInIsolatedWorld)
- [webviewTag.capturePage([rect, ]callback)](https://github.com/electron/electron/blob/master/docs/api/webview-tag.md#capturePage)
- [webviewTag.executeJavaScript(code[, userGesture, callback])](https://github.com/electron/electron/blob/master/docs/api/webview-tag.md#executeJavaScript)
- [webviewTag.printToPDF(options, callback)](https://github.com/electron/electron/blob/master/docs/api/webview-tag.md#printToPDF)
- [win.capturePage([rect, ]callback)](https://github.com/electron/electron/blob/master/docs/api/browser-window.md#capturePage)

View File

@@ -1,41 +0,0 @@
## Property Updates
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.
## Candidates
* `BrowserWindow`
* `menubarVisible`
* `crashReporter` module
* `uploadToServer`
* `webFrame` modules
* `zoomFactor`
* `zoomLevel`
* `audioMuted`
* `<webview>`
* `zoomFactor`
* `zoomLevel`
* `audioMuted`
## Converted Properties
* `app` module
* `accessibilitySupport`
* `applicationMenu`
* `badgeCount`
* `name`
* `DownloadItem` class
* `savePath`
* `BrowserWindow` module
* `autoHideMenuBar`
* `resizable`
* `maximizable`
* `minimizable`
* `fullscreenable`
* `movable`
* `closable`
* `backgroundThrottling`
* `NativeImage`
* `isMacTemplateImage`
* `SystemPreferences` module
* `appLevelAppearance`

View File

@@ -42,19 +42,6 @@ In sandboxed renderers the `process` object contains only a subset of the APIs:
Emitted when Electron has loaded its internal initialization script and is
beginning to load the web page or the main script.
It can be used by the preload script to add removed Node global symbols back to
the global scope when node integration is turned off:
```javascript
// preload.js
const _setImmediate = setImmediate
const _clearImmediate = clearImmediate
process.once('loaded', () => {
global.setImmediate = _setImmediate
global.clearImmediate = _clearImmediate
})
```
## Properties
### `process.defaultApp` _Readonly_

View File

@@ -492,6 +492,7 @@ win.webContents.session.setCertificateVerifyProc((request, callback) => {
* `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.
@@ -742,9 +743,13 @@ will not work on non-persistent (in-memory) sessions.
**Note:** On macOS and Windows 10 this word will be removed from the OS custom dictionary as well
#### `ses.loadExtension(path)`
#### `ses.loadExtension(path[, options])`
* `path` String - Path to a directory containing an unpacked Chrome extension
* `options` Object (optional)
* `allowFileAccess` Boolean - Whether to allow the extension to read local files over `file://`
protocol and inject content scripts into `file://` pages. This is required e.g. for loading
devtools extensions on `file://` URLs. Defaults to false.
Returns `Promise<Extension>` - resolves when the extension is loaded.
@@ -767,7 +772,11 @@ const { app, session } = require('electron')
const path = require('path')
app.on('ready', async () => {
await session.defaultSession.loadExtension(path.join(__dirname, 'react-devtools'))
await session.defaultSession.loadExtension(
path.join(__dirname, 'react-devtools'),
// allowFileAccess is required to load the devtools extension on file:// URLs.
{ allowFileAccess: true }
)
// Note that in order to use the React DevTools extension, you'll need to
// download and unzip a copy of the extension.
})

View File

@@ -1,8 +1,4 @@
## Class: ShareMenu
> Create share menu on macOS.
Process: [Main](../glossary.md#main-process)
# ShareMenu
The `ShareMenu` class creates [Share Menu][share-menu] on macOS, which can be
used to share information from the current context to apps, social media
@@ -11,6 +7,12 @@ accounts, and other services.
For including the share menu as a submenu of other menus, please use the
`shareMenu` role of [`MenuItem`](menu-item.md).
## Class: ShareMenu
> Create share menu on macOS.
Process: [Main](../glossary.md#main-process)
### `new ShareMenu(sharingItem)`
* `sharingItem` SharingItem - The item to share.

View File

@@ -1,8 +1,10 @@
# IpcMainEvent Object extends `Event`
* `processId` Integer - The internal ID of the renderer process that sent this message
* `frameId` Integer - The ID of the renderer frame that sent this message
* `returnValue` any - Set this to the value to be returned in a synchronous message
* `sender` WebContents - Returns the `webContents` that sent the message
* `senderFrame` WebFrameMain _Readonly_ - The frame that sent this message
* `ports` MessagePortMain[] - A list of MessagePorts that were transferred with this message
* `reply` Function - A function that will send an IPC message to the renderer frame that sent the original message that you are currently handling. You should use this method to "reply" to the sent message in order to guarantee the reply will go to the correct process and frame.
* `channel` String

View File

@@ -1,4 +1,6 @@
# IpcMainInvokeEvent Object extends `Event`
* `processId` Integer - The internal ID of the renderer process that sent this message
* `frameId` Integer - The ID of the renderer frame that sent this message
* `sender` WebContents - Returns the `webContents` that sent the message
* `senderFrame` WebFrameMain _Readonly_ - The frame that sent this message

View File

@@ -19,3 +19,7 @@
property set then its `type` is assumed to be `tasks`. If the `name` property
is set but the `type` property is omitted then the `type` is assumed to be
`custom`.
**Note:** 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.

View File

@@ -17,7 +17,7 @@
* `title` String (optional) - The text to be displayed for the item in the Jump List.
Should only be set if `type` is `task`.
* `description` String (optional) - Description of the task (displayed in a tooltip).
Should only be set if `type` is `task`.
Should only be set if `type` is `task`. Maximum length 260 characters.
* `iconPath` String (optional) - The absolute path to an icon to be displayed in a
Jump List, which can be an arbitrary resource file that contains an icon
(e.g. `.ico`, `.exe`, `.dll`). You can usually specify `process.execPath` to

View File

@@ -1,6 +1,6 @@
# UploadFile Object
* `type` String - `file`.
* `type` 'file' - `file`.
* `filePath` String - Path of file to be uploaded.
* `offset` Integer - Defaults to `0`.
* `length` Integer - Number of bytes to read from `offset`.

View File

@@ -1,4 +1,4 @@
# UploadRawData Object
* `type` String - `rawData`.
* `type` 'rawData' - `rawData`.
* `bytes` Buffer - Data to be uploaded.

View File

@@ -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`.

View File

@@ -1,3 +1,5 @@
# TouchBar
## Class: TouchBar
> Create TouchBar layouts for native macOS applications

View File

@@ -1,3 +1,5 @@
# Tray
## Class: Tray
> Add icons and context menus to the system's notification area.

View File

@@ -42,7 +42,8 @@ returns `null`.
* `id` Integer
Returns `WebContents` - A WebContents instance with the given ID.
Returns `WebContents` | undefined - A WebContents instance with the given ID, or
`undefined` if there is no WebContents associated with the given ID.
## Class: WebContents
@@ -155,7 +156,7 @@ Returns:
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`.
Deprecated in favor of [`webContents.setWindowOpenHandler`](web-contents.md#contentssetwindowopenhandler-handler).
Deprecated in favor of [`webContents.setWindowOpenHandler`](web-contents.md#contentssetwindowopenhandlerhandler).
Emitted when the page requests to open a new window for a `url`. It could be
requested by `window.open` or an external link like `<a target='_blank'>`.
@@ -203,7 +204,7 @@ Returns:
BrowserWindow. They are merged in increasing precedence: options inherited
from the parent, parsed options from the `features` string from
`window.open()`, and options given by
[`webContents.setWindowOpenHandler`](web-contents.md#contentssetwindowopenhandler-handler).
[`webContents.setWindowOpenHandler`](web-contents.md#contentssetwindowopenhandlerhandler).
Unrecognized options are not filtered out.
* `additionalFeatures` String[] - The non-standard features (features not
handled Chromium or Electron) _Deprecated_
@@ -220,7 +221,7 @@ Returns:
Emitted _after_ successful creation of a window via `window.open` in the renderer.
Not emitted if the creation of the window is canceled from
[`webContents.setWindowOpenHandler`](web-contents.md#contentssetwindowopenhandler-handler).
[`webContents.setWindowOpenHandler`](web-contents.md#contentssetwindowopenhandlerhandler).
See [`window.open()`](window-open.md) for more details and how to use this in conjunction with `webContents.setWindowOpenHandler`.
@@ -401,6 +402,9 @@ Returns:
* `oom` - Process ran out of memory
* `launch-failed` - Process never successfully launched
* `integrity-failure` - Windows code integrity checks failed
* `exitCode` Integer - The exit code of the process, unless `reason` is
`launch-failed`, in which case `exitCode` will be a platform-specific
launch failure error code.
Emitted when the renderer process unexpectedly disappears. This is normally
because it was crashed or killed.
@@ -1165,6 +1169,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
@@ -1657,8 +1662,7 @@ 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.
> special Electron objects will throw an exception.
The renderer process can handle the message by listening to `channel` with the
[`ipcRenderer`](ipc-renderer.md) module.
@@ -1694,7 +1698,9 @@ app.whenReady().then(() => {
#### `contents.sendToFrame(frameId, channel, ...args)`
* `frameId` Integer
* `frameId` Integer | [number, number] - the ID of the frame to send to, or a
pair of `[processId, frameId]` if the frame is in a different process to the
main frame.
* `channel` String
* `...args` any[]
@@ -1704,9 +1710,8 @@ Send an asynchronous message to a specific frame in a renderer process via
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.
The renderer process can handle the message by listening to `channel` with the
[`ipcRenderer`](ipc-renderer.md) module.
@@ -1869,7 +1874,7 @@ Returns `Boolean` - If *offscreen rendering* is enabled returns whether it is cu
* `fps` Integer
If *offscreen rendering* is enabled sets the frame rate to the specified number.
Only values between 1 and 60 are accepted.
Only values between 1 and 240 are accepted.
#### `contents.getFrameRate()`
@@ -1967,7 +1972,7 @@ The zoom factor is the zoom percent divided by 100, so 300% = 3.0.
#### `contents.frameRate`
An `Integer` property that sets the frame rate of the web contents to the specified number.
Only values between 1 and 60 are accepted.
Only values between 1 and 240 are accepted.
Only applicable if *offscreen rendering* is enabled.

View File

@@ -26,7 +26,7 @@ win.webContents.on(
)
```
You can also access frames of existing pages by using the `webFrame` property
You can also access frames of existing pages by using the `mainFrame` property
of [`WebContents`](web-contents.md).
```javascript
@@ -57,13 +57,14 @@ These methods can be accessed from the `webFrameMain` module:
### `webFrameMain.fromId(processId, routingId)`
* `processId` Integer - An `Integer` representing the id of the process which owns the frame.
* `routingId` Integer - An `Integer` representing the unique frame id in the
* `processId` Integer - An `Integer` representing the internal ID of the process which owns the frame.
* `routingId` Integer - An `Integer` representing the unique frame ID in the
current renderer process. Routing IDs can be retrieved from `WebFrameMain`
instances (`frame.routingId`) and are also passed by frame
specific `WebContents` navigation events (e.g. `did-frame-navigate`).
Returns `WebFrameMain` - A frame with the given process and routing IDs.
Returns `WebFrameMain | undefined` - A frame with the given process and routing IDs,
or `undefined` if there is no WebFrameMain associated with the given IDs.
## Class: WebFrameMain
@@ -89,6 +90,47 @@ this limitation.
Returns `boolean` - Whether the reload was initiated successfully. Only results in `false` when the frame has no history.
#### `frame.send(channel, ...args)`
* `channel` String
* `...args` any[]
Send an asynchronous message to the renderer 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
included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will
throw an exception.
The renderer process can handle the message by listening to `channel` with the
[`ipcRenderer`](ipc-renderer.md) module.
#### `frame.postMessage(channel, message, [transfer])`
* `channel` String
* `message` any
* `transfer` MessagePortMain[] (optional)
Send a message to the renderer process, optionally transferring ownership of
zero or more [`MessagePortMain`][] objects.
The transferred `MessagePortMain` objects will be available in the renderer
process by accessing the `ports` property of the emitted event. When they
arrive in the renderer, they will be native DOM `MessagePort` objects.
For example:
```js
// Main process
const { port1, port2 } = new MessageChannelMain()
webContents.mainFrame.postMessage('port', { message: 'hello' }, [port1])
// Renderer process
ipcRenderer.on('port', (e, msg) => {
const [port] = e.ports
// ...
})
```
### Instance Properties
#### `frame.url` _Readonly_

View File

@@ -51,6 +51,8 @@ The following methods are available on instances of `WebRequest`:
* `url` String
* `method` String
* `webContentsId` Integer (optional)
* `webContents` WebContents (optional)
* `frame` WebFrameMain (optional)
* `resourceType` String
* `referrer` String
* `timestamp` Double
@@ -94,6 +96,8 @@ Some examples of valid `urls`:
* `url` String
* `method` String
* `webContentsId` Integer (optional)
* `webContents` WebContents (optional)
* `frame` WebFrameMain (optional)
* `resourceType` String
* `referrer` String
* `timestamp` Double
@@ -121,6 +125,8 @@ The `callback` has to be called with a `response` object.
* `url` String
* `method` String
* `webContentsId` Integer (optional)
* `webContents` WebContents (optional)
* `frame` WebFrameMain (optional)
* `resourceType` String
* `referrer` String
* `timestamp` Double
@@ -141,6 +147,8 @@ response are visible by the time this listener is fired.
* `url` String
* `method` String
* `webContentsId` Integer (optional)
* `webContents` WebContents (optional)
* `frame` WebFrameMain (optional)
* `resourceType` String
* `referrer` String
* `timestamp` Double
@@ -173,6 +181,8 @@ The `callback` has to be called with a `response` object.
* `url` String
* `method` String
* `webContentsId` Integer (optional)
* `webContents` WebContents (optional)
* `frame` WebFrameMain (optional)
* `resourceType` String
* `referrer` String
* `timestamp` Double
@@ -197,6 +207,8 @@ and response headers are available.
* `url` String
* `method` String
* `webContentsId` Integer (optional)
* `webContents` WebContents (optional)
* `frame` WebFrameMain (optional)
* `resourceType` String
* `referrer` String
* `timestamp` Double
@@ -222,6 +234,8 @@ redirect is about to occur.
* `url` String
* `method` String
* `webContentsId` Integer (optional)
* `webContents` WebContents (optional)
* `frame` WebFrameMain (optional)
* `resourceType` String
* `referrer` String
* `timestamp` Double
@@ -245,6 +259,8 @@ completed.
* `url` String
* `method` String
* `webContentsId` Integer (optional)
* `webContents` WebContents (optional)
* `frame` WebFrameMain (optional)
* `resourceType` String
* `referrer` String
* `timestamp` Double

View File

@@ -966,4 +966,4 @@ Emitted when DevTools is closed.
Emitted when DevTools is focused / opened.
[runtime-enabled-features]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5?l=70
[chrome-webview]: https://developer.chrome.com/apps/tags/webview
[chrome-webview]: https://developer.chrome.com/docs/extensions/reference/webviewTag/

View File

@@ -26,7 +26,7 @@ BrowserWindow constructor options are set by, in increasing precedence
order: options inherited from the parent, parsed options
from the `features` string from `window.open()`, security-related webPreferences
inherited from the parent, and options given by
[`webContents.setWindowOpenHandler`](web-contents.md#contentssetwindowopenhandler-handler).
[`webContents.setWindowOpenHandler`](web-contents.md#contentssetwindowopenhandlerhandler).
Note that `webContents.setWindowOpenHandler` has final say and full privilege
because it is invoked in the main process.
@@ -83,9 +83,9 @@ const mainWindow = new BrowserWindow()
mainWindow.webContents.setWindowOpenHandler(({ url }) => {
if (url.startsWith('https://github.com/')) {
return true
return { action: 'allow' }
}
return false
return { action: 'deny' }
})
mainWindow.webContents.on('did-create-window', (childWindow) => {

View File

@@ -6,14 +6,52 @@ 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
ensure your code works with this property enabled. It has been enabled by default since Electron
12.
You will be affected by this change if you use either `webFrame.executeJavaScript` or `webFrame.executeJavaScriptInIsolatedWorld`. You will need to ensure that values returned by either of those methods are supported by the [Context Bridge API](api/context-bridge.md#parameter--error--return-type-support) as these methods use the same value passing semantics.
## 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.
```js
// Old code
session.setPermissionCheckHandler((webContents, permission) => {
if (webContents.getURL().startsWith('https://google.com/') && permission === 'notification') {
return true
}
return false
})
// Replace with
session.setPermissionCheckHandler((webContents, permission, requestingOrigin) => {
if (new URL(requestingOrigin).hostname === 'google.com' && permission === 'notification') {
return true
}
return false
})
```
### Removed: `shell.moveItemToTrash()`
The deprecated synchronous `shell.moveItemToTrash()` API has been removed. Use
@@ -26,6 +64,78 @@ shell.moveItemToTrash(path)
shell.trashItem(path).then(/* ... */)
```
### Removed: `BrowserWindow` extension APIs
The deprecated extension APIs have been removed:
* `BrowserWindow.addExtension(path)`
* `BrowserWindow.addDevToolsExtension(path)`
* `BrowserWindow.removeExtension(name)`
* `BrowserWindow.removeDevToolsExtension(name)`
* `BrowserWindow.getExtensions()`
* `BrowserWindow.getDevToolsExtensions()`
Use the session APIs instead:
* `ses.loadExtension(path)`
* `ses.removeExtension(extension_id)`
* `ses.getAllExtensions()`
```js
// Removed in Electron 13
BrowserWindow.addExtension(path)
BrowserWindow.addDevToolsExtension(path)
// Replace with
session.defaultSession.loadExtension(path)
```
```js
// Removed in Electron 13
BrowserWindow.removeExtension(name)
BrowserWindow.removeDevToolsExtension(name)
// Replace with
session.defaultSession.removeExtension(extension_id)
```
```js
// Removed in Electron 13
BrowserWindow.getExtensions()
BrowserWindow.getDevToolsExtensions()
// Replace with
session.defaultSession.getAllExtensions()
```
### Removed: methods in `systemPreferences`
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
```
## Planned Breaking API Changes (12.0)
### Removed: Pepper Flash support
@@ -34,6 +144,15 @@ Chromium has removed support for Flash, and so we must follow suit. See
Chromium's [Flash Roadmap](https://www.chromium.org/flash-roadmap) for more
details.
### Default Changed: `worldSafeExecuteJavaScript` defaults to `true`
In Electron 12, `worldSafeExecuteJavaScript` will be enabled by default. To restore
the previous behavior, `worldSafeExecuteJavaScript: false` must be specified in WebPreferences.
Please note that setting this option to `false` is **insecure**.
This option will be removed in Electron 14 so please migrate your code to support the default
value.
### Default Changed: `contextIsolation` defaults to `true`
In Electron 12, `contextIsolation` will be enabled by default. To restore
@@ -41,19 +160,34 @@ 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
### Removed: `crashReporter.getCrashesDirectory()`
The `crashReporter.getCrashesDirectory` method has been removed. Usage
should be replaced by `app.getPath('crashDumps')`.
```js
// Removed in Electron 12
crashReporter.getCrashesDirectory()
// Replace with
app.getPath('crashDumps')
```
### Removed: `crashReporter` methods in the renderer process
The following `crashReporter` methods are no longer available in the renderer
process:
- `crashReporter.start`
- `crashReporter.getLastCrashReport`
- `crashReporter.getUploadedReports`
- `crashReporter.getUploadToServer`
- `crashReporter.setUploadToServer`
- `crashReporter.getCrashesDirectory`
* `crashReporter.start`
* `crashReporter.getLastCrashReport`
* `crashReporter.getUploadedReports`
* `crashReporter.getUploadToServer`
* `crashReporter.setUploadToServer`
* `crashReporter.getCrashesDirectory`
They should be called only from the main process.
@@ -104,6 +238,7 @@ shell.trashItem(path).then(/* ... */)
## Planned Breaking API Changes (11.0)
### Removed: `BrowserView.{destroy, fromId, fromWebContents, getAllViews}` and `id` property of `BrowserView`
The experimental APIs `BrowserView.{destroy, fromId, fromWebContents, getAllViews}`
have now been removed. Additionally, the `id` property of `BrowserView`
has also been removed.
@@ -143,12 +278,12 @@ app.getPath('crashDumps')
Calling the following `crashReporter` methods from the renderer process is
deprecated:
- `crashReporter.start`
- `crashReporter.getLastCrashReport`
- `crashReporter.getUploadedReports`
- `crashReporter.getUploadToServer`
- `crashReporter.setUploadToServer`
- `crashReporter.getCrashesDirectory`
* `crashReporter.start`
* `crashReporter.getLastCrashReport`
* `crashReporter.getUploadedReports`
* `crashReporter.getUploadToServer`
* `crashReporter.setUploadToServer`
* `crashReporter.getCrashesDirectory`
The only non-deprecated methods remaining in the `crashReporter` module in the
renderer are `addExtraParameter`, `removeExtraParameter` and `getParameters`.
@@ -190,6 +325,7 @@ We [recommend moving away from the remote
module](https://medium.com/@nornagon/electrons-remote-module-considered-harmful-70d69500f31).
### `protocol.unregisterProtocol`
### `protocol.uninterceptProtocol`
The APIs are now synchronous and the optional callback is no longer needed.
@@ -202,14 +338,23 @@ protocol.unregisterProtocol(scheme)
```
### `protocol.registerFileProtocol`
### `protocol.registerBufferProtocol`
### `protocol.registerStringProtocol`
### `protocol.registerHttpProtocol`
### `protocol.registerStreamProtocol`
### `protocol.interceptFileProtocol`
### `protocol.interceptStringProtocol`
### `protocol.interceptBufferProtocol`
### `protocol.interceptHttpProtocol`
### `protocol.interceptStreamProtocol`
The APIs are now synchronous and the optional callback is no longer needed.
@@ -251,6 +396,47 @@ you should plan to update your native modules to be context aware.
For more detailed information see [#18397](https://github.com/electron/electron/issues/18397).
### Deprecated: `BrowserWindow` extension APIs
The following extension APIs have been deprecated:
* `BrowserWindow.addExtension(path)`
* `BrowserWindow.addDevToolsExtension(path)`
* `BrowserWindow.removeExtension(name)`
* `BrowserWindow.removeDevToolsExtension(name)`
* `BrowserWindow.getExtensions()`
* `BrowserWindow.getDevToolsExtensions()`
Use the session APIs instead:
* `ses.loadExtension(path)`
* `ses.removeExtension(extension_id)`
* `ses.getAllExtensions()`
```js
// Deprecated in Electron 9
BrowserWindow.addExtension(path)
BrowserWindow.addDevToolsExtension(path)
// Replace with
session.defaultSession.loadExtension(path)
```
```js
// Deprecated in Electron 9
BrowserWindow.removeExtension(name)
BrowserWindow.removeDevToolsExtension(name)
// Replace with
session.defaultSession.removeExtension(extension_id)
```
```js
// Deprecated in Electron 9
BrowserWindow.getExtensions()
BrowserWindow.getDevToolsExtensions()
// Replace with
session.defaultSession.getAllExtensions()
```
### Removed: `<webview>.getWebContents()`
This API, which was deprecated in Electron 8.0, is now removed.
@@ -303,7 +489,7 @@ Clone Algorithm][SCA], the same algorithm used to serialize messages for
`postMessage`. This brings about a 2x performance improvement for large
messages, but also brings some breaking changes in behavior.
- Sending Functions, Promises, WeakMaps, WeakSets, or objects containing any
* Sending Functions, Promises, WeakMaps, WeakSets, or objects containing any
such values, over IPC will now throw an exception, instead of silently
converting the functions to `undefined`.
@@ -317,21 +503,21 @@ ipcRenderer.send('channel', { value: 3, someFunction: () => {} })
// => throws Error("() => {} could not be cloned.")
```
- `NaN`, `Infinity` and `-Infinity` will now be correctly serialized, instead
* `NaN`, `Infinity` and `-Infinity` will now be correctly serialized, instead
of being converted to `null`.
- Objects containing cyclic references will now be correctly serialized,
* Objects containing cyclic references will now be correctly serialized,
instead of being converted to `null`.
- `Set`, `Map`, `Error` and `RegExp` values will be correctly serialized,
* `Set`, `Map`, `Error` and `RegExp` values will be correctly serialized,
instead of being converted to `{}`.
- `BigInt` values will be correctly serialized, instead of being converted to
* `BigInt` values will be correctly serialized, instead of being converted to
`null`.
- Sparse arrays will be serialized as such, instead of being converted to dense
* Sparse arrays will be serialized as such, instead of being converted to dense
arrays with `null`s.
- `Date` objects will be transferred as `Date` objects, instead of being
* `Date` objects will be transferred as `Date` objects, instead of being
converted to their ISO string representation.
- Typed Arrays (such as `Uint8Array`, `Uint16Array`, `Uint32Array` and so on)
* Typed Arrays (such as `Uint8Array`, `Uint16Array`, `Uint32Array` and so on)
will be transferred as such, instead of being converted to Node.js `Buffer`.
- Node.js `Buffer` objects will be transferred as `Uint8Array`s. You can
* Node.js `Buffer` objects will be transferred as `Uint8Array`s. You can
convert a `Uint8Array` back to a Node.js `Buffer` by wrapping the underlying
`ArrayBuffer`:
@@ -397,6 +583,55 @@ in Electron 8.x, and cease to exist in Electron 9.x. The layout zoom level
limits are now fixed at a minimum of 0.25 and a maximum of 5.0, as defined
[here](https://chromium.googlesource.com/chromium/src/+/938b37a6d2886bf8335fc7db792f1eb46c65b2ae/third_party/blink/common/page/page_zoom.cc#11).
### Deprecated events in `systemPreferences`
The following `systemPreferences` events have been deprecated:
* `inverted-color-scheme-changed`
* `high-contrast-color-scheme-changed`
Use the new `updated` event on the `nativeTheme` module instead.
```js
// Deprecated
systemPreferences.on('inverted-color-scheme-changed', () => { /* ... */ })
systemPreferences.on('high-contrast-color-scheme-changed', () => { /* ... */ })
// Replace with
nativeTheme.on('updated', () => { /* ... */ })
```
### Deprecated: methods in `systemPreferences`
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
// Deprecated
systemPreferences.isDarkMode()
// Replace with
nativeTheme.shouldUseDarkColors
// Deprecated
systemPreferences.isInvertedColorScheme()
// Replace with
nativeTheme.shouldUseInvertedColorScheme
// Deprecated
systemPreferences.isHighContrastColorScheme()
// Replace with
nativeTheme.shouldUseHighContrastColors
```
## Planned Breaking API Changes (7.0)
### Deprecated: Atom.io Node Headers URL
@@ -496,6 +731,55 @@ Note that `webkitdirectory` no longer exposes the path to the selected folder.
If you require the path to the selected folder rather than the folder contents,
see the `dialog.showOpenDialog` API ([link](https://github.com/electron/electron/blob/master/docs/api/dialog.md#dialogshowopendialogbrowserwindow-options)).
### API Changed: Callback-based versions of promisified APIs
Electron 5 and Electron 6 introduced Promise-based versions of existing
asynchronous APIs and deprecated their older, callback-based counterparts.
In Electron 7, all deprecated callback-based APIs are now removed.
These functions now only return Promises:
* `app.getFileIcon()` [#15742](https://github.com/electron/electron/pull/15742)
* `app.dock.show()` [#16904](https://github.com/electron/electron/pull/16904)
* `contentTracing.getCategories()` [#16583](https://github.com/electron/electron/pull/16583)
* `contentTracing.getTraceBufferUsage()` [#16600](https://github.com/electron/electron/pull/16600)
* `contentTracing.startRecording()` [#16584](https://github.com/electron/electron/pull/16584)
* `contentTracing.stopRecording()` [#16584](https://github.com/electron/electron/pull/16584)
* `contents.executeJavaScript()` [#17312](https://github.com/electron/electron/pull/17312)
* `cookies.flushStore()` [#16464](https://github.com/electron/electron/pull/16464)
* `cookies.get()` [#16464](https://github.com/electron/electron/pull/16464)
* `cookies.remove()` [#16464](https://github.com/electron/electron/pull/16464)
* `cookies.set()` [#16464](https://github.com/electron/electron/pull/16464)
* `debugger.sendCommand()` [#16861](https://github.com/electron/electron/pull/16861)
* `dialog.showCertificateTrustDialog()` [#17181](https://github.com/electron/electron/pull/17181)
* `inAppPurchase.getProducts()` [#17355](https://github.com/electron/electron/pull/17355)
* `inAppPurchase.purchaseProduct()`[#17355](https://github.com/electron/electron/pull/17355)
* `netLog.stopLogging()` [#16862](https://github.com/electron/electron/pull/16862)
* `session.clearAuthCache()` [#17259](https://github.com/electron/electron/pull/17259)
* `session.clearCache()` [#17185](https://github.com/electron/electron/pull/17185)
* `session.clearHostResolverCache()` [#17229](https://github.com/electron/electron/pull/17229)
* `session.clearStorageData()` [#17249](https://github.com/electron/electron/pull/17249)
* `session.getBlobData()` [#17303](https://github.com/electron/electron/pull/17303)
* `session.getCacheSize()` [#17185](https://github.com/electron/electron/pull/17185)
* `session.resolveProxy()` [#17222](https://github.com/electron/electron/pull/17222)
* `session.setProxy()` [#17222](https://github.com/electron/electron/pull/17222)
* `shell.openExternal()` [#16176](https://github.com/electron/electron/pull/16176)
* `webContents.loadFile()` [#15855](https://github.com/electron/electron/pull/15855)
* `webContents.loadURL()` [#15855](https://github.com/electron/electron/pull/15855)
* `webContents.hasServiceWorker()` [#16535](https://github.com/electron/electron/pull/16535)
* `webContents.printToPDF()` [#16795](https://github.com/electron/electron/pull/16795)
* `webContents.savePage()` [#16742](https://github.com/electron/electron/pull/16742)
* `webFrame.executeJavaScript()` [#17312](https://github.com/electron/electron/pull/17312)
* `webFrame.executeJavaScriptInIsolatedWorld()` [#17312](https://github.com/electron/electron/pull/17312)
* `webviewTag.executeJavaScript()` [#17312](https://github.com/electron/electron/pull/17312)
* `win.capturePage()` [#15743](https://github.com/electron/electron/pull/15743)
These functions now have two forms, synchronous and Promise-based asynchronous:
* `dialog.showMessageBox()`/`dialog.showMessageBoxSync()` [#17298](https://github.com/electron/electron/pull/17298)
* `dialog.showOpenDialog()`/`dialog.showOpenDialogSync()` [#16973](https://github.com/electron/electron/pull/16973)
* `dialog.showSaveDialog()`/`dialog.showSaveDialogSync()` [#17054](https://github.com/electron/electron/pull/17054)
## Planned Breaking API Changes (6.0)
### API Changed: `win.setMenu(null)` is now `win.removeMenu()`
@@ -507,19 +791,6 @@ win.setMenu(null)
win.removeMenu()
```
### API Changed: `contentTracing.getTraceBufferUsage()` is now a promise
```js
// Deprecated
contentTracing.getTraceBufferUsage((percentage, value) => {
// do something
})
// Replace with
contentTracing.getTraceBufferUsage().then(infoObject => {
// infoObject has percentage and value fields
})
```
### API Changed: `electron.screen` in the renderer process should be accessed via `remote`
```js
@@ -658,6 +929,31 @@ webFrame.setSpellCheckProvider('en-US', {
})
```
### API Changed: `webContents.getZoomLevel` and `webContents.getZoomFactor` are now synchronous
`webContents.getZoomLevel` and `webContents.getZoomFactor` no longer take callback parameters,
instead directly returning their number values.
```js
// Deprecated
webContents.getZoomLevel((level) => {
console.log(level)
})
// Replace with
const level = webContents.getZoomLevel()
console.log(level)
```
```js
// Deprecated
webContents.getZoomFactor((factor) => {
console.log(factor)
})
// Replace with
const factor = webContents.getZoomFactor()
console.log(factor)
```
## Planned Breaking API Changes (4.0)
The following list includes the breaking API changes made in Electron 4.0.

View File

@@ -1,6 +1,8 @@
# Build Instructions
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.
[application-distribution]: ../tutorial/application-distribution.md
## Platform prerequisites
@@ -86,8 +88,6 @@ $ gclient sync -f
```sh
$ cd src
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
# this next line is needed only if building with sccache
$ export GN_EXTRA_ARGS="${GN_EXTRA_ARGS} cc_wrapper=\"${PWD}/electron/external_binaries/sccache\""
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\") $GN_EXTRA_ARGS"
```
@@ -141,12 +141,6 @@ This will build all of what was previously 'libchromiumcontent' (i.e. the
`content/` directory of `chromium` and its dependencies, incl. WebKit and V8),
so it will take a while.
To speed up subsequent builds, you can use [sccache][sccache]. Add the GN arg
`cc_wrapper = "sccache"` by running `gn args out/Testing` to bring up an
editor and adding a line to the end of the file.
[sccache]: https://github.com/mozilla/sccache
The built executable will be under `./out/Testing`:
```sh
@@ -189,7 +183,6 @@ Not all combinations of source and target CPU/OS are supported by Chromium.
| Windows x64 | Windows x86 | Automatically tested |
| Linux x64 | Linux x86 | Automatically tested |
If you test other combinations and find them to work, please update this document :)
See the GN reference for allowable values of [`target_os`][target_os values]

View File

@@ -1,6 +1,8 @@
# Build Instructions (Linux)
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.
[application-distribution]: ../tutorial/application-distribution.md
## Prerequisites
@@ -55,6 +57,15 @@ $ sudo dnf install clang dbus-devel gtk3-devel libnotify-devel \
nss-devel python-dbusmock openjdk-8-jre
```
On Arch Linux / Manjaro, install the following libraries:
```sh
$ sudo pacman -Syu base-devel clang libdbus gtk2 libnotify \
libgnome-keyring alsa-lib libcap libcups libxtst \
libxss nss gcc-multilib curl gperf bison \
python2 python-dbusmock jdk8-openjdk
```
Other distributions may offer similar packages for installation via package
managers such as pacman. Or one can compile from source code.

View File

@@ -1,6 +1,8 @@
# Build Instructions (macOS)
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.
[application-distribution]: ../tutorial/application-distribution.md
## Prerequisites
@@ -42,7 +44,7 @@ $ pip install pyobjc
If you're developing Electron and don't plan to redistribute your
custom Electron build, you may skip this section.
Official Electron builds are built with [Xcode 9.4.1](http://adcdownload.apple.com/Developer_Tools/Xcode_9.4.1/Xcode_9.4.1.xip), and the macOS 10.13 SDK. Building with a newer SDK works too, but the releases currently use the 10.13 SDK.
Official Electron builds are built with [Xcode 12.2](https://download.developer.apple.com/Developer_Tools/Xcode_12.2/Xcode_12.2.xip), and the macOS 11.0 SDK. Building with a newer SDK works too, but the releases currently use the 11.0 SDK.
## Building Electron

View File

@@ -1,6 +1,8 @@
# Build Instructions (Windows)
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.
[application-distribution]: ../tutorial/application-distribution.md
## Prerequisites

View File

@@ -66,11 +66,11 @@ formatted correctly.
Electron APIs uses the same capitalization scheme as Node.js:
- When the module itself is a class like `BrowserWindow`, use `PascalCase`.
- When the module is a set of APIs, like `globalShortcut`, use `camelCase`.
- When the API is a property of object, and it is complex enough to be in a
* When the module itself is a class like `BrowserWindow`, use `PascalCase`.
* When the module is a set of APIs, like `globalShortcut`, use `camelCase`.
* When the API is a property of object, and it is complex enough to be in a
separate chapter like `win.webContents`, use `mixedCase`.
- For other non-module APIs, use natural titles, like `<webview> Tag` or
* For other non-module APIs, use natural titles, like `<webview> Tag` or
`Process Object`.
When creating a new API, it is preferred to use getters and setters instead of

View File

@@ -33,8 +33,7 @@ contributing, and more. Please use the issue tracker for bugs only!
To submit a bug report:
When opening a new issue in the [`electron/electron` issue tracker](https://github.com/electron/electron/issues/new/choose), users
will be presented with [a template](https://github.com/electron/electron/blob/master/.github/ISSUE_TEMPLATE/Bug_report.md)
that should be filled in.
will be presented with a template that should be filled in.
If you believe that you have found a bug in Electron, please fill out the template
to the best of your ability.

View File

@@ -36,9 +36,9 @@ $ git fetch upstream
Build steps and dependencies differ slightly depending on your operating system.
See these detailed guides on building Electron locally:
* [Building on macOS](https://electronjs.org/docs/development/build-instructions-macos)
* [Building on Linux](https://electronjs.org/docs/development/build-instructions-linux)
* [Building on Windows](https://electronjs.org/docs/development/build-instructions-windows)
* [Building on macOS](build-instructions-macos.md)
* [Building on Linux](build-instructions-linux.md)
* [Building on Windows](build-instructions-windows.md)
Once you've built the project locally, you're ready to start making changes!
@@ -63,7 +63,7 @@ or tests in the `spec/` folder.
Please be sure to run `npm run lint` from time to time on any code changes
to ensure that they follow the project's code style.
See [coding style](https://electronjs.org/docs/development/coding-style) for
See [coding style](coding-style.md) for
more information about best practice when modifying code in different parts of
the project.
@@ -91,29 +91,29 @@ Before a pull request can be merged, it **must** have a pull request title with
Examples of commit messages with semantic prefixes:
- `fix: don't overwrite prevent_default if default wasn't prevented`
- `feat: add app.isPackaged() method`
- `docs: app.isDefaultProtocolClient is now available on Linux`
* `fix: don't overwrite prevent_default if default wasn't prevented`
* `feat: add app.isPackaged() method`
* `docs: app.isDefaultProtocolClient is now available on Linux`
Common prefixes:
- fix: A bug fix
- feat: A new feature
- docs: Documentation changes
- test: Adding missing tests or correcting existing tests
- build: Changes that affect the build system
- ci: Changes to our CI configuration files and scripts
- perf: A code change that improves performance
- refactor: A code change that neither fixes a bug nor adds a feature
- style: Changes that do not affect the meaning of the code (linting)
- vendor: Bumping a dependency like libchromiumcontent or node
* fix: A bug fix
* feat: A new feature
* docs: Documentation changes
* test: Adding missing tests or correcting existing tests
* build: Changes that affect the build system
* ci: Changes to our CI configuration files and scripts
* perf: A code change that improves performance
* refactor: A code change that neither fixes a bug nor adds a feature
* style: Changes that do not affect the meaning of the code (linting)
* vendor: Bumping a dependency like libchromiumcontent or node
Other things to keep in mind when writing a commit message:
1. The first line should:
- contain a short description of the change (preferably 50 characters or less,
* contain a short description of the change (preferably 50 characters or less,
and no more than 72 characters)
- be entirely in lowercase with the exception of proper nouns, acronyms, and
* be entirely in lowercase with the exception of proper nouns, acronyms, and
the words that refer to code, like function/variable names
2. Keep the second line blank.
3. Wrap all other lines at 72 columns.
@@ -144,7 +144,7 @@ master.
### Step 7: Test
Bug fixes and features should always come with tests. A
[testing guide](https://electronjs.org/docs/development/testing) has been
[testing guide](testing.md) has been
provided to make the process easier. Looking at other tests to see how they
should be structured can also help.

View File

@@ -100,7 +100,5 @@ script/ - The set of all scripts Electron runs for a variety of purposes.
└── uploaders/ - Uploads various release-related files during release.
```
* **tools** - Helper scripts used by GN files.
* Scripts put here should never be invoked by users directly, unlike those in `script`.
* **typings** - TypeScript typings for Electron's internal code.
* **vendor** - Source code for some third party dependencies.

View File

@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
<a href="#" id="drag">Drag me</a>
<script src="renderer.js"></script>
</body>
</html>

View File

@@ -0,0 +1,41 @@
const { app, BrowserWindow, ipcMain, nativeImage, NativeImage } = require('electron')
const fs = require('fs');
const http = require('http');
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
const iconName = 'iconForDragAndDrop.png';
const icon = fs.createWriteStream(`${process.cwd()}/${iconName}`);
http.get('http://img.icons8.com/ios/452/drag-and-drop.png', (response) => {
response.pipe(icon);
});
app.whenReady().then(createWindow)
ipcMain.on('ondragstart', (event, filePath) => {
event.sender.startDrag({
file: filePath,
icon: `${process.cwd()}/${iconName}`
})
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,9 @@
const { ipcRenderer } = require('electron')
const fs = require('fs')
document.getElementById('drag').ondragstart = (event) => {
const fileName = 'drag-and-drop.md'
fs.writeFileSync(fileName, '# Test drag and drop');
event.preventDefault()
ipcRenderer.send('ondragstart', process.cwd() + `/${fileName}`)
}

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
</body>
</html>

View File

@@ -0,0 +1,31 @@
const { app, BrowserWindow, globalShortcut } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
app.whenReady().then(() => {
globalShortcut.register('Alt+CommandOrControl+I', () => {
console.log('Electron loves global shortcuts!')
})
}).then(createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</body>
</html>

View File

@@ -0,0 +1,13 @@
const { app, BrowserWindow } = require('electron')
app.whenReady().then(() => {
const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } })
win.loadFile('index.html')
win.webContents.on('before-input-event', (event, input) => {
if (input.control && input.key.toLowerCase() === 'i') {
console.log('Pressed Control+I')
event.preventDefault()
}
})
})

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
</body>
</html>

View File

@@ -0,0 +1,39 @@
const { app, BrowserWindow, Menu, MenuItem } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
const menu = new Menu()
menu.append(new MenuItem({
label: 'Electron',
submenu: [{
role: 'help',
accelerator: process.platform === 'darwin' ? 'Alt+Cmd+I' : 'Alt+Shift+I',
click: () => { console.log('Electron rocks!') }
}]
}))
Menu.setApplicationMenu(menu)
app.whenReady().then(createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
<link rel="stylesheet" type="text/css" href="./styles.css">
</head>
<body>
<h1>Hello World!</h1>
<p>Current theme source: <strong id="theme-source">System</strong></p>
<button id="toggle-dark-mode">Toggle Dark Mode</button>
<button id="reset-to-system">Reset to System Theme</button>
<script src="renderer.js"></script>
</body>
</body>
</html>

View File

@@ -0,0 +1,40 @@
const { app, BrowserWindow, ipcMain, nativeTheme } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
ipcMain.handle('dark-mode:toggle', () => {
if (nativeTheme.shouldUseDarkColors) {
nativeTheme.themeSource = 'light'
} else {
nativeTheme.themeSource = 'dark'
}
return nativeTheme.shouldUseDarkColors
})
ipcMain.handle('dark-mode:system', () => {
nativeTheme.themeSouce = 'system'
})
}
app.whenReady().then(createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,11 @@
const { ipcRenderer } = require('electron')
document.getElementById('toggle-dark-mode').addEventListener('click', async () => {
const isDarkMode = await ipcRenderer.invoke('dark-mode:toggle')
document.getElementById('theme-source').innerHTML = isDarkMode ? 'Dark' : 'Light'
})
document.getElementById('reset-to-system').addEventListener('click', async () => {
await ipcRenderer.invoke('dark-mode:system')
document.getElementById('theme-source').innerHTML = 'System'
})

View File

@@ -0,0 +1,7 @@
@media (prefers-color-scheme: dark) {
body { background: #333; color: white; }
}
@media (prefers-color-scheme: light) {
body { background: #ddd; color: black; }
}

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
</body>
</html>

View File

@@ -0,0 +1,43 @@
const { app, BrowserWindow, Menu } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
const dockMenu = Menu.buildFromTemplate([
{
label: 'New Window',
click () { console.log('New Window') }
}, {
label: 'New Window with Settings',
submenu: [
{ label: 'Basic' },
{ label: 'Pro' }
]
},
{ label: 'New Command...' }
])
app.whenReady().then(() => {
app.dock.setMenu(dockMenu)
}).then(createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
</body>
</html>

View File

@@ -0,0 +1,35 @@
const { app, BrowserWindow, Notification } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
function showNotification () {
const notification = {
title: 'Basic Notification',
body: 'Notification from the Main process'
}
new Notification(notification).show()
}
app.whenReady().then(createWindow).then(showNotification)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
<script src="renderer.js"></script>
</body>
</html>

View File

@@ -0,0 +1,27 @@
const { app, BrowserWindow } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
app.whenReady().then(createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,7 @@
const myNotification = new Notification('Title', {
body: 'Notification from the Renderer process'
})
myNotification.onclick = () => {
console.log('Notification clicked')
}

View File

@@ -0,0 +1,15 @@
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
</body>
</html>

View File

@@ -0,0 +1,28 @@
const { app, BrowserWindow } = require('electron')
const fs = require('fs')
app.disableHardwareAcceleration()
let win
app.whenReady().then(() => {
win = new BrowserWindow({ webPreferences: { offscreen: true } })
win.loadURL('https://github.com')
win.webContents.on('paint', (event, dirty, image) => {
fs.writeFileSync('ex.png', image.toPNG())
})
win.webContents.setFrameRate(60)
console.log(`The screenshot has been successfully saved to ${process.cwd()}/ex.png`)
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
<script src="renderer.js"></script>
</body>
</html>

View File

@@ -0,0 +1,24 @@
const { app, BrowserWindow, ipcMain } = require('electron')
let onlineStatusWindow
app.whenReady().then(() => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false, webPreferences: { nodeIntegration: true } })
onlineStatusWindow.loadURL(`file://${__dirname}/index.html`)
})
ipcMain.on('online-status-changed', (event, status) => {
console.log(status)
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,7 @@
const { ipcRenderer } = require('electron')
const updateOnlineStatus = () => { ipcRenderer.send('online-status-changed', navigator.onLine ? 'online' : 'offline') }
window.addEventListener('online', updateOnlineStatus)
window.addEventListener('offline', updateOnlineStatus)
updateOnlineStatus()

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
<script src="renderer.js"></script>
</body>
</html>

View File

@@ -0,0 +1,20 @@
const { app, BrowserWindow } = require('electron')
let onlineStatusWindow
app.whenReady().then(() => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL(`file://${__dirname}/index.html`)
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,6 @@
const alertOnlineStatus = () => { window.alert(navigator.onLine ? 'online' : 'offline') }
window.addEventListener('online', alertOnlineStatus)
window.addEventListener('offline', alertOnlineStatus)
alertOnlineStatus()

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
</body>
</html>

View File

@@ -0,0 +1,30 @@
const { app, BrowserWindow } = require('electron')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
win.setProgressBar(0.5)
}
app.whenReady().then(createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
</body>
</html>

View File

@@ -0,0 +1,34 @@
const { app, BrowserWindow } = require('electron')
const fs = require('fs')
const path = require('path')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
const fileName = 'recently-used.md'
fs.writeFile(fileName, 'Lorem Ipsum', () => {
app.addRecentDocument(path.join(process.cwd(), `${fileName}`))
})
app.whenReady().then(createWindow)
app.on('window-all-closed', () => {
app.clearRecentDocuments()
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using node <script>document.write(process.versions.node)</script>,
Chrome <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
</p>
</body>
</html>

View File

@@ -0,0 +1,33 @@
const { app, BrowserWindow } = require('electron')
const os = require('os');
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
})
win.loadFile('index.html')
}
app.whenReady().then(() => {
const win = new BrowserWindow()
win.setRepresentedFilename(os.homedir())
win.setDocumentEdited(true)
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
<h1>Hello World!</h1>
<p>
We are using Node.js <span id="node-version"></span>,
Chromium <span id="chrome-version"></span>,
and Electron <span id="electron-version"></span>.
</p>
</body>
</html>

View File

@@ -0,0 +1,31 @@
const { app, BrowserWindow } = require('electron')
const path = require('path')
function createWindow () {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
win.loadFile('index.html')
}
app.whenReady().then(() => {
createWindow()
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})
})
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})

View File

@@ -0,0 +1,11 @@
window.addEventListener('DOMContentLoaded', () => {
const replaceText = (selector, text) => {
const element = document.getElementById(selector)
if (element) element.innerText = text
}
for (const type of ['chrome', 'node', 'electron']) {
replaceText(`${type}-version`, process.versions[type])
}
})

View File

@@ -49,6 +49,7 @@ For API references, there are exceptions to this rule.
* No nesting lists more than 2 levels (due to the markdown renderer).
* All `js` and `javascript` code blocks are linted with
[standard-markdown](https://www.npmjs.com/package/standard-markdown).
* For unordered lists, use asterisks instead of dashes
## Picking words

View File

@@ -43,6 +43,6 @@ If the V8 context crashes, the DevTools will display this message.
`DevTools was disconnected from the page. Once page is reloaded, DevTools will automatically reconnect.`
Chromium logs can be enabled via the `ELECTRON_ENABLE_LOGGING` environment variable. For more information, see the [environment variables documentation](https://www.electronjs.org/docs/api/environment-variables#electron_enable_logging).
Chromium logs can be enabled via the `ELECTRON_ENABLE_LOGGING` environment variable. For more information, see the [environment variables documentation](../api/environment-variables.md#electron_enable_logging).
Alternatively, the command line argument `--enable-logging` can be passed. More information is available in the [command line switches documentation](https://www.electronjs.org/docs/api/command-line-switches#--enable-logging).
Alternatively, the command line argument `--enable-logging` can be passed. More information is available in the [command line switches documentation](../api/command-line-switches.md#--enable-logging).

View File

@@ -1,25 +1,38 @@
# Application Distribution
To distribute your app with Electron, you need to package and rebrand it. The easiest way to do this is to use one of the following third party packaging tools:
## Overview
To distribute your app with Electron, you need to package and rebrand it.
To do this, you can either use specialized tooling or manual approaches.
## With tooling
You can use the following tools to distribute your application:
* [electron-forge](https://github.com/electron-userland/electron-forge)
* [electron-builder](https://github.com/electron-userland/electron-builder)
* [electron-packager](https://github.com/electron/electron-packager)
These tools will take care of all the steps you need to take to end up with a distributable Electron applications, such as packaging your application, rebranding the executable, setting the right icons and optionally creating installers.
These tools will take care of all the steps you need to take to end up with a
distributable Electron application, such as bundling your application,
rebranding the executable, and setting the right icons.
You can check the example of how to package your app with `electron-forge` in
our [Quick Start Guide](quick-start.md#package-and-distribute-the-application).
## Manual distribution
You can also choose to manually get your app ready for distribution. The steps needed to do this are outlined below.
### With prebuilt binaries
To distribute your app with Electron, you need to download Electron's [prebuilt
To distribute your app manually, you need to download Electron's [prebuilt
binaries](https://github.com/electron/electron/releases). Next, the folder
containing your app should be named `app` and placed in Electron's resources
directory as shown in the following examples. Note that the location of
Electron's prebuilt binaries is indicated with `electron/` in the examples
below.
directory as shown in the following examples.
On macOS:
> *NOTE:* the location of Electron's prebuilt binaries is indicated
with `electron/` in the examples below.
*On macOS:*
```plaintext
electron/Electron.app/Contents/Resources/app/
@@ -28,7 +41,7 @@ electron/Electron.app/Contents/Resources/app/
└── index.html
```
On Windows and Linux:
*On Windows and Linux:*
```plaintext
electron/resources/app
@@ -37,47 +50,44 @@ electron/resources/app
└── index.html
```
Then execute `Electron.app` (or `electron` on Linux, `electron.exe` on Windows),
and Electron will start as your app. The `electron` directory will then be
your distribution to deliver to final users.
Then execute `Electron.app` on macOS, `electron` on Linux, or `electron.exe`
on Windows, and Electron will start as your app. The `electron` directory
will then be your distribution to deliver to users.
## Packaging Your App into a File
### With an app source code archive
Apart from shipping your app by copying all of its source files, you can also
package your app into an [asar](https://github.com/electron/asar) archive to avoid
exposing your app's source code to users.
Instead of from shipping your app by copying all of its source files, you can
package your app into an [asar] archive to improve the performance of reading
files on platforms like Windows, if you are not already using a bundler such
as Parcel or Webpack.
To use an `asar` archive to replace the `app` folder, you need to rename the
archive to `app.asar`, and put it under Electron's resources directory like
below, and Electron will then try to read the archive and start from it.
On macOS:
*On macOS:*
```plaintext
electron/Electron.app/Contents/Resources/
└── app.asar
```
On Windows and Linux:
*On Windows and Linux:*
```plaintext
electron/resources/
└── app.asar
```
More details can be found in [Application packaging](application-packaging.md).
You can find more details on how to use `asar` in the
[`electron/asar` repository][asar].
## Rebranding with Downloaded Binaries
### Rebranding with downloaded binaries
After bundling your app into Electron, you will want to rebrand Electron
before distributing it to users.
### Windows
You can rename `electron.exe` to any name you like, and edit its icon and other
information with tools like [rcedit](https://github.com/electron/rcedit).
### macOS
#### macOS
You can rename `Electron.app` to any name you want, and you also have to rename
the `CFBundleDisplayName`, `CFBundleIdentifier` and `CFBundleName` fields in the
@@ -104,60 +114,20 @@ MyApp.app/Contents
   └── MyApp Helper
```
### Linux
#### Windows
You can rename `electron.exe` to any name you like, and edit its icon and other
information with tools like [rcedit](https://github.com/electron/rcedit).
#### Linux
You can rename the `electron` executable to any name you like.
## Rebranding by Rebuilding Electron from Source
### Rebranding by rebuilding Electron from source
It is also possible to rebrand Electron by changing the product name and
building it from source. To do this you need to set the build argument
corresponding to the product name (`electron_product_name = "YourProductName"`)
in the `args.gn` file and rebuild.
### Creating a Custom Electron Fork
Creating a custom fork of Electron is almost certainly not something you will
need to do in order to build your app, even for "Production Level" applications.
Using a tool such as `electron-packager` or `electron-forge` will allow you to
"Rebrand" Electron without having to do these steps.
You need to fork Electron when you have custom C++ code that you have patched
directly into Electron, that either cannot be upstreamed, or has been rejected
from the official version. As maintainers of Electron, we very much would like
to make your scenario work, so please try as hard as you can to get your changes
into the official version of Electron, it will be much much easier on you, and
we appreciate your help.
#### Creating a Custom Release with surf-build
1. Install [Surf](https://github.com/surf-build/surf), via npm:
`npm install -g surf-build@latest`
2. Create a new S3 bucket and create the following empty directory structure:
```sh
- electron/
- symbols/
- dist/
```
3. Set the following Environment Variables:
* `ELECTRON_GITHUB_TOKEN` - a token that can create releases on GitHub
* `ELECTRON_S3_ACCESS_KEY`, `ELECTRON_S3_BUCKET`, `ELECTRON_S3_SECRET_KEY` -
the place where you'll upload Node.js headers as well as symbols
* `ELECTRON_RELEASE` - Set to `true` and the upload part will run, leave unset
and `surf-build` will do CI-type checks, appropriate to run for every
pull request.
* `CI` - Set to `true` or else it will fail
* `GITHUB_TOKEN` - set it to the same as `ELECTRON_GITHUB_TOKEN`
* `SURF_TEMP` - set to `C:\Temp` on Windows to prevent path too long issues
* `TARGET_ARCH` - set to `ia32` or `x64`
4. In `script/upload.py`, you _must_ set `ELECTRON_REPO` to your fork (`MYORG/electron`),
especially if you are a contributor to Electron proper.
5. `surf-build -r https://github.com/MYORG/electron -s YOUR_COMMIT -n 'surf-PLATFORM-ARCH'`
6. Wait a very, very long time for the build to complete.
[asar]: https://github.com/electron/asar

View File

@@ -1,194 +0,0 @@
# Application Packaging
To mitigate [issues](https://github.com/joyent/node/issues/6960) around long
path names on Windows, slightly speed up `require` and conceal your source code
from cursory inspection, you can choose to package your app into an [asar][asar]
archive with little changes to your source code.
Most users will get this feature for free, since it's supported out of the box
by [`electron-packager`][electron-packager], [`electron-forge`][electron-forge],
and [`electron-builder`][electron-builder]. If you are not using any of these
tools, read on.
## Generating `asar` Archives
An [asar][asar] archive is a simple tar-like format that concatenates files
into a single file. Electron can read arbitrary files from it without unpacking
the whole file.
Steps to package your app into an `asar` archive:
### 1. Install the asar Utility
```sh
$ npm install -g asar
```
### 2. Package with `asar pack`
```sh
$ asar pack your-app app.asar
```
## Using `asar` Archives
In Electron there are two sets of APIs: Node APIs provided by Node.js and Web
APIs provided by Chromium. Both APIs support reading files from `asar` archives.
### Node API
With special patches in Electron, Node APIs like `fs.readFile` and `require`
treat `asar` archives as virtual directories, and the files in it as normal
files in the filesystem.
For example, suppose we have an `example.asar` archive under `/path/to`:
```sh
$ asar list /path/to/example.asar
/app.js
/file.txt
/dir/module.js
/static/index.html
/static/main.css
/static/jquery.min.js
```
Read a file in the `asar` archive:
```javascript
const fs = require('fs')
fs.readFileSync('/path/to/example.asar/file.txt')
```
List all files under the root of the archive:
```javascript
const fs = require('fs')
fs.readdirSync('/path/to/example.asar')
```
Use a module from the archive:
```javascript
require('./path/to/example.asar/dir/module.js')
```
You can also display a web page in an `asar` archive with `BrowserWindow`:
```javascript
const { BrowserWindow } = require('electron')
const win = new BrowserWindow()
win.loadURL('file:///path/to/example.asar/static/index.html')
```
### Web API
In a web page, files in an archive can be requested with the `file:` protocol.
Like the Node API, `asar` archives are treated as directories.
For example, to get a file with `$.get`:
```html
<script>
let $ = require('./jquery.min.js')
$.get('file:///path/to/example.asar/file.txt', (data) => {
console.log(data)
})
</script>
```
### Treating an `asar` Archive as a Normal File
For some cases like verifying the `asar` archive's checksum, we need to read the
content of an `asar` archive as a file. For this purpose you can use the built-in
`original-fs` module which provides original `fs` APIs without `asar` support:
```javascript
const originalFs = require('original-fs')
originalFs.readFileSync('/path/to/example.asar')
```
You can also set `process.noAsar` to `true` to disable the support for `asar` in
the `fs` module:
```javascript
const fs = require('fs')
process.noAsar = true
fs.readFileSync('/path/to/example.asar')
```
## Limitations of the Node API
Even though we tried hard to make `asar` archives in the Node API work like
directories as much as possible, there are still limitations due to the
low-level nature of the Node API.
### Archives Are Read-only
The archives can not be modified so all Node APIs that can modify files will not
work with `asar` archives.
### Working Directory Can Not Be Set to Directories in Archive
Though `asar` archives are treated as directories, there are no actual
directories in the filesystem, so you can never set the working directory to
directories in `asar` archives. Passing them as the `cwd` option of some APIs
will also cause errors.
### Extra Unpacking on Some APIs
Most `fs` APIs can read a file or get a file's information from `asar` archives
without unpacking, but for some APIs that rely on passing the real file path to
underlying system calls, Electron will extract the needed file into a
temporary file and pass the path of the temporary file to the APIs to make them
work. This adds a little overhead for those APIs.
APIs that requires extra unpacking are:
* `child_process.execFile`
* `child_process.execFileSync`
* `fs.open`
* `fs.openSync`
* `process.dlopen` - Used by `require` on native modules
### Fake Stat Information of `fs.stat`
The `Stats` object returned by `fs.stat` and its friends on files in `asar`
archives is generated by guessing, because those files do not exist on the
filesystem. So you should not trust the `Stats` object except for getting file
size and checking file type.
### Executing Binaries Inside `asar` Archive
There are Node APIs that can execute binaries like `child_process.exec`,
`child_process.spawn` and `child_process.execFile`, but only `execFile` is
supported to execute binaries inside `asar` archive.
This is because `exec` and `spawn` accept `command` instead of `file` as input,
and `command`s are executed under shell. There is no reliable way to determine
whether a command uses a file in asar archive, and even if we do, we can not be
sure whether we can replace the path in command without side effects.
## Adding Unpacked Files to `asar` Archives
As stated above, some Node APIs will unpack the file to the filesystem when
called. Apart from the performance issues, various anti-virus scanners might
be triggered by this behavior.
As a workaround, you can leave various files unpacked using the `--unpack` option.
In the following example, shared libraries of native Node.js modules will not be
packed:
```sh
$ asar pack app app.asar --unpack *.node
```
After running the command, you will notice that a folder named `app.asar.unpacked`
was created together with the `app.asar` file. It contains the unpacked files
and should be shipped together with the `app.asar` archive.
[asar]: https://github.com/electron/asar
[electron-packager]: https://github.com/electron/electron-packager
[electron-forge]: https://github.com/electron-userland/electron-forge
[electron-builder]: https://github.com/electron-userland/electron-builder

Some files were not shown because too many files have changed in this diff Show More