Compare commits

...

300 Commits

Author SHA1 Message Date
Sudowoodo Release Bot
937637db3d Bump v17.4.10 2022-07-07 11:54:22 -07:00
Sudowoodo Release Bot
4f1155dba7 Revert "Bump v17.4.10"
This reverts commit 701dfdf075.
2022-07-06 09:01:29 -07:00
Sudowoodo Release Bot
701dfdf075 Bump v17.4.10 2022-07-06 08:32:24 -07:00
Jeremy Rose
26dd8b2379 chore: cherry-pick d0882b3dff76 from v8 (#34686)
* chore: [17-x-y] cherry-pick d0882b3dff76 from v8

* fix patch.

Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Pedro Pontes <pepontes@microsoft.com>
2022-07-05 11:35:34 -04:00
Jeremy Rose
406575b9f6 chore: cherry-pick f427936d32db from chromium (#34684)
* chore: [17-x-y] cherry-pick f427936d32db from chromium

* fix patch

* fix patch for linux build

Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Pedro Pontes <pepontes@microsoft.com>
2022-07-05 11:32:50 -04:00
Sudowoodo Release Bot
4a9890d3a4 Bump v17.4.9 2022-06-30 12:37:49 -07:00
Milan Burda
342eb6710c fix: potential crash caused by dlopen different gtk libraries (#34774)
fix: potential crash caused by dlopen different gtk libraries (#33650)
2022-06-30 09:07:53 -07:00
Jeremy Rose
ad23614bb8 chore: cherry-pick ecad352cd614 from chromium (#34688) 2022-06-29 13:07:19 -07:00
Milan Burda
09ff1627ff fix: crash when setWindowOpenHandler callback throws (#34772)
fix: crash when `setWindowOpenHandler` callback throws (#34523)
2022-06-29 10:50:07 -07:00
Sudowoodo Release Bot
7b60830fa1 Revert "Bump v17.4.9"
This reverts commit c3c8945631.
2022-06-29 10:36:11 -07:00
Sudowoodo Release Bot
c3c8945631 Bump v17.4.9 2022-06-29 08:32:06 -07:00
trop[bot]
02f6642e13 fix: resolve symlinks when computing relative asar paths for integrity (#34778)
Co-authored-by: Samuel Attard <sattard@salesforce.com>
2022-06-29 17:17:45 +02:00
trop[bot]
46718d362e fix: [Mac] Disable MallocNanoZone (#34734)
fix: disable MallocNanoZone on mac

Co-authored-by: Jacek Oleksy <jacek.oleksy@gmail.com>
2022-06-28 13:58:47 -07:00
trop[bot]
f967309287 fix: make navigator.userAgentData non-empty (#34760)
fix: make navigator.userAgentData non-empty (#34481)

Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2022-06-28 10:07:38 +02:00
trop[bot]
4a000a5e8b refactor: load webFrame via process._linkedBinding in security-warnings.ts (#34745)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-06-27 14:12:45 +02:00
trop[bot]
4d060f0395 fix: WCO respects maximizable/closable/minimizable (#34733)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-06-27 16:47:59 +09:00
Pedro Pontes
d7efea7d4e chore: cherry-pick 22c61cfae5d1 from chromium (#34715) 2022-06-23 21:07:09 +02:00
Jeremy Rose
f0f2c861bb chore: cherry-pick 44c4e56fea2c from v8 (#34691)
* chore: [17-x-y] cherry-pick 44c4e56fea2c from v8

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-06-23 11:17:03 -04:00
Sudowoodo Release Bot
b36b2e3781 Bump v17.4.8 2022-06-20 06:39:47 -07:00
John Kleinschmidt
5646f87c03 build: make sure depot_tools is up to date (#34587)
* build: make sure depot_tools is up to date

* build: update_depot_tools when fixing up sync
2022-06-20 09:36:18 -04:00
trop[bot]
a14c789a4c fix: performance problem in crashReporter.start() on macOS (#34637)
* fix: performance problem in crashReporter.start() on macOS

This change reduces the duration of crashReporter.start() on Intel macOS
from 622 milliseconds to 257 milliseconds!

Backports https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3641386

  posix: Replace DoubleForkAndExec() with ForkAndSpawn()

  The DoubleForkAndExec() function was taking over 622 milliseconds to run
  on macOS 11 (BigSur) on Intel i5-1038NG7. I did some debugging by adding
  some custom traces and found that the fork() syscall is the bottleneck
  here, i.e., the first fork() takes around 359 milliseconds and the
  nested fork() takes around 263 milliseconds. Replacing the nested fork()
  and exec() with posix_spawn() reduces the time consumption to 257
  milliseconds!

  See https://github.com/libuv/libuv/pull/3064 to know why fork() is so
  slow on macOS and why posix_spawn() is a better replacement.

  Another point to note is that even base::LaunchProcess() from Chromium
  calls posix_spawnp() on macOS -
  8f8d82dea0:base/process/launch_mac.cc;l=295-296

  Change-Id: I25c6ee9629a1ae5d0c32b361b56a1ce0b4b0fd26
  Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3641386
  Reviewed-by: Mark Mentovai <mark@chromium.org>
  Commit-Queue: Mark Mentovai <mark@chromium.org>

Fixes: https://github.com/electron/electron/issues/34321
Signed-off-by: Darshan Sen <raisinten@gmail.com>

* Update .patches

* chore: update patches

* Update posix_replace_doubleforkandexec_with_forkandspawn.patch

* chore: update patches

Co-authored-by: Darshan Sen <raisinten@gmail.com>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-06-20 19:39:09 +09:00
Pedro Pontes
2e6ec46eae chore: cherry-pick b03797bdb1df from chromium (#34632)
* chore: cherry-pick b03797bdb1df from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-06-20 09:33:16 +09:00
Jeremy Rose
d91bcef773 chore: add ffmpeg patch dir to config.json (#34598)
* chore: add ffmpeg patch dir to config.json

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-06-16 17:14:07 -07:00
Jeremy Rose
02992b8ad7 chore: cherry-pick 919b1ffe1fe7 from chromium (#34557)
* chore: cherry-pick 919b1ffe1fe7 from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-06-16 16:44:07 +09:00
trop[bot]
0f92cf21a8 test: add missing page-title-updated event spec for webview (#34542)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-06-16 09:42:55 +09:00
Sudowoodo Release Bot
25ed5f2d97 Revert "Bump v17.4.8"
This reverts commit b9400a8ab9.
2022-06-15 13:26:37 -07:00
Jeremy Rose
0fe1a95694 chore: cherry-pick 2782c7bc5bbe from chromium (#34570)
* chore: cherry-pick 2782c7bc5bbe from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-06-15 15:56:55 -04:00
Jeremy Rose
8fb011092a chore: cherry-pick 03aa5ae75c29 from angle (#34567)
* chore: cherry-pick 03aa5ae75c29 from angle

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-06-15 15:55:00 -04:00
Jeremy Rose
44fee2f8eb chore: cherry-pick e481fc655a62 from ffmpeg (#34559) 2022-06-15 15:48:35 -04:00
Sudowoodo Release Bot
b9400a8ab9 Bump v17.4.8 2022-06-15 12:40:59 -07:00
Sudowoodo Release Bot
a35a12228d Revert "Bump v17.4.8"
This reverts commit d6c1957d61.
2022-06-15 10:20:42 -07:00
Jeremy Rose
19c126ff6e chore: cherry-pick f1dd785e021e from chromium (#34561)
* chore: cherry-pick f1dd785e021e from chromium

* fix patch

Co-authored-by: Electron Bot <electron@github.com>
2022-06-15 12:53:01 -04:00
Pedro Pontes
9e5aec2f75 chore: cherry-pick f1504440487f from chromium (#34541)
* chore: cherry-pick f1504440487f from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-06-15 11:32:34 -04:00
Sudowoodo Release Bot
d6c1957d61 Bump v17.4.8 2022-06-15 08:31:19 -07:00
Jeremy Rose
65ce13ee56 chore: cherry-pick 801b904aea7d from angle (#34565)
* chore: cherry-pick 801b904aea7d from angle

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-06-15 14:26:15 +09:00
Jeremy Rose
93e609dd58 chore: cherry-pick f3d01ff794dc from chromium (#34555)
* chore: cherry-pick f3d01ff794dc from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-06-15 11:28:22 +09:00
Jeremy Rose
a22683ed73 chore: cherry-pick 6661eb4900da from angle (#34553)
* chore: cherry-pick 6661eb4900da from angle

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-06-15 11:27:58 +09:00
Jeremy Rose
86431323bb chore: cherry-pick 21139756239b from chromium (#34535)
* chore: cherry-pick 21139756239b from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-06-14 15:25:23 -04:00
Pedro Pontes
d15cc63aa4 chore: cherry-pick 9768648fffc9 from angle (#34538)
* chore: cherry-pick 9768648fffc9 from angle

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-06-14 12:32:42 -04:00
Sudowoodo Release Bot
66dd03293b Bump v17.4.7 2022-06-01 08:33:02 -07:00
trop[bot]
addd2440c1 fix: zombie windows when fullscreening and closing (#34390)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-05-31 15:36:53 +02:00
Sudowoodo Release Bot
3a1945bd6c Bump v17.4.6 2022-05-25 08:32:53 -07:00
trop[bot]
75290948ac chore: add a TRACE call for crash_reporter::Start() (#34324)
chore: add a TRACE call for crash_reporter::Start()

Initializing the crashReporter takes around 620 milliseconds on Intel
macOS. I have sent a CL to crashpad to partially fix the performance
issue in
https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3641386.
It would be beneficial to log the performance impact of this function in
the traces in case this slows down in the future.

Signed-off-by: Darshan Sen <raisinten@gmail.com>

Co-authored-by: Darshan Sen <raisinten@gmail.com>
2022-05-24 10:21:46 +02:00
John Kleinschmidt
9bb03e9e03 fix: crash on navigator.serial.getPorts() (#34328)
(cherry picked from commit 7f9431764f)
(cherry picked from commit 1b5738e308)
2022-05-23 15:11:13 -04:00
trop[bot]
d585bf3250 fix: delayed bounds when moving/resizing and preventing default (#34283)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-05-19 13:57:16 +02:00
Sudowoodo Release Bot
fb3abffd16 Bump v17.4.5 2022-05-18 08:35:00 -07:00
Darshan Sen
2a04149140 fix: crash in safeStorage on Linux (#34261)
* fix: fix a crash in `safeStorage` on Linux (#33913)

On Linux, `isEncryptionAvailable()` was crashing instead of returning a
boolean before the 'ready' event was emitted by the app. The reason of
the crash is that [`CreateKeyStorage()`](https://source.chromium.org/chromium/chromium/src/+/main:components/os_crypt/os_crypt_linux.cc;l=74;drc=35be6215ec8f09e50176f36753c68f26c63d1885;bpv=1;bpt=0)
expects the config to be set but the function responsible for setting the
config, [`SetConfig()`](https://source.chromium.org/chromium/chromium/src/+/main:components/os_crypt/os_crypt_linux.cc;l=237;drc=35be6215ec8f09e50176f36753c68f26c63d1885;bpv=1;bpt=0),
is called only after the app is ready inside [`PostCreateMainMessageLoop()`](https://github.com/electron/electron/blob/main/shell/browser/electron_browser_main_parts.cc#L499).
So this changes `IsEncryptionAvailable()` to return `false` when the app
is not ready on Linux and uses that instead of the raw API in other
places like `EncryptString()` and `DecryptString()`.

Fixes: https://github.com/electron/electron/issues/32206
Signed-off-by: Darshan Sen <raisinten@gmail.com>

* fix: replace BUILDFLAG(IS_LINUX) with defined(OS_LINUX)

Signed-off-by: Darshan Sen <raisinten@gmail.com>

* Linux: Send OSCrypt raw encryption key to the Network Service

This backports 0e09738b18.

Signed-off-by: Darshan Sen <raisinten@gmail.com>

* fix: add ifdef guard around NetworkService::SetEncryptionKey()

network::mojom::NetworkService::SetEncryptionKey() is only available on
Windows and macOS.

Signed-off-by: Darshan Sen <raisinten@gmail.com>
2022-05-18 10:33:44 -04:00
trop[bot]
b384447377 fix: crash when loading extension with missing manifest (#34193) 2022-05-18 12:20:32 +02:00
Pedro Pontes
160afc8d19 chore: cherry-pick 2941a90229 from chromium (#34228)
* chore: cherry-pick 2941a90229 from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-05-17 15:13:27 -04:00
Pedro Pontes
eb4ce2a84e chore: cherry-pick 14e51893e5b5 from icu (#34222)
* chore: cherry-pick 14e51893e5b5 from icu

* chore: fixup patch for lint

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-05-17 11:31:43 -04:00
trop[bot]
5dc084c428 docs: add missing explanation for [angle|dawn]_enable_vulkan_validation_layers = false (#34256)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-05-17 11:18:25 -04:00
Pedro Pontes
52c019c3c7 chore: cherry-pick ec0cce63f47d from chromium (#34232)
* chore: cherry-pick ec0cce63f47d from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-05-16 18:18:55 -04:00
Pedro Pontes
c1cb799e5e chore: cherry-pick 723ed8a9cfff from v8 (#34203)
* chore: cherry-pick 723ed8a9cfff from v8

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-16 16:08:45 -04:00
Pedro Pontes
7118979852 chore: cherry-pick a4f71e40e571 from angle (#34229)
* chore: cherry-pick a4f71e40e571 from angle

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-16 14:59:29 -04:00
Darshan Sen
22d81d3054 docs: note safeStorage.isEncryptionAvailable() needs ready event (#34218)
docs: note safeStorage.isEncryptionAvailable() needs ready event (#33724)

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-05-16 12:12:33 -04:00
Pedro Pontes
bd3e9aa527 chore: cherry-pick 99c3f3bfd507 from chromium (#34225)
* chore: cherry-pick 99c3f3bfd507 from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-16 12:11:30 -04:00
trop[bot]
7bae935a0d test: fixup done being called multiple times (#34187)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-05-12 20:22:05 -04:00
Pedro Pontes
bcca5c5bd8 chore: cherry-pick a602a068e022 from angle (#34199)
* chore: cherry-pick a602a068e022 from angle

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-12 20:20:07 -04:00
trop[bot]
305d26ce1f fix: tray icon not highlighting on empty menu (#34206)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-05-12 16:20:18 -07:00
Samuel Attard
fe864864ae fix: disable SIGUSR1 when --inspect is disabled (#34181)
* fix: disable SIGUSR1 when --inspect is disabled (#33188)

* Update .patches
2022-05-11 12:38:27 -07:00
Sudowoodo Release Bot
085a15fd95 Bump v17.4.4 2022-05-11 08:32:29 -07:00
trop[bot]
b3281b4f97 build: change upload-to-s3 vars to upload-to-storage (#34144)
* build: change upload-to-s3 vars to upload-to-az

* build: change upload-to-az to upload-to-storage

* build: change linux-ia32-publish var

Co-authored-by: Keeley Hammond <khammond@slack-corp.com>
2022-05-11 10:00:06 -04:00
Robo
16b78a4eff chore: backport a536de469 from nod (#34136) 2022-05-10 17:26:19 -07:00
trop[bot]
95277d1580 build: use azure function to hash assets instead of lambda (#34121)
* build: use azure function to hash assets instead of lambda

* chore: empty commit to trigger CI

Co-authored-by: Samuel Attard <sattard@salesforce.com>
Co-authored-by: Keeley Hammond <khammond@slack-corp.com>
2022-05-08 09:30:15 -07:00
trop[bot]
f97264499b build: stop uploading assets to S3 (#34115)
* build: remove S3 uploads

* build: remove ending slash upload-index-json (#34125)

Co-authored-by: Keeley Hammond <khammond@slack-corp.com>
Co-authored-by: Keeley Hammond <vertedinde@electronjs.org>
2022-05-06 23:49:39 -07:00
trop[bot]
25b9c1c35e refactor: prevent RemoveFromLoginItems() from mounting volumes from login items (#34107)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-05-05 21:17:27 -07:00
Pedro Pontes
23f6aecf38 chore: cherry-pick d49484c21e3c from angle (#34012)
* chore: cherry-pick d49484c21e3c from angle

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-05 22:29:13 -04:00
trop[bot]
f72cf8c2f5 test: unflake some more tests (#34101)
* test: unflake webview fullscreen test

* test: unflake net throttle test

* Update spec-main/api-net-spec.ts

Co-authored-by: Jeremy Rose <jeremya@chromium.org>

Co-authored-by: Samuel Attard <sattard@salesforce.com>
Co-authored-by: Samuel Attard <sam@electronjs.org>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2022-05-05 21:18:02 -04:00
Pedro Pontes
36f4b59c04 chore: cherry-pick 6b66a45021 from chromium (#34073)
Co-authored-by: Electron Bot <electron@github.com>
2022-05-05 21:04:02 -04:00
trop[bot]
b653897e0f fix: offscreen rendering crash on input select (#34091)
* fix: offscreen rendering crash on input select

* Trigger Build

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-05-05 13:39:19 -07:00
Sudowoodo Release Bot
322f1c3f89 Bump v17.4.3 2022-05-05 13:32:29 -07:00
Keeley Hammond
3b0832275e build: use large executors for macos publish on 12.4.0 (#34096) 2022-05-05 13:29:32 -07:00
Pedro Pontes
009263c240 chore: cherry-pick cf64617c1cc5 from chromium (#34053) 2022-05-05 11:55:08 -07:00
Pedro Pontes
70aa51cb44 chore: cherry-pick d27d9d059b51 from angle (#34043)
* chore: cherry-pick d27d9d059b51 from angle

* chore: update patches

Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-05 09:57:09 -04:00
Pedro Pontes
0a97730080 chore: cherry-pick 5ff02e4d7368 from chromium (#34017)
* chore: cherry-pick 5ff02e4d7368 from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2022-05-05 09:56:46 -04:00
trop[bot]
9b5df7f95c test: unflake some focus tests (#34082)
* spec: unflake some focus tests

* test: disable flaky webFrame visibiilty spec

Co-authored-by: Samuel Attard <sattard@salesforce.com>
2022-05-05 09:39:17 -04:00
Pedro Pontes
d8194ea6fd chore: cherry-pick 5361d836aeb1 from chromium (#34007) 2022-05-04 16:43:07 -07:00
Sudowoodo Release Bot
e306e8cd0d Revert "Bump v17.4.3"
This reverts commit 478c25c39d.
2022-05-04 11:52:31 -07:00
Sudowoodo Release Bot
478c25c39d Bump v17.4.3 2022-05-04 08:35:37 -07:00
Pedro Pontes
ca680a14b6 chore: cherry-pick 5be8e065f43e from chromium (#34038)
* chore: cherry-pick 5be8e065f43e from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-05-04 16:30:10 +02:00
trop[bot]
eaf8f6776f test: fix nativeModulesEnabled in spec/webview-spec.js (#34064)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-05-04 16:28:30 +02:00
trop[bot]
da40d1e7db fix: make BrowserWindow#isFocused() return false when blur() is called on macOS (#34029)
The isFocused() method on macOS works by checking if the selected
BrowserWindow is a key window. Unfortunately, this didn't work well
with blur() because it wasn't calling any macOS APIs that would change
the key status of the window. Hence, this changes the implementation of
blur() to call orderOut first, which removes the key
status of the window. Then when the orderBack function is called, it
moves the window to the back of its level in the screen list, without
changing the key window.

Fixes: https://github.com/electron/electron/issues/33732
Signed-off-by: Darshan Sen <raisinten@gmail.com>

Co-authored-by: Darshan Sen <raisinten@gmail.com>
2022-05-04 00:05:29 -07:00
trop[bot]
252f9cbd50 test: scope internal test fixtures under @electron-ci (#34023)
* test: scope internal test fixtures under `@electron`

* Missed references

* Move packages from @electron to @electron-ci scope

* Fix tests

* fix require

Co-authored-by: Jamie Magee <jamie.magee@gmail.com>
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-05-03 23:57:01 -07:00
Pedro Pontes
5a91ea8cdb chore: cherry-pick 12ba78f3fa7a from chromium (#34049)
* chore: cherry-pick 12ba78f3fa7a from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-03 16:17:57 -07:00
Pedro Pontes
c460c53c10 chore: cherry-pick d24570fb65 from angle (#34035)
* chore: cherry-pick d24570fb65 from angle

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-03 16:16:15 -07:00
Samuel Attard
f7367f0312 build: use smaller resource_class because goma (#33905) (#34033) (#34057) 2022-05-03 16:14:04 -07:00
Keeley Hammond
75ba569e73 build: improve CI speeds and reduce CI costs (#33904) (#33953)
* build: improve CI speeds and reduce CI costs (#33904)

* remove third_party/electron_node:overlapped-checker

target isn't present in older versions

* build: use original arch logic

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Samuel Attard <sattard@salesforce.com>
2022-05-02 12:51:05 -04:00
trop[bot]
044399047a build: allow script/spec-runner.js with empty list of runners (#34001)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-05-02 09:46:19 -04:00
trop[bot]
ecf9633370 spec: allow connections to port 2049 (#33991)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-05-02 14:47:36 +09:00
Samuel Attard
d6aea2703e build: use dev-cdn instead of sysroots s3 bucket (#33985)
* build: use dev-cdn instead of sysroots s3 bucket (#33922)

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-05-02 10:31:20 +09:00
Sudowoodo Release Bot
88e44b0d7e Bump v17.4.2 2022-04-29 06:38:36 -07:00
Pedro Pontes
5b4acf406c chore: cherry-pick ac341df436 from webrtc (#33671)
Co-authored-by: Electron Bot <electron@github.com>
2022-04-28 10:26:57 -04:00
Pedro Pontes
af7d3b7171 chore: cherry-pick 57bdd90d8c from chromium (#33886) 2022-04-28 11:52:08 +09:00
trop[bot]
d10adccf3f build: ensure sync-done file exists during git cache save (#33957)
Co-authored-by: Samuel Attard <sattard@salesforce.com>
2022-04-27 18:25:55 -07:00
Pedro Pontes
26e74b355b chore: cherry-pick 2004594a46c8 from v8 (#33882)
* chore: cherry-pick 2004594a46c8 from v8

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-04-27 16:41:00 -04:00
Pedro Pontes
5463996d00 chore: cherry-pick d88e959e01 from chromium (#33850)
* chore: cherry-pick d88e959e01 from chromium

* chore: update patches

* chore: update patches

* chore: update patches

* chore: update patches

* chore: update patches

* chore: update patches

* chore: update patches

* chore: update patches

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-04-27 16:40:04 -04:00
Samuel Attard
93e6cbb60b build: upload to AZ as well as S3 (#33925)
* build: upload to AZ as well as S3

* build: actually verify az urls too
2022-04-27 10:52:31 -07:00
Samuel Attard
9d02e5d4fd build: improve circleci config (#33943)
* build: improve circleci config (#33881)

* build: fix conditional restore of git cache

* build: split lint out of setup.yml

* ci: update release script to handle new CircleCI configs (#33914)

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-04-27 10:13:09 -07:00
Sudowoodo Release Bot
7f002fe3a3 Revert "Bump v17.4.2"
This reverts commit cc77aba367.
2022-04-27 09:33:57 -07:00
Sudowoodo Release Bot
cc77aba367 Bump v17.4.2 2022-04-27 08:33:17 -07:00
trop[bot]
7d46fb5d40 chore: use semantic-commit-action (#33865)
* chore: use semantic-commit-action

* Update semantic.yml

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2022-04-26 19:06:43 +09:00
Pedro Pontes
14e85ae55d chore: cherry-pick e42dbcdedb7a from v8 (#33829)
* chore: cherry-pick e42dbcdedb7a from v8

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-04-25 09:43:44 +09:00
Pedro Pontes
cb8925c454 chore: cherry-pick 1a31e2110440 from chromium (#33854)
* chore: cherry-pick 1a31e2110440 from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-04-25 09:36:47 +09:00
trop[bot]
032c0a1416 build: fix intermittent compilation failures on macOS (#33877)
* build: fix intermittent compilation failures on macOS

* chore: remove //base dependency from main executable

* chore: fix lint

* build: add missing #include "base/compiler_specific.h"

Co-authored-by: Milan Burda <milan.burda@gmail.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2022-04-22 21:17:59 -04:00
trop[bot]
27009989fe chore: backport 7c9b3938d from libuv (#33870)
* chore: backport 7c9b3938d from libuv

Backports https://github.com/libuv/libuv/pull/3597

* Update .patches

* chore: update patches

Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-04-21 03:13:43 -07:00
Pedro Pontes
cf1d2103b8 chore: cherry-pick 5cb934a23ddf from chromium (#33858)
* chore: cherry-pick 5cb934a23ddf from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-04-21 17:24:12 +09:00
Pedro Pontes
3eb78b89e3 chore: cherry-pick b2d3ef69ef99 from v8 (#33834)
Co-authored-by: Samuel Attard <sattard@salesforce.com>
2022-04-20 13:51:04 -07:00
Milan Burda
a8a5c44b3e fix: building with printing disabled (#33838) 2022-04-20 13:50:45 -07:00
Sudowoodo Release Bot
73c87bcfc6 Bump v17.4.1 2022-04-20 08:31:55 -07:00
Pedro Pontes
39ff8744ea chore: cherry-pick a1dc371d6680 from chromium (#33677)
* chore: cherry-pick a1dc371d6680 from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-04-14 19:17:06 +09:00
Pedro Pontes
2bbc560e22 chore: cherry-pick f546ac11eec7 from v8 (#33761)
* chore: cherry-pick f546ac11eec7 from v8

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-04-14 16:29:04 +09:00
trop[bot]
590711fdd8 fix: apply senderFrame details to ipcMain port event (#33781)
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2022-04-14 16:25:19 +09:00
trop[bot]
14baae0436 chore: interpret bytes to string (#33776)
Co-authored-by: VerteDinde <vertedinde@electronjs.org>
2022-04-13 21:50:31 -07:00
Pedro Pontes
76c6e64d18 chore: cherry-pick 1665a1d16d46 from chromium (#33680)
* chore: cherry-pick 1665a1d16d46 from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Electron Bot <electron@github.com>
2022-04-13 19:10:46 +02:00
Pedro Pontes
a09db1f6fe chore: cherry-pick 652dd12a85 from chromium (#33668)
Co-authored-by: Electron Bot <electron@github.com>
2022-04-13 10:46:25 +02:00
trop[bot]
66ac88bc82 build: migrate urllib to python3 (#33743)
Co-authored-by: VerteDinde <vertedinde@electronjs.org>
2022-04-12 22:00:02 -07:00
trop[bot]
6654e37197 build: explicitly run scripts with python3 (#33727)
* build: explicitly run scripts with python3

* chore: update patches

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-04-12 20:22:00 -07:00
trop[bot]
ff50d30a42 build: use python3 to lint (#33717)
* build: use python3 to lint

* also run-gn-format

* specify encoding

* remove some outdated python2 info from docs

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2022-04-12 12:42:34 -07:00
trop[bot]
609f2d5e64 docs: recommend setting e.returnValue (#33644)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2022-04-12 12:08:57 +02:00
Pedro Pontes
9716ae5a35 chore: cherry-pick 4d26949260aa from chromium (#33674)
* chore: cherry-pick 4d26949260aa from chromium

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-04-12 11:04:37 +02:00
Jeremy Rose
7d79120dac chore: cherry-pick a18fddcb53e6 from webrtc (#33709)
* chore: cherry-pick a18fddcb53e6 from webrtc

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-04-12 11:03:37 +02:00
trop[bot]
ee521475e3 fix: report more detailed errors in shell.openExternal() on Windows (#33658)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-04-11 08:52:45 -07:00
David Sanders
3c6be55e13 fix: on macOS show BrowserWindow on maximize if not currently shown (#33536) 2022-04-06 17:14:12 -04:00
Sudowoodo Release Bot
0b031afcef Bump v17.4.0 2022-04-05 11:31:48 -07:00
trop[bot]
3a61e4ce16 Revert "fix: some frameless windows showing a frame on Windows (#32692)" (#33611)
This reverts commit 7c701367c0.

Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2022-04-05 11:30:02 -07:00
Jeremy Rose
f4fc41b877 chore: cherry-pick 36b66b5cc991 from v8 (#33613) 2022-04-05 09:42:31 -07:00
Robo
bd1e0176f5 chore: cherry-pick be623b0f from chromium (#33618)
Backports https://chromium-review.googlesource.com/c/chromium/src/+/3488608
2022-04-05 12:28:46 -04:00
trop[bot]
16b72c0315 fix: getting focused window with destroyed webContents (#33539)
* fix: getting focused window with destroyed webContents

* fix: add extra safeguards

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-04-05 11:25:50 -05:00
Shelley Vohr
e9f673f322 fix: pend bounds change when moving BrowserWindows (#33543)
* fix: ensure bounds changes apply when moving windows

* chore: remove unused queue include
2022-04-04 10:47:56 +02:00
trop[bot]
e78bfc119c fix: don't unmaximize on macOS if user set max bounds (#33551)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-04-04 17:32:47 +09:00
trop[bot]
1b4eeda7eb fix: create userData on requestSingleInstanceLock() if needed (#33559) (#33591)
* test: use custom userData folder for requestSingleInstanceLock()

* update test

* prefix test folder path

* fix: create userDataDir on requestSingleInstanceLock() if needed

* Trigger Build

Co-authored-by: Micha Hanselmann <micha.hanselmann@gmail.com>
2022-04-04 17:31:07 +09:00
trop[bot]
90c299f3ad feat: add WCO title bar style setters (#33439)
* feat: add wco title bar style setters

* return after throwing

* use def checks instead of build flags

Co-authored-by: clavin <clavin@electronjs.org>
2022-03-30 19:03:38 -04:00
Sudowoodo Release Bot
9ace5b3491 Bump v17.3.1 2022-03-30 08:33:10 -07:00
Robo
db0ad4f58d fix: calling of X11 functions when running under Wayland (#33499)
Backports https://github.com/electron/electron/pull/33355
2022-03-29 19:09:50 -04:00
trop[bot]
a071825ca7 fix: crash when WindowButtonsProxy references cleared NSWindow (#33488)
* resets WindowButtonsProxy on window delete on macOS

* fixes reset

Co-authored-by: Gellert Hegyi <gellert.hegyi@around.co>
2022-03-29 14:41:59 +09:00
Sudowoodo Release Bot
1401284b44 Bump v17.3.0 2022-03-28 17:27:11 -07:00
Samuel Attard
611446ea11 chore: bump chromium in DEPS to 98.0.4758.141 (#33483)
* chore: bump chromium in DEPS to 98.0.4758.141

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-03-28 17:24:34 -07:00
zeeker999
04b0655d81 fix: IncrementCapturerCount doesn't increase the capturer count (#33430)
This regression was introduced by commit 22a70eb8.
2022-03-28 09:56:56 -04:00
trop[bot]
242504a451 fix: non-client windows messages on legacy widget host (again) (#33445)
Co-authored-by: clavin <clavin@electronjs.org>
2022-03-28 16:34:22 +09:00
trop[bot]
7699f5c5f5 fix: gn check when //printing component is disabled (#33441)
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2022-03-27 20:48:54 +09:00
Cheng Zhao
43f97845a8 test: disable webview.capturePage test (#33423) 2022-03-24 09:16:35 -04:00
trop[bot]
908b8e40cd fix: initialize asar support in worker threads (#33395)
* fix: initialize asar support in worker threads (#33216)

* fix: initialize asar support in worker threads

Use `ObjectWrap` instead of gin's Wrap in `electron_api_asar.cc` because
gin isn't fully initialized (and apparently not possible to initialize
without ruining the isolate configuration and array buffer allocator) in
worker threads. In the worker thread call `setupAsarSupport` just as we
do for the main process.

* Update lib/asar/fs-wrapper.ts

Co-authored-by: Darshan Sen <raisinten@gmail.com>

* Update patches/node/worker_thread_add_asar_support.patch

Co-authored-by: Darshan Sen <raisinten@gmail.com>

* Add a test

Co-authored-by: Darshan Sen <raisinten@gmail.com>
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>

* chore: update patches

Co-authored-by: Fedor Indutny <fedor@indutny.com>
Co-authored-by: Darshan Sen <raisinten@gmail.com>
Co-authored-by: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-03-24 09:09:37 -04:00
trop[bot]
f61070be77 ci: abort CI if goma authentication is invalid (#33419)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-03-23 20:30:19 -04:00
Milan Burda
d0a98dc134 feat: add nativeTheme.inForcedColorsMode (#32956) (#33358) 2022-03-23 16:54:39 -07:00
trop[bot]
9aa0ff8f5f fix: libuv patches to address child_process.spawn slowness (#33408)
* fix: libuv patches to address child_process.spawn slowness

* chore: backport additional patches

* Update .patches

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2022-03-23 14:36:20 -04:00
Sudowoodo Release Bot
9d5f7c1673 Bump v17.2.0 2022-03-23 08:31:18 -07:00
trop[bot]
a4f81c2256 fix: persist BrowserView content bounds when calculating layout (#33398)
Reverting change introduced in PR: https://github.com/electron/electron/pull/30510

Co-authored-by: Andreas Johansson <aj3621@tobii.com>
2022-03-23 10:10:14 +01:00
trop[bot]
68292f0861 fix: use stricter options in SecStaticCodeCheckValidity (#33379)
* fix: use stricter options in SecStaticCodeCheckValidity

* Update patches/squirrel.mac/fix_use_kseccschecknestedcode_kseccsstrictvalidate_in_the_sec.patch

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>

Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: Samuel Attard <sam@electronjs.org>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-03-22 14:19:49 -07:00
Michaela Laurencin
f9830999c1 chore: cherry-pick 1aa9b09 from chromium (#33231)
* chore: cherry-pick 1aa9b09 from chromium

* chore: update patches

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-03-22 16:49:59 +09:00
trop[bot]
a6d7483784 fix: crash when destroying node env with pending promises (#33335)
* fix: crash when destroying node env with pending promises

* chore: add spec

Co-authored-by: deepak1556 <hop2deep@gmail.com>
2022-03-22 15:10:31 +09:00
trop[bot]
8603223566 fix: fire show event when BrowserWindow shown via maximize() (#33213)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-03-21 20:33:32 -04:00
Robo
aca1e8ef20 fix: iocp integration when process is reused (#33207) (#33362) 2022-03-21 19:59:03 -04:00
trop[bot]
22ec56a6a0 chore: cherry-pick 2ed58f4 from chromium (#33251)
* chore: cherry-pick 2ed58f4 from chromium (#33109)

Refs: https://chromium-review.googlesource.com/c/chromium/src/+/3492658
Fixes: https://github.com/electron/electron/issues/33049
Signed-off-by: Darshan Sen <raisinten@gmail.com>

Co-authored-by: Charles Kerr <charles@charleskerr.com>

* Trigger Build

* chore: update patches

Co-authored-by: Darshan Sen <raisinten@gmail.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-03-22 08:25:46 +09:00
Samuel Attard
ea1f402417 fix: ensure ElectronBrowser mojo service is only bound to appropriate render frames (#33323) (#33350)
* fix: ensure ElectronBrowser mojo service is only bound to authorized render frames

Notes: no-notes

* refactor: extract electron API IPC to its own mojo interface

* fix: just check main frame not primary main frame
2022-03-21 14:33:03 -04:00
trop[bot]
e316c829fb fix: fiddle ipc code pattern 3 (#33295)
Co-authored-by: akgupta0777 <akgupta0777@gmail.com>
2022-03-21 10:21:51 +09:00
trop[bot]
ddee14db78 build: drop pywin32 usage (#33299)
* build: drop pywin32 usage

* chore: ignore extra output on AppVeyor

Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-03-21 10:19:48 +09:00
trop[bot]
a60420b50a docs: webFrame.insertCSS should mention options arg (#33294)
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2022-03-17 14:07:56 +01:00
trop[bot]
53d6660b82 fix: ensure external memory adjustments are balanced (#33306)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-03-17 14:07:12 +01:00
Jeremy Rose
2da8b5515d fix: prevent UAF crash in setCertificateVerifyProc (#33254)
* fix: prevent UAF crash in setCertificateVerifyProc

* chore: update patches

Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-03-16 11:13:32 -04:00
trop[bot]
1d802ee6cb feat: allow setting code cache directory (#33285)
* feat: allow setting code cache directory

* chore: address review feedback

* chore: update docs

Co-authored-by: Charles Kerr <charles@charleskerr.com>

* chore: rewrite with base::Contains

Co-authored-by: Charles Kerr <charles@charleskerr.com>

Co-authored-by: Milan Burda <milan.burda@gmail.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
2022-03-16 10:01:02 -04:00
trop[bot]
f20f1b176f fix: race condition where webContents can be nullptr during re-focus and a multi-window close sequence (#33283)
* fix: race condition where webContents can be nullptr during re-focus and a multi-window close sequence

* chore: update electron_inspectable_web_contents_view.mm

Co-authored-by: Samuel Attard <sam@electronjs.org>
2022-03-16 09:57:37 -04:00
trop[bot]
f79ee8ac3f docs: remove "marked" from process.getBlinkMemoryInfo() (#33292)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-03-16 09:28:05 -04:00
Robo
b570eb07d3 fix: settings not persisting across devtools loads (#33273)
* fix: settings not persisting across devtools loads

* chore: remove redundant RegisterPreference impl

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-03-15 18:27:07 +01:00
trop[bot]
d82053d785 fix: crash when showin item in folder on DevTools (#33196)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-03-10 16:21:23 -06:00
trop[bot]
bcb4aac11b fix: non-client mouse events on WCO-enabled windows (#33201)
Co-authored-by: clavin <clavin@electronjs.org>
2022-03-09 15:54:16 -05:00
Sudowoodo Release Bot
fdaee16db7 Bump v17.1.2 2022-03-09 07:31:16 -08:00
trop[bot]
0d67bdf4ac fix: max window size defaults to 0 (#33118)
* fix: max window size defaults to 0

* fix: also check max_size empty

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-03-08 14:20:52 -05:00
trop[bot]
753bde866a fix: really strip crashpad handler binary (#33176)
Co-authored-by: Micha Hanselmann <micha.hanselmann@gmail.com>
2022-03-08 08:43:41 -08:00
Sudowoodo Release Bot
d35270ebb1 Bump v17.1.1 2022-03-07 11:01:48 -08:00
Shelley Vohr
8ee96a13e7 test: disable consistently flaky WOA JS test (#33144) 2022-03-07 09:18:00 -05:00
trop[bot]
5691f1c67e docs: Updated list numbering (#33146)
* docs: Updated list numbering

The steps to package and distribute an application using electron had incorrect numbering

* Indented text within ordered list sections

* Removed single space

* Fixed indentation

Co-authored-by: Alvin Philips <alvinphilips257@gmail.com>
2022-03-03 16:54:45 -08:00
trop[bot]
a582a4376f docs: remove platform notices from tutorial titles (#33137)
* docs: remove platform notices from tutorial titles

* Update docs/tutorial/launch-app-from-url-in-another-app.md

Co-authored-by: Mark Lee <malept@users.noreply.github.com>

Co-authored-by: Erick Zhao <erick@hotmail.ca>
Co-authored-by: Mark Lee <malept@users.noreply.github.com>
2022-03-03 15:37:59 -08:00
trop[bot]
2ea5521940 fix: macOS tray icon alternate images (#33105)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-03-03 14:52:45 -08:00
trop[bot]
d02dd1b894 fix: disable partition alloc on mac (#33116)
Co-authored-by: VerteDinde <vertedinde@electronjs.org>
2022-03-01 17:10:57 -08:00
electron-roller[bot]
f0815caf98 chore: bump chromium in DEPS to 98.0.4758.109 (#33085)
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
2022-02-28 14:11:40 -08:00
trop[bot]
795a79e06e Update main.js (#33079)
Co-authored-by: Ruslan <62350279+2BC-Wasabi@users.noreply.github.com>
2022-02-28 11:47:04 -08:00
trop[bot]
1d57a87c64 fix: DCHECK when calling app.exit() (#33057)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-02-28 11:37:00 -08:00
trop[bot]
931db4a747 fix: tray garbage collection (#33076)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-02-25 14:18:22 +01:00
trop[bot]
bbe5808090 fix: broken OSR transparent option (#33052)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-02-24 12:09:21 +01:00
Sudowoodo Release Bot
08efa9a9b9 Bump v17.1.0 2022-02-23 10:06:23 -08:00
Michaela Laurencin
2c282517de feat: add WCO height option (#31222) (#32939)
* feat: add WCO height option

* add docs and mac functionality

* add macOS functionality and height lowerbound

* Update docs/api/browser-window.md

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>

* update macOS functionality

* add chromium related notes

* add test and fix pixel under button bug and fix typo

* revert changes to docs/api/frameless-window.md

* modify `useCustomHeight` calls

* update `useCustomHeight` and `getCurrentMargin`

* modify margin calculation

* fix minimum custom height on macOS

* Update window_buttons_proxy.mm

* fix specified traffic light positions

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-02-22 14:30:55 -05:00
trop[bot]
1a346eaba5 fix: savePage throw on relative paths (#33016)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-02-22 16:29:47 +09:00
Shelley Vohr
74cc0023f8 fix: crash on printer dialog cancellation (#33015) 2022-02-22 16:28:01 +09:00
trop[bot]
594e905218 fix: don't restore maximized BrowserWindow when calling showInactive (#33021)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-02-22 16:25:40 +09:00
trop[bot]
680e2041b5 fix: webContents.openDevTools({mode}) not working (#32945)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-02-22 16:18:44 +09:00
trop[bot]
fb7cf29086 chore: backport EPROTOTYPE fixes from libuv (#32943)
* chore: backport EPROTOTYPE fixes from libuv

This commit backports three commits from libuv's 1.x branch to fix
issues with CPU going to 100% on macOS when EPROTOTYPE is returned.

See: abb109f30f
See: 3a7b95593a
See: de24da8c11

* Update .patches

Co-authored-by: Fedor Indutny <fedor@indutny.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-02-22 16:18:21 +09:00
electron-roller[bot]
d0e8f9b306 chore: bump chromium to 98.0.4758.102 (17-x-y) (#32906)
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-02-21 14:29:20 -08:00
trop[bot]
58218f2735 chore: add @electron/wg-security to patches/ CODEOWNERS (#33006)
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2022-02-21 15:04:40 +01:00
trop[bot]
0891d2f7f7 fix: command string for windows protocol handler (#33012)
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2022-02-21 14:59:40 +01:00
trop[bot]
122cc8d9e5 Fix broken link to GNOME notifications spec (#33000)
Co-authored-by: Kev <kevslashnull@gmail.com>
2022-02-21 10:27:59 +01:00
trop[bot]
029b445c53 fix: stale renderer process on quit (#32970)
Co-authored-by: Micha Hanselmann <micha.hanselmann@gmail.com>
2022-02-21 10:25:18 +09:00
trop[bot]
9ab1ecdd5f docs: update checklists (#32932)
Co-authored-by: Erick Zhao <erick@hotmail.ca>
2022-02-21 10:21:28 +09:00
trop[bot]
9825a202b0 docs: fix relative link in developer documentation (#32921)
Co-authored-by: Erick Zhao <erick@hotmail.ca>
2022-02-15 14:36:23 -08:00
Sudowoodo Release Bot
2cc6113a04 Bump v17.0.1 2022-02-14 12:02:53 -08:00
trop[bot]
6d794ca879 docs: add IPC doc (#32840)
* docs: add IPC doc

* fix: use "string" primitive

* use 'string' ipcrenderer

* use "number" primitive

* Update docs/tutorial/ipc.md

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>

* Update docs/tutorial/ipc.md

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>

* add code sample

Co-authored-by: Erick Zhao <erick@hotmail.ca>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2022-02-09 16:51:56 -05:00
electron-roller[bot]
23d3ad9d1a chore: bump chromium in DEPS to 98.0.4758.82 (#32832)
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
2022-02-09 15:37:12 -05:00
trop[bot]
3001b69f58 Make ElectronBrowser mojo interface frame associated. (#32815)
Co-authored-by: Marek Haranczyk <marek@openfin.co>
2022-02-09 10:57:18 -05:00
trop[bot]
a729c8c048 test: disable the test that makes spec runner hang on exit (#32839)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2022-02-09 10:55:08 -05:00
trop[bot]
4ce0b50f4b build: rebuild the dist_zips when the deps get modified (#32818)
* build: rebuild the dist_zips when the deps get modified

The dist.zip generated by the electron_dist_zip action was not getting
updated when changes were being made to the dependencies, like the
source files. It turns out, we were using data_deps for the dependencies
instead of deps. Here is the difference:

data_deps: things needed to ultimately run the thing built by a target
deps: things needed to build the target

So the difference in treatment of both sets of dependencies is actually
intentional.

Signed-off-by: Darshan Sen <raisinten@gmail.com>

* fixup! build: rebuild the dist_zips when the deps get modified

Signed-off-by: Darshan Sen <raisinten@gmail.com>

Co-authored-by: Darshan Sen <raisinten@gmail.com>
2022-02-09 09:49:18 -05:00
trop[bot]
ffdf4f3dd9 test: improve webContents.savePage() specs (#32744)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-02-09 11:58:04 +01:00
trop[bot]
e4b5c94192 docs: clarify meaning of cssOrigin (#32811)
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
2022-02-08 16:16:46 -05:00
trop[bot]
32988f18eb fix: WCO window hover on window controls on Windows (#32719) 2022-02-03 10:05:47 +01:00
trop[bot]
124cfcaf88 docs: Update E18 release date (#32721)
Co-authored-by: Sofia Nguy <sofianguy@gmail.com>
2022-02-02 09:27:43 -08:00
trop[bot]
e01c215a0a docs: fix missing tag end in clipboard example (#32695)
Co-authored-by: Paul Hollinsky <paulhollinsky@gmail.com>
2022-02-02 10:12:26 -05:00
trop[bot]
a23c93a6a0 fix: some frameless windows showing a frame on Windows (#32707)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-02-02 15:11:31 +01:00
electron-roller[bot]
a63456bb82 chore: bump chromium in DEPS to 98.0.4758.80 (#32700)
Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
2022-02-01 19:22:10 -05:00
Sudowoodo Release Bot
34769dd981 Bump v17.0.0 2022-01-31 16:01:59 -08:00
trop[bot]
a9b71c121f fix: transparent window max/unmax event firing (#32690)
* fix: transparent window max/unmax event firing

* chore: fixup tests

* Update spec-main/api-browser-window-spec.ts

Co-authored-by: David Sanders <dsanders11@ucsbalum.com>

* chore: update patches

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-01-31 18:59:15 -05:00
trop[bot]
2abe74e9f0 docs: update the build docs for electron (#32679)
Co-authored-by: Harshil Jain <twitharshil@gmail.com>
2022-01-31 18:51:26 -05:00
trop[bot]
d2aeb53317 fix: re-enable PartitionAlloc on macOS (#32683)
* fix: re-enable PartitionAlloc on macOS

* no need to copy ignore_result on linux

* factor out FixStdioStreams

* include buildflags.h in electron_main_linux

* #include electron/fuses

* more missing includes

* chore: fixup patches after rebase

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-31 18:39:08 -05:00
trop[bot]
b69c4dfa3b fix: expose all serial devices to setDevicePermissionHandler (#32685)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-31 16:17:48 -05:00
electron-roller[bot]
57ddb3bd6d chore: bump chromium to 98.0.4758.74 (17-x-y) (#32655)
* chore: bump chromium in DEPS to 98.0.4758.74

* chore: update patches

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-31 15:32:45 -05:00
trop[bot]
a4fd5ed5fb chore: update config.py (#32678)
* Fix missing comma

Co-authored-by: Marek Šuppa <mrshu@users.noreply.github.com>
2022-01-31 16:13:55 +01:00
Shelley Vohr
a2268557c4 fix: undefined backgroundColor (#32653) 2022-01-31 14:40:52 +01:00
Sudowoodo Release Bot
97f88f102c Bump v17.0.0-beta.9 2022-01-31 05:31:11 -08:00
trop[bot]
0c3c6cc8fa fix: Add support for Wayland window decorations (#29618) (#32650)
Co-authored-by: Ryan Gonzalez <rymg19@gmail.com>
2022-01-28 10:16:55 -08:00
trop[bot]
94da1f3106 fix: css transparent background being lost (#32649)
* fix: css transparent background being lost

* fix: also call SetContentBackgroundColor initially

* spec: add a test for correct behavior

* chore: address feedback from review

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-01-28 19:59:43 +09:00
trop[bot]
c8e08fd2f0 docs: update context bridge docs about Promises and Errors (#32644)
* Update context bridge docs about Promises

From my testing it doesn't remove Promises in nested objects,
also according to the test suite it does not:
80577a4f08/spec-main/api-context-bridge-spec.ts (L693)

* docs: Update docs for errors too

Co-authored-by: Mikael Finstad <finstaden@gmail.com>
2022-01-28 19:59:14 +09:00
Jeremy Rose
3f521cad0c chore: cherry-pick f5101995acd2 from chromium (#32638) 2022-01-27 16:54:06 -08:00
trop[bot]
c63ef8529e build(deps): bump node-fetch from 2.6.1 to 2.6.7 (#32635)
Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.1 to 2.6.7.
- [Release notes](https://github.com/node-fetch/node-fetch/releases)
- [Changelog](https://github.com/node-fetch/node-fetch/blob/main/docs/CHANGELOG.md)
- [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.1...v2.6.7)

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-27 21:00:50 +01:00
Sudowoodo Release Bot
5dfa0f10f0 Bump v17.0.0-beta.8 2022-01-27 05:31:12 -08:00
trop[bot]
758141f111 fix: maxWidth not being respected (#32637)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2022-01-27 20:25:20 +09:00
trop[bot]
ca2cadb571 ci: update ts-compile-doc-change to properly use src cache (#32627)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-26 10:10:12 -05:00
trop[bot]
250382cec5 fix: webContents.setZoomFactor crash (#32621)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-26 20:05:23 +09:00
trop[bot]
0b41e61658 docs: correct requestSingleInstanceLock parameter (#32623)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-01-26 20:04:26 +09:00
trop[bot]
c41628d3b5 feat: Added missing info to IAP transaction and product structures (#32602) 2022-01-25 13:47:26 -08:00
trop[bot]
60e3ce32a6 fix: crash when saving edited PDF files (#32539)
* fix: crash when saving edited PDF files

* chore: fixup .patches after backport

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-25 13:29:24 -05:00
trop[bot]
3cbfc6ac30 fix: make window without rounded corners closable (#32612)
Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2022-01-25 13:28:30 -05:00
Jeremy Rose
d9b3ad4a69 fix: undisable AXTextMarker and related APIs on MAS (#32567) 2022-01-24 09:20:01 -08:00
trop[bot]
871c9e930d test: disable flaky test on WOA (#32560)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-24 11:43:15 -05:00
Sudowoodo Release Bot
490b76d9a9 Bump v17.0.0-beta.7 2022-01-24 05:30:51 -08:00
trop[bot]
cc50d1b3f8 fix: strip crashpad_handler binary (#32549)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2022-01-24 20:06:36 +09:00
Sudowoodo Release Bot
6d0f801150 Bump v17.0.0-beta.6 2022-01-21 10:27:09 -08:00
trop[bot]
09b26234d3 fix: bundle a11y strings in resources (#32578)
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2022-01-21 10:26:16 -08:00
trop[bot]
ea54e169a2 ci: call autoninja without ninjalog_uploader_wrapper.py (#32574)
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-20 20:43:29 -08:00
Sudowoodo Release Bot
5a0b9d08c1 Revert "Bump v17.0.0-beta.6"
This reverts commit 74ca6a0fdf.
2022-01-20 19:34:58 -08:00
Sudowoodo Release Bot
74ca6a0fdf Bump v17.0.0-beta.6 2022-01-20 05:31:00 -08:00
trop[bot]
a80c38ea09 fix: maximize/unmaximize firing on linux (#32492)
* fix: maximize/unmaximize firing on linux

* Trigger Build

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2022-01-19 12:58:11 -05:00
trop[bot]
5ce0e897cb fix: check for maximized window before unmaximizings (#32496)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-01-19 10:38:14 -05:00
trop[bot]
e1bda99547 feat: expose blowfish cipher family (#32356) (#32439) 2022-01-18 14:02:55 -08:00
trop[bot]
e4247804c4 docs: fix broken images for symbol server setup (#32526)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-01-18 15:12:43 -05:00
trop[bot]
5048ffff8e docs: fix anchors for broken relative links (#32491)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-01-18 12:23:48 -05:00
Sudowoodo Release Bot
478ec9c5a6 Bump v17.0.0-beta.5 2022-01-17 05:31:18 -08:00
trop[bot]
7ea67dea27 fix: Corrupted title of alert dialog (#32469)
Co-authored-by: Takao Baba <babatakao@gmail.com>
2022-01-17 11:54:25 +01:00
trop[bot]
856e68145e fix: desktop screen capture on macOS not releasing (#32464)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-01-17 09:58:44 +01:00
trop[bot]
3e73892db6 fix: optional postMessage transfer arg (#32459)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2022-01-14 09:42:20 +09:00
Sudowoodo Release Bot
7ed6be22af Bump v17.0.0-beta.4 2022-01-13 05:30:50 -08:00
trop[bot]
c6dac2019d docs: explicitly allow string for MessageBoxOptions.icon (#32449)
Fixes #32390. See #19782 for context.

Co-authored-by: Charles Kerr <charles@charleskerr.com>
2022-01-13 18:39:14 +09:00
trop[bot]
0e26e9a922 fix: use setAspectRatio for frameless window on mac (#32447)
* fix(window): setAspectRatio for frameless windows

* dummy

* undo dummy

Co-authored-by: Gellert Hegyi <gellert.hegyi@around.co>
Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
2022-01-13 12:36:15 +09:00
trop[bot]
e87666ef6b fix: will-attach-webview handler modifying params.instanceId does not break <webview> (#32430)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-01-13 09:40:15 +09:00
electron-roller[bot]
a94efc28b9 chore: bump chromium to 98.0.4758.11 (17-x-y) (#32417)
* chore: bump chromium in DEPS to 98.0.4758.10

* chore: bump chromium in DEPS to 98.0.4758.11

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
2022-01-12 10:49:06 -05:00
trop[bot]
d232ca2a81 build: pin colors to v1.4.0 in package.json (#32426)
* pin colors to v1.4.0 in packae.json

Fixes #32416

* fixup! pin colors to v1.4.0 in packae.json

update yarn.lock too

Co-authored-by: Charles Kerr <charles@charleskerr.com>
2022-01-12 16:43:56 +09:00
Sudowoodo Release Bot
58c7b02d2e Bump v17.0.0-beta.3 2022-01-11 08:38:45 -08:00
trop[bot]
b3268a50a8 fix: incorrect skipTransformProcessType option parsing in win.setVisibleOnAllWorkspaces() (#32398)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-01-11 14:44:32 +09:00
trop[bot]
2449ef1eb1 fix: Support running git-[im,ex]port-patches with Python3 too (#32410)
* script: Python3 compatibility for utf8 conversion

The unicode() method has been renamed to str() in Python3,
add a wrapper around it to support running against both versions.

* script: don't require python2 for git-[import,export]-patches

The scripts work just fine with python3 too, so use the generic
python executable as the script interpreter.
Most setups don't even require or provide python 2 anymore,
so this saves one from having to install it just for the scripts.

Co-authored-by: Romain Pokrzywka <rpokrzywka@nvidia.com>
2022-01-10 16:50:34 -08:00
trop[bot]
583421f3bb docs: left is a valid mode in contents.openDevTools() options (#32392)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-01-10 16:57:52 -05:00
trop[bot]
cc54eace57 docs: clarify case insensitive dictionary hosting (#32402)
You must either (1) have a case-insensitive file server (2) upload files in both casings. This improves the docs to clarify that.

[0]: https://github.com/electron/electron/issues/22482#issuecomment-593617375

Co-authored-by: Evan Hahn <69474926+EvanHahn-Signal@users.noreply.github.com>
2022-01-10 16:50:16 -05:00
trop[bot]
cef58e9cd8 fix: Allow npm_config_arch override on mac (#32382)
If the npm_config_arch environment variable is set on Mac, then use the
specified architecture rather than overriding it to x64.

Co-authored-by: Tommy MacWilliam <tommy@serenade.ai>
2022-01-10 16:32:17 -05:00
electron-roller[bot]
f120ea0810 chore: bump chromium to 98.0.4758.9 (17-x-y) (#32030)
* chore: bump chromium in DEPS to 98.0.4732.0

* chore: bump chromium in DEPS to 98.0.4734.0

* chore: bump chromium in DEPS to 98.0.4736.0

* chore: bump chromium in DEPS to 98.0.4738.0

* chore: bump chromium in DEPS to 98.0.4740.0

* chore: bump chromium in DEPS to 98.0.4742.0

* chore: bump chromium in DEPS to 98.0.4744.0

* chore: bump chromium in DEPS to 98.0.4746.0

* chore: bump chromium in DEPS to 98.0.4748.0

* chore: bump chromium in DEPS to 98.0.4750.0

* chore: bump chromium in DEPS to 98.0.4752.0

* chore: bump chromium in DEPS to 98.0.4754.0

* chore: bump chromium in DEPS to 98.0.4756.0

* chore: bump chromium in DEPS to 98.0.4758.0

* chore: bump chromium in DEPS to 98.0.4758.3

* chore: bump chromium in DEPS to 98.0.4758.5

* chore: bump chromium in DEPS to 98.0.4758.9

* chore: bump chromium in DEPS to 98.0.4758.10

* chore: bump chromium in DEPS to 98.0.4758.9

* chore: bump chromium in DEPS to 98.0.4758.10

* chore: bump chromium in DEPS to 98.0.4758.9

* chore: bump chromium in DEPS to 98.0.4758.10

* chore: bump chromium in DEPS to 98.0.4758.9

* chore: bump chromium in DEPS to 98.0.4758.10

* chore: bump chromium in DEPS to 98.0.4758.9

* chore: bump chromium in DEPS to 98.0.4758.10

* 3292117: Remove unneeded base/compiler_specific.h includes in //chrome.

https://chromium-review.googlesource.com/c/chromium/src/+/3292117
(cherry picked from commit 1a84b21a5e461927c13a0601395b036cf668077a)

* 3289198: Enables calculating line, word and sentence boundaries on the browser

https://chromium-review.googlesource.com/c/chromium/src/+/3289198
(cherry picked from commit c8b1766a789d596273fe6bee8adab62e7963bc17)

* 3276176: Remove expired gdi-text-printing flag and associated code.

https://chromium-review.googlesource.com/c/chromium/src/+/3276176
(cherry picked from commit 0abd3208d6aa42f9329d50407290536d3196a19b)

* 3240963: content: allow embedder to prevent locking scheme registry

https://chromium-review.googlesource.com/c/chromium/src/+/3240963
(cherry picked from commit 19540a965d47205cb079738d3d11b12f82edbb98)

* 3269899: Rename WebContentsImpl::GetFrameTree to GetPrimaryFrameTree

https://chromium-review.googlesource.com/c/chromium/src/+/3269899
(cherry picked from commit a5b704e184c45cffd2dbc97e42bec76d52ed3f7a)

* chore: fixup patch indices

(cherry picked from commit dd9cb2a448c7368abab9e6733e442ad75ca9fc38)

* 3276279: Enable -Wshadow by default for the "chromium code" config.

https://chromium-review.googlesource.com/c/chromium/src/+/3276279
(cherry picked from commit ec20f7fc862de2b0057fe4d59c13d94b70a9e13c)

* 3279737: appcache: Remove WebPreference/WebSetting

https://chromium-review.googlesource.com/c/chromium/src/+/3279737
(cherry picked from commit 04088b5a4413f074cd4090838ed4ccb123f32c56)

* 3275564: [api] Advance API deprecation for APIs last marked in v9.6

https://chromium-review.googlesource.com/c/v8/v8/+/3275564
(cherry picked from commit 72ef5a0bced84ca5dbacb0de4e63fe73fc8d34e5)

* 3261873: Clean up WebScriptSource constructors

https://chromium-review.googlesource.com/c/chromium/src/+/3261873
(cherry picked from commit c277b0b411b2dcfabdab2798dd489aab2a01fa2c)

* 3279346: appcache: Remove ConsoleMessage appcache field

https://chromium-review.googlesource.com/c/chromium/src/+/3279346
(cherry picked from commit ea85e829ccd6fbf019b0056300232d0a4bf6a8e8)

* 3264212: Move legacy file loading to legacy_test_runner

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

Both Persistence and UI have been removed from globals, but the issues they
seemed to be patching are no longer reproducible from what I can tell, and
so we can just delete these and re-evaluate if something surfaces.

(cherry picked from commit f3e01465ce8b15af93aebdb5bd08fffed9dbe81c)

* 3290415: x11: remove the USE_X11 define.

https://chromium-review.googlesource.com/c/chromium/src/+/3290415
(cherry picked from commit 1351e45cb53851018675e707941d71f44e7bb2a7)

* 3179530: Defer system calls in PrintingContext for OOP printing

https://chromium-review.googlesource.com/c/chromium/src/+/3179530
(cherry picked from commit 4e235ab720ec3f2f7112b47be948469e9fc9023a)

* 3299445: Consolidate is_win conditionals in chrome/test/BUILD.gn.

https://chromium-review.googlesource.com/c/chromium/src/+/3299445
(cherry picked from commit d09ef41fc11f8190d6174d48506291c462420bbc)

* chore: update patch indices

(cherry picked from commit 77b72f77b8322e75c72debe446c34e38ccb0468c)

* 3223975: Break PrintJobWorker OOP logic into separate class

https://chromium-review.googlesource.com/c/chromium/src/+/3223975
(cherry picked from commit e02a7b1e8025709101f13e8a82398714a3c6f451)

* 3279001: Remove support for font-family: -webkit-pictograph

https://chromium-review.googlesource.com/c/chromium/src/+/3279001
(cherry picked from commit 01ba427a032dad1a1cb272bca8a420ec4f3d2198)

* chore: fixup patch indices

(cherry picked from commit 49d33970d6f8c5b5c9393d509c5727e66f9698a1)

* chore: update patches

(cherry picked from commit 266bb0db2ede34b8569d94fe6725b567a389fa83)

* chore: update patches

(cherry picked from commit 7ec7dac00dca5f00a09d11fe6b741470e4524519)

* chore: update printing patch for miracle ptr

(cherry picked from commit 4954c64859a7d4da2e57318b66d09fdc49d11327)

* chore: add noexcept to fix clang error

(cherry picked from commit ef9b7d1826c20f5df5442962a82815732dfb0086)

* chore: update patches

(cherry picked from commit 495e5c8dfb203002300f96924199e6cb86fe272e)

* chore: update patches

(cherry picked from commit c41579b260ae71bef2f6437ff21644ec0858ec35)

* 3293841: Remove File Handling permissions code

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3293841
(cherry picked from commit e6a5c4fa0c3d3c4f4cf77961d2f73f6f2bffa4dd)

* chore: update patches

3311700: Move the PpapiPluginSandboxedProcessLauncherDelegate | https://chromium-review.googlesource.com/c/chromium/src/+/3311700
(cherry picked from commit 1f0b5231ea12840cc3610ac306ec421d8bc884b1)

* 3289260: [CodeHealth]: Remove uses of Notification Service

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3289260
(cherry picked from commit 741d48c9d8e8740c9f3e3c2dbf2072fc76ca92ad)

* 3301600: Disable scripted print in fenced frames

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3301600
(cherry picked from commit 9ebe29ae559df0de103b29615990ff7b171e54ca)

* chore: add missing thread_restrictions headers

(cherry picked from commit 8440c2ff2ec1cb808e8f5d77eb75e41d9be7d0f6)

* 3305132: Rewrite most `Foo* field_` pointer fields to `raw_ptr<Foo> field_`.

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3305132
(cherry picked from commit f4e090c9190fe919123b660d2e0909f09a66d03b)

* fix: add ppapi_sandbox header for linux

3311700: Move the PpapiPluginSandboxedProcessLauncherDelegate | https://chromium-review.googlesource.com/c/chromium/src/+/3311700
(cherry picked from commit 00335143af0dab4a1240670d73f9061f3f7dddb3)

* 3321044: Remove DictionaryValue::Clear()
 Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3321044

(cherry picked from commit 2cba28ab91d6a1e60024d8826e82bbe07e4a1b6e)

* chore: update printing.patch
Refs:
- 3304556: [code health] Remove notification observation from PrintJob. | https://chromium-review.googlesource.com/c/chromium/src/+/3304556
- 3305095: [code health] Remove NotificationService from PrintViewManagerBase. | https://chromium-review.googlesource.com/c/chromium/src/+/3305095

(cherry picked from commit b3e6811a687e5883a2e74ae044a2e52f0ac000bc)

* build: add v8-embedder-state headers to GN patch

(cherry picked from commit 46b085f0ae7b2fe3556efbed2a36853a23cccc1c)

* chore: update patches

* chore: update video consumers

(cherry picked from commit e78c76f76a3bc2d868a330434e33a16be48ebc76)

* refactor: use newer base::Value API

(cherry picked from commit 7d711f6a85245bc8b80e7601c992647be2dce40f)

* oops 😵‍💫

(cherry picked from commit e348ab73242e96f5c4d572d00185a5c25c218d26)

* chore: rename CookiePartitionKeychain

...to CookiePartitionKeyCollection

(cherry picked from commit b88f03dcb225f219ec78dd7463058231c74603e2)

* chore: update patch after rebase

* fix: WCO method got renamed

(cherry picked from commit f80c70fdccbc4847e08b2ef08849a1d00350d341)

* build: turn PartitionAlloc back off on mac for now

(cherry picked from commit 0ef90f5385411c7f8f9ab3904c644a0f254343cf)

* 3344749: Revert "Stop using NSRunLoop in renderer process"

https://chromium-review.googlesource.com/c/chromium/src/+/3344749
(cherry picked from commit de8e4afb6f7f24db2a6062dd7d2ddcabf13f3f16)

* chore: disable serial device enumerator sequence dcheck

(cherry picked from commit c3a51158ed572cecbe5818b78e9c91cd8c7e3367)

* chore: bump chromium in DEPS to 98.0.4758.9

* fix: comment out line in DeviceService dtor

(cherry picked from commit bf2af594c7336ff0c93a1155de7710a6c7387147)

* Revert "chore: bump chromium in DEPS to 98.0.4758.9"

This reverts commit 5d2232ff9aa70fb227c984272e2317f3946b03c2.

* fix: destructor for EmbedderStateScope

* fixup! 3279001: Remove support for font-family: -webkit-pictograph

(cherry picked from commit a0707af4facb31b8458723f9647201776b8431a3)

* fixup! 3279346: appcache: Remove ConsoleMessage appcache field

(cherry picked from commit c947cf23218818b81107c18331eaf21379f11db9)

* chore: update patches

* chore: bump chromium in DEPS to 98.0.4758.9

* chore: bump chromium in DEPS to 98.0.4758.10

* chore: bump chromium in DEPS to 98.0.4758.9

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: VerteDinde <khammond@slack-corp.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: clavin <clavin@electronjs.org>
Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
2022-01-10 16:16:04 -05:00
Sudowoodo Release Bot
a747752241 Bump v17.0.0-beta.2 2022-01-10 12:29:22 -08:00
trop[bot]
2233e8173b docs: fix note for will-move event (#32400)
Co-authored-by: David Sanders <dsanders11@ucsbalum.com>
2022-01-10 11:56:33 -05:00
trop[bot]
ae84eb3329 fix: Don't create console window when creating process (#32378)
* fix: Don't create console window when creating process

* Update patches/node/fix_don_t_create_console_window_when_creating_process.patch

Co-authored-by: Robo <hop2deep@gmail.com>

* Remove extra line in description

Co-authored-by: Raymond Zhao <raymondzhao@microsoft.com>
Co-authored-by: Raymond Zhao <rzhao271@gmail.com>
Co-authored-by: Robo <hop2deep@gmail.com>
2022-01-10 07:56:24 -08:00
Sudowoodo Release Bot
8aa412b79e Bump v17.0.0-beta.1 2022-01-06 05:53:41 -08:00
trop[bot]
c1d15916b9 chore: deprecate nativeWindowOpen in Electron 17 (#32368)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2022-01-06 05:50:44 -08:00
trop[bot]
c2522c1ea2 docs: improve BrowserView example (#32366)
* working example

previous example not beginner-friendly

* Update browser-view.md

Co-authored-by: MikeBusuttil <31480000+MikeBusuttil@users.noreply.github.com>
Co-authored-by: Cheng Zhao <github@zcbenz.com>
2022-01-06 15:33:08 +09:00
trop[bot]
3b61e14fe9 Fix wording on testing documentation (#32361)
Co-authored-by: Timothy <1695613+timothyis@users.noreply.github.com>
2022-01-06 12:10:06 +09:00
trop[bot]
1d70429c99 fix: use allocationtype kold in v8 scriptormodule legacy lifetime (#32355)
Co-authored-by: VerteDinde <khammond@slack-corp.com>
2022-01-05 14:32:39 -08:00
trop[bot]
6ea5f92d14 Rename patch file to .patch to conform to naming standard which utilizes .gitattributes settings (#32347)
Co-authored-by: stsean <stsean@justin.tv>
2022-01-05 08:58:56 -08:00
trop[bot]
e4f64afa3a fix: #32141 register wrong command for setAsDefaultProtocolClient for windows (#32329)
Co-authored-by: Shubham-Kumar-2000 <shukhu10@gmail.com>
2022-01-04 16:08:55 +09:00
trop[bot]
9ef50c0bb8 fix: crash caused by app.getLocaleCountryCode() (#32322)
CFLocaleGetValue() returned null and crashed the process when
app.getLocaleCountryCode() was run on a CircleCI metal resource class
macOS instance with Xcode 12.5.1. This change fixes that logic and adds
further checks to make the code future-proof.

Here too people are complaining that the returned country code migth be
null: https://stackoverflow.com/questions/15202454/nslocalecountrycode-returns-nil

Signed-off-by: Darshan Sen <darshan.sen@postman.com>

Co-authored-by: Darshan Sen <darshan.sen@postman.com>
2022-01-04 16:04:44 +09:00
trop[bot]
efd6f85d1a docs: correct webFrame description (#32327)
The current description incorrectly states that the webFrame export represents the top frame but it actually represents the current frame.

Co-authored-by: Maciej Krawczyk <mckravchyk@gmail.com>
2022-01-04 16:04:07 +09:00
trop[bot]
aed4df546a build: remove stale dependency for webrtc desktop capture module (#32318)
WebRTC has changed how they integrate into Chromium, they don't
expose their dependencies externally anymore. Instead, one must
now go through webrtc_overrides:
https://chromium.googlesource.com/chromium/src.git/+/cbc90fd093956

We're already including webrtc_overrides as a dependency which
includes the modules, so this extra deps isn't needed anymore.

Co-authored-by: Romain Pokrzywka <rpokrzywka@nvidia.com>
2022-01-04 10:06:49 +09:00
trop[bot]
3c6802b9e1 Docs rendering issue with rendering on electronjs quick-start (#32319)
there is a issue with rendering on the bottom of page https://www.electronjs.org/docs/v14-x-y/tutorial/quick-start
which looks like this
![](https://dl3.pushbulletusercontent.com/MXsLhjaoKRj1bhu4R73E3WLiuKCBMkgh/image.png)

all id did is remove the spacing and it should fix the issue. sometimes having spaces before a "```" will cause issues

hope this helps!

Co-authored-by: Oran C <oranbusiness@gmail.com>
2022-01-04 10:06:24 +09:00
Sudowoodo Release Bot
3060a28e2b Bump v17.0.0-alpha.6 2022-01-03 08:14:45 -08:00
trop[bot]
be6d503de4 Fix typo in quick-start.md (#32313)
Resolve a grammar issue in the quick-start guide.

Co-authored-by: Jack Nemitz <62447711+terminalPoltergeist@users.noreply.github.com>
2022-01-03 11:24:47 +01:00
trop[bot]
b273fcc78d docs: fix typo in bug report issue template (#32315)
Co-authored-by: nig <nig@tutao.de>
2022-01-03 11:24:26 +01:00
trop[bot]
ea8275042b fix: check for single bluetooth listener (#32244)
Co-authored-by: VerteDinde <khammond@slack-corp.com>
2021-12-20 12:47:33 +09:00
trop[bot]
0d5c7e1ae8 fix: older systems crash when playing media files (#32214)
* fix: win7 crash when playing media

* reset

* chore: update patches

Co-authored-by: Micha Hanselmann <micha.hanselmann@gmail.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2021-12-17 13:30:13 -08:00
Sudowoodo Release Bot
17411dbde7 Bump v17.0.0-alpha.5 2021-12-15 14:26:51 -08:00
trop[bot]
8368b887f7 fix: ensure bluetooth devices are not returned by default (#32198)
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-12-15 14:25:47 -08:00
trop[bot]
a3106030f8 Update discord url to electronjs (#32176)
The discord url in this page is discord.gg/electron, which refers to a (supposed) roblox scripting group.

Co-authored-by: Dennis <70665154+dennisrijsdijk@users.noreply.github.com>
2021-12-14 15:56:03 -08:00
trop[bot]
230a38cdac docs: Fix environment variable name (#32162)
The names of environment variables are case-sensitive on Linux and Mac.

Co-authored-by: stephen9357 <stephen9357@gmail.com>
2021-12-14 19:42:52 +09:00
trop[bot]
d7a59f4f96 fix: window.open not overriding parent's webPreferences (#32107)
* fix: window.open not overriding parent's webPreferences

* test: remove "nativeWindowOpen: false" from renderer tests

Co-authored-by: Cheng Zhao <zcbenz@gmail.com>
2021-12-07 09:47:20 +09:00
trop[bot]
4b726b194c fix: gtk_native_dialog_run() calls show() internally (#32083)
In the synchronous code path, gtk_native_dialog_run() will call
gtk_native_dialog_show(). Previously this was causing an assertion to be
hit at run time.

Co-authored-by: Tristan Partin <tristan@partin.io>
2021-12-06 11:29:18 +09:00
trop[bot]
50dc23f449 fix: avoid double call in OnRefreshComplete on aura platforms (#32070)
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-12-01 07:46:19 -08:00
trop[bot]
91f4945bd8 build: add CI path-filtering for docs-only changes (#32054)
* build: add CI path-filtering for docs-only changes (#31741)

build: (wip) initial dynamic config research

* build: (wip) test path filtering option

* build: (wip) remove doc-only script, use path filtering to check changes

* build: (wip) add docker image with Electron dependencies

* build: (wip) clean up config

* build (wip): readd parameters, executors and env*s

* build: re-add steps and commands

* build: change doc-only to ts-compile-doc-only

* build: re-add workflows and jobs

* build: split configs to setup & build

* build: move lint to "always run" config

* build: clean up, remove old reference config

* build: bump to path-filtering 0.1.0

* build: remove ts-compile step from build-linux

* build: remove nightly-linux-release-test, linux-checks-nightly

* build: don't run build on publish

* build: set base-revision to main (runs branch vs commit)

* build: update config from chromium roll

* build: account for path-filtering workflow in release-build script (#32063)

* build: account for path-filtering workflow in release-build script

* build: update syntax for workflow id

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>

Co-authored-by: Keeley Hammond <vertedinde@electronjs.org>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
2021-11-30 14:33:38 -08:00
Sudowoodo Release Bot
40648dcb76 Bump v17.0.0-alpha.4 2021-11-25 09:11:59 -08:00
trop[bot]
34a818bccf chore: bump chromium to 98.0.4706.0 (17-x-y) (#31982)
* chore: bump chromium to 98.0.4706.0 (main) (#31555)

* chore: bump chromium in DEPS to 97.0.4678.0

* chore: bump chromium in DEPS to 97.0.4679.0

* chore: bump chromium in DEPS to 97.0.4680.0

* chore: bump chromium in DEPS to 97.0.4681.0

* chore: bump chromium in DEPS to 97.0.4682.0

* chore: update patches

* 3234737: Disable -Wunused-but-set-variable

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

* 3216953: Reland "Move task-related files from base/ to base/task/"

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

* 3202710: TimeDelta factory function migration.

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

* 3226841: Rename WCO::RenderProcessGone to PrimaryMainFrameRenderProcessGone

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

* 3212165: blink/gin: changes blink to load snapshot based on runtime information

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

* 3220292: Deprecate returning a GURL from GURL::GetOrigin()

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

* 3231995: build: Enable -Wbitwise-instead-of-logical everywhere except iOS and Windows

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

* 3205121: Remove base::DictionaryValue::GetDouble

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

* 3208413: [flags] Make --js-flags settings have priority over V8 features

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

* chore: bump chromium in DEPS to 97.0.4683.0

* chore: update patches

* 3188834: Combine RWHVBase GetCurrentDeviceScaleFactor/GetDeviceScaleFactor

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

* chore: update process_singleton patches

* chore: bump chromium in DEPS to 97.0.4684.0

* chore: update patches

* chore: bump chromium in DEPS to 97.0.4685.0

* chore: update patches

* chore: bump chromium in DEPS to 97.0.4686.0

* chore: update patches

* chore: bump chromium in DEPS to 97.0.4687.0

* chore: update patches

* chore: bump chromium in DEPS to 97.0.4688.0

* chore: update patches

* 3247722: Use correct source_site_instance if navigating via context menu

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

Update signature of HandleContextMenu()

* 3247722: Use correct source_site_instance if navigating via context menu

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

Update signature of HandleContextMenu()

* 3223422: Remove PP_ISOLATEDFILESYSTEMTYPE_PRIVATE_PLUGINPRIVATE enum option

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

sync pepper_plugin_support.patch with upstream

* chore: bump chromium in DEPS to 97.0.4689.0

* 3247791: ax_mac_merge: Merge AX Math attribute implementations

Xref: ax_mac_merge: Merge AX Math attribute implementations

chore: fix minor patch shear in #includes

* 3243425: Add VisibleTimeRequestTrigger helper class

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

chore: fix minor patch shear in #includes

* chore: regen chromium patches

* fixup! 3247722: Use correct source_site_instance if navigating via context menu

* chore: bump chromium in DEPS to 97.0.4690.0

* 3188659: Window Placement: make GetScreenInfo(s) const

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

simple sync GetScreenInfo with upstream refactor

* chore: update patches

* chore: bump chromium in DEPS to 97.0.4690.4

* chore: bump chromium in DEPS to 97.0.4692.0

* 3198073: ozone: //content: clean up from USE_X11

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

Fixing patch shear. Nothing to see here.

* 3252338: Remove label images checkbox from chrome://accessibility page

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

Part of our a11y patch is no longer needed due to upstream label removal

* 3258183: Remove DISALLOW_IMPLICIT_CONSTRUCTORS() definition

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

Replace our use of the macro with explicitly-deleted class methods.
See https://chromium-review.googlesource.com/c/chromium/src/+/3256952
for upstream examples of this same replacement.

* chore: update patches

* 3247295: Unwind SecurityStyleExplanations

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

update GetSecurityStyle() signature and impl to match upstream changes

* 3259578: media: grabs lock to ensure video output when occluded

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

Add stub for new upstream virtual method OnCapturerCountChanged()

* fixup! 3247295: Unwind SecurityStyleExplanations

* 3238504: Fix up drag image is not shown from bookmark bar

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

SetDragImage() no longer takes a widget argument

* 3217452: [devtools] Add getSyncInformation host binding

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

Add stub for new upstream method GetSyncInformation(). Stub sends info back to caller saying that syncing is disabled.

* chore: bump chromium in DEPS to 98.0.4693.0

* chore: bump chromium in DEPS to 98.0.4694.0

* chore: bump chromium in DEPS to 98.0.4695.0

* chore: bump chromium in DEPS to 98.0.4696.0

* chore: bump chromium in DEPS to 98.0.4697.0

* chore: bump chromium in DEPS to 98.0.4699.0

* chore: bump chromium in DEPS to 98.0.4701.0

* chore: bump chromium in DEPS to 98.0.4703.0

* chore: bump chromium in DEPS to 98.0.4705.0

* chore: bump chromium in DEPS to 98.0.4706.0

* chore: update patches

* 3279210: Rename "base/macros.h" => "base/ignore_result.h"

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

* 3259964: Remove all DISALLOW_COPY_AND_ASSIGNs

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

* 3269029: blink/gin: sets histogram callbacks during isolate creation

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

* fixup after rebase

* [content] Make ContentMainParams and MainFunctionParams move-only

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

* 3255305: Stop sending the securityStateChanged event and unwind

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

* [Blink] Add promise support to WebLocalFrame::RequestExecuteScript()

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

* 3256162: Simplify RWHV Show and ShowWithVisibility handling

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

* 3263824: ozone: //ui/base: clean up from USE_X11 1/*

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

* Request or cancel RecordContentToPresentationTimeRequest during capture

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

* appcache: remove BrowsingData/quota references

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

* [Autofill] Don't show Autofill dropdown if overlaps with permissions

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

* Rename to_different_document to should_show_loading_ui in LoadingStateChanged() callbacks

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

* cleanup patch

* fixup [content] Make ContentMainParams and MainFunctionParams move-only

* 3279210: Rename "base/macros.h" => "base/ignore_result.h"

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

* ozone: //chrome/browser clean up from USE_X11

https://chromium-review.googlesource.com/c/chromium/src/+/3186490
Refs: https://github.com/electron/electron/issues/31382

* chore: update support_mixed_sandbox_with_zygote.patch

* Enable -Wunused-but-set-variable.

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

* fixup! ozone: //ui/base: clean up from USE_X11 1/*

* fixup! ozone: //chrome/browser clean up from USE_X11

* chore: fix deprecation warning in libuv

* chore: fixup for lint

* 3251161: Reland "Make the Clang update.py script require Python 3"

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

* fixup: Enable -Wunused-but-set-variable.

* [base][win] Rename DIR_APP_DATA to DIR_ROAMING_APP_DATA

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

* Replace sandbox::policy::SandboxType with mojom Sandbox enum

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

* fixup: [content] Make ContentMainParams and MainFunctionParams move-only

* build: ensure angle has a full git checkout available to it

* fixup: [base][win] Rename DIR_APP_DATA to DIR_ROAMING_APP_DATA

* fixup lint

* [unseasoned-pdf] Dispatch 'afterprint' event in PDF plugin frame

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

* fixup: [Autofill] Don't show Autofill dropdown if overlaps with permissions

* 3217591: Move browser UI CSS color parsing to own file part 2/2

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

* Make kNoSandboxAndElevatedPrivileges only available to utilities

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

* 3211575: [modules] Change ScriptOrModule to custom Struct

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

* Address review feedback

* chore: update patches

* 3211575: [modules] Change ScriptOrModule to custom Struct

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

* fix: unused variable compat

* chore: remove redundant patch

* fixup for 3262517: Re-enable WindowCaptureMacV2

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

* chore: cleanup todo

The functions added in https://chromium-review.googlesource.com/c/chromium/src/+/3256802 are not used by offscreen rendering.

* fixup: update mas_no_private_api.patch

* 3216879: [PA] Make features::kPartitionAllocLazyCommit to be PartitionOptions::LazyCommit

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3216879 Fixes up commit b2f1aca956

* chore: cleanup support_mixed_sandbox_with_zygote.patch

* test: use window focus event instead of delay to wait for webContents focus

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: VerteDinde <khammond@slack-corp.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>

* chore: update patches

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: VerteDinde <khammond@slack-corp.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-11-24 10:27:13 -05:00
trop[bot]
7a5e286eed docs: add playwright e2e testing docs (#31975)
Co-authored-by: Erick Zhao <erick@hotmail.ca>
2021-11-23 19:29:52 -08:00
trop[bot]
744b16adf9 fix: console windows from ELECTRON_RUN_AS_NODE instances (#31972)
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2021-11-23 12:58:45 -08:00
trop[bot]
6f1f8b7847 chore: add ELECTRON_ prefix to C++ include guards (#31953)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-11-22 16:15:58 -05:00
trop[bot]
b6f8a1686f fix: fix aspect ratio when max width/height is set (#31958)
Add the native frame border size to the minimum and maximum size if
the view reports its size as the client size. It allows to enlarge
window to proper values when aspect ratio and max width/height are
set. It also fixes DCHECK which was triggered when user tried to
enlarge window above dimensions set during creation of the
BrowserWindow.

Co-authored-by: Cezary Kulakowski <cezary@openfin.co>
2021-11-22 16:03:46 -05:00
Sudowoodo Release Bot
53b76bdd6c Bump v17.0.0-alpha.3 2021-11-22 09:37:37 -08:00
trop[bot]
984c675ee1 fix: BrowserView setBackgroundColor needs two calls (#31948)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2021-11-22 16:38:03 +09:00
trop[bot]
df46cdd685 fix: ninja build failed on some system (#31944)
Co-authored-by: Black-Hole1 <158blackhole@gmail.com>
2021-11-22 16:36:15 +09:00
trop[bot]
1693b4974e fix: lint Objective-C header files (#31940)
Co-authored-by: Milan Burda <milan.burda@gmail.com>
2021-11-22 16:34:54 +09:00
Sudowoodo Release Bot
04f400392d Bump v17.0.0-alpha.2 2021-11-18 08:05:19 -08:00
trop[bot]
5ecdd7ba10 Fix typo in distribution docs (#31880)
Co-authored-by: Sergey Zolotarev <sryze@protonmail.com>
2021-11-18 20:31:51 +09:00
trop[bot]
8eca8c3acc fix: add resource strings for file selection (#31884)
Co-authored-by: VerteDinde <khammond@slack-corp.com>
2021-11-17 16:24:57 -08:00
Sudowoodo Release Bot
7e155e50ab Bump v17.0.0-alpha.1 2021-11-17 07:46:10 -08:00
870 changed files with 23071 additions and 7786 deletions

1
.circleci/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
config-staging

File diff suppressed because it is too large Load Diff

2380
.circleci/config/base.yml Normal file

File diff suppressed because it is too large Load Diff

34
.circleci/config/build.js Normal file
View File

@@ -0,0 +1,34 @@
const cp = require('child_process');
const fs = require('fs-extra');
const path = require('path');
const yaml = require('js-yaml');
const STAGING_DIR = path.resolve(__dirname, '..', 'config-staging');
function copyAndExpand(dir = './') {
const absDir = path.resolve(__dirname, dir);
const targetDir = path.resolve(STAGING_DIR, dir);
if (!fs.existsSync(targetDir)) {
fs.mkdirSync(targetDir);
}
for (const file of fs.readdirSync(absDir)) {
if (!file.endsWith('.yml')) {
if (fs.statSync(path.resolve(absDir, file)).isDirectory()) {
copyAndExpand(path.join(dir, file));
}
continue;
}
fs.writeFileSync(path.resolve(targetDir, file), yaml.dump(yaml.load(fs.readFileSync(path.resolve(absDir, file), 'utf8')), {
noRefs: true,
}));
}
}
if (fs.pathExists(STAGING_DIR)) fs.removeSync(STAGING_DIR);
copyAndExpand();
const output = cp.spawnSync(process.env.CIRCLECI_BINARY || 'circleci', ['config', 'pack', STAGING_DIR]);
fs.writeFileSync(path.resolve(STAGING_DIR, 'built.yml'), output.stdout.toString());

View File

@@ -0,0 +1,51 @@
executor:
name: linux-docker
size: medium
steps:
- checkout:
path: src/electron
- run:
name: Setup third_party Depot Tools
command: |
# "depot_tools" has to be checkout into "//third_party/depot_tools" so pylint.py can a "pylintrc" file.
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git src/third_party/depot_tools
echo 'export PATH="$PATH:'"$PWD"'/src/third_party/depot_tools"' >> $BASH_ENV
- run:
name: Download GN Binary
command: |
chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
gn_version="$(curl -sL "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/DEPS?format=TEXT" | base64 -d | grep gn_version | head -n1 | cut -d\' -f4)"
cipd ensure -ensure-file - -root . \<<-CIPD
\$ServiceURL https://chrome-infra-packages.appspot.com/
@Subdir src/buildtools/linux64
gn/gn/linux-amd64 $gn_version
CIPD
echo 'export CHROMIUM_BUILDTOOLS_PATH="'"$PWD"'/src/buildtools"' >> $BASH_ENV
- run:
name: Download clang-format Binary
command: |
chromium_revision="$(grep -A1 chromium_version src/electron/DEPS | tr -d '\n' | cut -d\' -f4)"
sha1_path='buildtools/linux64/clang-format.sha1'
curl -sL "https://chromium.googlesource.com/chromium/src/+/${chromium_revision}/${sha1_path}?format=TEXT" | base64 -d > "src/${sha1_path}"
download_from_google_storage.py --no_resume --no_auth --bucket chromium-clang-format -s "src/${sha1_path}"
- run:
name: Run Lint
command: |
# gn.py tries to find a gclient root folder starting from the current dir.
# When it fails and returns "None" path, the whole script fails. Let's "fix" it.
touch .gclient
# Another option would be to checkout "buildtools" inside the Electron checkout,
# but then we would lint its contents (at least gn format), and it doesn't pass it.
cd src/electron
node script/yarn install --frozen-lockfile
node script/yarn lint
- run:
name: Run Script Typechecker
command: |
cd src/electron
node script/yarn tsc -p tsconfig.script.json

View File

@@ -0,0 +1,10 @@
{
"name": "@electron/circleci-config",
"version": "0.0.0",
"private": true,
"license": "MIT",
"dependencies": {
"fs-extra": "^10.1.0",
"js-yaml": "^4.1.0"
}
}

View File

@@ -0,0 +1,43 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
argparse@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
fs-extra@^10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.10"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
js-yaml@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
dependencies:
argparse "^2.0.1"
jsonfile@^6.0.1:
version "6.1.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
dependencies:
universalify "^2.0.0"
optionalDependencies:
graceful-fs "^4.1.6"
universalify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==

2
.github/CODEOWNERS vendored
View File

@@ -4,7 +4,7 @@
# https://git-scm.com/docs/gitignore
# Upgrades WG
/patches/ @electron/wg-upgrades
/patches/ @electron/wg-upgrades @electron/wg-security
DEPS @electron/wg-upgrades
# Releases WG

View File

@@ -12,7 +12,7 @@ body:
required: true
- label: I agree to follow the [Code of Conduct](https://github.com/electron/electron/blob/main/CODE_OF_CONDUCT.md) that this project adheres to.
required: true
- label: I have searched the [issue tracker](https://www.github.com/electron/electron/issues) for a feature request that matches the one I want to file, without success.
- label: I have searched the [issue tracker](https://www.github.com/electron/electron/issues) for a bug report that matches the one I want to file, without success.
required: true
- type: input
attributes:

20
.github/workflows/semantic.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: "Check Semantic Commit"
on:
pull_request_target:
types:
- opened
- edited
- synchronize
jobs:
main:
name: Validate PR Title
runs-on: ubuntu-latest
steps:
- name: semantic-pull-request
uses: amannn/action-semantic-pull-request@v4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
validateSingleCommit: false

110
BUILD.gn
View File

@@ -43,6 +43,7 @@ if (is_mac) {
if (is_linux) {
import("//build/config/linux/pkg_config.gni")
import("//tools/generate_stubs/rules.gni")
pkg_config("gio_unix") {
packages = [ "gio-unix-2.0" ]
@@ -54,6 +55,38 @@ if (is_linux) {
"gdk-pixbuf-2.0",
]
}
generate_library_loader("libnotify_loader") {
name = "LibNotifyLoader"
output_h = "libnotify_loader.h"
output_cc = "libnotify_loader.cc"
header = "<libnotify/notify.h>"
config = ":libnotify_config"
functions = [
"notify_is_initted",
"notify_init",
"notify_get_server_caps",
"notify_get_server_info",
"notify_notification_new",
"notify_notification_add_action",
"notify_notification_set_image_from_pixbuf",
"notify_notification_set_timeout",
"notify_notification_set_urgency",
"notify_notification_set_hint_string",
"notify_notification_show",
"notify_notification_close",
]
}
generate_stubs("electron_gtk_stubs") {
sigs = [ "shell/browser/ui/electron_gtk.sigs" ]
extra_header = "shell/browser/ui/electron_gtk.fragment"
output_name = "electron_gtk_stubs"
public_deps = [ "//build/config/linux/gtk" ]
logging_function = "LogNoop()"
logging_include = "ui/gtk/log_noop.h"
}
}
declare_args() {
@@ -253,31 +286,6 @@ copy("copy_shell_devtools_discovery_page") {
outputs = [ "$target_gen_dir/shell_devtools_discovery_page.html" ]
}
if (is_linux) {
generate_library_loader("libnotify_loader") {
name = "LibNotifyLoader"
output_h = "libnotify_loader.h"
output_cc = "libnotify_loader.cc"
header = "<libnotify/notify.h>"
config = ":libnotify_config"
functions = [
"notify_is_initted",
"notify_init",
"notify_get_server_caps",
"notify_get_server_info",
"notify_notification_new",
"notify_notification_add_action",
"notify_notification_set_image_from_pixbuf",
"notify_notification_set_timeout",
"notify_notification_set_urgency",
"notify_notification_set_hint_string",
"notify_notification_show",
"notify_notification_close",
]
}
}
npm_action("electron_version_args") {
script = "generate-version-json"
@@ -355,6 +363,7 @@ source_set("electron_lib") {
"//chrome/app/resources:platform_locale_settings",
"//components/autofill/core/common:features",
"//components/certificate_transparency",
"//components/embedder_support:browser_util",
"//components/language/core/browser",
"//components/net_log",
"//components/network_hints/browser",
@@ -534,18 +543,24 @@ source_set("electron_lib") {
if (is_linux) {
libs = [ "xshmfence" ]
deps += [
":electron_gtk_stubs",
":libnotify_loader",
"//build/config/linux/gtk",
"//dbus",
"//device/bluetooth",
"//ui/base/ime/linux",
"//ui/events/devices/x11",
"//ui/events/platform/x11",
"//ui/gtk",
"//ui/views/controls/webview",
"//ui/wm",
]
if (use_x11) {
if (ozone_platform_x11) {
sources += filenames.lib_sources_linux_x11
public_deps += [
"//ui/base/x",
"//ui/platform_window/x11",
]
}
configs += [ ":gio_unix" ]
defines += [
@@ -627,12 +642,6 @@ source_set("electron_lib") {
}
if (enable_desktop_capturer) {
if (is_component_build && !is_linux) {
# On windows the implementation relies on unexported
# DxgiDuplicatorController class. On macOS the implementation
# relies on unexported webrtc::GetWindowOwnerPid method.
deps += [ "//third_party/webrtc/modules/desktop_capture" ]
}
sources += [
"shell/browser/api/electron_api_desktop_capturer.cc",
"shell/browser/api/electron_api_desktop_capturer.h",
@@ -900,8 +909,12 @@ if (is_mac) {
deps += [ "//sandbox/mac:seatbelt" ]
}
defines = [ "HELPER_EXECUTABLE" ]
sources = filenames.app_sources
sources += [ "shell/common/electron_constants.cc" ]
sources = [
"shell/app/electron_main_mac.cc",
"shell/app/uv_stdio_fix.cc",
"shell/app/uv_stdio_fix.h",
"shell/common/electron_constants.cc",
]
include_dirs = [ "." ]
info_plist = "shell/renderer/resources/mac/Info.plist"
extra_substitutions =
@@ -1040,15 +1053,17 @@ if (is_mac) {
mac_app_bundle("electron_app") {
output_name = electron_product_name
sources = filenames.app_sources
sources += [ "shell/common/electron_constants.cc" ]
sources = [
"shell/app/electron_main_mac.cc",
"shell/app/uv_stdio_fix.cc",
"shell/app/uv_stdio_fix.h",
]
include_dirs = [ "." ]
deps = [
":electron_app_framework_bundle_data",
":electron_app_plist",
":electron_app_resources",
":electron_fuses",
"//base",
"//electron/buildflags",
]
if (is_mas_build) {
@@ -1150,7 +1165,15 @@ if (is_mac) {
executable("electron_app") {
output_name = electron_project_name
sources = filenames.app_sources
if (is_win) {
sources = [ "shell/app/electron_main_win.cc" ]
} else if (is_linux) {
sources = [
"shell/app/electron_main_linux.cc",
"shell/app/uv_stdio_fix.cc",
"shell/app/uv_stdio_fix.h",
]
}
include_dirs = [ "." ]
deps = [
":default_app_asar",
@@ -1250,6 +1273,10 @@ if (is_mac) {
if (!is_component_build && is_component_ffmpeg) {
configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
}
if (is_linux) {
deps += [ "//sandbox/linux:chrome_sandbox" ]
}
}
}
@@ -1386,11 +1413,13 @@ dist_zip("electron_dist_zip") {
if (is_linux) {
data_deps += [ "//sandbox/linux:chrome_sandbox" ]
}
deps = data_deps
outputs = [ "$root_build_dir/dist.zip" ]
}
dist_zip("electron_ffmpeg_zip") {
data_deps = [ "//third_party/ffmpeg" ]
deps = data_deps
outputs = [ "$root_build_dir/ffmpeg.zip" ]
}
@@ -1408,6 +1437,7 @@ group("electron_chromedriver") {
dist_zip("electron_chromedriver_zip") {
testonly = true
data_deps = electron_chromedriver_deps
deps = data_deps
outputs = [ "$root_build_dir/chromedriver.zip" ]
}
@@ -1426,6 +1456,7 @@ group("electron_mksnapshot") {
dist_zip("electron_mksnapshot_zip") {
data_deps = mksnapshot_deps
deps = data_deps
outputs = [ "$root_build_dir/mksnapshot.zip" ]
}
@@ -1436,6 +1467,7 @@ copy("hunspell_dictionaries") {
dist_zip("hunspell_dictionaries_zip") {
data_deps = [ ":hunspell_dictionaries" ]
deps = data_deps
flatten = true
outputs = [ "$root_build_dir/hunspell_dictionaries.zip" ]
@@ -1449,6 +1481,7 @@ copy("libcxx_headers") {
dist_zip("libcxx_headers_zip") {
data_deps = [ ":libcxx_headers" ]
deps = data_deps
flatten = true
flatten_relative_to = rebase_path(
"$target_gen_dir/electron_libcxx_include/buildtools/third_party/libc++/trunk",
@@ -1464,6 +1497,7 @@ copy("libcxxabi_headers") {
dist_zip("libcxxabi_headers_zip") {
data_deps = [ ":libcxxabi_headers" ]
deps = data_deps
flatten = true
flatten_relative_to = rebase_path(
"$target_gen_dir/electron_libcxxabi_include/buildtools/third_party/libc++abi/trunk",

2
DEPS
View File

@@ -15,7 +15,7 @@ gclient_gn_args = [
vars = {
'chromium_version':
'96.0.4664.4',
'98.0.4758.141',
'node_version':
'v16.13.0',
'nan_version':

View File

@@ -1 +1 @@
17.0.0-nightly.20211117
17.4.10

View File

@@ -11,7 +11,7 @@
# - "TARGET_ARCH" Choose from {'ia32', 'x64', 'arm', 'arm64', 'mips64el'}.
# Is used in some publishing scripts, but does NOT affect the Electron binary.
# Must match 'target_cpu' passed to "GN_EXTRA_ARGS" and "NPM_CONFIG_ARCH" value.
# - "UPLOAD_TO_S3" Set it to '1' upload a release to the S3 bucket.
# - "UPLOAD_TO_STORAGE" Set it to '1' upload a release to the Azure bucket.
# Otherwise the release will be uploaded to the Github Releases.
# (The value is only checked if "ELECTRON_RELEASE" is defined.)
#
@@ -66,6 +66,31 @@ build_script:
- mkdir src
- update_depot_tools.bat
- ps: Move-Item $env:APPVEYOR_BUILD_FOLDER -Destination src\electron
- ps: >-
if (Test-Path 'env:RAW_GOMA_AUTH') {
$env:GOMA_OAUTH2_CONFIG_FILE = "$pwd\.goma_oauth2_config"
$env:RAW_GOMA_AUTH | Set-Content $env:GOMA_OAUTH2_CONFIG_FILE
}
- git clone https://github.com/electron/build-tools.git
- cd build-tools
- npm install
- mkdir third_party
- 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 ..
- ps: .\src\electron\script\start-goma.ps1 -gomaDir $env:LOCAL_GOMA_DIR
- ps: >-
if (Test-Path 'env:RAW_GOMA_AUTH') {
$goma_login = python $env:LOCAL_GOMA_DIR\goma_auth.py info
if ($goma_login -eq 'Login as Fermi Planck') {
Write-warning "Goma authentication is correct";
} else {
Write-warning "WARNING!!!!!! Goma authentication is incorrect; please update Goma auth token.";
$host.SetShouldExit(1)
}
}
- ps: $env:CHROMIUM_BUILDTOOLS_PATH="$pwd\src\buildtools"
- ps: >-
if ($env:GN_CONFIG -ne 'release') {
@@ -129,21 +154,6 @@ build_script:
Write-warning "Failed to add third_party\angle\.git; continuing anyway"
}
}
- ps: >-
if (Test-Path 'env:RAW_GOMA_AUTH') {
$env:GOMA_OAUTH2_CONFIG_FILE = "$pwd\.goma_oauth2_config"
$env:RAW_GOMA_AUTH | Set-Content $env:GOMA_OAUTH2_CONFIG_FILE
}
- git clone https://github.com/electron/build-tools.git
- cd build-tools
- npm install
- mkdir third_party
- 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 ..
- ps: .\src\electron\script\start-goma.ps1 -gomaDir $env:LOCAL_GOMA_DIR
- cd src
- set BUILD_CONFIG_PATH=//electron/build/args/%GN_CONFIG%.gn
- gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") import(\"%GN_GOMA_FILE%\") %GN_EXTRA_ARGS% "
@@ -221,9 +231,9 @@ deploy_script:
- cd electron
- ps: >-
if (Test-Path Env:\ELECTRON_RELEASE) {
if (Test-Path Env:\UPLOAD_TO_S3) {
Write-Output "Uploading Electron release distribution to s3"
& python script\release\uploaders\upload.py --verbose --upload_to_s3
if (Test-Path Env:\UPLOAD_TO_STORAGE) {
Write-Output "Uploading Electron release distribution to azure"
& python script\release\uploaders\upload.py --verbose --upload_to_storage
} else {
Write-Output "Uploading Electron release distribution to github releases"
& python script\release\uploaders\upload.py --verbose

View File

@@ -11,11 +11,17 @@ v8_embedder_string = "-electron.0"
# TODO: this breaks mksnapshot
v8_enable_snapshot_native_code_counters = false
# TODO(codebytere): remove when Node.js handles https://chromium-review.googlesource.com/c/v8/v8/+/3211575
v8_scriptormodule_legacy_lifetime = true
enable_cdm_host_verification = false
proprietary_codecs = true
ffmpeg_branding = "Chrome"
enable_basic_printing = true
# Removes DLLs from the build, which are only meant to be used for Chromium development.
# See https://github.com/electron/electron/pull/17985
angle_enable_vulkan_validation_layers = false
dawn_enable_vulkan_validation_layers = false

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
import os
import subprocess

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
from __future__ import print_function
import os
import subprocess

View File

@@ -1,9 +1,12 @@
from __future__ import with_statement
from __future__ import unicode_literals
import contextlib
import sys
import os
import optparse
import json
import re
import subprocess
sys.path.append("%s/../../build" % os.path.dirname(os.path.realpath(__file__)))
@@ -33,36 +36,56 @@ def calculate_hash(root):
return CalculateHash('.', None)
def windows_installed_software():
import win32com.client
strComputer = "."
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator")
objSWbemServices = objWMIService.ConnectServer(strComputer, "root\cimv2")
colItems = objSWbemServices.ExecQuery("Select * from Win32_Product")
items = []
powershell_command = [
"Get-CimInstance",
"-Namespace",
"root\cimv2",
"-Class",
"Win32_product",
"|",
"Select",
"vendor,",
"description,",
"@{l='install_location';e='InstallLocation'},",
"@{l='install_date';e='InstallDate'},",
"@{l='install_date_2';e='InstallDate2'},",
"caption,",
"version,",
"name,",
"@{l='sku_number';e='SKUNumber'}",
"|",
"ConvertTo-Json",
]
for objItem in colItems:
item = {}
if objItem.Caption:
item['caption'] = objItem.Caption
if objItem.Caption:
item['description'] = objItem.Description
if objItem.InstallDate:
item['install_date'] = objItem.InstallDate
if objItem.InstallDate2:
item['install_date_2'] = objItem.InstallDate2
if objItem.InstallLocation:
item['install_location'] = objItem.InstallLocation
if objItem.Name:
item['name'] = objItem.Name
if objItem.SKUNumber:
item['sku_number'] = objItem.SKUNumber
if objItem.Vendor:
item['vendor'] = objItem.Vendor
if objItem.Version:
item['version'] = objItem.Version
items.append(item)
proc = subprocess.Popen(
["powershell.exe", "-Command", "-"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
)
return items
stdout, _ = proc.communicate(" ".join(powershell_command).encode("utf-8"))
if proc.returncode != 0:
raise RuntimeError("Failed to get list of installed software")
# On AppVeyor there's other output related to PSReadline,
# so grab only the JSON output and ignore everything else
json_match = re.match(
r".*(\[.*{.*}.*\]).*", stdout.decode("utf-8"), re.DOTALL
)
if not json_match:
raise RuntimeError(
"Couldn't find JSON output for list of installed software"
)
# Filter out missing keys
return list(
map(
lambda info: {k: info[k] for k in info if info[k]},
json.loads(json_match.group(1)),
)
)
def windows_profile():
@@ -89,7 +112,7 @@ def windows_profile():
def main(options):
if sys.platform == 'win32':
with open(options.output_json, 'wb') as f:
with open(options.output_json, 'w') as f:
json.dump(windows_profile(), f)
else:
raise OSError("Unsupported OS")

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
import os
import subprocess
import sys

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
from __future__ import print_function
import os
import subprocess

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
from __future__ import print_function
import os
import subprocess

View File

@@ -69,8 +69,6 @@ static_library("chrome") {
"//chrome/browser/ui/exclusive_access/keyboard_lock_controller.h",
"//chrome/browser/ui/exclusive_access/mouse_lock_controller.cc",
"//chrome/browser/ui/exclusive_access/mouse_lock_controller.h",
"//chrome/browser/ui/views/autofill/autofill_popup_view_utils.cc",
"//chrome/browser/ui/views/autofill/autofill_popup_view_utils.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",
@@ -201,12 +199,16 @@ static_library("chrome") {
if (enable_basic_printing) {
sources += [
"//chrome/browser/bad_message.cc",
"//chrome/browser/bad_message.h",
"//chrome/browser/printing/print_job.cc",
"//chrome/browser/printing/print_job.h",
"//chrome/browser/printing/print_job_manager.cc",
"//chrome/browser/printing/print_job_manager.h",
"//chrome/browser/printing/print_job_worker.cc",
"//chrome/browser/printing/print_job_worker.h",
"//chrome/browser/printing/print_job_worker_oop.cc",
"//chrome/browser/printing/print_job_worker_oop.h",
"//chrome/browser/printing/print_view_manager_base.cc",
"//chrome/browser/printing/print_view_manager_base.h",
"//chrome/browser/printing/printer_query.cc",

View File

@@ -930,9 +930,9 @@ app.setJumpList([
])
```
### `app.requestSingleInstanceLock()`
### `app.requestSingleInstanceLock([additionalData])`
* `additionalData` unknown (optional) - A JSON object containing additional data to send to the first instance.
* `additionalData` Record<any, any> (optional) - A JSON object containing additional data to send to the first instance.
Returns `boolean`

View File

@@ -15,14 +15,16 @@ Process: [Main](../glossary.md#main-process)
```javascript
// In the main process.
const { BrowserView, BrowserWindow } = require('electron')
const { app, BrowserView, BrowserWindow } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
app.whenReady().then(() => {
const win = new BrowserWindow({ width: 800, height: 600 })
const view = new BrowserView()
win.setBrowserView(view)
view.setBounds({ x: 0, y: 0, width: 300, height: 300 })
view.webContents.loadURL('https://electronjs.org')
const view = new BrowserView()
win.setBrowserView(view)
view.setBounds({ x: 0, y: 0, width: 300, height: 300 })
view.webContents.loadURL('https://electronjs.org')
})
```
### `new BrowserView([options])` _Experimental_

View File

@@ -391,9 +391,10 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
contain the layout of the document—without requiring scrolling. Enabling
this will cause the `preferred-size-changed` event to be emitted on the
`WebContents` when the preferred size changes. Default is `false`.
* `titleBarOverlay` Object | boolean (optional) - When using a frameless window in conjuction with `win.setWindowButtonVisibility(true)` on macOS or using a `titleBarStyle` so that the standard window controls ("traffic lights" on macOS) are visible, this property enables the Window Controls Overlay [JavaScript APIs][overlay-javascript-apis] and [CSS Environment Variables][overlay-css-env-vars]. Specifying `true` will result in an overlay with default system colors. Default is `false`.
* `color` string (optional) _Windows_ - The CSS color of the Window Controls Overlay when enabled. Default is the system color.
* `symbolColor` string (optional) _Windows_ - The CSS color of the symbols on the Window Controls Overlay when enabled. Default is the system color.
* `titleBarOverlay` Object | Boolean (optional) - When using a frameless window in conjuction with `win.setWindowButtonVisibility(true)` on macOS or using a `titleBarStyle` so that the standard window controls ("traffic lights" on macOS) are visible, this property enables the Window Controls Overlay [JavaScript APIs][overlay-javascript-apis] and [CSS Environment Variables][overlay-css-env-vars]. Specifying `true` will result in an overlay with default system colors. Default is `false`.
* `color` String (optional) _Windows_ - The CSS color of the Window Controls Overlay when enabled. Default is the system color.
* `symbolColor` String (optional) _Windows_ - The CSS color of the symbols on the Window Controls Overlay when enabled. Default is the system color.
* `height` Integer (optional) _macOS_ _Windows_ - The height of the title bar and Window Controls Overlay in pixels. Default is system height.
When setting minimum or maximum window size with `minWidth`/`maxWidth`/
`minHeight`/`maxHeight`, it only constrains the users. It won't prevent you from
@@ -456,7 +457,7 @@ window.onbeforeunload = (e) => {
// a non-void value will silently cancel the close.
// It is recommended to use the dialog API to let the user confirm closing the
// application.
e.returnValue = false // equivalent to `return false` but not recommended
e.returnValue = false
}
```
@@ -559,7 +560,7 @@ Returns:
Emitted before the window is moved. On Windows, calling `event.preventDefault()` will prevent the window from being moved.
Note that this is only emitted when the window is being resized manually. Resizing the window with `setBounds`/`setSize` will not emit this event.
Note that this is only emitted when the window is being moved manually. Moving the window with `setPosition`/`setBounds`/`center` will not emit this event.
#### Event: 'move'
@@ -999,7 +1000,7 @@ APIs like `win.setSize`.
is `true`). Default is `#FFF` (white).
Sets the background color of the window. See [Setting
`backgroundColor`](#setting-backgroundcolor).
`backgroundColor`](#setting-the-backgroundcolor-property).
#### `win.previewFile(path[, displayName])` _macOS_
@@ -1044,7 +1045,7 @@ Returns [`Rectangle`](structures/rectangle.md) - The `bounds` of the window as `
#### `win.getBackgroundColor()`
Returns `string` - Gets the background color of the window. See [Setting
`backgroundColor`](#setting-backgroundcolor).
`backgroundColor`](#setting-the-backgroundcolor-property).
#### `win.setContentBounds(bounds[, animate])`
@@ -1810,6 +1811,16 @@ with `addBrowserView` or `setBrowserView`.
**Note:** The BrowserView API is currently experimental and may change or be
removed in future Electron releases.
#### `win.setTitleBarOverlay(options)` _Windows_
* `options` Object
* `color` String (optional) _Windows_ - The CSS color of the Window Controls Overlay when enabled.
* `symbolColor` String (optional) _Windows_ - The CSS color of the symbols on the Window Controls Overlay when enabled.
* `height` Integer (optional) _Windows_ - The height of the title bar and Window Controls Overlay in pixels.
On a Window with Window Controls Overlay already enabled, this method updates
the style of the title bar overlay.
[runtime-enabled-features]: https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5?l=70
[page-visibility-api]: https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API
[quick-look]: https://en.wikipedia.org/wiki/Quick_Look

View File

@@ -76,7 +76,7 @@ Writes `markup` to the clipboard.
```js
const { clipboard } = require('electron')
clipboard.writeHTML('<b>Hi</b')
clipboard.writeHTML('<b>Hi</b>')
```
### `clipboard.readImage([type])`

View File

@@ -102,8 +102,8 @@ has been included below for completeness:
| `boolean` | Simple | ✅ | ✅ | N/A |
| `Object` | Complex | ✅ | ✅ | Keys must be supported using only "Simple" types in this table. Values must be supported in this table. Prototype modifications are dropped. Sending custom classes will copy values but not the prototype. |
| `Array` | Complex | ✅ | ✅ | Same limitations as the `Object` type |
| `Error` | Complex | ✅ | ✅ | Errors that are thrown are also copied, this can result in the message and stack trace of the error changing slightly due to being thrown in a different context |
| `Promise` | Complex | ✅ | ✅ | Promises are only proxied if they are the return value or exact parameter. Promises nested in arrays or objects will be dropped. |
| `Error` | Complex | ✅ | ✅ | Errors that are thrown are also copied, this can result in the message and stack trace of the error changing slightly due to being thrown in a different context, and any custom properties on the Error object [will be lost](https://github.com/electron/electron/issues/25596) |
| `Promise` | Complex | ✅ | ✅ | N/A
| `Function` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending classes or constructors will not work. |
| [Cloneable Types](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) | Simple | ✅ | ✅ | See the linked document on cloneable types |
| `Element` | Complex | ✅ | ✅ | Prototype modifications are dropped. Sending custom elements will not work. |

View File

@@ -285,7 +285,7 @@ If `browserWindow` is not shown dialog will not be attached to it. In such case
include a checkbox with the given label.
* `checkboxChecked` boolean (optional) - Initial checked state of the
checkbox. `false` by default.
* `icon` [NativeImage](native-image.md) (optional)
* `icon` ([NativeImage](native-image.md) | string) (optional)
* `textWidth` Integer (optional) _macOS_ - Custom width of the text in the message box.
* `cancelId` Integer (optional) - The index of the button to be used to cancel the dialog, via
the `Esc` key. By default this is assigned to the first button with "cancel" or "no" as the

View File

@@ -122,7 +122,7 @@ Prints Chromium's internal logging to the console.
Setting this variable is the same as passing `--enable-logging`
on the command line. For more info, see `--enable-logging` in [command-line
switches](./command-line-switches.md#enable-loggingfile).
switches](./command-line-switches.md#--enable-loggingfile).
### `ELECTRON_LOG_FILE`
@@ -130,7 +130,7 @@ Sets the file destination for Chromium's internal logging.
Setting this variable is the same as passing `--log-file`
on the command line. For more info, see `--log-file` in [command-line
switches](./command-line-switches.md#log-filepath).
switches](./command-line-switches.md#--log-filepath).
### `ELECTRON_DEBUG_DRAG_REGIONS`

View File

@@ -1,3 +1,10 @@
---
title: "ipcMain"
description: "Communicate asynchronously from the main process to renderer processes."
slug: ipc-main
hide_title: false
---
# ipcMain
> Communicate asynchronously from the main process to renderer processes.
@@ -9,7 +16,9 @@ process, it handles asynchronous and synchronous messages sent from a renderer
process (web page). Messages sent from a renderer will be emitted to this
module.
## Sending Messages
For usage examples, check out the [IPC tutorial].
## Sending messages
It is also possible to send messages from the main process to the renderer
process, see [webContents.send][web-contents-send] for more information.
@@ -21,36 +30,6 @@ process, see [webContents.send][web-contents-send] for more information.
coming from frames that aren't the main frame (e.g. iframes) whereas
`event.sender.send(...)` will always send to the main frame.
An example of sending and handling messages between the render and main
processes:
```javascript
// In main process.
const { ipcMain } = require('electron')
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
event.reply('asynchronous-reply', 'pong')
})
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
event.returnValue = 'pong'
})
```
```javascript
// In renderer process (web page).
// NB. Electron APIs are only accessible from preload, unless contextIsolation is disabled.
// See https://www.electronjs.org/docs/tutorial/process-model#preload-scripts for more details.
const { ipcRenderer } = require('electron')
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong"
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg) // prints "pong"
})
ipcRenderer.send('asynchronous-message', 'ping')
```
## Methods
The `ipcMain` module has the following method to listen for events:
@@ -59,7 +38,7 @@ The `ipcMain` module has the following method to listen for events:
* `channel` string
* `listener` Function
* `event` IpcMainEvent
* `event` [IpcMainEvent][ipc-main-event]
* `...args` any[]
Listens to `channel`, when a new message arrives `listener` would be called with
@@ -69,7 +48,7 @@ Listens to `channel`, when a new message arrives `listener` would be called with
* `channel` string
* `listener` Function
* `event` IpcMainEvent
* `event` [IpcMainEvent][ipc-main-event]
* `...args` any[]
Adds a one time `listener` function for the event. This `listener` is invoked
@@ -93,8 +72,8 @@ Removes listeners of the specified `channel`.
### `ipcMain.handle(channel, listener)`
* `channel` string
* `listener` Function<Promise\<void> | any>
* `event` IpcMainInvokeEvent
* `listener` Function<Promise\<void&#62; | any&#62;
* `event` [IpcMainInvokeEvent][ipc-main-invoke-event]
* `...args` any[]
Adds a handler for an `invoke`able IPC. This handler will be called whenever a
@@ -104,14 +83,14 @@ If `listener` returns a Promise, the eventual result of the promise will be
returned as a reply to the remote caller. Otherwise, the return value of the
listener will be used as the value of the reply.
```js
// Main process
```js title='Main Process'
ipcMain.handle('my-invokable-ipc', async (event, ...args) => {
const result = await somePromise(...args)
return result
})
```
// Renderer process
```js title='Renderer Process'
async () => {
const result = await ipcRenderer.invoke('my-invokable-ipc', arg1, arg2)
// ...
@@ -130,7 +109,7 @@ provided to the renderer process. Please refer to
### `ipcMain.handleOnce(channel, listener)`
* `channel` string
* `listener` Function<Promise\<void> | any>
* `listener` Function<Promise\<void&#62; | any&#62;
* `event` IpcMainInvokeEvent
* `...args` any[]
@@ -146,13 +125,16 @@ Removes any handler for `channel`, if present.
## IpcMainEvent object
The documentation for the `event` object passed to the `callback` can be found
in the [`ipc-main-event`](structures/ipc-main-event.md) structure docs.
in the [`ipc-main-event`][ipc-main-event] structure docs.
## IpcMainInvokeEvent object
The documentation for the `event` object passed to `handle` callbacks can be
found in the [`ipc-main-invoke-event`](structures/ipc-main-invoke-event.md)
found in the [`ipc-main-invoke-event`][ipc-main-invoke-event]
structure docs.
[IPC tutorial]: ../tutorial/ipc.md
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter
[web-contents-send]: web-contents.md#contentssendchannel-args
[web-contents-send]: ../api/web-contents.md#contentssendchannel-args
[ipc-main-event]:../api/structures/ipc-main-event.md
[ipc-main-invoke-event]:../api/structures/ipc-main-invoke-event.md

View File

@@ -1,3 +1,10 @@
---
title: "ipcRenderer"
description: "Communicate asynchronously from a renderer process to the main process."
slug: ipc-renderer
hide_title: false
---
# ipcRenderer
> Communicate asynchronously from a renderer process to the main process.
@@ -9,7 +16,7 @@ methods so you can send synchronous and asynchronous messages from the render
process (web page) to the main process. You can also receive replies from the
main process.
See [ipcMain](ipc-main.md) for code examples.
See [IPC tutorial](../tutorial/ipc.md) for code examples.
## Methods
@@ -70,7 +77,7 @@ throw an exception.
> them. Attempting to send such objects over IPC will result in an error.
The main process handles it by listening for `channel` with the
[`ipcMain`](ipc-main.md) module.
[`ipcMain`](./ipc-main.md) module.
If you need to transfer a [`MessagePort`][] to the main process, use [`ipcRenderer.postMessage`](#ipcrendererpostmessagechannel-message-transfer).
@@ -98,7 +105,7 @@ throw an exception.
> them. Attempting to send such objects over IPC will result in an error.
The main process should listen for `channel` with
[`ipcMain.handle()`](ipc-main.md#ipcmainhandlechannel-listener).
[`ipcMain.handle()`](./ipc-main.md#ipcmainhandlechannel-listener).
For example:
@@ -124,11 +131,11 @@ If you do not need a response to the message, consider using [`ipcRenderer.send`
* `channel` string
* `...args` any[]
Returns `any` - The value sent back by the [`ipcMain`](ipc-main.md) handler.
Returns `any` - The value sent back by the [`ipcMain`](./ipc-main.md) handler.
Send a message to the main process via `channel` and expect a result
synchronously. Arguments will be serialized with the [Structured Clone
Algorithm][SCA], just like [`window.postMessage`][], so prototype chains will not be
Algorithm][SCA], just like [`window.postMessage`], so prototype chains will not be
included. Sending Functions, Promises, Symbols, WeakMaps, or WeakSets will
throw an exception.
@@ -140,13 +147,13 @@ throw an exception.
> Electron's IPC to the main process, as the main process would have no way to decode
> them. Attempting to send such objects over IPC will result in an error.
The main process handles it by listening for `channel` with [`ipcMain`](ipc-main.md) module,
The main process handles it by listening for `channel` with [`ipcMain`](./ipc-main.md) module,
and replies by setting `event.returnValue`.
> :warning: **WARNING**: Sending a synchronous message will block the whole
> renderer process until the reply is received, so use this method only as a
> last resort. It's much better to use the asynchronous version,
> [`invoke()`](ipc-renderer.md#ipcrendererinvokechannel-args).
> [`invoke()`](./ipc-renderer.md#ipcrendererinvokechannel-args).
### `ipcRenderer.postMessage(channel, message, [transfer])`
@@ -158,7 +165,7 @@ Send a message to the main process, optionally transferring ownership of zero
or more [`MessagePort`][] objects.
The transferred `MessagePort` objects will be available in the main process as
[`MessagePortMain`](message-port-main.md) objects by accessing the `ports`
[`MessagePortMain`](./message-port-main.md) objects by accessing the `ports`
property of the emitted event.
For example:
@@ -197,7 +204,7 @@ the host page instead of the main process.
## Event object
The documentation for the `event` object passed to the `callback` can be found
in the [`ipc-renderer-event`](structures/ipc-renderer-event.md) structure docs.
in the [`ipc-renderer-event`](./structures/ipc-renderer-event.md) structure docs.
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter
[SCA]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm

View File

@@ -67,3 +67,8 @@ or is being instructed to show a high-contrast UI.
A `boolean` for if the OS / Chromium currently has an inverted color scheme
or is being instructed to use an inverted color scheme.
### `nativeTheme.inForcedColorsMode` _Windows_ _Readonly_
A `boolean` indicating whether Chromium is in forced colors mode, controlled by system accessibility settings.
Currently, Windows high contrast is the only system setting that triggers forced colors mode.

View File

@@ -178,7 +178,6 @@ Returns an object with V8 heap statistics. Note that all statistics are reported
Returns `Object`:
* `allocated` Integer - Size of all allocated objects in Kilobytes.
* `marked` Integer - Size of all marked objects in Kilobytes.
* `total` Integer - Total allocated space in Kilobytes.
Returns an object with Blink memory information.

View File

@@ -18,9 +18,9 @@ The `safeStorage` module has the following methods:
Returns `boolean` - Whether encryption is available.
On Linux, returns true if the secret key is
available. On MacOS, returns true if Keychain is available.
On Windows, returns true with no other preconditions.
On Linux, returns true if the app has emitted the `ready` event and the secret key is available.
On MacOS, returns true if Keychain is available.
On Windows, returns true once the app has emitted the `ready` event.
### `safeStorage.encryptString(plainText)`

View File

@@ -39,7 +39,7 @@ Returns:
* `messageDetails` Object - Information about the console message
* `message` string - The actual console message
* `versionId` number - The version ID of the service worker that sent the log message
* `source` string - The type of source for this message. Can be `javascript`, `xml`, `network`, `console-api`, `storage`, `app-cache`, `rendering`, `security`, `deprecation`, `worker`, `violation`, `intervention`, `recommendation` or `other`.
* `source` string - The type of source for this message. Can be `javascript`, `xml`, `network`, `console-api`, `storage`, `rendering`, `security`, `deprecation`, `worker`, `violation`, `intervention`, `recommendation` or `other`.
* `level` number - The log level, from 0 to 3. In order it matches `verbose`, `info`, `warning` and `error`.
* `sourceUrl` string - The URL the message came from
* `lineNumber` number - The line number of the source that triggered this console message

View File

@@ -868,6 +868,20 @@ this session just before normal `preload` scripts run.
Returns `string[]` an array of paths to preload scripts that have been
registered.
#### `ses.setCodeCachePath(path)`
* `path` String - Absolute path to store the v8 generated JS code cache from the renderer.
Sets the directory to store the generated JS [code cache](https://v8.dev/blog/code-caching-for-devs) for this session. The directory is not required to be created by the user before this call, the runtime will create if it does not exist otherwise will use the existing directory. If directory cannot be created, then code cache will not be used and all operations related to code cache will fail silently inside the runtime. By default, the directory will be `Code Cache` under the
respective user data folder.
#### `ses.clearCodeCaches(options)`
* `options` Object
* `urls` String[] (optional) - An array of url corresponding to the resource whose generated code cache needs to be removed. If the list is empty then all entries in the cache directory will be removed.
Returns `Promise<void>` - resolves when the code cache clear operation is complete.
#### `ses.setSpellCheckerEnabled(enable)`
* `enable` boolean
@@ -903,8 +917,10 @@ setting with the current OS locale. This setting is persisted across restarts.
By default Electron will download hunspell dictionaries from the Chromium CDN. If you want to override this
behavior you can use this API to point the dictionary downloader at your own hosted version of the hunspell
dictionaries. We publish a `hunspell_dictionaries.zip` file with each release which contains the files you need
to host here, the file server must be **case insensitive** you must upload each file twice, once with the case it
has in the ZIP file and once with the filename as all lower case.
to host here.
The file server must be **case insensitive**. If you cannot do this, you must upload each file twice: once with
the case it has in the ZIP file and once with the filename as all lowercase.
If the files present in `hunspell_dictionaries.zip` are available at `https://example.com/dictionaries/language-code.bdic`
then you should call this api with `ses.setSpellCheckerDictionaryDownloadURL('https://example.com/dictionaries/')`. Please

View File

@@ -0,0 +1,7 @@
# PaymentDiscount Object
* `identifier` string - A string used to uniquely identify a discount offer for a product.
* `keyIdentifier` string - A string that identifies the key used to generate the signature.
* `nonce` string - A universally unique ID (UUID) value that you define.
* `signature` string - A UTF-8 string representing the properties of a specific discount offer, cryptographically signed.
* `timestamp` number - The date and time of the signature's creation in milliseconds, formatted in Unix epoch time.

View File

@@ -0,0 +1,9 @@
# ProductDiscount Object
* `identifier` string - A string used to uniquely identify a discount offer for a product.
* `type` number - The type of discount offer.
* `price` number - The discount price of the product in the local currency.
* `priceLocale` string - The locale used to format the discount price of the product.
* `paymentMode` string - The payment mode for this product discount. Can be `payAsYouGo`, `payUpFront`, or `freeTrial`.
* `numberOfPeriods` number - An integer that indicates the number of periods the product discount is available.
* `subscriptionPeriod` [ProductSubscriptionPeriod](product-subscription-period.md) (optional) - An object that defines the period for the product discount.

View File

@@ -0,0 +1,4 @@
# ProductSubscriptionPeriod Object
* `numberOfUnits` number - The number of units per subscription period.
* `unit` string - The increment of time that a subscription period is specified in. Can be `day`, `week`, `month`, `year`.

View File

@@ -8,4 +8,11 @@
* `price` number - The cost of the product in the local currency.
* `formattedPrice` string - The locale formatted price of the product.
* `currencyCode` string - 3 character code presenting a product's currency based on the ISO 4217 standard.
* `introductoryPrice` [ProductDiscount](product-discount.md) (optional) - The object containing introductory price information for the product.
available for the product.
* `discounts` [ProductDiscount](product-discount.md)[] - An array of discount offers
* `subscriptionGroupIdentifier` string - The identifier of the subscription group to which the subscription belongs.
* `subscriptionPeriod` [ProductSubscriptionPeriod](product-subscription-period.md) (optional) - The period details for products that are subscriptions.
* `isDownloadable` boolean - A boolean value that indicates whether the App Store has downloadable content for this product. `true` if at least one file has been associated with the product.
* `downloadContentVersion` string - A string that identifies the version of the content.
* `downloadContentLengths` number[] - The total size of the content, in bytes.

View File

@@ -9,3 +9,5 @@
* `payment` Object
* `productIdentifier` string - The identifier of the purchased product.
* `quantity` Integer - The quantity purchased.
* `applicationUsername` string - An opaque identifier for the users account on your system.
* `paymentDiscount` [PaymentDiscount](payment-discount.md) (optional) - The details of the discount offer to apply to the payment.

View File

@@ -2,4 +2,3 @@
* `code` string
* `url` string (optional)
* `startLine` Integer (optional) - Default is 1.

View File

@@ -736,6 +736,8 @@ first available device will be selected. `callback` should be called with
`deviceId` to be selected, passing empty string to `callback` will
cancel the request.
If no event listener is added for this event, all bluetooth requests will be cancelled.
```javascript
const { app, BrowserWindow } = require('electron')
@@ -1082,7 +1084,7 @@ Returns `string` - The user agent for this web page.
* `css` string
* `options` Object (optional)
* `cssOrigin` string (optional) - Can be either 'user' or 'author'; Specifying 'user' enables you to prevent websites from overriding the CSS you insert. Default is 'author'.
* `cssOrigin` string (optional) - Can be either 'user' or 'author'. Sets the [cascade origin](https://www.w3.org/TR/css3-cascade/#cascade-origin) of the inserted stylesheet. Default is 'author'.
Returns `Promise<string>` - A promise that resolves with a key for the inserted CSS that can later be used to remove the CSS via `contents.removeInsertedCSS(key)`.
@@ -1609,7 +1611,7 @@ app.whenReady().then(() => {
* `options` Object (optional)
* `mode` string - Opens the devtools with specified dock state, can be
`right`, `bottom`, `undocked`, `detach`. Defaults to last used dock state.
`left`, `right`, `bottom`, `undocked`, `detach`. Defaults to last used dock state.
In `undocked` mode it's possible to dock back. In `detach` mode it's not.
* `activate` boolean (optional) - Whether to bring the opened devtools window
to the foreground. The default is `true`.
@@ -1837,7 +1839,7 @@ the cursor when dragging.
#### `contents.savePage(fullPath, saveType)`
* `fullPath` string - The full file path.
* `fullPath` string - The absolute file path.
* `saveType` string - Specify the save type.
* `HTMLOnly` - Save only the HTML of the page.
* `HTMLComplete` - Save complete-html page.

View File

@@ -5,8 +5,8 @@
Process: [Renderer](../glossary.md#renderer-process)
`webFrame` export of the Electron module is an instance of the `WebFrame`
class representing the top frame of the current `BrowserWindow`. Sub-frames can
be retrieved by certain properties and methods (e.g. `webFrame.firstChild`).
class representing the current frame. Sub-frames can be retrieved by
certain properties and methods (e.g. `webFrame.firstChild`).
An example of zooming current page to 200%.
@@ -110,9 +110,11 @@ webFrame.setSpellCheckProvider('en-US', {
})
```
### `webFrame.insertCSS(css)`
#### `webFrame.insertCSS(css[, options])`
* `css` string - CSS source code.
* `css` string
* `options` Object (optional)
* `cssOrigin` string (optional) - Can be either 'user' or 'author'. Sets the [cascade origin](https://www.w3.org/TR/css3-cascade/#cascade-origin) of the inserted stylesheet. Default is 'author'.
Returns `string` - A key for the inserted CSS that can later be used to remove
the CSS via `webFrame.removeInsertedCSS(key)`.

View File

@@ -64,6 +64,9 @@ window.open('https://github.com', '_blank', 'top=500,left=200,frame=false,nodeIn
`features` will be passed to any registered `webContents`'s
`did-create-window` event handler in the `options` argument.
* `frameName` follows the specification of `windowName` located in the [native documentation](https://developer.mozilla.org/en-US/docs/Web/API/Window/open#parameters).
* When opening `about:blank`, the child window's `WebPreferences` will be copied
from the parent window, and there is no way to override it because Chromium
skips browser side navigation in this case.
To customize or cancel the creation of the window, you can optionally set an
override handler with `webContents.setWindowOpenHandler()` from the main

View File

@@ -45,6 +45,16 @@ However, you should consider further restricting the information returned to
the renderer; for instance, displaying a source selector to the user and only
returning the selected source.
### Deprecated: `nativeWindowOpen`
Prior to Electron 15, `window.open` was by default shimmed to use
`BrowserWindowProxy`. This meant that `window.open('about:blank')` did not work
to open synchronously scriptable child windows, among other incompatibilities.
Since Electron 15, `nativeWindowOpen` has been enabled by default.
See the documentation for [window.open in Electron](api/window-open.md)
for more details.
## Planned Breaking API Changes (16.0)
### Behavior Changed: `crashReporter` implementation switched to Crashpad on Linux

View File

@@ -98,42 +98,37 @@ $ gclient sync -f
## Building
**Set the environment variable for chromium build tools**
On Linux & MacOS
```sh
$ cd src
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\") $GN_EXTRA_ARGS"
```
Or on Windows (without the optional argument):
On Windows:
```sh
$ cd src
$ set CHROMIUM_BUILDTOOLS_PATH=%cd%\buildtools
```
**To generate Testing build config of Electron:**
```sh
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\")"
```
This will generate a build directory `out/Testing` under `src/` with
the testing build configuration. You can replace `Testing` with another name,
but it should be a subdirectory of `out`.
Also you shouldn't have to run `gn gen` again—if you want to change the
build arguments, you can run `gn args out/Testing` to bring up an editor.
To see the list of available build configuration options, run `gn args
out/Testing --list`.
**For generating Testing build config of
Electron:**
**To generate Release build config of Electron:**
```sh
$ gn gen out/Testing --args="import(\"//electron/build/args/testing.gn\") $GN_EXTRA_ARGS"
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
```
**For generating Release (aka "non-component" or "static") build config of
Electron:**
**Note:** This will generate a `out/Testing` or `out/Release` build directory under `src/` with the testing or release build depending upon the configuration passed above. You can replace `Testing|Release` with another names, but it should be a subdirectory of `out`.
```sh
$ gn gen out/Release --args="import(\"//electron/build/args/release.gn\") $GN_EXTRA_ARGS"
```
Also you shouldn't have to run `gn gen` again—if you want to change the build arguments, you can run `gn args out/Testing` to bring up an editor. To see the list of available build configuration options, run `gn args out/Testing --list`.
**To build, run `ninja` with the `electron` target:**
Nota Bene: This will also take a while and probably heat up your lap.
@@ -169,13 +164,13 @@ $ ./out/Testing/electron
On linux, first strip the debugging and symbol information:
```sh
electron/script/strip-binaries.py -d out/Release
$ electron/script/strip-binaries.py -d out/Release
```
To package the electron build as a distributable zip file:
```sh
ninja -C out/Release electron:electron_dist_zip
$ ninja -C out/Release electron:electron_dist_zip
```
### Cross-compiling

View File

@@ -7,21 +7,7 @@ Follow the guidelines below for building **Electron itself** on Linux, for the p
## Prerequisites
* At least 25GB disk space and 8GB RAM.
* Python 2.7.x. Some distributions like CentOS 6.x still use Python 2.6.x
so you may need to check your Python version with `python -V`.
Please also ensure that your system and Python version support at least TLS 1.2.
For a quick test, run the following script:
```sh
$ npx @electron/check-python-tls
```
If the script returns that your configuration is using an outdated security
protocol, use your system's package manager to update Python to the latest
version in the 2.7.x branch. Alternatively, visit https://www.python.org/downloads/
for detailed instructions.
* Python >= 3.7.
* Node.js. There are various ways to install Node. You can download
source code from [nodejs.org](https://nodejs.org) and compile it.
Doing so permits installing Node on your own home directory as a standard user.

View File

@@ -6,45 +6,12 @@ Follow the guidelines below for building **Electron itself** on macOS, for the p
## Prerequisites
* macOS >= 10.11.6
* [Xcode](https://developer.apple.com/technologies/tools/) >= 9.0.0
* macOS >= 11.6.0
* [Xcode](https://developer.apple.com/technologies/tools/). The exact version
needed depends on what branch you are building, but the latest version of
Xcode is generally a good bet for building `main`.
* [node.js](https://nodejs.org) (external)
* Python 2.7 with support for TLS 1.2
## Python
Please also ensure that your system and Python version support at least TLS 1.2.
This depends on both your version of macOS and Python. For a quick test, run:
```sh
$ npx @electron/check-python-tls
```
If the script returns that your configuration is using an outdated security
protocol, you can either update macOS to High Sierra or install a new version
of Python 2.7.x. To upgrade Python, use [Homebrew](https://brew.sh/):
```sh
$ brew install python@2 && brew link python@2 --force
```
If you are using Python as provided by Homebrew, you also need to install
the following Python modules:
* [pyobjc](https://pypi.org/project/pyobjc/#description)
You can use `pip` to install it:
```sh
$ pip install pyobjc
```
## macOS SDK
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 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.
* Python >= 3.7
## Building Electron

View File

@@ -28,7 +28,7 @@ For C++ and Python, we follow Chromium's [Coding
Style](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/styleguide/styleguide.md).
There is also a script `script/cpplint.py` to check whether all files conform.
The Python version we are using now is Python 2.7.
The Python version we are using now is Python 3.9.
The C++ code uses a lot of Chromium's abstractions and types, so it's
recommended to get acquainted with them. A good place to start is

View File

@@ -50,8 +50,8 @@ In your `api_name.h` file:
```cpp title='api_name.h'
#ifndef SHELL_BROWSER_API_ELECTRON_API_{API_NAME}_H_
#define SHELL_BROWSER_API_ELECTRON_API_{API_NAME}_H_
#ifndef ELECTRON_SHELL_BROWSER_API_ELECTRON_API_{API_NAME}_H_
#define ELECTRON_SHELL_BROWSER_API_ELECTRON_API_{API_NAME}_H_
#include "gin/handle.h"
#include "gin/wrappable.h"

View File

@@ -43,8 +43,9 @@ SRV*c:\code\symbols\*https://msdl.microsoft.com/download/symbols;SRV*c:\code\sym
## Using the symbol server in Visual Studio
![Tools -> Options](https://mdn.mozillademos.org/files/733/symbol-server-vc8express-menu.jpg)
![Symbols Settings](https://mdn.mozillademos.org/files/2497/2005_options.gif)
![Tools -> Options](../images/vs-tools-options.png)
![Symbols Settings](../images/vs-options-debugging-symbols.png)
## Troubleshooting: Symbols will not load

View File

@@ -180,7 +180,7 @@ $ git push origin my-branch
### Step 9: Opening the Pull Request
From within GitHub, opening a new pull request will present you with a template
that should be filled out. It can be found [here](../../.github/PULL_REQUEST_TEMPLATE.md).
that should be filled out. It can be found [here](https://github.com/electron/electron/blob/main/.github/PULL_REQUEST_TEMPLATE.md).
If you do not adequately complete this template, your PR may be delayed in being merged as maintainers
seek more information or clarify ambiguities.

View File

@@ -22,7 +22,7 @@ you error would be caught at commit time.
## Unit Tests
If you are not using [build-tools](https://github.com/electron/build-tools),
ensure that that name you have configured for your
ensure that the name you have configured for your
local build of Electron is one of `Testing`, `Release`, `Default`, or
you have set `process.env.ELECTRON_OUT_DIR`. Without these set, Electron will fail
to perform some pre-testing steps.

View File

@@ -1,27 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div>
<div>
<h1>Asynchronous messages</h1>
<i>Supports: Win, macOS, Linux <span>|</span> Process: Both</i>
<div>
<div>
<button id="async-msg">Ping</button>
<span id="async-reply"></span>
</div>
<p>Using <code>ipc</code> to send messages between processes asynchronously is the preferred method since it will return when finished without blocking other operations in the same process.</p>
<p>This example sends a "ping" from this process (renderer) to the main process. The main process then replies with "pong".</p>
</div>
</div>
</div>
<script>
// You can also require other files to run in this process
require('./renderer.js')
</script>
</body>
</html>

View File

@@ -1,29 +0,0 @@
const { app, BrowserWindow, ipcMain } = require('electron')
let mainWindow = null
function createWindow () {
const windowOptions = {
width: 600,
height: 400,
title: 'Asynchronous messages',
webPreferences: {
nodeIntegration: true
}
}
mainWindow = new BrowserWindow(windowOptions)
mainWindow.loadFile('index.html')
mainWindow.on('closed', () => {
mainWindow = null
})
}
app.whenReady().then(() => {
createWindow()
})
ipcMain.on('asynchronous-message', (event, arg) => {
event.sender.send('asynchronous-reply', 'pong')
})

View File

@@ -1,12 +0,0 @@
const { ipcRenderer } = require('electron')
const asyncMsgBtn = document.getElementById('async-msg')
asyncMsgBtn.addEventListener('click', () => {
ipcRenderer.send('asynchronous-message', 'ping')
})
ipcRenderer.on('asynchronous-reply', (event, arg) => {
const message = `Asynchronous message reply: ${arg}`
document.getElementById('async-reply').innerHTML = message
})

View File

@@ -1,27 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div>
<div>
<h1>Synchronous messages</h1>
<i>Supports: Win, macOS, Linux <span>|</span> Process: Both</i>
<div>
<div>
<button id="sync-msg">Ping</button>
<span id="sync-reply"></span>
</div>
<p>You can use the <code>ipc</code> module to send synchronous messages between processes as well, but note that the synchronous nature of this method means that it <b>will block</b> other operations while completing its task.</p>
<p>This example sends a synchronous message, "ping", from this process (renderer) to the main process. The main process then replies with "pong".</p>
</div>
</div>
</div>
<script>
// You can also require other files to run in this process
require('./renderer.js')
</script>
</body>
</html>

View File

@@ -1,29 +0,0 @@
const { app, BrowserWindow, ipcMain } = require('electron')
let mainWindow = null
function createWindow () {
const windowOptions = {
width: 600,
height: 400,
title: 'Synchronous Messages',
webPreferences: {
nodeIntegration: true
}
}
mainWindow = new BrowserWindow(windowOptions)
mainWindow.loadFile('index.html')
mainWindow.on('closed', () => {
mainWindow = null
})
}
app.whenReady().then(() => {
createWindow()
})
ipcMain.on('synchronous-message', (event, arg) => {
event.returnValue = 'pong'
})

View File

@@ -1,9 +0,0 @@
const { ipcRenderer } = require('electron')
const syncMsgBtn = document.getElementById('sync-msg')
syncMsgBtn.addEventListener('click', () => {
const reply = ipcRenderer.sendSync('synchronous-message', 'ping')
const message = `Synchronous message reply: ${reply}`
document.getElementById('sync-reply').innerHTML = message
})

View File

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Hello World!</title>
</head>
<body>
Title: <input id="title"/>
<button id="btn" type="button">Set</button>
<script src="./renderer.js"></script>
</body>
</html>

View File

@@ -0,0 +1,30 @@
const {app, BrowserWindow, ipcMain} = require('electron')
const path = require('path')
function createWindow () {
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
ipcMain.on('set-title', (event, title) => {
const webContents = event.sender
const win = BrowserWindow.fromWebContents(webContents)
win.setTitle(title)
})
mainWindow.loadFile('index.html')
}
app.whenReady().then(() => {
createWindow()
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})

View File

@@ -0,0 +1,5 @@
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
setTitle: (title) => ipcRenderer.send('set-title', title)
})

View File

@@ -0,0 +1,6 @@
const setButton = document.getElementById('btn')
const titleInput = document.getElementById('title')
setButton.addEventListener('click', () => {
const title = titleInput.value
window.electronAPI.setTitle(title)
});

View File

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Dialog</title>
</head>
<body>
<button type="button" id="btn">Open a File</button>
File path: <strong id="filePath"></strong>
<script src='./renderer.js'></script>
</body>
</html>

View File

@@ -0,0 +1,32 @@
const {app, BrowserWindow, ipcMain,dialog} = require('electron')
const path = require('path')
async function handleFileOpen() {
const { canceled, filePaths } = await dialog.showOpenDialog()
if (canceled) {
return
} else {
return filePaths[0]
}
}
function createWindow () {
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
mainWindow.loadFile('index.html')
}
app.whenReady().then(() => {
ipcMain.handle('dialog:openFile', handleFileOpen)
createWindow()
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})

View File

@@ -0,0 +1,5 @@
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI',{
openFile: () => ipcRenderer.invoke('dialog:openFile')
})

View File

@@ -0,0 +1,7 @@
const btn = document.getElementById('btn')
const filePathElement = document.getElementById('filePath')
btn.addEventListener('click', async () => {
const filePath = await window.electronAPI.openFile()
filePathElement.innerText = filePath
})

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Menu Counter</title>
</head>
<body>
Current value: <strong id="counter">0</strong>
<script src="./renderer.js"></script>
</body>
</html>

View File

@@ -0,0 +1,48 @@
const {app, BrowserWindow, Menu} = require('electron')
const path = require('path')
function createWindow () {
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
const menu = Menu.buildFromTemplate([
{
label: app.name,
submenu: [
{
click: () => mainWindow.webContents.send('update-counter', 1),
label: 'Increment',
},
{
click: () => mainWindow.webContents.send('update-counter', -1),
label: 'Decrement',
}
]
}
])
Menu.setApplicationMenu(menu)
mainWindow.loadFile('index.html')
// Open the DevTools.
mainWindow.webContents.openDevTools()
}
app.whenReady().then(() => {
ipcMain.on('counter-value', (_event, value) => {
console.log(value) // will print value to Node console
})
createWindow()
app.on('activate', function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') app.quit()
})

View File

@@ -0,0 +1,5 @@
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
handleCounter: (callback) => ipcRenderer.on('update-counter', callback)
})

View File

@@ -0,0 +1,8 @@
const counter = document.getElementById('counter')
window.electronAPI.handleCounter((event, value) => {
const oldValue = Number(counter.innerText)
const newValue = oldValue + value
counter.innerText = newValue
event.sender.send('counter-value', newValue)
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -56,7 +56,7 @@ will then be your distribution to deliver to users.
### With an app source code archive
Instead of from shipping your app by copying all of its source files, you can
Instead of 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.

View File

@@ -58,8 +58,6 @@ To run your tests:
$ npx wdio run wdio.conf.js
```
[chrome-driver]: https://sites.google.com/chromium.org/driver/
### With Selenium
[Selenium](https://www.selenium.dev/) is a web automation framework that
@@ -116,6 +114,142 @@ driver.wait(() => {
driver.quit()
```
## Using Playwright
[Microsoft Playwright](https://playwright.dev) is an end-to-end testing framework built
using browser-specific remote debugging protocols, similar to the [Puppeteer] headless
Node.js API but geared towards end-to-end testing. Playwright has experimental Electron
support via Electron's support for the [Chrome DevTools Protocol] (CDP).
### Install dependencies
You can install Playwright through your preferred Node.js package manager. The Playwright team
recommends using the `PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD` environment variable to avoid
unnecessary browser downloads when testing an Electron app.
```sh npm2yarn
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install --save-dev playwright
```
Playwright also comes with its own test runner, Playwright Test, which is built for end-to-end
testing. You can also install it as a dev dependency in your project:
```sh npm2yarn
npm install --save-dev @playwright/test
```
:::caution Dependencies
This tutorial was written `playwright@1.16.3` and `@playwright/test@1.16.3`. Check out
[Playwright's releases][playwright-releases] page to learn about
changes that might affect the code below.
:::
:::info Using third-party test runners
If you're interested in using an alternative test runner (e.g. Jest or Mocha), check out
Playwright's [Third-Party Test Runner][playwright-test-runners] guide.
:::
### Write your tests
Playwright launches your app in development mode through the `_electron.launch` API.
To point this API to your Electron app, you can pass the path to your main process
entry point (here, it is `main.js`).
```js {5}
const { _electron: electron } = require('playwright')
const { test } = require('@playwright/test')
test('launch app', async () => {
const electronApp = await electron.launch({ args: ['main.js'] })
// close app
await electronApp.close()
})
```
After that, you will access to an instance of Playwright's `ElectronApp` class. This
is a powerful class that has access to main process modules for example:
```js {6-11}
const { _electron: electron } = require('playwright')
const { test } = require('@playwright/test')
test('get isPackaged', async () => {
const electronApp = await electron.launch({ args: ['main.js'] })
const isPackaged = await electronApp.evaluate(async ({ app }) => {
// This runs in Electron's main process, parameter here is always
// the result of the require('electron') in the main app script.
return app.isPackaged
})
console.log(isPackaged) // false (because we're in development mode)
// close app
await electronApp.close()
})
```
It can also create individual [Page][playwright-page] objects from Electron BrowserWindow instances.
For example, to grab the first BrowserWindow and save a screenshot:
```js {6-7}
const { _electron: electron } = require('playwright')
const { test } = require('@playwright/test')
test('save screenshot', async () => {
const electronApp = await electron.launch({ args: ['main.js'] })
const window = await electronApp.firstWindow()
await window.screenshot({ path: 'intro.png' })
// close app
await electronApp.close()
})
```
Putting all this together using the PlayWright Test runner, let's create a `example.spec.js`
test file with a single test and assertion:
```js title='example.spec.js'
const { _electron: electron } = require('playwright')
const { test, expect } = require('@playwright/test')
test('example test', async () => {
const electronApp = await electron.launch({ args: ['.'] })
const isPackaged = await electronApp.evaluate(async ({ app }) => {
// This runs in Electron's main process, parameter here is always
// the result of the require('electron') in the main app script.
return app.isPackaged;
});
expect(isPackaged).toBe(false);
// Wait for the first BrowserWindow to open
// and return its Page object
const window = await electronApp.firstWindow()
await window.screenshot({ path: 'intro.png' })
// close app
await electronApp.close()
});
```
Then, run Playwright Test using `npx playwright test`. You should see the test pass in your
console, and have an `intro.png` screenshot on your filesystem.
```console
☁ $ npx playwright test
Running 1 test using 1 worker
✓ example.spec.js:4:1 example test (1s)
```
:::info
Playwright Test will automatically run any files matching the `.*(test|spec)\.(js|ts|mjs)` regex.
You can customize this match in the [Playwright Test configuration options][playwright-test-config].
:::
:::tip Further reading
Check out Playwright's documentation for the full [Electron][playwright-electron]
and [ElectronApplication][playwright-electronapplication] class APIs.
:::
## Using a custom test driver
It's also possible to write your own custom driver using Node.js' built-in IPC-over-STDIO.
@@ -263,3 +397,13 @@ test.after.always('cleanup', async t => {
await app.stop()
})
```
[chrome-driver]: https://sites.google.com/chromium.org/driver/
[Puppeteer]: https://github.com/puppeteer/puppeteer
[playwright-electron]: https://playwright.dev/docs/api/class-electron/
[playwright-electronapplication]: https://playwright.dev/docs/api/class-electronapplication
[playwright-page]: https://playwright.dev/docs/api/class-page
[playwright-releases]: https://github.com/microsoft/playwright/releases
[playwright-test-config]: https://playwright.dev/docs/api/class-testconfig#test-config-test-match
[playwright-test-runners]: https://playwright.dev/docs/test-runners/
[Chrome DevTools Protocol]: https://chromedevtools.github.io/devtools-protocol/

View File

@@ -26,4 +26,5 @@ Special notes:
| 14.0.0 | -- | 2021-May-27 | 2021-Aug-31 | M93 | v14.17 |
| 15.0.0 | 2021-Jul-20 | 2021-Sep-01 | 2021-Sep-21 | M94 | v16.5 |
| 16.0.0 | 2021-Sep-23 | 2021-Oct-20 | 2021-Nov-16 | M96 | v16.9 |
| 17.0.0 | 2021-Nov-18 | 2022-Jan-06 | 2022-Feb-01 | M98 | TBD |
| 17.0.0 | 2021-Nov-18 | 2022-Jan-06 | 2022-Feb-01 | M98 | v16.13 |
| 18.0.0 | 2022-Feb-03 | 2022-Mar-03 | 2022-Mar-29 | M100 | TBD |

View File

@@ -1,4 +1,11 @@
# In-App Purchases (macOS)
---
title: In-App Purchases
description: Add in-app purchases to your Mac App Store (MAS) application
slug: in-app-purchases
hide_title: true
---
# In-App Purchases
## Preparing

View File

@@ -91,7 +91,7 @@ The above configuration will download from URLs such as
`https://npm.taobao.org/mirrors/electron/8.0.0/electron-v8.0.0-linux-x64.zip`.
If your mirror serves artifacts with different checksums to the official
Electron release you may have to set `ELECTRON_USE_REMOTE_CHECKSUMS=1` to
Electron release you may have to set `electron_use_remote_checksums=1` to
force Electron to use the remote `SHASUMS256.txt` file to verify the checksum
instead of the embedded checksums.

View File

@@ -56,4 +56,4 @@ problem. If not, feel free to fill out our bug report template and submit a new
[comic]: https://www.google.com/googlebooks/chrome/
[fiddle]: https://electronjs.org/fiddle
[issue-tracker]: https://github.com/electron/electron/issues
[discord]: https://discord.gg/electron
[discord]: https://discord.gg/electronjs

571
docs/tutorial/ipc.md Normal file
View File

@@ -0,0 +1,571 @@
---
title: Inter-Process Communication
description: Use the ipcMain and ipcRenderer modules to communicate between Electron processes
slug: ipc
hide_title: false
---
# Inter-Process Communication
Inter-process communication (IPC) is a key part of building feature-rich desktop applications
in Electron. Because the main and renderer processes have different responsibilities in
Electron's process model, IPC is the only way to perform many common tasks, such as calling a
native API from your UI or triggering changes in your web contents from native menus.
## IPC channels
In Electron, processes communicate by passing messages through developer-defined "channels"
with the [`ipcMain`] and [`ipcRenderer`] modules. These channels are
**arbitrary** (you can name them anything you want) and **bidirectional** (you can use the
same channel name for both modules).
In this guide, we'll be going over some fundamental IPC patterns with concrete examples that
you can use as a reference for your app code.
## Understanding context-isolated processes
Before proceeding to implementation details, you should be familiar with the idea of using a
[preload script] to import Node.js and Electron modules in a context-isolated renderer process.
* For a full overview of Electron's process model, you can read the [process model docs].
* For a primer into exposing APIs from your preload script using the `contextBridge` module, check
out the [context isolation tutorial].
## Pattern 1: Renderer to main (one-way)
To fire a one-way IPC message from a renderer process to the main process, you can use the
[`ipcRenderer.send`] API to send a message that is then received by the [`ipcMain.on`] API.
You usually use this pattern to call a main process API from your web contents. We'll demonstrate
this pattern by creating a simple app that can programmatically change its window title.
For this demo, you'll need to add code to your main process, your renderer process, and a preload
script. The full code is below, but we'll be explaining each file individually in the following
sections.
```fiddle docs/fiddles/ipc/pattern-1
```
### 1. Listen for events with `ipcMain.on`
In the main process, set an IPC listener on the `set-title` channel with the `ipcMain.on` API:
```javascript {6-10,22} title='main.js (Main Process)'
const {app, BrowserWindow, ipcMain} = require('electron')
const path = require('path')
//...
function handleSetTitle (event, title) {
const webContents = event.sender
const win = BrowserWindow.fromWebContents(webContents)
win.setTitle(title)
}
function createWindow () {
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
mainWindow.loadFile('index.html')
}
app.whenReady().then(() => {
ipcMain.on('set-title', handleSetTitle)
createWindow()
}
//...
```
The above `handleSetTitle` callback has two parameters: an [IpcMainEvent] structure and a
`title` string. Whenever a message comes through the `set-title` channel, this function will
find the BrowserWindow instance attached to the message sender and use the `win.setTitle`
API on it.
:::info
Make sure you're loading the `index.html` and `preload.js` entry points for the following steps!
:::
### 2. Expose `ipcRenderer.send` via preload
To send messages to the listener created above, you can use the `ipcRenderer.send` API.
By default, the renderer process has no Node.js or Electron module access. As an app developer,
you need to choose which APIs to expose from your preload script using the `contextBridge` API.
In your preload script, add the following code, which will expose a global `window.electronAPI`
variable to your renderer process.
```javascript title='preload.js (Preload Script)'
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
setTitle: (title) => ipcRenderer.send('set-title', title)
})
```
At this point, you'll be able to use the `window.electronAPI.setTitle()` function in the renderer
process.
:::caution Security warning
We don't directly expose the whole `ipcRenderer.send` API for [security reasons]. Make sure to
limit the renderer's access to Electron APIs as much as possible.
:::
### 3. Build the renderer process UI
In our BrowserWindow's loaded HTML file, add a basic user interface consisting of a text input
and a button:
```html {11-12} title='index.html'
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Hello World!</title>
</head>
<body>
Title: <input id="title"/>
<button id="btn" type="button">Set</button>
<script src="./renderer.js"></script>
</body>
</html>
```
To make these elements interactive, we'll be adding a few lines of code in the imported
`renderer.js` file that leverages the `window.electronAPI` functionality exposed from the preload
script:
```javascript title='renderer.js (Renderer Process)'
const setButton = document.getElementById('btn')
const titleInput = document.getElementById('title')
setButton.addEventListener('click', () => {
const title = titleInput.value
window.electronAPI.setTitle(title)
});
```
At this point, your demo should be fully functional. Try using the input field and see what happens
to your BrowserWindow title!
## Pattern 2: Renderer to main (two-way)
A common application for two-way IPC is calling a main process module from your renderer process
code and waiting for a result. This can be done by using [`ipcRenderer.invoke`] paired with
[`ipcMain.handle`].
In the following example, we'll be opening a native file dialog from the renderer process and
returning the selected file's path.
For this demo, you'll need to add code to your main process, your renderer process, and a preload
script. The full code is below, but we'll be explaining each file individually in the following
sections.
```fiddle docs/fiddles/ipc/pattern-2
```
### 1. Listen for events with `ipcMain.handle`
In the main process, we'll be creating a `handleFileOpen()` function that calls
`dialog.showOpenDialog` and returns the value of the file path selected by the user. This function
is used as a callback whenever an `ipcRender.invoke` message is sent through the `dialog:openFile`
channel from the renderer process. The return value is then returned as a Promise to the original
`invoke` call.
:::caution A word on error handling
Errors thrown through `handle` in the main process are not transparent as they
are serialized and only the `message` property from the original error is
provided to the renderer process. Please refer to
[#24427](https://github.com/electron/electron/issues/24427) for details.
:::
```javascript {6-13,25} title='main.js (Main Process)'
const { BrowserWindow, dialog, ipcMain } = require('electron')
const path = require('path')
//...
async function handleFileOpen() {
const { canceled, filePaths } = await dialog.showOpenDialog()
if (canceled) {
return
} else {
return filePaths[0]
}
}
function createWindow () {
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
mainWindow.loadFile('index.html')
}
app.whenReady(() => {
ipcMain.handle('dialog:openFile', handleFileOpen)
createWindow()
})
//...
```
:::tip on channel names
The `dialog:` prefix on the IPC channel name has no effect on the code. It only serves
as a namespace that helps with code readability.
:::
:::info
Make sure you're loading the `index.html` and `preload.js` entry points for the following steps!
:::
### 2. Expose `ipcRenderer.invoke` via preload
In the preload script, we expose a one-line `openFile` function that calls and returns the value of
`ipcRenderer.invoke('dialog:openFile')`. We'll be using this API in the next step to call the
native dialog from our renderer's user interface.
```javascript title='preload.js (Preload Script)'
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
openFile: () => ipcRenderer.invoke('dialog:openFile')
})
```
:::caution Security warning
We don't directly expose the whole `ipcRenderer.invoke` API for [security reasons]. Make sure to
limit the renderer's access to Electron APIs as much as possible.
:::
### 3. Build the renderer process UI
Finally, let's build the HTML file that we load into our BrowserWindow.
```html {10-11} title='index.html'
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Dialog</title>
</head>
<body>
<button type="button" id="btn">Open a File</button>
File path: <strong id="filePath"></strong>
<script src='./renderer.js'></script>
</body>
</html>
```
The UI consists of a single `#btn` button element that will be used to trigger our preload API, and
a `#filePath` element that will be used to display the path of the selected file. Making these
pieces work will take a few lines of code in the renderer process script:
```javascript title='renderer.js (Renderer Process)'
const btn = document.getElementById('btn')
const filePathElement = document.getElementById('filePath')
btn.addEventListener('click', async () => {
const filePath = await window.electronAPI.openFile()
filePathElement.innerText = filePath
})
```
In the above snippet, we listen for clicks on the `#btn` button, and call our
`window.electronAPI.openFile()` API to activate the native Open File dialog. We then display the
selected file path in the `#filePath` element.
### Note: legacy approaches
The `ipcRenderer.invoke` API was added in Electron 7 as a developer-friendly way to tackle two-way
IPC from the renderer process. However, there exist a couple alternative approaches to this IPC
pattern.
:::warning Avoid legacy approaches if possible
We recommend using `ipcRenderer.invoke` whenever possible. The following two-way renderer-to-main
patterns are documented for historical purposes.
:::
:::info
For the following examples, we're calling `ipcRenderer` directly from the preload script to keep
the code samples small.
:::
#### Using `ipcRenderer.send`
The `ipcRenderer.send` API that we used for single-way communication can also be leveraged to
perform two-way communication. This was the recommended way for asynchronous two-way communication
via IPC prior to Electron 7.
```javascript title='preload.js (Preload Script)'
// You can also put expose this code to the renderer
// process with the `contextBridge` API
const { ipcRenderer } = require('electron')
ipcRenderer.on('asynchronous-reply', (_event, arg) => {
console.log(arg) // prints "pong" in the DevTools console
})
ipcRenderer.send('asynchronous-message', 'ping')
```
```javascript title='main.js (Main Process)'
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg) // prints "ping" in the Node console
// works like `send`, but returning a message back
// to the renderer that sent the original message
event.reply('asynchronous-reply', 'pong')
})
```
There are a couple downsides to this approach:
* You need to set up a second `ipcRenderer.on` listener to handle the response in the renderer
process. With `invoke`, you get the response value returned as a Promise to the original API call.
* There's no obvious way to pair the `asynchronous-reply` message to the original
`asynchronous-message` one. If you have very frequent messages going back and forth through these
channels, you would need to add additional app code to track each call and response individually.
#### Using `ipcRenderer.sendSync`
The `ipcRenderer.sendSync` API sends a message to the main process and waits _synchronously_ for a
response.
```javascript title='main.js (Main Process)'
const { ipcMain } = require('electron')
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg) // prints "ping" in the Node console
event.returnValue = 'pong'
})
```
```javascript title='preload.js (Preload Script)'
// You can also put expose this code to the renderer
// process with the `contextBridge` API
const { ipcRenderer } = require('electron')
const result = ipcRenderer.sendSync('synchronous-message', 'ping')
console.log(result) // prints "pong" in the DevTools console
```
The structure of this code is very similar to the `invoke` model, but we recommend
**avoiding this API** for performance reasons. Its synchronous nature means that it'll block the
renderer process until a reply is received.
## Pattern 3: Main to renderer
When sending a message from the main process to a renderer process, you need to specify which
renderer is receiving the message. Messages need to be sent to a renderer process
via its [`WebContents`] instance. This WebContents instance contains a [`send`][webcontents-send] method
that can be used in the same way as `ipcRenderer.send`.
To demonstrate this pattern, we'll be building a number counter controlled by the native operating
system menu.
For this demo, you'll need to add code to your main process, your renderer process, and a preload
script. The full code is below, but we'll be explaining each file individually in the following
sections.
```fiddle docs/fiddles/ipc/pattern-3
```
### 1. Send messages with the `webContents` module
For this demo, we'll need to first build a custom menu in the main process using Electron's `Menu`
module that uses the `webContents.send` API to send an IPC message from the main process to the
target renderer.
```javascript {11-26} title='main.js (Main Process)'
const {app, BrowserWindow, Menu, ipcMain} = require('electron')
const path = require('path')
function createWindow () {
const mainWindow = new BrowserWindow({
webPreferences: {
preload: path.join(__dirname, 'preload.js')
}
})
const menu = Menu.buildFromTemplate([
{
label: app.name,
submenu: [
{
click: () => mainWindow.webContents.send('update-counter', 1),
label: 'Increment',
},
{
click: () => mainWindow.webContents.send('update-counter', -1),
label: 'Decrement',
}
]
}
])
Menu.setApplicationMenu(menu)
mainWindow.loadFile('index.html')
}
//...
```
For the purposes of the tutorial, it's important to note that the `click` handler
sends a message (either `1` or `-1`) to the renderer process through the `counter` channel.
```javascript
click: () => mainWindow.webContents.send('update-counter', -1)
```
:::info
Make sure you're loading the `index.html` and `preload.js` entry points for the following steps!
:::
### 2. Expose `ipcRenderer.on` via preload
Like in the previous renderer-to-main example, we use the `contextBridge` and `ipcRenderer`
modules in the preload script to expose IPC functionality to the renderer process:
```javascript title='preload.js (Preload Script)'
const { contextBridge, ipcRenderer } = require('electron')
contextBridge.exposeInMainWorld('electronAPI', {
onUpdateCounter: (callback) => ipcRenderer.on('update-counter', callback)
})
```
After loading the preload script, your renderer process should have access to the
`window.electronAPI.onUpdateCounter()` listener function.
:::caution Security warning
We don't directly expose the whole `ipcRenderer.on` API for [security reasons]. Make sure to
limit the renderer's access to Electron APIs as much as possible.
:::
:::info
In the case of this minimal example, you can call `ipcRenderer.on` directly in the preload script
rather than exposing it over the context bridge.
```javascript title='preload.js (Preload Script)'
const { ipcRenderer } = require('electron')
window.addEventListener('DOMContentLoaded', () => {
const counter = document.getElementById('counter')
ipcRenderer.on('update-counter', (_event, value) => {
const oldValue = Number(counter.innerText)
const newValue = oldValue + value
counter.innerText = newValue
})
})
```
However, this approach has limited flexibility compared to exposing your preload APIs
over the context bridge, since your listener can't directly interact with your renderer code.
:::
### 3. Build the renderer process UI
To tie it all together, we'll create an interface in the loaded HTML file that contains a
`#counter` element that we'll use to display the values:
```html {10} title='index.html'
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Menu Counter</title>
</head>
<body>
Current value: <strong id="counter">0</strong>
<script src="./renderer.js"></script>
</body>
</html>
```
Finally, to make the values update in the HTML document, we'll add a few lines of DOM manipulation
so that the value of the `#counter` element is updated whenever we fire an `update-counter` event.
```javascript title='renderer.js (Renderer Process)'
const counter = document.getElementById('counter')
window.electronAPI.onUpdateCounter((_event, value) => {
const oldValue = Number(counter.innerText)
const newValue = oldValue + value
counter.innerText = newValue
})
```
In the above code, we're passing in a callback to the `window.electronAPI.onUpdateCounter` function
exposed from our preload script. The second `value` parameter corresponds to the `1` or `-1` we
were passing in from the `webContents.send` call from the native menu.
### Optional: returning a reply
There's no equivalent for `ipcRenderer.invoke` for main-to-renderer IPC. Instead, you can
send a reply back to the main process from within the `ipcRenderer.on` callback.
We can demonstrate this with slight modifications to the code from the previous example. In the
renderer process, use the `event` parameter to send a reply back to the main process through the
`counter-value` channel.
```javascript title='renderer.js (Renderer Process)'
const counter = document.getElementById('counter')
window.electronAPI.onUpdateCounter((event, value) => {
const oldValue = Number(counter.innerText)
const newValue = oldValue + value
counter.innerText = newValue
event.sender.send('counter-value', newValue)
})
```
In the main process, listen for `counter-value` events and handle them appropriately.
```javascript title='main.js (Main Process)'
//...
ipcMain.on('counter-value', (_event, value) => {
console.log(value) // will print value to Node console
})
//...
```
## Pattern 4: Renderer to renderer
There's no direct way to send messages between renderer processes in Electron using the `ipcMain`
and `ipcRenderer` modules. To achieve this, you have two options:
* Use the main process as a message broker between renderers. This would involve sending a message
from one renderer to the main process, which would forward the message to the other renderer.
* Pass a [MessagePort] from the main process to both renderers. This will allow direct communication
between renderers after the initial setup.
## Object serialization
Electron's IPC implementation uses the HTML standard
[Structured Clone Algorithm][sca] to serialize objects passed between processes, meaning that
only certain types of objects can be passed through IPC channels.
In particular, DOM objects (e.g. `Element`, `Location` and `DOMMatrix`), Node.js objects
backed by C++ classes (e.g. `process.env`, some members of `Stream`), and Electron objects
backed by C++ classes (e.g. `WebContents`, `BrowserWindow` and `WebFrame`) are not serializable
with Structured Clone.
[context isolation tutorial]: context-isolation.md
[security reasons]: ./context-isolation.md#security-considerations
[`ipcMain`]: ../api/ipc-main.md
[`ipcMain.handle`]: ../api/ipc-main.md#ipcmainhandlechannel-listener
[`ipcMain.on`]: ../api/ipc-main.md
[IpcMainEvent]: ../api/structures/ipc-main-event.md
[`ipcRenderer`]: ../api/ipc-renderer.md
[`ipcRenderer.invoke`]: ../api/ipc-renderer.md#ipcrendererinvokechannel-args
[`ipcRenderer.send`]: ../api/ipc-renderer.md
[MessagePort]: ./message-ports.md
[preload script]: process-model.md#preload-scripts
[process model docs]: process-model.md
[sca]: https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
[`WebContents`]: ../api/web-contents.md
[webcontents-send]: ../api/web-contents.md#contentssendchannel-args

View File

@@ -1,11 +1,11 @@
---
title: Launching Your Electron App From a URL In Another App
description: This guide will take you through the process of setting your electron app as the default handler for a specific protocol.
title: Deep Links
description: Set your Electron app as the default handler for a specific protocol.
slug: launch-app-from-url-in-another-app
hide_title: true
---
# Launching Your Electron App From A URL In Another App
# Deep Links
## Overview

View File

@@ -1,4 +1,11 @@
# Desktop Launcher Actions (Linux)
---
title: Desktop Launcher Actions
description: Add actions to the system launcher on Linux environments.
slug: linux-desktop-actions
hide_title: true
---
# Desktop Launcher Actions
## Overview
@@ -42,4 +49,4 @@ parameters. You can find them in your application in the global variable
[unity-launcher]: https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles#Adding_shortcuts_to_a_launcher
[audacious-launcher]: https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles?action=AttachFile&do=get&target=shortcuts.png
[spec]: https://specifications.freedesktop.org/desktop-entry-spec/1.1/ar01s11.html
[spec]: https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html

View File

@@ -1,4 +1,11 @@
# Dock (macOS)
---
title: Dock
description: Configure your application's Dock presence on macOS.
slug: macos-dock
hide_title: true
---
# Dock
Electron has APIs to configure the app's icon in the macOS Dock. A macOS-only
API exists to create a custom dock menu, but Electron also uses the app dock
@@ -16,12 +23,6 @@ To set your custom dock menu, you need to use the
[`app.dock.setMenu`](../api/dock.md#docksetmenumenu-macos) API,
which is only available on macOS.
## Example
Starting with a working application from the
[Quick Start Guide](quick-start.md), update the `main.js` file with the
following lines:
```javascript fiddle='docs/fiddles/features/macos-dock-menu'
const { app, BrowserWindow, Menu } = require('electron')

View File

@@ -146,7 +146,7 @@ desktop environment that follows [Desktop Notifications
Specification][notification-spec], including Cinnamon, Enlightenment, Unity,
GNOME, KDE.
[notification-spec]: https://developer.gnome.org/notification-spec/
[notification-spec]: https://developer-old.gnome.org/notification-spec/
[app-user-model-id]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx
[set-app-user-model-id]: ../api/app.md#appsetappusermodelidid-windows
[squirrel-events]: https://github.com/electron/windows-installer/blob/master/README.md#handling-squirrel-events

View File

@@ -1,3 +1,11 @@
---
title: Performance
description: A set of guidelines for building performant Electron apps
slug: performance
hide_title: true
toc_max_heading_level: 3
---
# Performance
Developers frequently ask about strategies to optimize the performance of
@@ -49,7 +57,7 @@ at once, consider the [Chrome Tracing](https://www.chromium.org/developers/how-t
* [Get Started With Analyzing Runtime Performance][chrome-devtools-tutorial]
* [Talk: "Visual Studio Code - The First Second"][vscode-first-second]
## Checklist
## Checklist: Performance recommendations
Chances are that your app could be a little leaner, faster, and generally less
resource-hungry if you attempt these steps.
@@ -62,7 +70,7 @@ resource-hungry if you attempt these steps.
6. [Unnecessary or blocking network requests](#6-unnecessary-or-blocking-network-requests)
7. [Bundle your code](#7-bundle-your-code)
## 1) Carelessly including modules
### 1. Carelessly including modules
Before adding a Node.js module to your application, examine said module. How
many dependencies does that module include? What kind of resources does
@@ -70,7 +78,7 @@ it need to simply be called in a `require()` statement? You might find
that the module with the most downloads on the NPM package registry or the most stars on GitHub
is not in fact the leanest or smallest one available.
### Why?
#### Why?
The reasoning behind this recommendation is best illustrated with a real-world
example. During the early days of Electron, reliable detection of network
@@ -99,7 +107,7 @@ running Linux might be bad news for your app's performance. In this particular
example, the correct solution was to use no module at all, and to instead use
connectivity checks included in later versions of Chromium.
### How?
#### How?
When considering a module, we recommend that you check:
@@ -128,7 +136,7 @@ In this example, on the author's machine, we saw that loading `request` took
almost half a second, whereas `node-fetch` took dramatically less memory
and less than 50ms.
## 2) Loading and running code too soon
### 2. Loading and running code too soon
If you have expensive setup operations, consider deferring those. Inspect all
the work being executed right after the application starts. Instead of firing
@@ -141,7 +149,7 @@ using the same strategy _and_ are using sizable modules that you do not
immediately need, apply the same strategy and defer loading to a more
opportune time.
### Why?
#### Why?
Loading modules is a surprisingly expensive operation, especially on Windows.
When your app starts, it should not make users wait for operations that are
@@ -157,14 +165,14 @@ immediately display the file to you without any code highlighting, prioritizing
your ability to interact with the text. Once it has done that work, it will
move on to code highlighting.
### How?
#### How?
Let's consider an example and assume that your application is parsing files
in the fictitious `.foo` format. In order to do that, it relies on the
equally fictitious `foo-parser` module. In traditional Node.js development,
you might write code that eagerly loads dependencies:
```js
```js title='parser.js'
const fs = require('fs')
const fooParser = require('foo-parser')
@@ -187,7 +195,7 @@ In the above example, we're doing a lot of work that's being executed as soon
as the file is loaded. Do we need to get parsed files right away? Could we
do this work a little later, when `getParsedFiles()` is actually called?
```js
```js title='parser.js'
// "fs" is likely already being loaded, so the `require()` call is cheap
const fs = require('fs')
@@ -223,7 +231,7 @@ module.exports = { parser }
In short, allocate resources "just in time" rather than allocating them all
when your app starts.
## 3) Blocking the main process
### 3. Blocking the main process
Electron's main process (sometimes called "browser process") is special: It is
the parent process to all your app's other processes and the primary process
@@ -235,7 +243,7 @@ Under no circumstances should you block this process and the UI thread with
long-running operations. Blocking the UI thread means that your entire app
will freeze until the main process is ready to continue processing.
### Why?
#### Why?
The main process and its UI thread are essentially the control tower for major
operations inside your app. When the operating system tells your app about a
@@ -246,31 +254,31 @@ the GPU process about that once again going through the main process.
Electron and Chromium are careful to put heavy disk I/O and CPU-bound operations
onto new threads to avoid blocking the UI thread. You should do the same.
### How?
#### How?
Electron's powerful multi-process architecture stands ready to assist you with
your long-running tasks, but also includes a small number of performance traps.
1) For long running CPU-heavy tasks, make use of
1. For long running CPU-heavy tasks, make use of
[worker threads][worker-threads], consider moving them to the BrowserWindow, or
(as a last resort) spawn a dedicated process.
2) Avoid using the synchronous IPC and the `remote` module as much as possible.
While there are legitimate use cases, it is far too easy to unknowingly block
the UI thread using the `remote` module.
2. Avoid using the synchronous IPC and the `@electron/remote` module as much
as possible. While there are legitimate use cases, it is far too easy to
unknowingly block the UI thread.
3) Avoid using blocking I/O operations in the main process. In short, whenever
3. Avoid using blocking I/O operations in the main process. In short, whenever
core Node.js modules (like `fs` or `child_process`) offer a synchronous or an
asynchronous version, you should prefer the asynchronous and non-blocking
variant.
## 4) Blocking the renderer process
### 4. Blocking the renderer process
Since Electron ships with a current version of Chrome, you can make use of the
latest and greatest features the Web Platform offers to defer or offload heavy
operations in a way that keeps your app smooth and responsive.
### Why?
#### Why?
Your app probably has a lot of JavaScript to run in the renderer process. The
trick is to execute operations as quickly as possible without taking away
@@ -280,7 +288,7 @@ at 60fps.
Orchestrating the flow of operations in your renderer's code is
particularly useful if users complain about your app sometimes "stuttering".
### How?
#### How?
Generally speaking, all advice for building performant web apps for modern
browsers apply to Electron's renderers, too. The two primary tools at your
@@ -300,14 +308,14 @@ some caveats to consider  consult Electron's
for any operation that requires a lot of CPU power for an extended period of
time.
## 5) Unnecessary polyfills
### 5. Unnecessary polyfills
One of Electron's great benefits is that you know exactly which engine will
parse your JavaScript, HTML, and CSS. If you're re-purposing code that was
written for the web at large, make sure to not polyfill features included in
Electron.
### Why?
#### Why?
When building a web application for today's Internet, the oldest environments
dictate what features you can and cannot use. Even though Electron supports
@@ -323,7 +331,7 @@ It is rare for a JavaScript-based polyfill to be faster than the equivalent
native feature in Electron. Do not slow down your Electron app by shipping your
own version of standard web platform features.
### How?
#### How?
Operate under the assumption that polyfills in current versions of Electron
are unnecessary. If you have doubts, check [caniuse.com](https://caniuse.com/)
@@ -338,12 +346,12 @@ If you're using a transpiler/compiler like TypeScript, examine its configuration
and ensure that you're targeting the latest ECMAScript version supported by
Electron.
## 6) Unnecessary or blocking network requests
### 6. Unnecessary or blocking network requests
Avoid fetching rarely changing resources from the internet if they could easily
be bundled with your application.
### Why?
#### Why?
Many users of Electron start with an entirely web-based app that they're
turning into a desktop application. As web developers, we are used to loading
@@ -360,7 +368,7 @@ will take care of the rest.
When building an Electron app, your users are better served if you download
the fonts and include them in your app's bundle.
### How?
#### How?
In an ideal world, your application wouldn't need the network to operate at
all. To get there, you must understand what resources your app is downloading
@@ -387,21 +395,21 @@ without shipping an application update is a powerful strategy. For advanced
control over how resources are being loaded, consider investing in
[Service Workers][service-workers].
## 7) Bundle your code
### 7. Bundle your code
As already pointed out in
"[Loading and running code too soon](#2-loading-and-running-code-too-soon)",
calling `require()` is an expensive operation. If you are able to do so,
bundle your application's code into a single file.
### Why?
#### Why?
Modern JavaScript development usually involves many files and modules. While
that's perfectly fine for developing with Electron, we heavily recommend that
you bundle all your code into one single file to ensure that the overhead
included in calling `require()` is only paid once when your application loads.
### How?
#### How?
There are numerous JavaScript bundlers out there and we know better than to
anger the community by recommending one tool over another. We do however

View File

@@ -1,4 +1,11 @@
# Taskbar Progress Bar (Windows & macOS)
---
title: Progress Bars
description: Provide progress information to users outside of a BrowserWindow.
slug: progress-bar
hide_title: true
---
# Progress Bars
## Overview

View File

@@ -119,7 +119,7 @@ of your project.
Before we can create a window for our application, we need to create the content that
will be loaded into it. In Electron, each window displays web contents that can be loaded
from either from a local HTML file or a remote URL.
from either a local HTML file or a remote URL.
For this tutorial, you will be doing the former. Create an `index.html` file in the root
folder of your project:
@@ -463,46 +463,46 @@ The fastest way to distribute your newly created app is using
1. Add Electron Forge as a development dependency of your app, and use its `import` command to set up
Forge's scaffolding:
```sh npm2yarn
npm install --save-dev @electron-forge/cli
npx electron-forge import
```sh npm2yarn
npm install --save-dev @electron-forge/cli
npx electron-forge import
✔ Checking your system
✔ Initializing Git Repository
✔ Writing modified package.json file
✔ Installing dependencies
✔ Writing modified package.json file
✔ Fixing .gitignore
✔ Checking your system
✔ Initializing Git Repository
✔ Writing modified package.json file
✔ Installing dependencies
✔ Writing modified package.json file
✔ Fixing .gitignore
We have ATTEMPTED to convert your app to be in a format that electron-forge understands.
We have ATTEMPTED to convert your app to be in a format that electron-forge understands.
Thanks for using "electron-forge"!!!
```
Thanks for using "electron-forge"!!!
```
1. Create a distributable using Forge's `make` command:
2. Create a distributable using Forge's `make` command:
```sh npm2yarn
npm run make
```sh npm2yarn
npm run make
> my-electron-app@1.0.0 make /my-electron-app
> electron-forge make
> my-electron-app@1.0.0 make /my-electron-app
> electron-forge make
✔ Checking your system
✔ Resolving Forge Config
We need to package your application before we can make it
✔ Preparing to Package Application for arch: x64
✔ Preparing native dependencies
✔ Packaging Application
Making for the following targets: zip
✔ Making for target: zip - On platform: darwin - For arch: x64
```
✔ Checking your system
✔ Resolving Forge Config
We need to package your application before we can make it
✔ Preparing to Package Application for arch: x64
✔ Preparing native dependencies
✔ Packaging Application
Making for the following targets: zip
✔ Making for target: zip - On platform: darwin - For arch: x64
```
Electron Forge creates the `out` folder where your package will be located:
Electron Forge creates the `out` folder where your package will be located:
```plain
// Example for macOS
out/
├── out/make/zip/darwin/x64/my-electron-app-darwin-x64-1.0.0.zip
├── ...
└── out/my-electron-app-darwin-x64/my-electron-app.app/Contents/MacOS/my-electron-app
```
```plain
// Example for macOS
out/
├── out/make/zip/darwin/x64/my-electron-app-darwin-x64-1.0.0.zip
├── ...
└── out/my-electron-app-darwin-x64/my-electron-app.app/Contents/MacOS/my-electron-app
```

View File

@@ -1,4 +1,11 @@
# Recent Documents (Windows & macOS)
---
title: Recent Documents
description: Provide a list of recent documents via Windows JumpList or macOS Dock
slug: recent-documents
hide_title: true
---
# Recent Documents
## Overview

View File

@@ -1,4 +1,11 @@
# Representing Files in a BrowserWindow (macOS)
---
title: Representing Files in a BrowserWindow
description: Set a represented file in the macOS title bar.
slug: represented-file
hide_title: true
---
# Representing Files in a BrowserWindow
## Overview

View File

@@ -1,6 +1,24 @@
# Security, Native Capabilities, and Your Responsibility
---
title: Security
description: A set of guidelines for building secure Electron apps
slug: security
hide_title: true
toc_max_heading_level: 3
---
# Security
As web developers, we usually enjoy the strong security net of the browser -
:::info Reporting security issues
For information on how to properly disclose an Electron vulnerability,
see [SECURITY.md](https://github.com/electron/electron/tree/main/SECURITY.md).
For upstream Chromium vulnerabilities: Electron keeps up to date with alternating
Chromium releases. For more information, see the
[Electron Release Timelines](../tutorial/electron-timelines.md) document.
:::
## Preface
As web developers, we usually enjoy the strong security net of the browser —
the risks associated with the code we write are relatively small. Our websites
are granted limited powers in a sandbox, and we trust that our users enjoy a
browser built by a large team of engineers that is able to quickly respond to
@@ -17,20 +35,12 @@ With that in mind, be aware that displaying arbitrary content from untrusted
sources poses a severe security risk that Electron is not intended to handle.
In fact, the most popular Electron apps (Atom, Slack, Visual Studio Code, etc)
display primarily local content (or trusted, secure remote content without Node
integration) if your application executes code from an online source, it is
integration) if your application executes code from an online source, it is
your responsibility to ensure that the code is not malicious.
## Reporting Security Issues
## General guidelines
For information on how to properly disclose an Electron vulnerability,
see [SECURITY.md](https://github.com/electron/electron/tree/main/SECURITY.md)
## Chromium Security Issues and Upgrades
Electron keeps up to date with alternating Chromium releases. For more information,
see the [Electron Release Cadence blog post](https://electronjs.org/blog/12-week-cadence).
## Security Is Everyone's Responsibility
### Security is everyone's responsibility
It is important to remember that the security of your Electron application is
the result of the overall security of the framework foundation
@@ -56,7 +66,7 @@ is your own code. Common web vulnerabilities, such as Cross-Site Scripting (XSS)
have a higher security impact on Electron applications hence it is highly recommended
to adopt secure software development best practices and perform security testing.
## Isolation For Untrusted Content
### Isolation for untrusted content
A security issue exists whenever you receive code from an untrusted source (e.g.
a remote server) and execute it locally. As an example, consider a remote
@@ -65,72 +75,74 @@ an attacker somehow manages to change said content (either by attacking the
source directly, or by sitting between your app and the actual destination), they
will be able to execute native code on the user's machine.
> :warning: Under no circumstances should you load and execute remote code with
:::warning
Under no circumstances should you load and execute remote code with
Node.js integration enabled. Instead, use only local files (packaged together
with your application) to execute Node.js code. To display remote content, use
the [`<webview>`][webview-tag] tag or [`BrowserView`][browser-view], make sure
to disable the `nodeIntegration` and enable `contextIsolation`.
:::
## Electron Security Warnings
From Electron 2.0 on, developers will see warnings and recommendations printed
to the developer console. They only show up when the binary's name is Electron,
indicating that a developer is currently looking at the console.
:::info Electron security warnings
Security warnings and recommendations are printed to the developer console.
They only show up when the binary's name is Electron, indicating that a developer
is currently looking at the console.
You can force-enable or force-disable these warnings by setting
`ELECTRON_ENABLE_SECURITY_WARNINGS` or `ELECTRON_DISABLE_SECURITY_WARNINGS` on
either `process.env` or the `window` object.
:::
## Checklist: Security Recommendations
## Checklist: Security recommendations
You should at least follow these steps to improve the security of your application:
1. [Only load secure content](#1-only-load-secure-content)
2. [Disable the Node.js integration in all renderers that display remote content](#2-do-not-enable-nodejs-integration-for-remote-content)
3. [Enable context isolation in all renderers that display remote content](#3-enable-context-isolation-for-remote-content)
4. [Enable sandboxing](#4-enable-sandboxing)
4. [Enable process sandboxing](#4-enable-process-sandboxing)
5. [Use `ses.setPermissionRequestHandler()` in all sessions that load remote content](#5-handle-session-permission-requests-from-remote-content)
6. [Do not disable `webSecurity`](#6-do-not-disable-websecurity)
7. [Define a `Content-Security-Policy`](#7-define-a-content-security-policy) and use restrictive rules (i.e. `script-src 'self'`)
8. [Do not set `allowRunningInsecureContent` to `true`](#8-do-not-set-allowrunninginsecurecontent-to-true)
8. [Do not enable `allowRunningInsecureContent`](#8-do-not-enable-allowrunninginsecurecontent)
9. [Do not enable experimental features](#9-do-not-enable-experimental-features)
10. [Do not use `enableBlinkFeatures`](#10-do-not-use-enableblinkfeatures)
11. [`<webview>`: Do not use `allowpopups`](#11-do-not-use-allowpopups)
11. [`<webview>`: Do not use `allowpopups`](#11-do-not-use-allowpopups-for-webviews)
12. [`<webview>`: Verify options and params](#12-verify-webview-options-before-creation)
13. [Disable or limit navigation](#13-disable-or-limit-navigation)
14. [Disable or limit creation of new windows](#14-disable-or-limit-creation-of-new-windows)
15. [Do not use `openExternal` with untrusted content](#15-do-not-use-openexternal-with-untrusted-content)
15. [Do not use `shell.openExternal` with untrusted content](#15-do-not-use-shellopenexternal-with-untrusted-content)
16. [Use a current version of Electron](#16-use-a-current-version-of-electron)
To automate the detection of misconfigurations and insecure patterns, it is
possible to use
[electronegativity](https://github.com/doyensec/electronegativity). For
[Electronegativity](https://github.com/doyensec/electronegativity). For
additional details on potential weaknesses and implementation bugs when
developing applications using Electron, please refer to this [guide for
developers and auditors](https://doyensec.com/resources/us-17-Carettoni-Electronegativity-A-Study-Of-Electron-Security-wp.pdf)
developers and auditors](https://doyensec.com/resources/us-17-Carettoni-Electronegativity-A-Study-Of-Electron-Security-wp.pdf).
## 1) Only Load Secure Content
### 1. Only load secure content
Any resources not included with your application should be loaded using a
secure protocol like `HTTPS`. In other words, do not use insecure protocols
like `HTTP`. Similarly, we recommend the use of `WSS` over `WS`, `FTPS` over
`FTP`, and so on.
### Why?
#### Why?
`HTTPS` has three main benefits:
1) It authenticates the remote server, ensuring your app connects to the correct
1. It authenticates the remote server, ensuring your app connects to the correct
host instead of an impersonator.
2) It ensures data integrity, asserting that the data was not modified while in
1. It ensures data integrity, asserting that the data was not modified while in
transit between your application and the host.
3) It encrypts the traffic between your user and the destination host, making it
1. It encrypts the traffic between your user and the destination host, making it
more difficult to eavesdrop on the information sent between your app and
the host.
### How?
#### How?
```js
```js title='main.js (Main Process)'
// Bad
browserWindow.loadURL('http://example.com')
@@ -138,7 +150,7 @@ browserWindow.loadURL('http://example.com')
browserWindow.loadURL('https://example.com')
```
```html
```html title='index.html (Renderer Process)'
<!-- Bad -->
<script crossorigin src="http://example.com/react.js"></script>
<link rel="stylesheet" href="http://example.com/style.css">
@@ -148,9 +160,11 @@ browserWindow.loadURL('https://example.com')
<link rel="stylesheet" href="https://example.com/style.css">
```
## 2) Do not enable Node.js Integration for Remote Content
### 2. Do not enable Node.js integration for remote content
_This recommendation is the default behavior in Electron since 5.0.0._
:::info
This recommendation is the default behavior in Electron since 5.0.0.
:::
It is paramount that you do not enable Node.js integration in any renderer
([`BrowserWindow`][browser-window], [`BrowserView`][browser-view], or
@@ -163,7 +177,7 @@ After this, you can grant additional permissions for specific hosts. For example
if you are opening a BrowserWindow pointed at `https://example.com/`, you can
give that website exactly the abilities it needs, but no more.
### Why?
#### Why?
A cross-site-scripting (XSS) attack is more dangerous if an attacker can jump
out of the renderer process and execute code on the user's computer.
@@ -172,12 +186,13 @@ power is usually limited to messing with the website that they are executed on.
Disabling Node.js integration helps prevent an XSS from being escalated into a
so-called "Remote Code Execution" (RCE) attack.
### How?
#### How?
```js
```js title='main.js (Main Process)'
// Bad
const mainWindow = new BrowserWindow({
webPreferences: {
contextIsolation: false,
nodeIntegration: true,
nodeIntegrationInWorker: true
}
@@ -186,7 +201,7 @@ const mainWindow = new BrowserWindow({
mainWindow.loadURL('https://example.com')
```
```js
```js title='main.js (Main Process)'
// Good
const mainWindow = new BrowserWindow({
webPreferences: {
@@ -197,7 +212,7 @@ const mainWindow = new BrowserWindow({
mainWindow.loadURL('https://example.com')
```
```html
```html title='index.html (Renderer Process)'
<!-- Bad -->
<webview nodeIntegration src="page.html"></webview>
@@ -208,21 +223,13 @@ mainWindow.loadURL('https://example.com')
When disabling Node.js integration, you can still expose APIs to your website that
do consume Node.js modules or features. Preload scripts continue to have access
to `require` and other Node.js features, allowing developers to expose a custom
API to remotely loaded content.
API to remotely loaded content via the [contextBridge API](../api/context-bridge.md).
In the following example preload script, the later loaded website will have
access to a `window.readConfig()` method, but no Node.js features.
### 3. Enable Context Isolation for remote content
```js
const { readFileSync } = require('fs')
window.readConfig = () => {
const data = readFileSync('./config.json')
return data
}
```
## 3) Enable Context Isolation for Remote Content
:::info
This recommendation is the default behavior in Electron since 12.0.0.
:::
Context isolation is an Electron feature that allows developers to run code
in preload scripts and in Electron APIs in a dedicated JavaScript context. In
@@ -235,48 +242,42 @@ to enable this behavior.
Even when `nodeIntegration: false` is used, to truly enforce strong isolation
and prevent the use of Node primitives `contextIsolation` **must** also be used.
### Why & How?
:::info
For more information on what `contextIsolation` is and how to enable it please
see our dedicated [Context Isolation](context-isolation.md) document.
:::info
## 4) Enable Sandboxing
### 4. Enable process sandboxing
[Sandboxing](sandbox.md) is a Chromium feature that uses the operating system to
[Sandboxing](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md)
is a Chromium feature that uses the operating system to
significantly limit what renderer processes have access to. You should enable
the sandbox in all renderers. Loading, reading or processing any untrusted
content in an unsandboxed process, including the main process, is not advised.
### How?
:::info
For more information on what `contextIsolation` is and how to enable it please
see our dedicated [Process Sandboxing](sandbox.md) document.
:::info
When creating a window, pass the `sandbox: true` option in `webPreferences`:
### 5. Handle session permission requests from remote content
```js
const win = new BrowserWindow({
webPreferences: {
sandbox: true
}
})
```
## 5) Handle Session Permission Requests From Remote Content
You may have seen permission requests while using Chrome: They pop up whenever
You may have seen permission requests while using Chrome: they pop up whenever
the website attempts to use a feature that the user has to manually approve (
like notifications).
The API is based on the [Chromium permissions API](https://developer.chrome.com/extensions/permissions)
and implements the same types of permissions.
### Why?
#### Why?
By default, Electron will automatically approve all permission requests unless
the developer has manually configured a custom handler. While a solid default,
security-conscious developers might want to assume the very opposite.
### How?
#### How?
```js
```js title='main.js (Main Process)'
const { session } = require('electron')
session
@@ -297,9 +298,11 @@ session
})
```
## 6) Do Not Disable WebSecurity
### 6. Do not disable `webSecurity`
_Recommendation is Electron's default_
:::info
This recommendation is Electron's default.
:::
You may have already guessed that disabling the `webSecurity` property on a
renderer process ([`BrowserWindow`][browser-window],
@@ -308,15 +311,15 @@ security features.
Do not disable `webSecurity` in production applications.
### Why?
#### Why?
Disabling `webSecurity` will disable the same-origin policy and set
`allowRunningInsecureContent` property to `true`. In other words, it allows
the execution of insecure code from different domains.
### How?
#### How?
```js
```js title='main.js (Main Process)'
// Bad
const mainWindow = new BrowserWindow({
webPreferences: {
@@ -325,12 +328,12 @@ const mainWindow = new BrowserWindow({
})
```
```js
```js title='main.js (Main Process)'
// Good
const mainWindow = new BrowserWindow()
```
```html
```html title='index.html (Renderer Process)'
<!-- Bad -->
<webview disablewebsecurity src="page.html"></webview>
@@ -338,13 +341,13 @@ const mainWindow = new BrowserWindow()
<webview src="page.html"></webview>
```
## 7) Define a Content Security Policy
### 7. Define a Content Security Policy
A Content Security Policy (CSP) is an additional layer of protection against
cross-site-scripting attacks and data injection attacks. We recommend that they
be enabled by any website you load inside Electron.
### Why?
#### Why?
CSP allows the server serving content to restrict and control the resources
Electron can load for that given web page. `https://example.com` should
@@ -352,6 +355,8 @@ be allowed to load scripts from the origins you defined while scripts from
`https://evil.attacker.com` should not be allowed to run. Defining a CSP is an
easy way to improve your application's security.
#### How?
The following CSP will allow Electron to execute scripts from the current
website and from `apis.example.com`.
@@ -363,14 +368,14 @@ Content-Security-Policy: '*'
Content-Security-Policy: script-src 'self' https://apis.example.com
```
### CSP HTTP Header
#### CSP HTTP headers
Electron respects the [`Content-Security-Policy` HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy)
which can be set using Electron's
[`webRequest.onHeadersReceived`](../api/web-request.md#webrequestonheadersreceivedfilter-listener)
handler:
```javascript
```javascript title='main.js (Main Process)'
const { session } = require('electron')
session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
@@ -383,20 +388,22 @@ session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
})
```
### CSP Meta Tag
#### CSP meta tag
CSP's preferred delivery mechanism is an HTTP header, however it is not possible
CSP's preferred delivery mechanism is an HTTP header. However, it is not possible
to use this method when loading a resource using the `file://` protocol. It can
be useful in some cases, such as using the `file://` protocol, to set a policy
on a page directly in the markup using a `<meta>` tag:
be useful in some cases to set a policy on a page directly in the markup using a
`<meta>` tag:
```html
```html title='index.html (Renderer Process)'
<meta http-equiv="Content-Security-Policy" content="default-src 'none'">
```
## 8) Do Not Set `allowRunningInsecureContent` to `true`
### 8. Do not enable `allowRunningInsecureContent`
_Recommendation is Electron's default_
:::info
This recommendation is Electron's default.
:::
By default, Electron will not allow websites loaded over `HTTPS` to load and
execute scripts, CSS, or plugins from insecure sources (`HTTP`). Setting the
@@ -405,15 +412,15 @@ property `allowRunningInsecureContent` to `true` disables that protection.
Loading the initial HTML of a website over `HTTPS` and attempting to load
subsequent resources via `HTTP` is also known as "mixed content".
### Why?
#### Why?
Loading content over `HTTPS` assures the authenticity and integrity
of the loaded resources while encrypting the traffic itself. See the section on
[only displaying secure content](#1-only-load-secure-content) for more details.
### How?
#### How?
```js
```js title='main.js (Main Process)'
// Bad
const mainWindow = new BrowserWindow({
webPreferences: {
@@ -422,19 +429,21 @@ const mainWindow = new BrowserWindow({
})
```
```js
```js title='main.js (Main Process)'
// Good
const mainWindow = new BrowserWindow({})
```
## 9) Do Not Enable Experimental Features
### 9. Do not enable experimental features
_Recommendation is Electron's default_
:::info
This recommendation is Electron's default.
:::
Advanced users of Electron can enable experimental Chromium features using the
`experimentalFeatures` property.
### Why?
#### Why?
Experimental features are, as the name suggests, experimental and have not been
enabled for all Chromium users. Furthermore, their impact on Electron as a whole
@@ -443,9 +452,9 @@ has likely not been tested.
Legitimate use cases exist, but unless you know what you are doing, you should
not enable this property.
### How?
#### How?
```js
```js title='main.js (Main Process)'
// Bad
const mainWindow = new BrowserWindow({
webPreferences: {
@@ -454,20 +463,22 @@ const mainWindow = new BrowserWindow({
})
```
```js
```js title='main.js (Main Process)'
// Good
const mainWindow = new BrowserWindow({})
```
## 10) Do Not Use `enableBlinkFeatures`
### 10. Do not use `enableBlinkFeatures`
_Recommendation is Electron's default_
:::info
This recommendation is Electron's default.
:::
Blink is the name of the rendering engine behind Chromium. As with
`experimentalFeatures`, the `enableBlinkFeatures` property allows developers to
enable features that have been disabled by default.
### Why?
#### Why?
Generally speaking, there are likely good reasons if a feature was not enabled
by default. Legitimate use cases for enabling specific features exist. As a
@@ -475,9 +486,9 @@ developer, you should know exactly why you need to enable a feature, what the
ramifications are, and how it impacts the security of your application. Under
no circumstances should you enable features speculatively.
### How?
#### How?
```js
```js title='main.js (Main Process)'
// Bad
const mainWindow = new BrowserWindow({
webPreferences: {
@@ -486,14 +497,16 @@ const mainWindow = new BrowserWindow({
})
```
```js
```js title='main.js (Main Process)'
// Good
const mainWindow = new BrowserWindow()
```
## 11) Do Not Use `allowpopups`
### 11. Do not use `allowpopups` for WebViews
_Recommendation is Electron's default_
:::info
This recommendation is Electron's default.
:::
If you are using [`<webview>`][webview-tag], you might need the pages and scripts
loaded in your `<webview>` tag to open new windows. The `allowpopups` attribute
@@ -501,16 +514,16 @@ enables them to create new [`BrowserWindows`][browser-window] using the
`window.open()` method. `<webview>` tags are otherwise not allowed to create new
windows.
### Why?
#### Why?
If you do not need popups, you are better off not allowing the creation of
new [`BrowserWindows`][browser-window] by default. This follows the principle
of minimally required access: Don't let a website create new popups unless
you know it needs that feature.
### How?
#### How?
```html
```html title='index.html (Renderer Process)'
<!-- Bad -->
<webview allowpopups src="page.html"></webview>
@@ -518,7 +531,7 @@ you know it needs that feature.
<webview src="page.html"></webview>
```
## 12) Verify WebView Options Before Creation
### 12. Verify WebView options before creation
A WebView created in a renderer process that does not have Node.js integration
enabled will not be able to enable integration itself. However, a WebView will
@@ -528,7 +541,7 @@ It is a good idea to control the creation of new [`<webview>`][webview-tag] tags
from the main process and to verify that their webPreferences do not disable
security features.
### Why?
#### Why?
Since `<webview>` live in the DOM, they can be created by a script running on your
website even if Node.js integration is otherwise disabled.
@@ -538,13 +551,13 @@ a renderer process. In most cases, developers do not need to disable any of
those features - and you should therefore not allow different configurations
for newly created [`<webview>`][webview-tag] tags.
### How?
#### How?
Before a [`<webview>`][webview-tag] tag is attached, Electron will fire the
`will-attach-webview` event on the hosting `webContents`. Use the event to
prevent the creation of `webViews` with possibly insecure options.
```js
```js title='main.js (Main Process)'
app.on('web-contents-created', (event, contents) => {
contents.on('will-attach-webview', (event, webPreferences, params) => {
// Strip away preload scripts if unused or verify their location is legitimate
@@ -562,16 +575,16 @@ app.on('web-contents-created', (event, contents) => {
})
```
Again, this list merely minimizes the risk, it does not remove it. If your goal
Again, this list merely minimizes the risk, but does not remove it. If your goal
is to display a website, a browser will be a more secure option.
## 13) Disable or limit navigation
### 13. Disable or limit navigation
If your app has no need to navigate or only needs to navigate to known pages,
it is a good idea to limit navigation outright to that known scope, disallowing
any other kinds of navigation.
### Why?
#### Why?
Navigation is a common attack vector. If an attacker can convince your app to
navigate away from its current page, they can possibly force your app to open
@@ -584,7 +597,7 @@ A common attack pattern is that the attacker convinces your app's users to
interact with the app in such a way that it navigates to one of the attacker's
pages. This is usually done via links, plugins, or other user-generated content.
### How?
#### How?
If your app has no need for navigation, you can call `event.preventDefault()`
in a [`will-navigate`][will-navigate] handler. If you know which pages your app
@@ -595,7 +608,7 @@ We recommend that you use Node's parser for URLs. Simple string comparisons can
sometimes be fooled - a `startsWith('https://example.com')` test would let
`https://example.com.attacker.com` through.
```js
```js title='main.js (Main Process)'
const URL = require('url').URL
app.on('web-contents-created', (event, contents) => {
@@ -609,12 +622,12 @@ app.on('web-contents-created', (event, contents) => {
})
```
## 14) Disable or limit creation of new windows
### 14. Disable or limit creation of new windows
If you have a known set of windows, it's a good idea to limit the creation of
additional windows in your app.
### Why?
#### Why?
Much like navigation, the creation of new `webContents` is a common attack
vector. Attackers attempt to convince your app to create new windows, frames,
@@ -627,7 +640,7 @@ security at no cost. This is commonly the case for apps that open one
`BrowserWindow` and do not need to open an arbitrary number of additional
windows at runtime.
### How?
#### How?
[`webContents`][web-contents] will delegate to its [window open
handler][window-open-handler] before creating new windows. The handler will
@@ -635,7 +648,7 @@ receive, amongst other parameters, the `url` the window was requested to open
and the options used to create it. We recommend that you register a handler to
monitor the creation of windows, and deny any unexpected window creation.
```js
```js title='main.js (Main Process)'
const { shell } = require('electron')
app.on('web-contents-created', (event, contents) => {
@@ -656,40 +669,40 @@ app.on('web-contents-created', (event, contents) => {
})
```
## 15) Do not use `openExternal` with untrusted content
### 15. Do not use `shell.openExternal` with untrusted content
Shell's [`openExternal`][open-external] allows opening a given protocol URI with
the desktop's native utilities. On macOS, for instance, this function is similar
to the `open` terminal command utility and will open the specific application
based on the URI and filetype association.
The shell module's [`openExternal`][open-external] API allows opening a given
protocol URI with the desktop's native utilities. On macOS, for instance, this
function is similar to the `open` terminal command utility and will open the
specific application based on the URI and filetype association.
### Why?
#### Why?
Improper use of [`openExternal`][open-external] can be leveraged to compromise
the user's host. When openExternal is used with untrusted content, it can be
leveraged to execute arbitrary commands.
### How?
#### How?
```js
```js title='main.js (Main Process)'
// Bad
const { shell } = require('electron')
shell.openExternal(USER_CONTROLLED_DATA_HERE)
```
```js
```js title='main.js (Main Process)'
// Good
const { shell } = require('electron')
shell.openExternal('https://example.com/index.html')
```
## 16) Use a current version of Electron
### 16. Use a current version of Electron
You should strive for always using the latest available version of Electron.
Whenever a new major version is released, you should attempt to update your
app as quickly as possible.
### Why?
#### Why?
An application built with an older version of Electron, Chromium, and Node.js
is an easier target than an application that is using more recent versions of
@@ -705,6 +718,13 @@ to fix issues before publishing them. Your application will be more secure if
it is running a recent version of Electron (and thus, Chromium and Node.js) for
which potential security issues are not as widely known.
#### How?
Migrate your app one major version at a time, while referring to Electron's
[Breaking Changes][breaking-changes] document to see if any code needs to
be updated.
[breaking-changes]: ../breaking-changes.md
[browser-window]: ../api/browser-window.md
[browser-view]: ../api/browser-view.md
[webview-tag]: ../api/webview-tag.md
@@ -712,5 +732,4 @@ which potential security issues are not as widely known.
[window-open-handler]: ../api/web-contents.md#contentssetwindowopenhandlerhandler
[will-navigate]: ../api/web-contents.md#event-will-navigate
[open-external]: ../api/shell.md#shellopenexternalurl-options
[sandbox]: ../tutorial/sandbox.md
[responsible-disclosure]: https://en.wikipedia.org/wiki/Responsible_disclosure

View File

@@ -1,4 +1,11 @@
# Taskbar Customization (Windows)
---
title: Taskbar Customization
description: Customize the look and feel of your app's Windows taskbar presence.
slug: windows-taskbar
hide_title: true
---
# Taskbar Customization
## Overview

View File

@@ -177,17 +177,21 @@ template("electron_paks") {
"${root_gen_dir}/components/strings/components_strings_",
"${root_gen_dir}/third_party/blink/public/strings/blink_strings_",
"${root_gen_dir}/device/bluetooth/strings/bluetooth_strings_",
"${root_gen_dir}/extensions/strings/extensions_strings_",
"${root_gen_dir}/services/strings/services_strings_",
"${root_gen_dir}/ui/strings/app_locale_settings_",
"${root_gen_dir}/ui/strings/ax_strings_",
"${root_gen_dir}/ui/strings/ui_strings_",
]
deps = [
"//chrome/app/resources:platform_locale_settings",
"//components/strings:components_strings",
"//device/bluetooth/strings",
"//extensions/strings",
"//services/strings",
"//third_party/blink/public/strings",
"//ui/strings:app_locale_settings",
"//ui/strings:ax_strings",
"//ui/strings:ui_strings",
]

View File

@@ -33,6 +33,23 @@
{SCREEN_INDEX, plural, =1{Screen #} other{Screen #}}
</message>
<!-- File Select Helper-->
<message name="IDS_IMAGE_FILES" desc="The description of the image file extensions in the select file dialog.">
Image Files
</message>
<message name="IDS_AUDIO_FILES" desc="The description of the audio file extensions in the select file dialog.">
Audio Files
</message>
<message name="IDS_VIDEO_FILES" desc="The description of the video file extensions in the select file dialog.">
Video Files
</message>
<message name="IDS_CUSTOM_FILES" desc="The description of the custom file extensions in the select file dialog.">
Custom Files
</message>
<message name="IDS_DEFAULT_DOWNLOAD_FILENAME" desc="Default name for downloaded files when we have no idea what they could be.">
download
</message>
<!-- Picture-in-Picture -->
<if expr="is_macosx">
<message name="IDS_PICTURE_IN_PICTURE_TITLE_TEXT" desc="Title of the Picture-in-Picture window. This appears in the system tray and window header.">

View File

@@ -101,11 +101,14 @@ auto_filenames = {
"docs/api/structures/new-window-web-contents-event.md",
"docs/api/structures/notification-action.md",
"docs/api/structures/notification-response.md",
"docs/api/structures/payment-discount.md",
"docs/api/structures/point.md",
"docs/api/structures/post-body.md",
"docs/api/structures/printer-info.md",
"docs/api/structures/process-memory-info.md",
"docs/api/structures/process-metric.md",
"docs/api/structures/product-discount.md",
"docs/api/structures/product-subscription-period.md",
"docs/api/structures/product.md",
"docs/api/structures/protocol-request.md",
"docs/api/structures/protocol-response-upload-data.md",

View File

@@ -32,10 +32,13 @@ filenames = {
"shell/browser/notifications/linux/notification_presenter_linux.cc",
"shell/browser/notifications/linux/notification_presenter_linux.h",
"shell/browser/relauncher_linux.cc",
"shell/browser/ui/electron_desktop_window_tree_host_linux.cc",
"shell/browser/ui/file_dialog_gtk.cc",
"shell/browser/ui/message_box_gtk.cc",
"shell/browser/ui/tray_icon_gtk.cc",
"shell/browser/ui/tray_icon_gtk.h",
"shell/browser/ui/views/client_frame_view_linux.cc",
"shell/browser/ui/views/client_frame_view_linux.h",
"shell/common/application_info_linux.cc",
"shell/common/language_util_linux.cc",
"shell/common/node_bindings_linux.cc",
@@ -50,8 +53,6 @@ filenames = {
"shell/browser/ui/views/global_menu_bar_x11.h",
"shell/browser/ui/x/event_disabler.cc",
"shell/browser/ui/x/event_disabler.h",
"shell/browser/ui/x/window_state_watcher.cc",
"shell/browser/ui/x/window_state_watcher.h",
"shell/browser/ui/x/x_window_utils.cc",
"shell/browser/ui/x/x_window_utils.h",
]
@@ -347,6 +348,8 @@ filenames = {
"shell/browser/child_web_contents_tracker.h",
"shell/browser/cookie_change_notifier.cc",
"shell/browser/cookie_change_notifier.h",
"shell/browser/electron_api_ipc_handler_impl.cc",
"shell/browser/electron_api_ipc_handler_impl.h",
"shell/browser/electron_autofill_driver.cc",
"shell/browser/electron_autofill_driver.h",
"shell/browser/electron_autofill_driver_factory.cc",
@@ -355,8 +358,6 @@ filenames = {
"shell/browser/electron_browser_client.h",
"shell/browser/electron_browser_context.cc",
"shell/browser/electron_browser_context.h",
"shell/browser/electron_browser_handler_impl.cc",
"shell/browser/electron_browser_handler_impl.h",
"shell/browser/electron_browser_main_parts.cc",
"shell/browser/electron_browser_main_parts.h",
"shell/browser/electron_download_manager_delegate.cc",
@@ -373,6 +374,8 @@ filenames = {
"shell/browser/electron_quota_permission_context.h",
"shell/browser/electron_speech_recognition_manager_delegate.cc",
"shell/browser/electron_speech_recognition_manager_delegate.h",
"shell/browser/electron_web_contents_utility_handler_impl.cc",
"shell/browser/electron_web_contents_utility_handler_impl.h",
"shell/browser/electron_web_ui_controller_factory.cc",
"shell/browser/electron_web_ui_controller_factory.h",
"shell/browser/event_emitter_mixin.cc",
@@ -413,6 +416,8 @@ filenames = {
"shell/browser/native_browser_view.h",
"shell/browser/native_window.cc",
"shell/browser/native_window.h",
"shell/browser/native_window_features.cc",
"shell/browser/native_window_features.h",
"shell/browser/native_window_observer.h",
"shell/browser/net/asar/asar_file_validator.cc",
"shell/browser/net/asar/asar_file_validator.h",
@@ -734,11 +739,6 @@ filenames = {
"shell/renderer/extensions/electron_extensions_renderer_client.h",
]
app_sources = [
"shell/app/electron_main.cc",
"shell/app/electron_main.h",
]
framework_sources = [
"shell/app/electron_library_main.h",
"shell/app/electron_library_main.mm",

View File

@@ -30,11 +30,13 @@ const getOrCreateArchive = (archivePath: string) => {
return cachedArchives.get(archivePath);
}
const newArchive = asar.createArchive(archivePath);
if (!newArchive) return null;
cachedArchives.set(archivePath, newArchive);
return newArchive;
try {
const newArchive = new asar.Archive(archivePath);
cachedArchives.set(archivePath, newArchive);
return newArchive;
} catch {
return null;
}
};
const asarRe = /\.asar/i;

View File

@@ -72,7 +72,10 @@ BrowserWindow.getAllWindows = () => {
BrowserWindow.getFocusedWindow = () => {
for (const window of BrowserWindow.getAllWindows()) {
if (window.isFocused() || window.isDevToolsFocused()) return window;
const hasWC = window.webContents && !window.webContents.isDestroyed();
if (!window.isDestroyed() && hasWC) {
if (window.isFocused() || window.isDevToolsFocused()) return window;
}
}
return null;
};

View File

@@ -1,4 +1,4 @@
import { app, ipcMain, session, webFrameMain } from 'electron/main';
import { app, ipcMain, session, deprecate, webFrameMain } from 'electron/main';
import type { BrowserWindowConstructorOptions, LoadURLOptions } from 'electron/main';
import * as url from 'url';
@@ -500,6 +500,7 @@ WebContents.prototype._callWindowOpenHandler = function (event: Electron.Event,
if (!this._windowOpenHandler) {
return null;
}
const response = this._windowOpenHandler(details);
if (typeof response !== 'object') {
@@ -613,6 +614,7 @@ WebContents.prototype._init = function () {
});
this.on('-ipc-ports' as any, function (event: Electron.IpcMainEvent, internal: boolean, channel: string, message: any, ports: any[]) {
addSenderFrameToEvent(event);
event.ports = ports.map(p => new MessagePortMain(p));
ipcMain.emit(channel, event, message);
});
@@ -651,7 +653,15 @@ WebContents.prototype._init = function () {
postBody,
disposition
};
const options = this._callWindowOpenHandler(event, details);
let options;
try {
options = this._callWindowOpenHandler(event, details);
} catch (err) {
event.preventDefault();
throw err;
}
if (!event.defaultPrevented) {
openGuestWindow({
event,
@@ -679,17 +689,16 @@ WebContents.prototype._init = function () {
referrer,
postBody
};
windowOpenOverriddenOptions = this._callWindowOpenHandler(event, details);
// if attempting to use this API with the deprecated new-window event,
// windowOpenOverriddenOptions will always return null. This ensures
// short-term backwards compatibility until new-window is removed.
const parsedFeatures = parseFeatures(rawFeatures);
const overriddenFeatures: BrowserWindowConstructorOptions = {
...parsedFeatures.options,
webPreferences: parsedFeatures.webPreferences
};
windowOpenOverriddenOptions = windowOpenOverriddenOptions || overriddenFeatures;
let result;
try {
result = this._callWindowOpenHandler(event, details);
} catch (err) {
event.preventDefault();
throw err;
}
windowOpenOverriddenOptions = result;
if (!event.defaultPrevented) {
const secureOverrideWebPreferences = windowOpenOverriddenOptions ? {
// Allow setting of backgroundColor as a webPreference even though
@@ -699,9 +708,19 @@ WebContents.prototype._init = function () {
transparent: windowOpenOverriddenOptions.transparent,
...windowOpenOverriddenOptions.webPreferences
} : undefined;
this._setNextChildWebPreferences(
makeWebPreferences({ embedder: event.sender, secureOverrideWebPreferences })
);
// TODO(zcbenz): The features string is parsed twice: here where it is
// passed to C++, and in |makeBrowserWindowOptions| later where it is
// not actually used since the WebContents is created here.
// We should be able to remove the latter once the |nativeWindowOpen|
// option is removed.
const { webPreferences: parsedWebPreferences } = parseFeatures(rawFeatures);
// Parameters should keep same with |makeBrowserWindowOptions|.
const webPreferences = makeWebPreferences({
embedder: event.sender,
insecureParsedWebPreferences: parsedWebPreferences,
secureOverrideWebPreferences
});
this._setNextChildWebPreferences(webPreferences);
}
});
@@ -734,6 +753,11 @@ WebContents.prototype._init = function () {
}
});
});
const prefs = this.getLastWebPreferences() || {};
if (prefs.nativeWindowOpen === false) {
deprecate.log('Deprecation Warning: Disabling nativeWindowOpen is deprecated. The nativeWindowOpen option will be removed in Electron 18.');
}
}
this.on('login', (event, ...args) => {
@@ -749,6 +773,14 @@ WebContents.prototype._init = function () {
}
});
this.on('select-bluetooth-device', (event, devices, callback) => {
if (this.listenerCount('select-bluetooth-device') === 1) {
// Cancel it if there are no handlers
event.preventDefault();
callback('');
}
});
const event = process._linkedBinding('electron_browser_event').createEmpty();
app.emit('web-contents-created', event, this);

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