Compare commits

...

63 Commits

Author SHA1 Message Date
Electron Bot
c2cd588e70 Bump v10.0.0-nightly.20200210 2020-02-10 07:31:57 -08:00
CoderPoet
97cf24ac98 docs: modify the showMessageBox method to showMessageBoxSync (#22080)
In handling the will-prevent-unload event, preventDefault should be executed synchronously, and here should also be showMessageBoxSync
2020-02-10 17:12:30 +09:00
Shelley Vohr
d5e7904610 refactor: remove use of Node's DebugOptions (#22083) 2020-02-09 18:42:02 +00:00
Electron Bot
099246f0e4 Bump v10.0.0-nightly.20200209 2020-02-09 07:32:49 -08:00
Samuel Attard
dafbf04b9a fix: use a WeakPtr so we do not UAF the store in FunctionLifetimeMonitor (#22056) 2020-02-08 20:49:38 -08:00
t57ser
43592f8b71 fix: flash plugin (#22072)
* fix: flash plugin

Fixes https://github.com/electron/electron/issues/20744

* cleanup

* fix linting issue
2020-02-08 17:50:07 -08:00
John Kleinschmidt
058222a9f1 build: try using newer version of xcode/macOS sdk (#22104) 2020-02-08 16:38:14 -05:00
Electron Bot
f989faab5c Bump v10.0.0-nightly.20200208 2020-02-08 07:31:55 -08:00
John Kleinschmidt
5e49aafe55 build: preserve timestamps when stripping files (#22094)
* build: preserve timestamps when stripping files

Resolves an issue where the binaries in mksnapshot.zip were not getting stripped.

* Add missing comma

* Update script/strip-binaries.py

Co-Authored-By: Jeremy Apthorp <jeremya@chromium.org>

* Don't try to run strip on macOS

Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
2020-02-07 17:05:04 -05:00
Jeremy Apthorp
ea89120c9e chore: remove debugging log (#22093) 2020-02-07 12:31:08 -08:00
John Kleinschmidt
c6cec97287 build: copy chromedriver to correct location (#22074)
* build: copy chromedriver to correct location

* build: try to free up disk space for macos releases

* get verbose mode working on strip-binaries

* Only use separate chromedriver build arm/arm64
2020-02-07 13:52:36 -05:00
John Kleinschmidt
45591e31ce ci: fix build failure on doc only changes (#22075)
* ci: fix build failure on doc only changes

* ci: fix doc-only check when CI fires on branch before PR is created
2020-02-07 12:58:47 -05:00
Jeremy Apthorp
e2a5de9248 refactor: saner blink_initialization_order.patch (#22054) 2020-02-07 09:45:13 -08:00
Electron Bot
6a7d722c06 Bump v10.0.0-nightly.20200207 2020-02-07 07:32:49 -08:00
John Kleinschmidt
f1f185ee93 test: get native unit tests running (#21914) 2020-02-07 07:56:54 -05:00
Shelley Vohr
83124889e5 feat: enable passing Node.js cli flags (#21110)
* feat: enable passing Node.js cli flags

* Allow cli flags in ELECTRON_RUN_AS_NODE mode
2020-02-07 02:59:38 +00:00
Jeremy Apthorp
9107157073 feat: [extensions] support extension.getBackgroundPage (#21951)
* feat: [extensions] support extension.getBackgroundPage

* cleanup

* how does c++

* tests

* test for runtime.getBackgroundPage too
2020-02-06 16:42:34 -05:00
Jeremy Apthorp
eca1dd7f8b docs: document supported extensions apis (#22021)
* docs: document supported extensions apis

* Update extensions.md

* Update README.md

* Apply suggestions from code review

Co-Authored-By: Mark Lee <malept@users.noreply.github.com>

Co-authored-by: Mark Lee <malept@users.noreply.github.com>
2020-02-06 16:36:02 -05:00
Sesh Sadasivam
c8273e375c fix: add Chromium patch to fix RTL window buttons (#22016)
Classes that inherit from `NSThemeFrame` seem to show window buttons in the
incorrect position when the primary MacOS language is set to an RTL
(right-to-left) language like Arabic or Hebrew. The fix in this commit mirrors
that of `tabbed_browser_window.mm`
(https://chromium-review.googlesource.com/c/chromium/src/+/562603/10/chrome/browser/ui/cocoa/tabbed_browser_window.mm#88).

This change should be upstreamed, and then this patch can be removed.
2020-02-06 16:14:18 -05:00
John Kleinschmidt
f4fd939409 build: copy chromedriver to proper directory for release (#22070) 2020-02-06 14:20:14 -05:00
John Kleinschmidt
e7982623ec ci: enable goma for all testing builds (#21992)
* ci: enable goma for all testing builds

* Use powershell script to start goma on Windows

* Only run ensure_start from PS script.

* add missing percent

* Run stats via command instead of powershell

* use command env var

* Use out cache for faster mac builds

* Disable unneeded logging

* .git directories need to be delete before gn gen

Even though gn gen shows and error about a missing .git directory, the .git delete needs to happen before gn gen.
2020-02-06 12:56:18 -05:00
Erick Zhao
3f880fb7c7 chore: remove teams without write access from CODEOWNERS (#22043)
* chore: update CODEOWNERS for Ecosystem WG

* chore: remove teams w/o write access from CODEOWNERS
2020-02-06 11:31:25 -06:00
Erick Zhao
070e312e8b docs: clarify requirements for GOOGLE_API_KEY (#22034)
* docs: clarify requirements for GOOGLE_API_KEY

* Update docs/api/environment-variables.md

Co-Authored-By: Mark Lee <malept@users.noreply.github.com>

* Update docs/api/environment-variables.md

Co-Authored-By: Mark Lee <malept@users.noreply.github.com>

* Update docs/api/environment-variables.md

Co-Authored-By: Mark Lee <malept@users.noreply.github.com>

* update

Co-authored-by: Mark Lee <malept@users.noreply.github.com>
2020-02-06 11:28:06 -06:00
Cheng Zhao
629c2121ba chore: print more logging for failed tests (#22060) 2020-02-06 11:15:55 -05:00
Electron Bot
b664c824d2 Bump v10.0.0-nightly.20200206 2020-02-06 07:34:52 -08:00
Electron Bot
42a9d72ce1 chore: bump chromium to 28254008f9e7a2aea5d4426906bfd (master) (#22025)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2020-02-06 07:05:30 +00:00
Samuel Attard
c8fe25e109 build: actually save the brew cache on macOS (#22052) 2020-02-05 14:15:51 -08:00
Shelley Vohr
303ca10846 feat: allow macOS apps to set activation policies (#21983) 2020-02-05 19:12:25 +00:00
Cheng Zhao
3341a2c3b4 fix: delay deletion of Wrappable objects (#22044) 2020-02-05 10:50:26 -05:00
Cheng Zhao
dee324f79a fix: check WebContents in OnGetDefaultPrinter (#22041) 2020-02-05 10:48:51 -05:00
Electron Bot
76d05ce21f Bump v9.0.0-nightly.20200205 2020-02-05 07:32:08 -08:00
John Kleinschmidt
3a9b55c24f build: don't use component_ffmpeg for chromedriver (#22033)
* build: don't use component_ffmpeg for chromedriver

* Fixup mac chromedriver build

* Update location of chromedriver.zip

* Fixup macos chromedriver build

* compile to right directory
2020-02-05 16:02:02 +09:00
Shelley Vohr
928175bdfe feat: allow specifying pageSize for print (#22014) 2020-02-05 04:25:02 +00:00
Gabriel Basilio Brito
385388dd6b notes: Adding Github CI to testing documentation (#21996)
notes: Adding Github CI to testing documentation
2020-02-05 11:05:07 +09:00
Jeremy Apthorp
ba5d712a15 fix: crash on boot with --log-net-log (#22035) 2020-02-04 18:04:35 -08:00
Jeremy Apthorp
d9321f4df7 chore: rename atom -> electron (#21986) 2020-02-04 12:19:40 -08:00
Shelley Vohr
f14fc4b041 chore: wrap cb with default invocation (#22013) 2020-02-04 19:06:03 +00:00
John Kleinschmidt
6f1f4d3f2f ci: make sure mksnapshot is invoked with proper args. (#21991)
* build: robustify verify-mksnapshot w.r.t. command-line parameters

Co-authored-by: Jeremy Apthorp <nornagon@nornagon.net>
2020-02-04 13:10:11 -05:00
Sofia Nguy
6273bc9957 docs: update currently supported versions for 8.0.0 release (#21909) 2020-02-04 12:21:13 -05:00
Sofia Nguy
9c035c4570 docs: update 9.0 release dates (#21910) 2020-02-04 11:51:43 -05:00
Electron Bot
7be1b44cda Bump v9.0.0-nightly.20200204 2020-02-04 07:31:43 -08:00
Jeremy Apthorp
1dcc9bf46b ci: fix ELECTRON_OUT_DIR (#21994) 2020-02-03 15:43:46 -08:00
Charles Kerr
c83f836faf refactor: prefer using app.whenReady() (#21972)
* docs: add references to app.whenReady() in isReady

* refactor: prefer app.whenReady()

In the docs, specs, and lib, replace instances of `app.once('ready')`
(seen occasionally) and `app.on('ready')` (extremely common) with
`app.whenReady()`.

It's better to encourage users to use whenReady():
1. it handles the edge case of registering for 'ready' after it's fired
2. it avoids the minor wart of leaving an active listener alive for
an event that wll never fire again
2020-02-03 22:43:22 +00:00
Electron Bot
7a3862a1c6 chore: bump chromium to 469ca5ff317a168e6ad99ca0f23f1 (master) (#22001)
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
2020-02-03 22:39:41 +00:00
Jeremy Apthorp
a061c87e56 feat: enable native extensions support (#21814) 2020-02-03 14:01:10 -08:00
Erick Zhao
bdf65a75d0 ci: verify chromedriver (#21993)
* initial pass

* better

* even better

* ci

* add chromedriver to build step

* add chromedriver to other build step

* persist chromedriver for tests

* appveyor test

* correct sys.platform names

* chromedriver-path -> build-dir
2020-02-03 10:31:14 -08:00
Samuel Attard
1fb2b8e00e fix: bind spellchecker receivers correctly in the renderer (#21997) 2020-02-03 09:49:37 -08:00
Electron Bot
6f32214655 Bump v9.0.0-nightly.20200203 2020-02-03 07:31:22 -08:00
Electron Bot
6d48d529ed Bump v9.0.0-nightly.20200202 2020-02-02 07:31:51 -08:00
Electron Bot
3a5e58a06e Bump v9.0.0-nightly.20200201 2020-02-01 07:32:10 -08:00
Jeremy Apthorp
720cf6eb27 test: add test for app.on('certificate-error') event (#21978) 2020-01-31 15:25:01 -08:00
Shelley Vohr
08b1f0e25d fix: default printer if none is provided (#21956) 2020-01-31 19:20:11 +00:00
Jeremy Apthorp
1c6d8f5af6 fix: return path from netLog.stopLogging (#21985) 2020-01-31 10:43:02 -08:00
Electron Bot
a58bc42ed0 chore: bump chromium to 8a35438d19da7538142380551a2ce (master) (#21971)
* chore: bump chromium in DEPS to 68d7ef9b31f3f164a967109212e84a8d756cc80f

* Update patches

* Update location of file_info.h

* Update sysroots

* chore: bump chromium in DEPS to 47114394b1c8a35438d19da7538142380551a2ce

* Update patches

* ci: update docker image to pickup new ia32 dep

* Skip .info files in dist.zip

Co-authored-by: John Kleinschmidt <jkleinsc@github.com>
2020-01-31 13:36:00 -05:00
Samuel Attard
cabe514431 chore: add safety checks to RepositionTrafficLights (#21981) 2020-01-31 10:27:25 -08:00
Jeremy Apthorp
45f30ead61 fix: don't crash on invalid certs (#21976) 2020-01-31 09:25:46 -08:00
Electron Bot
c29ec2d4cc Bump v9.0.0-nightly.20200131 2020-01-31 07:32:07 -08:00
Ian Goodacre
e8517065d1 docs: add links to the issue tracker, to developer/issues (#21945)
* docs: add links to the issue tracker

Adding links to the issue tracker for existing issues and submission of
new issues makes it easier to do what is otherwise well described in the
issues doc.

There are direct links to the issue tracker in other introductory docs,
so I see no reason not to have them here, to facilitate access.

* docs: update issues TOC

* Changes recommended by malept
2020-01-31 14:50:05 +09:00
Kilian Valkhof
95cfa1b0aa docs: fix missing import, explicitly use nativeTheme api (#21937)
* docs: fix missing import, explicitly use nativeTheme api

* Update docs/tutorial/mojave-dark-mode-guide.md

Co-Authored-By: Charles Kerr <ckerr@github.com>

* switch to nativeTheme event

Co-authored-by: Charles Kerr <ckerr@github.com>
2020-01-31 14:49:48 +09:00
bitdisaster
89eb309d0b feat: allow GUID parameter to avoid systray demotion on Windows (#21891)
* fix: systray icon demotion

Adding support for GUID parameter in Tray API.
In combination with signed binaries this allows to maintain
the position in the systray on Windows.

* unit tests

* make mac and linux compile
2020-01-31 14:37:03 +09:00
Shelley Vohr
2955c67c4e fix: prevent print crash on bad deviceName (#21946)
* fix: prevent print crash on bad deviceName

* address review feedback
2020-01-31 11:49:13 +09:00
Jeremy Apthorp
662b94f46e docs: windows don't need to be retained (#21957) 2020-01-30 14:15:35 -08:00
Shelley Vohr
23382e6e08 test: check actual output generated from printToPDF (#21949) 2020-01-30 20:12:35 +00:00
518 changed files with 6460 additions and 3731 deletions

View File

@@ -53,7 +53,7 @@ parameters:
# Build machines configs.
docker-image: &docker-image
docker:
- image: electronjs/build:3bba0fdee0d5650e751c2561f1806f9138dfe56a
- image: electronjs/build:d09fd95029bd8c1c73069888231b29688ef385ed
machine-linux-medium: &machine-linux-medium
<<: *docker-image
@@ -65,12 +65,12 @@ machine-linux-2xlarge: &machine-linux-2xlarge
machine-mac: &machine-mac
macos:
xcode: "10.3.0"
xcode: "11.1.0"
machine-mac-large: &machine-mac-large
resource_class: large
macos:
xcode: "10.3.0"
xcode: "11.1.0"
# Build configurations options.
env-testing-build: &env-testing-build
@@ -127,23 +127,32 @@ env-enable-sccache: &env-enable-sccache
env-send-slack-notifications: &env-send-slack-notifications
NOTIFY_SLACK: true
env-global: &env-global
ELECTRON_OUT_DIR: Default
env-linux-medium: &env-linux-medium
<<: *env-global
NUMBER_OF_NINJA_PROCESSES: 3
env-linux-2xlarge: &env-linux-2xlarge
<<: *env-global
NUMBER_OF_NINJA_PROCESSES: 34
env-linux-2xlarge-release: &env-linux-2xlarge-release
<<: *env-global
NUMBER_OF_NINJA_PROCESSES: 16
env-machine-mac: &env-machine-mac
<<: *env-global
NUMBER_OF_NINJA_PROCESSES: 6
env-mac-large: &env-mac-large
<<: *env-global
NUMBER_OF_NINJA_PROCESSES: 18
env-mac-large-release: &env-mac-large-release
<<: *env-global
NUMBER_OF_NINJA_PROCESSES: 8
env-ninja-status: &env-ninja-status
@@ -219,15 +228,6 @@ step-setup-env-for-build: &step-setup-env-for-build
command: |
# To find `gn` executable.
echo 'export CHROMIUM_BUILDTOOLS_PATH="'"$PWD"'/src/buildtools"' >> $BASH_ENV
# Setup Goma if applicable
if [ ! -z "$RAW_GOMA_AUTH" ] && [ "`uname`" == "Linux" ]; then
export USE_SCCACHE="false"
echo 'export USE_SCCACHE=false' >> $BASH_ENV
echo 'export USE_GOMA=true' >> $BASH_ENV
echo 'export NUMBER_OF_NINJA_PROCESSES=300' >> $BASH_ENV
echo $RAW_GOMA_AUTH > ~/.goma_oauth2_config
src/electron/external_binaries/goma/goma_ctl.py ensure_start
fi
if [ "$USE_SCCACHE" == "true" ]; then
# https://github.com/mozilla/sccache
@@ -240,6 +240,29 @@ step-setup-env-for-build: &step-setup-env-for-build
fi
fi
step-setup-goma-for-build: &step-setup-goma-for-build
run:
name: Setup Goma
command: |
echo 'export USE_GOMA=true' >> $BASH_ENV
if [ "`uname`" == "Linux" ]; then
echo 'export NUMBER_OF_NINJA_PROCESSES=300' >> $BASH_ENV
else
echo 'export NUMBER_OF_NINJA_PROCESSES=25' >> $BASH_ENV
fi
if [ ! -z "$RAW_GOMA_AUTH" ]; then
echo $RAW_GOMA_AUTH > ~/.goma_oauth2_config
fi
git clone https://github.com/electron/build-tools.git
cd build-tools
npm install
mkdir third_party
node -e "require('./src/utils/goma.js').downloadAndPrepare()"
node -e "require('./src/utils/goma.js').ensure()"
echo 'export GN_GOMA_FILE='`node -e "console.log(require('./src/utils/goma.js').gnFilePath)"` >> $BASH_ENV
echo 'export LOCAL_GOMA_DIR='`node -e "console.log(require('./src/utils/goma.js').dir)"` >> $BASH_ENV
cd ..
step-restore-brew-cache: &step-restore-brew-cache
restore_cache:
paths:
@@ -330,7 +353,7 @@ step-gn-gen-default: &step-gn-gen-default
command: |
cd src
if [ "$USE_GOMA" == "true" ]; then
gn gen out/Default --args="import(\"$GN_CONFIG\") import(\"//electron/build/args/goma.gn\") $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
gn gen out/Default --args="import(\"$GN_CONFIG\") import(\"$GN_GOMA_FILE\") $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
else
gn gen out/Default --args="import(\"$GN_CONFIG\") cc_wrapper=\"$SCCACHE_PATH\" $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
fi
@@ -423,14 +446,37 @@ step-electron-dist-store: &step-electron-dist-store
path: src/out/Default/dist.zip
destination: dist.zip
step-electron-maybe-chromedriver-gn-gen: &step-electron-maybe-chromedriver-gn-gen
run:
name: chromedriver GN gen
command: |
cd src
if [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
if [ "$USE_GOMA" == "true" ]; then
gn gen out/chromedriver --args="import(\"$GN_CONFIG\") import(\"//electron/build/args/goma.gn\") is_component_ffmpeg=false proprietary_codecs=false $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
else
gn gen out/chromedriver --args="import(\"$GN_CONFIG\") cc_wrapper=\"$SCCACHE_PATH\" is_component_ffmpeg=false proprietary_codecs=false $GN_EXTRA_ARGS $GN_BUILDFLAG_ARGS"
fi
fi
step-electron-chromedriver-build: &step-electron-chromedriver-build
run:
name: Build chromedriver.zip
command: |
cd src
ninja -C out/Default chrome/test/chromedriver -j $NUMBER_OF_NINJA_PROCESSES
electron/script/strip-binaries.py --target-cpu="$TARGET_ARCH" --file $PWD/out/Default/chromedriver
ninja -C out/Default electron:electron_chromedriver_zip
if [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
export CHROMEDRIVER_DIR="out/chromedriver"
else
export CHROMEDRIVER_DIR="out/Default"
fi
ninja -C $CHROMEDRIVER_DIR electron:electron_chromedriver -j $NUMBER_OF_NINJA_PROCESSES
if [ "`uname`" == "Linux" ]; then
electron/script/strip-binaries.py --target-cpu="$TARGET_ARCH" --file $PWD/$CHROMEDRIVER_DIR/chromedriver
fi
ninja -C $CHROMEDRIVER_DIR electron:electron_chromedriver_zip
if [ "$TARGET_ARCH" == "arm" ] || [ "$TARGET_ARCH" == "arm64" ]; then
cp out/chromedriver/chromedriver.zip out/Default
fi
step-electron-chromedriver-store: &step-electron-chromedriver-store
store_artifacts:
@@ -461,6 +507,7 @@ step-electron-publish: &step-electron-publish
if [ "`uname`" == "Darwin" ]; then
rm -rf src/out/Default/obj
fi
cd src/electron
if [ "$UPLOAD_TO_S3" == "1" ]; then
echo 'Uploading Electron release distribution to S3'
@@ -477,6 +524,7 @@ step-persist-data-for-tests: &step-persist-data-for-tests
# Build artifacts
- src/out/Default/dist.zip
- src/out/Default/mksnapshot.zip
- src/out/Default/chromedriver.zip
- src/out/Default/shell_browser_ui_unittests
- src/out/Default/gen/node_headers
- src/out/ffmpeg/ffmpeg.zip
@@ -507,6 +555,13 @@ step-mksnapshot-unzip: &step-mksnapshot-unzip
cd src/out/Default
unzip -o mksnapshot.zip
step-chromedriver-unzip: &step-chromedriver-unzip
run:
name: Unzip chromedriver.zip
command: |
cd src/out/Default
unzip -o chromedriver.zip
step-ffmpeg-gn-gen: &step-ffmpeg-gn-gen
run:
name: ffmpeg GN gen
@@ -544,6 +599,13 @@ step-verify-mksnapshot: &step-verify-mksnapshot
cd src
python electron/script/verify-mksnapshot.py --source-root "$PWD" --build-dir out/Default
step-verify-chromedriver: &step-verify-chromedriver
run:
name: Verify ChromeDriver
command: |
cd src
python electron/script/verify-chromedriver.py --source-root "$PWD" --build-dir out/Default
step-setup-linux-for-headless-testing: &step-setup-linux-for-headless-testing
run:
name: Setup for headless testing
@@ -560,7 +622,7 @@ step-show-sccache-stats: &step-show-sccache-stats
$SCCACHE_PATH -s
fi
if [ "$USE_GOMA" == "true" ]; then
src/electron/external_binaries/goma/goma_ctl.py stat
$LOCAL_GOMA_DIR/goma_ctl.py stat
fi
step-mksnapshot-build: &step-mksnapshot-build
@@ -569,6 +631,7 @@ step-mksnapshot-build: &step-mksnapshot-build
command: |
cd src
ninja -C out/Default electron:electron_mksnapshot -j $NUMBER_OF_NINJA_PROCESSES
gn desc out/Default v8:run_mksnapshot_default args > out/Default/mksnapshot_args
if [ "`uname`" != "Darwin" ]; then
if [ "$TARGET_ARCH" == "arm" ]; then
electron/script/strip-binaries.py --file $PWD/out/Default/clang_x86_v8_arm/mksnapshot
@@ -581,6 +644,7 @@ step-mksnapshot-build: &step-mksnapshot-build
fi
if [ "$SKIP_DIST_ZIP" != "1" ]; then
ninja -C out/Default electron:electron_mksnapshot_zip -j $NUMBER_OF_NINJA_PROCESSES
(cd out/Default; zip mksnapshot.zip mksnapshot_args gen/v8/embedded.S)
fi
step-mksnapshot-store: &step-mksnapshot-store
@@ -796,7 +860,7 @@ step-check-for-doc-only-change: &step-check-for-doc-only-change
command: |
cd src/electron
node script/yarn install --frozen-lockfile
if node script/doc-only-change.js --prNumber=$CIRCLE_PR_NUMBER --prURL=$CIRCLE_PULL_REQUEST; then
if node script/doc-only-change.js --prNumber=$CIRCLE_PR_NUMBER --prURL=$CIRCLE_PULL_REQUEST --prBranch=$CIRCLE_BRANCH; then
#PR is doc only change; save file with value true to indicate doc only change
echo "true" > .skip-ci-build
else
@@ -832,7 +896,7 @@ step-ts-compile: &step-ts-compile
command: |
cd src
ninja -C out/Default electron:default_app_js -j $NUMBER_OF_NINJA_PROCESSES
ninja -C out/Default electron:atom_js2c -j $NUMBER_OF_NINJA_PROCESSES
ninja -C out/Default electron:electron_js2c -j $NUMBER_OF_NINJA_PROCESSES
# Lists of steps.
steps-lint: &steps-lint
@@ -916,7 +980,6 @@ steps-checkout-and-save-cache: &steps-checkout-and-save-cache
sudo chown -R $(id -u):$(id -g) /portal
mv ./src /portal
- *step-save-src-cache
- *step-save-brew-cache
steps-electron-gn-check: &steps-electron-gn-check
steps:
@@ -928,64 +991,6 @@ steps-electron-gn-check: &steps-electron-gn-check
- *step-gn-gen-default
- *step-gn-check
steps-electron-build: &steps-electron-build
steps:
- attach_workspace:
at: .
- *step-maybe-early-exit-doc-only-change
- *step-depot-tools-add-to-path
- *step-setup-env-for-build
- *step-restore-brew-cache
- *step-get-more-space-on-mac
- *step-install-npm-deps-on-mac
- *step-fix-sync-on-mac
- *step-delete-git-directories
- *step-gn-gen-default
# Electron app
- *step-electron-build
- *step-maybe-electron-dist-strip
- *step-electron-dist-build
- *step-electron-dist-store
- *step-ninja-summary
# Native test targets
- *step-native-unittests-build
- *step-native-unittests-store
# Node.js headers
- *step-nodejs-headers-build
- *step-nodejs-headers-store
- *step-show-sccache-stats
# mksnapshot
- *step-mksnapshot-build
- *step-mksnapshot-store
- *step-maybe-cross-arch-snapshot
- *step-maybe-cross-arch-snapshot-store
# ffmpeg
- *step-ffmpeg-gn-gen
- *step-ffmpeg-build
- *step-ffmpeg-store
# hunspell
- *step-hunspell-build
- *step-hunspell-store
# Save all data needed for a further tests run.
- *step-persist-data-for-tests
- *step-maybe-generate-breakpad-symbols
- *step-maybe-zip-symbols
- *step-symbols-store
# Trigger tests on arm hardware if needed
- *step-maybe-trigger-arm-test
- *step-maybe-notify-slack-failure
steps-electron-ts-compile-for-doc-change: &steps-electron-ts-compile-for-doc-change
steps:
# Checkout - Copied ffrom steps-checkout
@@ -1052,6 +1057,7 @@ steps-electron-build-for-publish: &steps-electron-build-for-publish
- *step-mksnapshot-store
# chromedriver
- *step-electron-maybe-chromedriver-gn-gen
- *step-electron-chromedriver-build
- *step-electron-chromedriver-store
@@ -1081,8 +1087,8 @@ steps-chromedriver-build: &steps-chromedriver-build
- *step-depot-tools-add-to-path
- *step-setup-env-for-build
- *step-fix-sync-on-mac
- *step-gn-gen-default
- *step-electron-maybe-chromedriver-gn-gen
- *step-electron-chromedriver-build
- *step-electron-chromedriver-store
@@ -1144,6 +1150,18 @@ steps-verify-mksnapshot: &steps-verify-mksnapshot
- *step-verify-mksnapshot
- *step-maybe-notify-slack-failure
steps-verify-chromedriver: &steps-verify-chromedriver
steps:
- attach_workspace:
at: .
- *step-depot-tools-add-to-path
- *step-electron-dist-unzip
- *step-chromedriver-unzip
- *step-setup-linux-for-headless-testing
- *step-verify-chromedriver
- *step-maybe-notify-slack-failure
steps-tests: &steps-tests
steps:
- attach_workspace:
@@ -1152,6 +1170,7 @@ steps-tests: &steps-tests
- *step-depot-tools-add-to-path
- *step-electron-dist-unzip
- *step-mksnapshot-unzip
- *step-chromedriver-unzip
- *step-setup-linux-for-headless-testing
- *step-restore-brew-cache
- *step-fix-known-hosts-linux
@@ -1166,7 +1185,6 @@ steps-tests: &steps-tests
ELECTRON_DISABLE_SECURITY_WARNINGS: 1
command: |
cd src
export ELECTRON_OUT_DIR=Default
(cd electron && node script/yarn test --runners=main --enable-logging --files $(circleci tests glob spec-main/*-spec.ts | circleci tests split))
(cd electron && node script/yarn test --runners=remote --enable-logging --files $(circleci tests glob spec/*-spec.js | circleci tests split))
- run:
@@ -1185,6 +1203,7 @@ steps-tests: &steps-tests
path: src/junit
- *step-verify-mksnapshot
- *step-verify-chromedriver
- *step-maybe-notify-slack-failure
@@ -1201,7 +1220,6 @@ steps-test-nan: &steps-test-nan
name: Run Nan Tests
command: |
cd src
export ELECTRON_OUT_DIR=Default
node electron/script/nan-spec-runner.js
steps-test-node: &steps-test-node
@@ -1217,7 +1235,6 @@ steps-test-node: &steps-test-node
name: Run Node Tests
command: |
cd src
export ELECTRON_OUT_DIR=Default
node electron/script/node-spec-runner.js junit
- store_test_results:
path: src/junit
@@ -1295,6 +1312,7 @@ commands:
at: .
- *step-restore-brew-cache
- *step-install-gnutar-on-mac
- *step-save-brew-cache
- when:
condition: << parameters.checkout-and-assume-cache >>
steps:
@@ -1340,10 +1358,10 @@ commands:
steps:
- *step-depot-tools-add-to-path
- *step-setup-env-for-build
- *step-setup-goma-for-build
- *step-get-more-space-on-mac
- *step-fix-sync-on-mac
- *step-delete-git-directories
- *step-gn-gen-default
# Electron app
- when:
@@ -1374,6 +1392,11 @@ commands:
- *step-maybe-cross-arch-snapshot
- *step-maybe-cross-arch-snapshot-store
# chromedriver
- *step-electron-maybe-chromedriver-gn-gen
- *step-electron-chromedriver-build
- *step-electron-chromedriver-store
# ffmpeg
- *step-ffmpeg-gn-gen
- *step-ffmpeg-build
@@ -1510,7 +1533,6 @@ jobs:
environment:
<<: *env-linux-2xlarge
<<: *env-testing-build
<<: *env-enable-sccache
<<: *env-ninja-status
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps:
@@ -1524,7 +1546,6 @@ jobs:
environment:
<<: *env-linux-2xlarge
<<: *env-testing-build
<<: *env-enable-sccache
<<: *env-ninja-status
<<: *env-disable-run-as-node
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
@@ -1546,7 +1567,6 @@ jobs:
environment:
<<: *env-linux-medium
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *steps-chromedriver-build
@@ -1555,10 +1575,13 @@ jobs:
environment:
<<: *env-linux-2xlarge-release
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *env-ninja-status
<<: *steps-electron-build
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps:
- electron-build:
persist: true
checkout: true
linux-x64-publish:
<<: *machine-linux-2xlarge
@@ -1576,7 +1599,6 @@ jobs:
<<: *env-linux-2xlarge
<<: *env-ia32
<<: *env-testing-build
<<: *env-enable-sccache
<<: *env-ninja-status
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps:
@@ -1591,7 +1613,6 @@ jobs:
<<: *env-linux-medium
<<: *env-ia32
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *steps-chromedriver-build
@@ -1601,10 +1622,13 @@ jobs:
<<: *env-linux-2xlarge-release
<<: *env-ia32
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *env-ninja-status
<<: *steps-electron-build
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps:
- electron-build:
persist: true
checkout: true
linux-ia32-publish:
<<: *machine-linux-2xlarge
@@ -1624,7 +1648,6 @@ jobs:
<<: *env-linux-2xlarge
<<: *env-arm
<<: *env-testing-build
<<: *env-enable-sccache
<<: *env-ninja-status
TRIGGER_ARM_TEST: true
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
@@ -1640,7 +1663,6 @@ jobs:
<<: *env-linux-medium
<<: *env-arm
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *steps-chromedriver-build
@@ -1650,10 +1672,13 @@ jobs:
<<: *env-linux-2xlarge-release
<<: *env-arm
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *env-ninja-status
<<: *steps-electron-build
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps:
- electron-build:
persist: false
checkout: true
linux-arm-publish:
<<: *machine-linux-2xlarge
@@ -1673,7 +1698,6 @@ jobs:
<<: *env-linux-2xlarge
<<: *env-arm64
<<: *env-testing-build
<<: *env-enable-sccache
<<: *env-ninja-status
TRIGGER_ARM_TEST: true
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
@@ -1697,7 +1721,6 @@ jobs:
<<: *env-linux-medium
<<: *env-arm64
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *steps-chromedriver-build
@@ -1707,10 +1730,13 @@ jobs:
<<: *env-linux-2xlarge-release
<<: *env-arm64
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *env-ninja-status
<<: *steps-electron-build
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_arm=True --custom-var=checkout_arm64=True'
steps:
- electron-build:
persist: false
checkout: true
linux-arm64-publish:
<<: *machine-linux-2xlarge
@@ -1728,7 +1754,6 @@ jobs:
environment:
<<: *env-mac-large
<<: *env-testing-build
<<: *env-enable-sccache
<<: *env-ninja-status
<<: *env-macos-build
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
@@ -1751,7 +1776,6 @@ jobs:
environment:
<<: *env-machine-mac
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *steps-chromedriver-build
@@ -1760,9 +1784,14 @@ jobs:
environment:
<<: *env-mac-large
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-ninja-status
<<: *steps-electron-build
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
steps:
- electron-build:
persist: true
checkout: false
checkout-and-assume-cache: true
attach: false
osx-publish:
<<: *machine-mac-large
@@ -1780,7 +1809,6 @@ jobs:
<<: *env-mac-large
<<: *env-mas
<<: *env-testing-build
<<: *env-enable-sccache
<<: *env-ninja-status
<<: *env-macos-build
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
@@ -1804,7 +1832,6 @@ jobs:
environment:
<<: *env-machine-mac
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-send-slack-notifications
<<: *steps-chromedriver-build
@@ -1814,10 +1841,15 @@ jobs:
<<: *env-mac-large
<<: *env-mas
<<: *env-release-build
<<: *env-enable-sccache
<<: *env-ninja-status
<<: *steps-electron-build
GCLIENT_EXTRA_ARGS: '--custom-var=checkout_mac=True --custom-var=host_os=mac'
steps:
- electron-build:
persist: true
checkout: false
checkout-and-assume-cache: true
attach: false
mas-publish:
<<: *machine-mac-large
environment:
@@ -1835,7 +1867,6 @@ jobs:
environment:
<<: *env-linux-2xlarge
<<: *env-unittests
<<: *env-enable-sccache
<<: *env-headless-testing
<<: *steps-native-tests
@@ -1844,7 +1875,6 @@ jobs:
environment:
<<: *env-linux-2xlarge
<<: *env-unittests
<<: *env-enable-sccache
<<: *env-headless-testing
TESTS_ARGS: '--only-disabled-tests'
<<: *steps-native-tests
@@ -1854,7 +1884,6 @@ jobs:
environment:
<<: *env-linux-2xlarge
<<: *env-unittests
<<: *env-enable-sccache
<<: *env-headless-testing
TESTS_ARGS: '--include-disabled-tests'
<<: *steps-native-tests
@@ -1865,7 +1894,6 @@ jobs:
<<: *env-linux-2xlarge
<<: *env-browsertests
<<: *env-testing-build
<<: *env-enable-sccache
<<: *env-headless-testing
<<: *steps-native-tests
@@ -1918,6 +1946,14 @@ jobs:
<<: *env-send-slack-notifications
<<: *steps-verify-mksnapshot
linux-x64-verify-chromedriver:
<<: *machine-linux-medium
environment:
<<: *env-linux-medium
<<: *env-headless-testing
<<: *env-send-slack-notifications
<<: *steps-verify-chromedriver
linux-ia32-testing-tests:
<<: *machine-linux-medium
environment:
@@ -1973,6 +2009,14 @@ jobs:
<<: *env-send-slack-notifications
<<: *steps-verify-mksnapshot
linux-ia32-verify-chromedriver:
<<: *machine-linux-medium
environment:
<<: *env-linux-medium
<<: *env-headless-testing
<<: *env-send-slack-notifications
<<: *steps-verify-chromedriver
osx-testing-tests:
<<: *machine-mac-large
environment:
@@ -2003,6 +2047,13 @@ jobs:
<<: *env-send-slack-notifications
<<: *steps-verify-mksnapshot
osx-verify-chromedriver:
<<: *machine-mac
environment:
<<: *env-machine-mac
<<: *env-send-slack-notifications
<<: *steps-verify-chromedriver
mas-testing-tests:
<<: *machine-mac-large
environment:
@@ -2033,6 +2084,13 @@ jobs:
<<: *env-send-slack-notifications
<<: *steps-verify-mksnapshot
mas-verify-chromedriver:
<<: *machine-mac
environment:
<<: *env-machine-mac
<<: *env-send-slack-notifications
<<: *steps-verify-chromedriver
# Layer 4: Summary.
linux-x64-release-summary:
<<: *machine-linux-medium
@@ -2213,22 +2271,25 @@ workflows:
- *chromium-upgrade-branches
jobs:
- linux-checkout-fast
- linux-checkout-and-save-cache
- linux-x64-release:
requires:
- linux-checkout-fast
- linux-x64-release
- linux-x64-release-tests:
requires:
- linux-x64-release
- linux-x64-chromedriver:
requires:
- linux-checkout-fast
- linux-x64-verify-ffmpeg:
requires:
- linux-x64-release
- linux-x64-verify-mksnapshot:
requires:
- linux-x64-release
- linux-x64-chromedriver:
- linux-x64-verify-chromedriver:
requires:
- linux-checkout-fast
- linux-x64-release
- linux-x64-chromedriver
- linux-x64-release-summary:
requires:
- linux-x64-release
@@ -2236,21 +2297,23 @@ workflows:
- linux-x64-verify-ffmpeg
- linux-x64-chromedriver
- linux-ia32-release:
requires:
- linux-checkout-fast
- linux-ia32-release
- linux-ia32-release-tests:
requires:
- linux-ia32-release
- linux-ia32-chromedriver:
requires:
- linux-checkout-fast
- linux-ia32-verify-ffmpeg:
requires:
- linux-ia32-release
- linux-ia32-verify-mksnapshot:
requires:
- linux-ia32-release
- linux-ia32-chromedriver:
- linux-x64-verify-chromedriver:
requires:
- linux-checkout-fast
- linux-ia32-release
- linux-ia32-chromedriver
- linux-ia32-release-summary:
requires:
- linux-ia32-release
@@ -2258,9 +2321,7 @@ workflows:
- linux-ia32-verify-ffmpeg
- linux-ia32-chromedriver
- linux-arm-release:
requires:
- linux-checkout-fast
- linux-arm-release
- linux-arm-chromedriver:
requires:
- linux-checkout-fast
@@ -2269,10 +2330,7 @@ workflows:
- linux-arm-release
- linux-arm-chromedriver
- linux-arm64-release:
requires:
- linux-checkout-fast
- linux-arm64-release
- linux-arm64-chromedriver:
requires:
- linux-checkout-fast
@@ -2292,22 +2350,27 @@ workflows:
- *chromium-upgrade-branches
jobs:
- mac-checkout-fast
- mac-checkout-and-save-cache
- osx-release:
requires:
- mac-checkout-fast
- mac-checkout-and-save-cache
- osx-release-tests:
requires:
- osx-release
- osx-chromedriver:
requires:
- mac-checkout-fast
- osx-verify-ffmpeg:
requires:
- osx-release
- osx-verify-mksnapshot:
requires:
- osx-release
- osx-chromedriver:
- osx-verify-chromedriver:
requires:
- mac-checkout-fast
- osx-release
- osx-chromedriver
- osx-release-summary:
requires:
- osx-release
@@ -2317,19 +2380,23 @@ workflows:
- mas-release:
requires:
- mac-checkout-fast
- mac-checkout-and-save-cache
- mas-release-tests:
requires:
- mas-release
- mas-chromedriver:
requires:
- mac-checkout-fast
- mas-verify-ffmpeg:
requires:
- mas-release
- mas-verify-mksnapshot:
requires:
- mas-release
- mas-chromedriver:
- mas-verify-chromedriver:
requires:
- mac-checkout-fast
- mas-release
- mas-chromedriver
- mas-release-summary:
requires:
- mas-release

12
.github/CODEOWNERS vendored
View File

@@ -3,20 +3,10 @@
# https://help.github.com/articles/about-codeowners
# https://git-scm.com/docs/gitignore
# Most stuff in here is owned by the Community & Safety WG...
/.github/* @electron/wg-community
# ...except the Admin WG maintains this file.
/.github/CODEOWNERS @electron/wg-admin
# Upgrades WG
/patches/ @electron/wg-upgrades
DEPS @electron/wg-upgrades
# Docs & Tooling WG
/default_app/ @electron/wg-docs-tools
/docs/ @electron/wg-docs-tools
# Releases WG
/npm/ @electron/wg-releases
/script/release @electron/wg-releases
/script/release @electron/wg-releases

View File

@@ -136,7 +136,7 @@ webpack_build("electron_content_script_bundle") {
out_file = "$target_gen_dir/js2c/content_script_bundle.js"
}
copy("atom_js2c_copy") {
copy("electron_js2c_copy") {
sources = [
"lib/common/asar.js",
"lib/common/asar_init.js",
@@ -144,12 +144,12 @@ copy("atom_js2c_copy") {
outputs = [ "$target_gen_dir/js2c/{{source_file_part}}" ]
}
action("atom_js2c") {
action("electron_js2c") {
deps = [
":atom_js2c_copy",
":electron_browser_bundle",
":electron_content_script_bundle",
":electron_isolated_renderer_bundle",
":electron_js2c_copy",
":electron_renderer_bundle",
":electron_sandboxed_renderer_bundle",
":electron_worker_bundle",
@@ -170,7 +170,7 @@ action("atom_js2c") {
]
inputs = sources + [ "//third_party/electron_node/tools/js2c.py" ]
outputs = [ "$root_gen_dir/atom_natives.cc" ]
outputs = [ "$root_gen_dir/electron_natives.cc" ]
script = "tools/js2c.py"
args = [ rebase_path("//third_party/electron_node") ] +
@@ -312,7 +312,7 @@ source_set("electron_lib") {
]
deps = [
":atom_js2c",
":electron_js2c",
":electron_version_header",
":manifests",
":resources",
@@ -468,7 +468,7 @@ source_set("electron_lib") {
"shell/browser/ui/views/autofill_popup_view.h",
]
if (is_mas_build) {
sources += [ "shell/browser/api/atom_api_app_mas.mm" ]
sources += [ "shell/browser/api/electron_api_app_mas.mm" ]
sources -= [
"shell/browser/auto_updater_mac.mm",
"shell/common/crash_reporter/crash_reporter_mac.h",
@@ -595,27 +595,27 @@ source_set("electron_lib") {
deps += [ "//third_party/webrtc/modules/desktop_capture" ]
}
sources += [
"shell/browser/api/atom_api_desktop_capturer.cc",
"shell/browser/api/atom_api_desktop_capturer.h",
"shell/browser/api/electron_api_desktop_capturer.cc",
"shell/browser/api/electron_api_desktop_capturer.h",
]
}
if (enable_view_api) {
sources += [
"shell/browser/api/views/atom_api_box_layout.cc",
"shell/browser/api/views/atom_api_box_layout.h",
"shell/browser/api/views/atom_api_button.cc",
"shell/browser/api/views/atom_api_button.h",
"shell/browser/api/views/atom_api_label_button.cc",
"shell/browser/api/views/atom_api_label_button.h",
"shell/browser/api/views/atom_api_layout_manager.cc",
"shell/browser/api/views/atom_api_layout_manager.h",
"shell/browser/api/views/atom_api_md_text_button.cc",
"shell/browser/api/views/atom_api_md_text_button.h",
"shell/browser/api/views/atom_api_resize_area.cc",
"shell/browser/api/views/atom_api_resize_area.h",
"shell/browser/api/views/atom_api_text_field.cc",
"shell/browser/api/views/atom_api_text_field.h",
"shell/browser/api/views/electron_api_box_layout.cc",
"shell/browser/api/views/electron_api_box_layout.h",
"shell/browser/api/views/electron_api_button.cc",
"shell/browser/api/views/electron_api_button.h",
"shell/browser/api/views/electron_api_label_button.cc",
"shell/browser/api/views/electron_api_label_button.h",
"shell/browser/api/views/electron_api_layout_manager.cc",
"shell/browser/api/views/electron_api_layout_manager.h",
"shell/browser/api/views/electron_api_md_text_button.cc",
"shell/browser/api/views/electron_api_md_text_button.h",
"shell/browser/api/views/electron_api_resize_area.cc",
"shell/browser/api/views/electron_api_resize_area.h",
"shell/browser/api/views/electron_api_text_field.cc",
"shell/browser/api/views/electron_api_text_field.h",
]
}
@@ -700,14 +700,12 @@ if (is_mac) {
outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
}
if (!is_component_build) {
if (!is_component_build && is_component_ffmpeg) {
bundle_data("electron_framework_libraries") {
sources = []
public_deps = []
if (is_component_ffmpeg) {
sources += [ "$root_out_dir/libffmpeg.dylib" ]
public_deps += [ "//third_party/ffmpeg:ffmpeg" ]
}
sources += [ "$root_out_dir/libffmpeg.dylib" ]
public_deps += [ "//third_party/ffmpeg:ffmpeg" ]
outputs = [ "{{bundle_contents_dir}}/Libraries/{{source_file_part}}" ]
}
} else {
@@ -816,7 +814,7 @@ if (is_mac) {
}
defines = [ "HELPER_EXECUTABLE" ]
sources = filenames.app_sources
sources += [ "shell/common/atom_constants.cc" ]
sources += [ "shell/common/electron_constants.cc" ]
include_dirs = [ "." ]
info_plist = "shell/renderer/resources/mac/Info.plist"
extra_substitutions =
@@ -918,7 +916,7 @@ if (is_mac) {
mac_app_bundle("electron_app") {
output_name = electron_product_name
sources = filenames.app_sources
sources += [ "shell/common/atom_constants.cc" ]
sources += [ "shell/common/electron_constants.cc" ]
include_dirs = [ "." ]
deps = [
":electron_app_framework_bundle_data",
@@ -1240,12 +1238,20 @@ dist_zip("electron_ffmpeg_zip") {
outputs = [ "$root_build_dir/ffmpeg.zip" ]
}
electron_chromedriver_deps = [
":licenses",
"//chrome/test/chromedriver",
"//electron/buildflags",
]
group("electron_chromedriver") {
testonly = true
public_deps = electron_chromedriver_deps
}
dist_zip("electron_chromedriver_zip") {
testonly = true
data_deps = [
":licenses",
"//chrome/test/chromedriver",
]
data_deps = electron_chromedriver_deps
outputs = [ "$root_build_dir/chromedriver.zip" ]
}

2
DEPS
View File

@@ -12,7 +12,7 @@ gclient_gn_args = [
vars = {
'chromium_version':
'edc531fae69669e1d2c51901c686b055da965f2d',
'ddac4c3cc1528254008f9e7a2aea5d4426906bfd',
'node_version':
'v12.14.1',
'nan_version':

View File

@@ -1 +1 @@
9.0.0-nightly.20200130
10.0.0-nightly.20200210

View File

@@ -118,19 +118,29 @@ build_script:
}
}
- 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
.\src\electron\script\start-goma.ps1 -gomaDir "$pwd\src\electron\external_binaries\goma"
if ($env:GN_CONFIG -ne 'release') {
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
node -e "require('./src/utils/goma.js').downloadAndPrepare()"
$env:GN_GOMA_FILE = node -e "console.log(require('./src/utils/goma.js').gnFilePath)"
$env:LOCAL_GOMA_DIR = node -e "console.log(require('./src/utils/goma.js').dir)"
cd ..
.\src\electron\script\start-goma.ps1 -gomaDir $env:LOCAL_GOMA_DIR
}
- cd src
- set BUILD_CONFIG_PATH=//electron/build/args/%GN_CONFIG%.gn
- if DEFINED RAW_GOMA_AUTH (gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") import(\"//electron/build/args/goma.gn\") %GN_EXTRA_ARGS% ") else (gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") %GN_EXTRA_ARGS% cc_wrapper=\"%SCCACHE_PATH%\"")
- if DEFINED GN_GOMA_FILE (gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") import(\"%GN_GOMA_FILE%\") %GN_EXTRA_ARGS% ") else (gn gen out/Default "--args=import(\"%BUILD_CONFIG_PATH%\") %GN_EXTRA_ARGS% cc_wrapper=\"%SCCACHE_PATH%\"")
- gn check out/Default //electron:electron_lib
- gn check out/Default //electron:electron_app
- gn check out/Default //electron:manifests
- gn check out/Default //electron/shell/common/api:mojo
- if DEFINED RAW_GOMA_AUTH (ninja -j 300 -C out/Default electron:electron_app) else (ninja -C out/Default electron:electron_app)
- if DEFINED GN_GOMA_FILE (ninja -j 300 -C out/Default electron:electron_app) else (ninja -C out/Default electron:electron_app)
- if "%GN_CONFIG%"=="testing" ( python C:\depot_tools\post_build_ninja_summary.py -C out\Default )
- gn gen out/ffmpeg "--args=import(\"//electron/build/args/ffmpeg.gn\") %GN_EXTRA_ARGS%"
- ninja -C out/ffmpeg electron:electron_ffmpeg_zip
@@ -140,7 +150,7 @@ build_script:
- ninja -C out/Default electron:hunspell_dictionaries_zip
- ninja -C out/Default electron:electron_chromedriver_zip
- ninja -C out/Default third_party/electron_node:headers
- if DEFINED RAW_GOMA_AUTH (python electron\external_binaries\goma\goma_ctl.py stat)
- if "%GN_CONFIG%"=="testing" ( python %LOCAL_GOMA_DIR%\goma_ctl.py stat )
- python electron/build/profile_toolchain.py --output-json=out/Default/windows_toolchain_profile.json
- appveyor PushArtifact out/Default/windows_toolchain_profile.json
- appveyor PushArtifact out/Default/dist.zip
@@ -187,9 +197,12 @@ test_script:
- if "%RUN_TESTS%"=="true" ( echo Running test suite & node script/yarn test -- --enable-logging)
- cd ..
- if "%RUN_TESTS%"=="true" ( echo Verifying non proprietary ffmpeg & python electron\script\verify-ffmpeg.py --build-dir out\Default --source-root %cd% --ffmpeg-path out\ffmpeg )
- echo "About to verify mksnapshot"
- echo "About to verify mksnapshot"
- if "%RUN_TESTS%"=="true" ( gn desc out\Default v8:run_mksnapshot_default args > out\Default\mksnapshot_args )
- if "%RUN_TESTS%"=="true" ( echo Verifying mksnapshot & python electron\script\verify-mksnapshot.py --build-dir out\Default --source-root %cd% )
- echo "Done verifying mksnapshot"
- if "%RUN_TESTS%"=="true" ( echo Verifying chromedriver & python electron\script\verify-chromedriver.py --build-dir out\Default --source-root %cd% )
- echo "Done verifying chromedriver"
deploy_script:
- cd electron
- ps: >-

View File

@@ -23,3 +23,5 @@ is_cfi = false
# TODO: disabled due to crashes. re-enable.
enable_osr = false
enable_electron_extensions = true

View File

@@ -9,6 +9,7 @@ EXTENSIONS_TO_SKIP = [
'.pdb',
'.mojom.js',
'.mojom-lite.js',
'.info'
]
PATHS_TO_SKIP = [

View File

@@ -68,7 +68,6 @@ static_library("chrome") {
]
deps = [
"//chrome/browser:resource_prefetch_predictor_proto",
"//chrome/browser/ssl:proto",
"//components/feature_engagement:buildflags",
]

View File

@@ -56,7 +56,7 @@
#include <stddef.h>
#include "shell/browser/browser.h"
#include "shell/common/atom_command_line.h"
#include "shell/common/electron_command_line.h"
#include "base/base_paths.h"
#include "base/bind.h"
@@ -826,7 +826,7 @@ ProcessSingleton::NotifyResult ProcessSingleton::NotifyOtherProcessWithTimeout(
return PROCESS_NONE;
to_send.append(current_dir.value());
const std::vector<std::string>& argv = electron::AtomCommandLine::argv();
const std::vector<std::string>& argv = electron::ElectronCommandLine::argv();
for (std::vector<std::string>::const_iterator it = argv.begin();
it != argv.end(); ++it) {
to_send.push_back(kTokenDelimiter);

View File

@@ -112,6 +112,7 @@ These individual tutorials expand on topics discussed in the guide above.
* [Process Object](api/process.md)
* [Supported Command Line Switches](api/command-line-switches.md)
* [Environment Variables](api/environment-variables.md)
* [Chrome Extensions Support](api/extensions.md)
* [Breaking API Changes](breaking-changes.md)
### Custom DOM Elements:

View File

@@ -18,7 +18,7 @@ method, i.e.
```javascript
const { app, globalShortcut } = require('electron')
app.on('ready', () => {
app.whenReady().then(() => {
// Register a 'CommandOrControl+Y' shortcut listener.
globalShortcut.register('CommandOrControl+Y', () => {
// Do stuff when Y and either Command/Control is pressed.

View File

@@ -34,10 +34,11 @@ Returns:
* `launchInfo` unknown _macOS_
Emitted when Electron has finished initializing. On macOS, `launchInfo` holds
the `userInfo` of the `NSUserNotification` that was used to open the application,
if it was launched from Notification Center. You can call `app.isReady()` to
check if this event has already fired.
Emitted once, when Electron has finished initializing. On macOS, `launchInfo`
holds the `userInfo` of the `NSUserNotification` that was used to open the
application, if it was launched from Notification Center. You can also call
`app.isReady()` to check if this event has already fired and `app.whenReady()`
to get a Promise that is fulfilled when Electron is initialized.
### Event: 'window-all-closed'
@@ -545,6 +546,7 @@ app.exit(0)
### `app.isReady()`
Returns `Boolean` - `true` if Electron has finished initializing, `false` otherwise.
See also `app.whenReady()`.
### `app.whenReady()`
@@ -935,7 +937,7 @@ if (!gotTheLock) {
})
// Create myWindow, load the rest of the app, etc...
app.on('ready', () => {
app.whenReady().then(() => {
})
}
```
@@ -992,6 +994,17 @@ Updates the current activity if its type matches `type`, merging the entries fro
Changes the [Application User Model ID][app-user-model-id] to `id`.
### `app.setActivationPolicy(policy)` _macOS_
* `policy` String - Can be 'regular', 'accessory', or 'prohibited'.
Sets the activation policy for a given app.
Activation policy types:
* 'regular' - The application is an ordinary app that appears in the Dock and may have a user interface.
* 'accessory' - The application doesnt appear in the Dock and doesnt have a menu bar, but it may be activated programmatically or by clicking on one of its windows.
* 'prohibited' - The application doesnt appear in the Dock and may not create windows or be activated.
### `app.importCertificate(options, callback)` _Linux_
* `options` Object

View File

@@ -15,12 +15,9 @@ relative to its owning window. It is meant to be an alternative to the
// In the main process.
const { BrowserView, BrowserWindow } = require('electron')
let win = new BrowserWindow({ width: 800, height: 600 })
win.on('closed', () => {
win = null
})
const win = new BrowserWindow({ width: 800, height: 600 })
let view = new BrowserView()
const view = new BrowserView()
win.setBrowserView(view)
view.setBounds({ x: 0, y: 0, width: 300, height: 300 })
view.webContents.loadURL('https://electronjs.org')

View File

@@ -11,10 +11,7 @@ const { BrowserWindow } = require('electron')
// Or use `remote` from the renderer process.
// const { BrowserWindow } = require('electron').remote
let win = new BrowserWindow({ width: 800, height: 600 })
win.on('closed', () => {
win = null
})
const win = new BrowserWindow({ width: 800, height: 600 })
// Load a remote URL
win.loadURL('https://github.com')
@@ -680,7 +677,7 @@ Returns `BrowserWindow | null` - The window that owns the given `browserView`. I
Returns `BrowserWindow` - The window with the given `id`.
#### `BrowserWindow.addExtension(path)`
#### `BrowserWindow.addExtension(path)` _Deprecated_
* `path` String
@@ -691,7 +688,10 @@ The method will also not return if the extension's manifest is missing or incomp
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
#### `BrowserWindow.removeExtension(name)`
**Note:** This method is deprecated. Instead, use
[`ses.loadExtension(path)`](session.md#sesloadextensionpath).
#### `BrowserWindow.removeExtension(name)` _Deprecated_
* `name` String
@@ -700,7 +700,10 @@ Remove a Chrome extension by name.
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
#### `BrowserWindow.getExtensions()`
**Note:** This method is deprecated. Instead, use
[`ses.removeExtension(extension_id)`](session.md#sesremoveextensionextensionid).
#### `BrowserWindow.getExtensions()` _Deprecated_
Returns `Record<String, ExtensionInfo>` - The keys are the extension names and each value is
an Object containing `name` and `version` properties.
@@ -708,7 +711,10 @@ an Object containing `name` and `version` properties.
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
#### `BrowserWindow.addDevToolsExtension(path)`
**Note:** This method is deprecated. Instead, use
[`ses.getAllExtensions()`](session.md#sesgetallextensions).
#### `BrowserWindow.addDevToolsExtension(path)` _Deprecated_
* `path` String
@@ -724,7 +730,10 @@ The method will also not return if the extension's manifest is missing or incomp
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
#### `BrowserWindow.removeDevToolsExtension(name)`
**Note:** This method is deprecated. Instead, use
[`ses.loadExtension(path)`](session.md#sesloadextensionpath).
#### `BrowserWindow.removeDevToolsExtension(name)` _Deprecated_
* `name` String
@@ -733,7 +742,10 @@ Remove a DevTools extension by name.
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
#### `BrowserWindow.getDevToolsExtensions()`
**Note:** This method is deprecated. Instead, use
[`ses.removeExtension(extension_id)`](session.md#sesremoveextensionextensionid).
#### `BrowserWindow.getDevToolsExtensions()` _Deprecated_
Returns `Record<string, ExtensionInfo>` - The keys are the extension names and each value is
an Object containing `name` and `version` properties.
@@ -750,6 +762,9 @@ console.log(installed)
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
**Note:** This method is deprecated. Instead, use
[`ses.getAllExtensions()`](session.md#sesgetallextensions).
### Instance Properties
Objects created with `new BrowserWindow` have the following properties:

View File

@@ -11,85 +11,71 @@ const { app } = require('electron')
app.commandLine.appendSwitch('remote-debugging-port', '8315')
app.commandLine.appendSwitch('host-rules', 'MAP * 127.0.0.1')
app.on('ready', () => {
app.whenReady().then(() => {
// Your code here
})
```
## --ignore-connections-limit=`domains`
## Electron CLI Flags
Ignore the connections limit for `domains` list separated by `,`.
### --auth-server-whitelist=`url`
## --disable-http-cache
Disables the disk cache for HTTP requests.
## --disable-http2
Disable HTTP/2 and SPDY/3.1 protocols.
## --lang
Set a custom locale.
## --inspect=`port` and --inspect-brk=`port`
Debug-related flags, see the [Debugging the Main Process][debugging-main-process] guide for details.
## --remote-debugging-port=`port`
Enables remote debugging over HTTP on the specified `port`.
## --disk-cache-size=`size`
Forces the maximum disk space to be used by the disk cache, in bytes.
## --js-flags=`flags`
Specifies the flags passed to the Node.js engine. It has to be passed when starting
Electron if you want to enable the `flags` in the main process.
```sh
$ electron --js-flags="--harmony_proxies --harmony_collections" your-app
```
See the [Node.js documentation][node-cli] or run `node --help` in your terminal for a list of available flags. Additionally, run `node --v8-options` to see a list of flags that specifically refer to Node.js's V8 JavaScript engine.
## --proxy-server=`address:port`
Use a specified proxy server, which overrides the system setting. This switch
only affects requests with HTTP protocol, including HTTPS and WebSocket
requests. It is also noteworthy that not all proxy servers support HTTPS and
WebSocket requests. The proxy URL does not support username and password
authentication [per Chromium issue](https://bugs.chromium.org/p/chromium/issues/detail?id=615947).
## --proxy-bypass-list=`hosts`
Instructs Electron to bypass the proxy server for the given semi-colon-separated
list of hosts. This flag has an effect only if used in tandem with
`--proxy-server`.
A comma-separated list of servers for which integrated authentication is enabled.
For example:
```javascript
const { app } = require('electron')
app.commandLine.appendSwitch('proxy-bypass-list', '<local>;*.google.com;*foo.com;1.2.3.4:5678')
```sh
--auth-server-whitelist='*example.com, *foobar.com, *baz'
```
Will use the proxy server for all hosts except for local addresses (`localhost`,
`127.0.0.1` etc.), `google.com` subdomains, hosts that contain the suffix
`foo.com` and anything at `1.2.3.4:5678`.
then any `url` ending with `example.com`, `foobar.com`, `baz` will be considered
for integrated authentication. Without `*` prefix the URL has to match exactly.
## --proxy-pac-url=`url`
### --auth-negotiate-delegate-whitelist=`url`
Uses the PAC script at the specified `url`.
A comma-separated list of servers for which delegation of user credentials is required.
Without `*` prefix the URL has to match exactly.
## --no-proxy-server
### --disable-http-cache
Don't use a proxy server and always make direct connections. Overrides any other
proxy server flags that are passed.
Disables the disk cache for HTTP requests.
## --host-rules=`rules`
### --disable-http2
Disable HTTP/2 and SPDY/3.1 protocols.
### --disable-renderer-backgrounding
Prevents Chromium from lowering the priority of invisible pages' renderer
processes.
This flag is global to all renderer processes, if you only want to disable
throttling in one window, you can take the hack of
[playing silent audio][play-silent-audio].
### --disk-cache-size=`size`
Forces the maximum disk space to be used by the disk cache, in bytes.
### --enable-api-filtering-logging
Enables caller stack logging for the following APIs (filtering events):
- `desktopCapturer.getSources()` / `desktop-capturer-get-sources`
- `remote.require()` / `remote-require`
- `remote.getGlobal()` / `remote-get-builtin`
- `remote.getBuiltin()` / `remote-get-global`
- `remote.getCurrentWindow()` / `remote-get-current-window`
- `remote.getCurrentWebContents()` / `remote-get-current-web-contents`
### --enable-logging
Prints Chromium's logging into console.
This switch can not be used in `app.commandLine.appendSwitch` since it is parsed
earlier than user's app is loaded, but you can set the `ELECTRON_ENABLE_LOGGING`
environment variable to achieve the same effect.
### --host-rules=`rules`
A comma-separated list of `rules` that control how hostnames are mapped.
@@ -107,69 +93,96 @@ These mappings apply to the endpoint host in a net request (the TCP connect
and host resolver in a direct connection, and the `CONNECT` in an HTTP proxy
connection, and the endpoint host in a `SOCKS` proxy connection).
## --host-resolver-rules=`rules`
### --host-resolver-rules=`rules`
Like `--host-rules` but these `rules` only apply to the host resolver.
## --auth-server-whitelist=`url`
A comma-separated list of servers for which integrated authentication is enabled.
For example:
```sh
--auth-server-whitelist='*example.com, *foobar.com, *baz'
```
then any `url` ending with `example.com`, `foobar.com`, `baz` will be considered
for integrated authentication. Without `*` prefix the URL has to match exactly.
## --auth-negotiate-delegate-whitelist=`url`
A comma-separated list of servers for which delegation of user credentials is required.
Without `*` prefix the URL has to match exactly.
## --ignore-certificate-errors
### --ignore-certificate-errors
Ignores certificate related errors.
## --ppapi-flash-path=`path`
### --ignore-connections-limit=`domains`
Sets the `path` of the pepper flash plugin.
Ignore the connections limit for `domains` list separated by `,`.
## --ppapi-flash-version=`version`
### --js-flags=`flags`
Sets the `version` of the pepper flash plugin.
Specifies the flags passed to the Node.js engine. It has to be passed when starting
Electron if you want to enable the `flags` in the main process.
## --log-net-log=`path`
```sh
$ electron --js-flags="--harmony_proxies --harmony_collections" your-app
```
See the [Node.js documentation][node-cli] or run `node --help` in your terminal for a list of available flags. Additionally, run `node --v8-options` to see a list of flags that specifically refer to Node.js's V8 JavaScript engine.
### --lang
Set a custom locale.
### --log-net-log=`path`
Enables net log events to be saved and writes them to `path`.
## --disable-renderer-backgrounding
### --no-proxy-server
Prevents Chromium from lowering the priority of invisible pages' renderer
processes.
Don't use a proxy server and always make direct connections. Overrides any other
proxy server flags that are passed.
This flag is global to all renderer processes, if you only want to disable
throttling in one window, you can take the hack of
[playing silent audio][play-silent-audio].
### --no-sandbox
## --enable-logging
Disables Chromium sandbox, which is now enabled by default.
Should only be used for testing.
Prints Chromium's logging into console.
### --proxy-bypass-list=`hosts`
This switch can not be used in `app.commandLine.appendSwitch` since it is parsed
earlier than user's app is loaded, but you can set the `ELECTRON_ENABLE_LOGGING`
environment variable to achieve the same effect.
Instructs Electron to bypass the proxy server for the given semi-colon-separated
list of hosts. This flag has an effect only if used in tandem with
`--proxy-server`.
## --v=`log_level`
For example:
```javascript
const { app } = require('electron')
app.commandLine.appendSwitch('proxy-bypass-list', '<local>;*.google.com;*foo.com;1.2.3.4:5678')
```
Will use the proxy server for all hosts except for local addresses (`localhost`,
`127.0.0.1` etc.), `google.com` subdomains, hosts that contain the suffix
`foo.com` and anything at `1.2.3.4:5678`.
### --proxy-pac-url=`url`
Uses the PAC script at the specified `url`.
### --proxy-server=`address:port`
Use a specified proxy server, which overrides the system setting. This switch
only affects requests with HTTP protocol, including HTTPS and WebSocket
requests. It is also noteworthy that not all proxy servers support HTTPS and
WebSocket requests. The proxy URL does not support username and password
authentication [per Chromium issue](https://bugs.chromium.org/p/chromium/issues/detail?id=615947).
### --remote-debugging-port=`port`
Enables remote debugging over HTTP on the specified `port`.
### --ppapi-flash-path=`path`
Sets the `path` of the pepper flash plugin.
### --ppapi-flash-version=`version`
Sets the `version` of the pepper flash plugin.
### --v=`log_level`
Gives the default maximal active V-logging level; 0 is the default. Normally
positive values are used for V-logging levels.
This switch only works when `--enable-logging` is also passed.
## --vmodule=`pattern`
### --vmodule=`pattern`
Gives the per-module maximal V-logging levels to override the value given by
`--v`. E.g. `my_module=2,foo*=3` would change the logging level for all code in
@@ -181,20 +194,38 @@ logging level for all code in the source files under a `foo/bar` directory.
This switch only works when `--enable-logging` is also passed.
## --enable-api-filtering-logging
## Node.js Flags
Enables caller stack logging for the following APIs (filtering events):
- `desktopCapturer.getSources()` / `desktop-capturer-get-sources`
- `remote.require()` / `remote-require`
- `remote.getGlobal()` / `remote-get-builtin`
- `remote.getBuiltin()` / `remote-get-global`
- `remote.getCurrentWindow()` / `remote-get-current-window`
- `remote.getCurrentWebContents()` / `remote-get-current-web-contents`
Electron supports some of the [CLI flags][node-cli] supported by Node.js.
## --no-sandbox
**Note:** Passing unsupported command line switches to Electron when it is not running in `ELECTRON_RUN_AS_NODE` will have no effect.
Disables Chromium sandbox, which is now enabled by default.
Should only be used for testing.
### --inspect-brk[=[host:]port]
Activate inspector on host:port and break at start of user script. Default host:port is 127.0.0.1:9229.
Aliased to `--debug-brk=[host:]port`.
### --inspect-port=[host:]port
Set the `host:port` to be used when the inspector is activated. Useful when activating the inspector by sending the SIGUSR1 signal. Default host is `127.0.0.1`.
Aliased to `--debug-port=[host:]port`.
### --inspect[=[host:]port]
Activate inspector on `host:port`. Default is `127.0.0.1:9229`.
V8 inspector integration allows tools such as Chrome DevTools and IDEs to debug and profile Electron instances. The tools attach to Electron instances via a tcp port and communicate using the [Chrome DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/).
See the [Debugging the Main Process][debugging-main-process] guide for more details.
Aliased to `--debug[=[host:]port`.
### --inspect-publish-uid=stderr,http
Specify ways of the inspector web socket url exposure.
By default inspector websocket url is available in stderr and under /json/list endpoint on http://host:port/json/list.
[app]: app.md
[append-switch]: app.md#appcommandlineappendswitchswitch-value

View File

@@ -13,7 +13,7 @@ module is emitted.
```javascript
const { app, contentTracing } = require('electron')
app.on('ready', () => {
app.whenReady().then(() => {
(async () => {
await contentTracing.startRecording({
include_categories: ['*']

View File

@@ -53,16 +53,23 @@ Unsupported options are:
### `GOOGLE_API_KEY`
You can provide an API key for making requests to Google's geocoding webservice. To do this, place the following code in your main process
file, before opening any browser windows that will make geocoding requests:
Geolocation support in Electron requires the use of Google Cloud Platform's
geolocation webservice. To enable this feature, acquire a
[Google API key](https://developers.google.com/maps/documentation/geolocation/get-api-key)
and place the following code in your main process file, before opening any
browser windows that will make geolocation requests:
```javascript
process.env.GOOGLE_API_KEY = 'YOUR_KEY_HERE'
```
For instructions on how to acquire a Google API key, visit [this page](https://developers.google.com/maps/documentation/javascript/get-api-key).
By default, a newly generated Google API key may not be allowed to make
geocoding requests. To enable geocoding requests, visit [this page](https://developers.google.com/maps/documentation/geocoding/get-api-key).
By default, a newly generated Google API key may not be allowed to make geolocation requests.
To enable the geolocation webservice for your project, enable it through the
[API library](https://console.cloud.google.com/apis/library).
N.B. You will need to add a
[Billing Account](https://cloud.google.com/billing/docs/how-to/payment-methods#add_a_payment_method)
to the project associated to the API key for the geolocation webservice to work.
### `ELECTRON_NO_ASAR`
@@ -73,6 +80,18 @@ and spawned child processes that set `ELECTRON_RUN_AS_NODE`.
Starts the process as a normal Node.js process.
In this mode, you will be able to pass [cli options](https://nodejs.org/api/cli.html) to Node.js as
you would when running the normal Node.js executable, with the exception of the following flags:
* "--openssl-config"
* "--use-bundled-ca"
* "--use-openssl-ca",
* "--force-fips"
* "--enable-fips"
These flags are disabled owing to the fact that Electron uses BoringSSL instead of OpenSSL when building Node.js'
`crypto` module, and so will not work as designed.
### `ELECTRON_NO_ATTACH_CONSOLE` _Windows_
Don't attach to the current console session.

101
docs/api/extensions.md Normal file
View File

@@ -0,0 +1,101 @@
# Chrome Extension Support
Electron supports a subset of the [Chrome Extensions
API][chrome-extensions-api-index], primarily to support DevTools extensions and
Chromium-internal extensions, but it also happens to support some other
extension capabilities.
[chrome-extensions-api-index]: https://developer.chrome.com/extensions/api_index
> **Note:** Electron does not support arbitrary Chrome extensions from the
> store, and it is a **non-goal** of the Electron project to be perfectly
> compatible with Chrome's implementation of Extensions.
## Loading extensions
Electron only supports loading unpacked extensions (i.e., `.crx` files do not
work). Extensions are installed per-`session`. To load an extension, call
[`ses.loadExtension`](session.md#sesloadextensionpath):
```js
const { session } = require('electron')
session.loadExtension('path/to/unpacked/extension').then(({ id }) => {
// ...
})
```
Loaded extensions will not be automatically remembered across exits; if you do
not call `loadExtension` when the app runs, the extension will not be loaded.
See the [`session`](session.md) documentation for more information about
loading, unloading, and querying active extensions.
## Supported Extensions APIs
We support the following extensions APIs, with some caveats. Other APIs may
additionally be supported, but support for any APIs not listed here is
provisional and may be removed.
### `chrome.devtools.inspectedWindow`
All features of this API are supported.
### `chrome.devtools.network`
All features of this API are supported.
### `chrome.devtools.panels`
All features of this API are supported.
### `chrome.extension`
The following properties of `chrome.extension` are supported:
- `chrome.extension.lastError`
The following methods of `chrome.extension` are supported:
- `chrome.extension.getURL`
- `chrome.extension.getBackgroundPage`
### `chrome.runtime`
The following properties of `chrome.runtime` are supported:
- `chrome.runtime.lastError`
- `chrome.runtime.id`
The following methods of `chrome.runtime` are supported:
- `chrome.runtime.getBackgroundPage`
- `chrome.runtime.getManifest`
- `chrome.runtime.getURL`
- `chrome.runtime.connect`
- `chrome.runtime.sendMessage`
The following events of `chrome.runtime` are supported:
- `chrome.runtime.onStartup`
- `chrome.runtime.onInstalled`
- `chrome.runtime.onSuspend`
- `chrome.runtime.onSuspendCanceled`
- `chrome.runtime.onConnect`
- `chrome.runtime.onMessage`
### `chrome.storage`
Only `chrome.storage.local` is supported; `chrome.storage.sync` and
`chrome.storage.managed` are not.
### `chrome.tabs`
The following methods of `chrome.tabs` are supported:
- `chrome.tabs.sendMessage`
- `chrome.tabs.executeScript`
> **Note:** In Chrome, passing `-1` as a tab ID signifies the "currently active
> tab". Since Electron has no such concept, passing `-1` as a tab ID is not
> supported and will raise an error.

View File

@@ -15,7 +15,7 @@ event of the app module is emitted.
```javascript
const { app, globalShortcut } = require('electron')
app.on('ready', () => {
app.whenReady().then(() => {
// Register a 'CommandOrControl+X' shortcut listener.
const ret = globalShortcut.register('CommandOrControl+X', () => {
console.log('CommandOrControl+X is pressed')

View File

@@ -7,7 +7,7 @@ Process: [Main](../glossary.md#main-process)
```javascript
const { netLog } = require('electron')
app.on('ready', async () => {
app.whenReady().then(async () => {
await netLog.startLogging('/path/to/net-log')
// After some network events
const path = await netLog.stopLogging()

View File

@@ -28,7 +28,7 @@ Example usage:
```javascript
const { app } = require('electron')
app.on('ready', () => {
app.whenReady().then(() => {
const { net } = require('electron')
const request = net.request('https://github.com')
request.on('response', (response) => {

View File

@@ -13,7 +13,7 @@ For example:
```javascript
const { app, powerMonitor } = require('electron')
app.on('ready', () => {
app.whenReady().then(() => {
powerMonitor.on('suspend', () => {
console.log('The system is going to sleep')
})

View File

@@ -20,7 +20,7 @@ An example of implementing a protocol that has the same effect as the
const { app, protocol } = require('electron')
const path = require('path')
app.on('ready', () => {
app.whenReady().then(() => {
protocol.registerFileProtocol('atom', (request, callback) => {
const url = request.url.substr(7)
callback({ path: path.normalize(`${__dirname}/${url}`) })
@@ -47,7 +47,7 @@ to register it to that session explicitly.
const { session, app, protocol } = require('electron')
const path = require('path')
app.on('ready', () => {
app.whenReady().then(() => {
const partition = 'persist:example'
const ses = session.fromPartition(partition)

View File

@@ -11,7 +11,7 @@ An example of implementing a protocol that has the same effect as the
const { app, protocol } = require('electron')
const path = require('path')
app.on('ready', () => {
app.whenReady().then(() => {
protocol.registerFileProtocol('atom', (request, callback) => {
const url = request.url.substr(7)
callback({ path: path.normalize(`${__dirname}/${url}`) })
@@ -34,7 +34,7 @@ To have your custom protocol work in combination with a custom session, you need
const { session, app, protocol } = require('electron')
const path = require('path')
app.on('ready', () => {
app.whenReady().then(() => {
const partition = 'persist:example'
const ses = session.fromPartition(partition)

View File

@@ -163,7 +163,7 @@ project/
```js
// main process: main/index.js
const { app } = require('electron')
app.on('ready', () => { /* ... */ })
app.whenReady().then(() => { /* ... */ })
```
```js

View File

@@ -39,7 +39,7 @@ To create a sandboxed window, pass `sandbox: true` to `webPreferences`:
```js
let win
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow({
webPreferences: {
sandbox: true
@@ -59,7 +59,7 @@ and returns a proxy to this via `window.open`).
```js
let win
app.enableSandbox()
app.on('ready', () => {
app.whenReady().then(() => {
// no need to pass `sandbox: true` since `app.enableSandbox()` was called.
win = new BrowserWindow()
win.loadURL('http://google.com')
@@ -73,7 +73,7 @@ Here's an example:
```js
let win
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow({
webPreferences: {
sandbox: true,

View File

@@ -18,7 +18,7 @@ An example of creating a window that fills the whole screen:
const { app, BrowserWindow, screen } = require('electron')
let win
app.on('ready', () => {
app.whenReady().then(() => {
const { width, height } = screen.getPrimaryDisplay().workAreaSize
win = new BrowserWindow({ width, height })
win.loadURL('https://github.com')
@@ -32,7 +32,7 @@ const { app, BrowserWindow, screen } = require('electron')
let win
app.on('ready', () => {
app.whenReady().then(() => {
let displays = screen.getAllDisplays()
let externalDisplay = displays.find((display) => {
return display.bounds.x !== 0 || display.bounds.y !== 0

View File

@@ -495,6 +495,65 @@ Returns `Boolean` - Whether the word was successfully written to the custom dict
**Note:** On macOS and Windows 10 this word will be written to the OS custom dictionary as well
#### `ses.loadExtension(path)`
* `path` String - Path to a directory containing an unpacked Chrome extension
Returns `Promise<Extension>` - resolves when the extension is loaded.
This method will raise an exception if the extension could not be loaded. If
there are warnings when installing the extension (e.g. if the extension
requests an API that Electron does not support) then they will be logged to the
console.
Note that Electron does not support the full range of Chrome extensions APIs.
Note that in previous versions of Electron, extensions that were loaded would
be remembered for future runs of the application. This is no longer the case:
`loadExtension` must be called on every boot of your app if you want the
extension to be loaded.
```js
const { app, session } = require('electron')
const path = require('path')
app.on('ready', async () => {
await session.defaultSession.loadExtension(path.join(__dirname, 'react-devtools'))
// Note that in order to use the React DevTools extension, you'll need to
// download and unzip a copy of the extension.
})
```
This API does not support loading packed (.crx) extensions.
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
#### `ses.removeExtension(extensionId)`
* `extensionId` String - ID of extension to remove
Unloads an extension.
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
#### `ses.getExtension(extensionId)`
* `extensionId` String - ID of extension to query
Returns `Extension` | `null` - The loaded extension with the given ID.
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
#### `ses.getAllExtensions()`
Returns `Extension[]` - A list of all loaded extensions.
**Note:** This API cannot be called before the `ready` event of the `app` module
is emitted.
### Instance Properties
The following properties are available on instances of `Session`:
@@ -520,7 +579,7 @@ A [`Protocol`](protocol.md) object for this session.
const { app, session } = require('electron')
const path = require('path')
app.on('ready', () => {
app.whenReady().then(() => {
const protocol = session.fromPartition('some-partition').protocol
protocol.registerFileProtocol('atom', (request, callback) => {
let url = request.url.substr(7)
@@ -538,7 +597,7 @@ A [`NetLog`](net-log.md) object for this session.
```javascript
const { app, session } = require('electron')
app.on('ready', async () => {
app.whenReady().then(async () => {
const netLog = session.fromPartition('some-partition').netLog
netLog.startLogging('/path/to/net-log')
// After some network events

View File

@@ -0,0 +1,5 @@
# Extension Object
* `id` String
* `name` String
* `version` String

View File

@@ -22,7 +22,7 @@ The main process script is like a normal Node.js script:
const { app, BrowserWindow } = require('electron')
let win = null
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL('https://github.com')
})
@@ -56,7 +56,7 @@ const { app, BrowserWindow } = require('electron')
let win
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow()
win.loadURL('https://github.com')
})
@@ -71,7 +71,7 @@ const { app, BrowserWindow } = electron
let win
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow()
win.loadURL('https://github.com')
})
@@ -85,7 +85,7 @@ const app = electron.app
const BrowserWindow = electron.BrowserWindow
let win
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow()
win.loadURL('https://github.com')
})

View File

@@ -166,7 +166,7 @@ const touchBar = new TouchBar({
let window
app.once('ready', () => {
app.whenReady().then(() => {
window = new BrowserWindow({
frame: false,
titleBarStyle: 'hiddenInset',

View File

@@ -10,7 +10,7 @@ Process: [Main](../glossary.md#main-process)
const { app, Menu, Tray } = require('electron')
let tray = null
app.on('ready', () => {
app.whenReady().then(() => {
tray = new Tray('/path/to/my/icon')
const contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
@@ -38,7 +38,7 @@ __Platform limitations:__
const { app, Menu, Tray } = require('electron')
let appIcon = null
app.on('ready', () => {
app.whenReady().then(() => {
appIcon = new Tray('/path/to/my/icon')
const contextMenu = Menu.buildFromTemplate([
{ label: 'Item1', type: 'radio' },
@@ -58,9 +58,10 @@ If you want to keep exact same behaviors on all platforms, you should not
rely on the `click` event and always attach a context menu to the tray icon.
### `new Tray(image)`
### `new Tray(image, [guid])`
* `image` ([NativeImage](native-image.md) | String)
* `guid` String (optional) _Windows_ - Assigns a GUID to the tray icon. If the executable is signed and the signature contains an organization in the subject line then the GUID is permanently associated with that signature. OS level settings like the position of the tray icon in the system tray will persist even if the path to the executable changes. If the executable is not code-signed then the GUID is permanently associated with the path to the executable. Changing the path to the executable will break the creation of the tray icon and a new GUID must be used. However, it is highly recommended to use the GUID parameter only in conjunction with code-signed executable. If an App defines multiple tray icons then each icon must use a separate GUID.
Creates a new tray icon associated with the `image`.

View File

@@ -310,7 +310,7 @@ and allow the page to be unloaded.
const { BrowserWindow, dialog } = require('electron')
const win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('will-prevent-unload', (event) => {
const choice = dialog.showMessageBox(win, {
const choice = dialog.showMessageBoxSync(win, {
type: 'question',
buttons: ['Leave', 'Stay'],
title: 'Do you want to leave this site?',
@@ -624,7 +624,7 @@ const { app, BrowserWindow } = require('electron')
let win = null
app.commandLine.appendSwitch('enable-experimental-web-platform-features')
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow({ width: 800, height: 600 })
win.webContents.on('select-bluetooth-device', (event, deviceList, callback) => {
event.preventDefault()
@@ -1260,7 +1260,7 @@ Returns [`PrinterInfo[]`](structures/printer-info.md)
* `silent` Boolean (optional) - Don't ask user for print settings. Default is `false`.
* `printBackground` Boolean (optional) - Prints the background color and image of
the web page. Default is `false`.
* `deviceName` String (optional) - Set the printer device name to use. Default is `''`.
* `deviceName` String (optional) - Set the printer device name to use. Must be the system-defined name and not the 'friendly' name, e.g 'Brother_QL_820NWB' and not 'Brother QL-820NWB'.
* `color` Boolean (optional) - Set whether the printed web page will be in color or grayscale. Default is `true`.
* `margins` Object (optional)
* `marginType` String (optional) - Can be `default`, `none`, `printableArea`, or `custom`. If `custom` is chosen, you will also need to specify `top`, `bottom`, `left`, and `right`.
@@ -1282,6 +1282,8 @@ Returns [`PrinterInfo[]`](structures/printer-info.md)
* `vertical` Number (optional) - The vertical dpi.
* `header` String (optional) - String to be printed as page header.
* `footer` String (optional) - String to be printed as page footer.
* `pageSize` String | Size (optional) - Specify page size of the printed document. Can be `A3`,
`A4`, `A5`, `Legal`, `Letter`, `Tabloid` or an Object containing `height`.
* `callback` Function (optional)
* `success` Boolean - Indicates success of the print call.
* `failureReason` String - Called back if the print fails; can be `cancelled` or `failed`.
@@ -1444,7 +1446,7 @@ const { app, BrowserWindow } = require('electron')
let win = null
let devtools = null
app.once('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow()
devtools = new BrowserWindow()
win.loadURL('https://github.com')
@@ -1533,7 +1535,7 @@ An example of sending messages from the main process to the renderer process:
const { app, BrowserWindow } = require('electron')
let win = null
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow({ width: 800, height: 600 })
win.loadURL(`file://${__dirname}/index.html`)
win.webContents.on('did-finish-load', () => {

View File

@@ -569,6 +569,8 @@ Stops any `findInPage` request for the `webview` with the provided `action`.
* `vertical` Number (optional) - The vertical dpi.
* `header` String (optional) - String to be printed as page header.
* `footer` String (optional) - String to be printed as page footer.
* `pageSize` String | Size (optional) - Specify page size of the printed document. Can be `A3`,
`A4`, `A5`, `Legal`, `Letter`, `Tabloid` or an Object containing `height`.
Returns `Promise<void>`

View File

@@ -13,7 +13,7 @@ contribute:
1. By opening the issue for discussion: If you believe that you have found
a new bug in Electron, you should report it by creating a new issue in
the `electron/electron` issue tracker.
the [`electron/electron` issue tracker](https://github.com/electron/electron/issues).
2. By helping to triage the issue: You can do this either by providing
assistive details (a reproducible test case that demonstrates a bug) or by
providing suggestions to address the issue.
@@ -30,7 +30,9 @@ contributing, and more. Please use the issue tracker for bugs only!
## Submitting a Bug Report
When opening a new issue in the `electron/electron` issue tracker, users
To submit a bug report:
When opening a new issue in the [`electron/electron` issue tracker](https://github.com/electron/electron/issues/new/choose), users
will be presented with a template that should be filled in.
```markdown

View File

@@ -64,9 +64,9 @@ require('electron').remote.getGlobal('sharedObject').someProperty = 'new value'
console.log(require('electron').remote.getGlobal('sharedObject').someProperty)
```
## My app's window/tray disappeared after a few minutes.
## My app's tray disappeared after a few minutes.
This happens when the variable which is used to store the window/tray gets
This happens when the variable which is used to store the tray gets
garbage collected.
If you encounter this problem, the following articles may prove helpful:
@@ -79,7 +79,7 @@ code from this:
```javascript
const { app, Tray } = require('electron')
app.on('ready', () => {
app.whenReady().then(() => {
const tray = new Tray('/path/to/icon.png')
tray.setTitle('hello world')
})
@@ -90,7 +90,7 @@ to this:
```javascript
const { app, Tray } = require('electron')
let tray = null
app.on('ready', () => {
app.whenReady().then(() => {
tray = new Tray('/path/to/icon.png')
tray.setTitle('hello world')
})

View File

@@ -20,7 +20,7 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -20,7 +20,7 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -316,7 +316,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
const menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)

View File

@@ -42,7 +42,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -32,7 +32,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -34,7 +34,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -7,7 +7,7 @@ const { app, BrowserWindow } = require('electron')
let mainWindow = null
app.on('ready', () => {
app.whenReady().then(() => {
// We cannot require the screen module until the app is ready.
const { screen } = require('electron')

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -34,7 +34,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -20,6 +20,6 @@ function createWindow () {
})
}
app.on('ready', () => {
app.whenReady().then(() => {
createWindow()
})

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -33,7 +33,7 @@ function createWindow () {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', function () {

View File

@@ -14,4 +14,5 @@
| 6.0.0 | 2019-05-01 | 2019-07-30 | M76 | v12 |
| 7.0.0 | 2019-08-01 | 2019-10-22 | M78 | v12 |
| 8.0.0 | 2019-10-24 | 2020-02-04 | M80 | v12 |
| 9.0.0 | TBD | TBD | TBD | TBD |
| 9.0.0 | 2020-02-06 | 2020-03-12 | M82 | v12 |
| 10.0.0 | TBD | TBD | TBD | TBD |

View File

@@ -121,7 +121,7 @@ function createWindow () {
win.loadFile('index.html')
}
app.on('ready', createWindow)
app.whenReady().then(createWindow)
```
The `main.js` should create windows and handle all the system events your
@@ -132,13 +132,9 @@ windows on macOS if the user clicks on the app's icon in the dock.
```javascript
const { app, BrowserWindow } = require('electron')
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let win
function createWindow () {
// Create the browser window.
win = new BrowserWindow({
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
@@ -151,20 +147,12 @@ function createWindow () {
// Open the DevTools.
win.webContents.openDevTools()
// Emitted when the window is closed.
win.on('closed', () => {
// Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element.
win = null
})
}
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow)
app.whenReady().then(createWindow)
// Quit when all windows are closed.
app.on('window-all-closed', () => {
@@ -178,7 +166,7 @@ app.on('window-all-closed', () => {
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (win === null) {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow()
}
})

View File

@@ -35,7 +35,7 @@ the application does not have keyboard focus.
```js
const { app, globalShortcut } = require('electron')
app.on('ready', () => {
app.whenReady().then(() => {
globalShortcut.register('CommandOrControl+X', () => {
console.log('CommandOrControl+X is pressed')
})

View File

@@ -2,10 +2,10 @@
In macOS 10.14 Mojave, Apple introduced a new [system-wide dark mode](https://developer.apple.com/design/human-interface-guidelines/macos/visual-design/dark-mode/)
for all macOS computers. If your app does have a dark mode, you can make your Electron app
follow the system-wide dark mode setting.
follow the system-wide dark mode setting using [the nativeTheme api](../api/native-theme.md).
In macOS 10.15 Catalina, Apple introduced a new "automatic" dark mode option for all macOS computers. In order
for the `isDarkMode` and `Tray` APIs to work correctly in this mode on Catalina you need to either have `NSRequiresAquaSystemAppearance` set to `false` in your `Info.plist` file or be on Electron `>=7.0.0`.
for the `nativeTheme.shouldUseDarkColors` and `Tray` APIs to work correctly in this mode on Catalina you need to either have `NSRequiresAquaSystemAppearance` set to `false` in your `Info.plist` file or be on Electron `>=7.0.0`.
## Automatically updating the native interfaces
@@ -18,15 +18,12 @@ out of this theming.
## Automatically updating your own interfaces
If your app has its own dark mode you should toggle it on and off in sync with the system's dark mode setting. You can do
this by listening for the theme changed event on Electron's `systemPreferences` module. E.g.
this by listening for the theme updated event on Electron's `nativeTheme` module. E.g.
```js
const { nativeTheme } = require('electron')
systemPreferences.subscribeNotification(
'AppleInterfaceThemeChangedNotification',
function theThemeHasChanged () {
updateMyAppTheme(nativeTheme.shouldUseDarkColors)
}
)
nativeTheme.on('updated', function theThemeHasChanged () {
updateMyAppTheme(nativeTheme.shouldUseDarkColors)
})
```

View File

@@ -41,7 +41,7 @@ app.disableHardwareAcceleration()
let win
app.once('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow({
webPreferences: {
offscreen: true

View File

@@ -15,7 +15,7 @@ const { app, BrowserWindow } = require('electron')
let onlineStatusWindow
app.on('ready', () => {
app.whenReady().then(() => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false })
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)
})
@@ -53,7 +53,7 @@ _main.js_
const { app, BrowserWindow, ipcMain } = require('electron')
let onlineStatusWindow
app.on('ready', () => {
app.whenReady().then(() => {
onlineStatusWindow = new BrowserWindow({ width: 0, height: 0, show: false, webPreferences: { nodeIntegration: true } })
onlineStatusWindow.loadURL(`file://${__dirname}/online-status.html`)
})

View File

@@ -48,9 +48,9 @@ basis for some older supported lines. All contested decisions around release
line backports will be resolved by the [Releases Working Group](https://github.com/electron/governance/tree/master/wg-releases) as an agenda item at their weekly meeting the week the backport PR is raised.
### Currently supported versions
- 8.x.y
- 7.x.y
- 6.x.y
- 5.x.y
### End-of-life

View File

@@ -1,4 +1,4 @@
# Testing on Headless CI Systems (Travis CI, Jenkins)
# Testing on Headless CI Systems (Travis CI, Github Actions, Jenkins)
Being based on Chromium, Electron requires a display driver to function.
If Chromium can't find a display driver, Electron will fail to launch -
@@ -45,6 +45,10 @@ install:
- Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
```
### Github Actions
For Github Actions, a [Xvfb action is available](https://github.com/marketplace/actions/gabrielbb-xvfb-action).
### Jenkins
For Jenkins, a [Xvfb plugin is available](https://wiki.jenkins-ci.org/display/JENKINS/Xvfb+Plugin).

View File

@@ -79,7 +79,7 @@ app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevine_library')
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866')
let win = null
app.on('ready', () => {
app.whenReady().then(() => {
win = new BrowserWindow()
win.show()
})

View File

@@ -41,7 +41,7 @@ app.commandLine.appendSwitch('ppapi-flash-path', path.join(__dirname, pluginName
// Optional: Specify flash version, for example, v17.0.0.169
app.commandLine.appendSwitch('ppapi-flash-version', '17.0.0.169')
app.on('ready', () => {
app.whenReady().then(() => {
let win = new BrowserWindow({
width: 800,
height: 600,

View File

@@ -21,6 +21,7 @@ auto_filenames = {
"docs/api/dock.md",
"docs/api/download-item.md",
"docs/api/environment-variables.md",
"docs/api/extensions.md",
"docs/api/file-object.md",
"docs/api/frameless-window.md",
"docs/api/global-shortcut.md",
@@ -77,6 +78,7 @@ auto_filenames = {
"docs/api/structures/display.md",
"docs/api/structures/event.md",
"docs/api/structures/extension-info.md",
"docs/api/structures/extension.md",
"docs/api/structures/file-filter.md",
"docs/api/structures/file-path-with-headers.md",
"docs/api/structures/gpu-feature-status.md",

View File

@@ -27,90 +27,90 @@ filenames = {
"chromium_src/chrome/browser/process_singleton_win.cc",
"chromium_src/chrome/browser/ui/views/frame/global_menu_bar_registrar_x11.cc",
"chromium_src/chrome/browser/ui/views/frame/global_menu_bar_registrar_x11.h",
"shell/app/atom_content_client.cc",
"shell/app/atom_content_client.h",
"shell/app/atom_main_delegate.cc",
"shell/app/atom_main_delegate.h",
"shell/app/atom_main_delegate_mac.h",
"shell/app/atom_main_delegate_mac.mm",
"shell/app/command_line_args.cc",
"shell/app/command_line_args.h",
"shell/app/electron_content_client.cc",
"shell/app/electron_content_client.h",
"shell/app/electron_main_delegate.cc",
"shell/app/electron_main_delegate.h",
"shell/app/electron_main_delegate_mac.h",
"shell/app/electron_main_delegate_mac.mm",
"shell/app/uv_task_runner.cc",
"shell/app/uv_task_runner.h",
"shell/browser/api/atom_api_app.cc",
"shell/browser/api/atom_api_app.h",
"shell/browser/api/atom_api_app_mac.mm",
"shell/browser/api/atom_api_auto_updater.cc",
"shell/browser/api/atom_api_auto_updater.h",
"shell/browser/api/atom_api_browser_view.cc",
"shell/browser/api/atom_api_browser_view.h",
"shell/browser/api/atom_api_browser_window.cc",
"shell/browser/api/atom_api_browser_window.h",
"shell/browser/api/atom_api_browser_window_mac.mm",
"shell/browser/api/atom_api_browser_window_views.cc",
"shell/browser/api/atom_api_content_tracing.cc",
"shell/browser/api/atom_api_cookies.cc",
"shell/browser/api/atom_api_cookies.h",
"shell/browser/api/atom_api_data_pipe_holder.cc",
"shell/browser/api/atom_api_data_pipe_holder.h",
"shell/browser/api/atom_api_debugger.cc",
"shell/browser/api/atom_api_debugger.h",
"shell/browser/api/atom_api_dialog.cc",
"shell/browser/api/atom_api_download_item.cc",
"shell/browser/api/atom_api_download_item.h",
"shell/browser/api/atom_api_event.cc",
"shell/browser/api/atom_api_global_shortcut.cc",
"shell/browser/api/atom_api_global_shortcut.h",
"shell/browser/api/atom_api_in_app_purchase.cc",
"shell/browser/api/atom_api_in_app_purchase.h",
"shell/browser/api/atom_api_menu.cc",
"shell/browser/api/atom_api_menu.h",
"shell/browser/api/atom_api_menu_mac.h",
"shell/browser/api/atom_api_menu_mac.mm",
"shell/browser/api/atom_api_menu_views.cc",
"shell/browser/api/atom_api_menu_views.h",
"shell/browser/api/atom_api_native_theme.cc",
"shell/browser/api/atom_api_native_theme.h",
"shell/browser/api/atom_api_native_theme_mac.mm",
"shell/browser/api/atom_api_net.cc",
"shell/browser/api/atom_api_net.h",
"shell/browser/api/atom_api_net_log.cc",
"shell/browser/api/atom_api_net_log.h",
"shell/browser/api/atom_api_notification.cc",
"shell/browser/api/atom_api_notification.h",
"shell/browser/api/atom_api_power_monitor.cc",
"shell/browser/api/atom_api_power_monitor.h",
"shell/browser/api/atom_api_power_monitor_mac.mm",
"shell/browser/api/atom_api_power_monitor_win.cc",
"shell/browser/api/atom_api_power_save_blocker.cc",
"shell/browser/api/atom_api_power_save_blocker.h",
"shell/browser/api/atom_api_protocol.cc",
"shell/browser/api/atom_api_protocol.h",
"shell/browser/api/atom_api_screen.cc",
"shell/browser/api/atom_api_screen.h",
"shell/browser/api/atom_api_session.cc",
"shell/browser/api/atom_api_session.h",
"shell/browser/api/atom_api_system_preferences.cc",
"shell/browser/api/atom_api_system_preferences.h",
"shell/browser/api/atom_api_system_preferences_mac.mm",
"shell/browser/api/atom_api_system_preferences_win.cc",
"shell/browser/api/atom_api_top_level_window.cc",
"shell/browser/api/atom_api_top_level_window.h",
"shell/browser/api/atom_api_tray.cc",
"shell/browser/api/atom_api_tray.h",
"shell/browser/api/atom_api_url_loader.cc",
"shell/browser/api/atom_api_url_loader.h",
"shell/browser/api/atom_api_view.cc",
"shell/browser/api/atom_api_view.h",
"shell/browser/api/atom_api_web_contents.cc",
"shell/browser/api/atom_api_web_contents.h",
"shell/browser/api/atom_api_web_contents_impl.cc",
"shell/browser/api/atom_api_web_contents_mac.mm",
"shell/browser/api/atom_api_web_contents_view.cc",
"shell/browser/api/atom_api_web_contents_view.h",
"shell/browser/api/atom_api_web_request.cc",
"shell/browser/api/atom_api_web_request.h",
"shell/browser/api/atom_api_web_view_manager.cc",
"shell/browser/api/electron_api_app.cc",
"shell/browser/api/electron_api_app.h",
"shell/browser/api/electron_api_app_mac.mm",
"shell/browser/api/electron_api_auto_updater.cc",
"shell/browser/api/electron_api_auto_updater.h",
"shell/browser/api/electron_api_browser_view.cc",
"shell/browser/api/electron_api_browser_view.h",
"shell/browser/api/electron_api_browser_window.cc",
"shell/browser/api/electron_api_browser_window.h",
"shell/browser/api/electron_api_browser_window_mac.mm",
"shell/browser/api/electron_api_browser_window_views.cc",
"shell/browser/api/electron_api_content_tracing.cc",
"shell/browser/api/electron_api_cookies.cc",
"shell/browser/api/electron_api_cookies.h",
"shell/browser/api/electron_api_data_pipe_holder.cc",
"shell/browser/api/electron_api_data_pipe_holder.h",
"shell/browser/api/electron_api_debugger.cc",
"shell/browser/api/electron_api_debugger.h",
"shell/browser/api/electron_api_dialog.cc",
"shell/browser/api/electron_api_download_item.cc",
"shell/browser/api/electron_api_download_item.h",
"shell/browser/api/electron_api_event.cc",
"shell/browser/api/electron_api_global_shortcut.cc",
"shell/browser/api/electron_api_global_shortcut.h",
"shell/browser/api/electron_api_in_app_purchase.cc",
"shell/browser/api/electron_api_in_app_purchase.h",
"shell/browser/api/electron_api_menu.cc",
"shell/browser/api/electron_api_menu.h",
"shell/browser/api/electron_api_menu_mac.h",
"shell/browser/api/electron_api_menu_mac.mm",
"shell/browser/api/electron_api_menu_views.cc",
"shell/browser/api/electron_api_menu_views.h",
"shell/browser/api/electron_api_native_theme.cc",
"shell/browser/api/electron_api_native_theme.h",
"shell/browser/api/electron_api_native_theme_mac.mm",
"shell/browser/api/electron_api_net.cc",
"shell/browser/api/electron_api_net.h",
"shell/browser/api/electron_api_net_log.cc",
"shell/browser/api/electron_api_net_log.h",
"shell/browser/api/electron_api_notification.cc",
"shell/browser/api/electron_api_notification.h",
"shell/browser/api/electron_api_power_monitor.cc",
"shell/browser/api/electron_api_power_monitor.h",
"shell/browser/api/electron_api_power_monitor_mac.mm",
"shell/browser/api/electron_api_power_monitor_win.cc",
"shell/browser/api/electron_api_power_save_blocker.cc",
"shell/browser/api/electron_api_power_save_blocker.h",
"shell/browser/api/electron_api_protocol.cc",
"shell/browser/api/electron_api_protocol.h",
"shell/browser/api/electron_api_screen.cc",
"shell/browser/api/electron_api_screen.h",
"shell/browser/api/electron_api_session.cc",
"shell/browser/api/electron_api_session.h",
"shell/browser/api/electron_api_system_preferences.cc",
"shell/browser/api/electron_api_system_preferences.h",
"shell/browser/api/electron_api_system_preferences_mac.mm",
"shell/browser/api/electron_api_system_preferences_win.cc",
"shell/browser/api/electron_api_top_level_window.cc",
"shell/browser/api/electron_api_top_level_window.h",
"shell/browser/api/electron_api_tray.cc",
"shell/browser/api/electron_api_tray.h",
"shell/browser/api/electron_api_url_loader.cc",
"shell/browser/api/electron_api_url_loader.h",
"shell/browser/api/electron_api_view.cc",
"shell/browser/api/electron_api_view.h",
"shell/browser/api/electron_api_web_contents.cc",
"shell/browser/api/electron_api_web_contents.h",
"shell/browser/api/electron_api_web_contents_impl.cc",
"shell/browser/api/electron_api_web_contents_mac.mm",
"shell/browser/api/electron_api_web_contents_view.cc",
"shell/browser/api/electron_api_web_contents_view.h",
"shell/browser/api/electron_api_web_request.cc",
"shell/browser/api/electron_api_web_request.h",
"shell/browser/api/electron_api_web_view_manager.cc",
"shell/browser/api/event.cc",
"shell/browser/api/event.h",
"shell/browser/api/frame_subscriber.cc",
@@ -123,35 +123,6 @@ filenames = {
"shell/browser/api/process_metric.h",
"shell/browser/api/save_page_handler.cc",
"shell/browser/api/save_page_handler.h",
"shell/browser/atom_autofill_driver.cc",
"shell/browser/atom_autofill_driver.h",
"shell/browser/atom_autofill_driver_factory.cc",
"shell/browser/atom_autofill_driver_factory.h",
"shell/browser/atom_browser_client.cc",
"shell/browser/atom_browser_client.h",
"shell/browser/atom_browser_context.cc",
"shell/browser/atom_browser_context.h",
"shell/browser/atom_browser_main_parts.cc",
"shell/browser/atom_browser_main_parts.h",
"shell/browser/atom_browser_main_parts_mac.mm",
"shell/browser/atom_browser_main_parts_posix.cc",
"shell/browser/atom_download_manager_delegate.cc",
"shell/browser/atom_download_manager_delegate.h",
"shell/browser/atom_gpu_client.cc",
"shell/browser/atom_gpu_client.h",
"shell/browser/atom_javascript_dialog_manager.cc",
"shell/browser/atom_javascript_dialog_manager.h",
"shell/browser/atom_navigation_throttle.cc",
"shell/browser/atom_navigation_throttle.h",
"shell/browser/atom_paths.h",
"shell/browser/atom_permission_manager.cc",
"shell/browser/atom_permission_manager.h",
"shell/browser/atom_quota_permission_context.cc",
"shell/browser/atom_quota_permission_context.h",
"shell/browser/atom_speech_recognition_manager_delegate.cc",
"shell/browser/atom_speech_recognition_manager_delegate.h",
"shell/browser/atom_web_ui_controller_factory.cc",
"shell/browser/atom_web_ui_controller_factory.h",
"shell/browser/auto_updater.cc",
"shell/browser/auto_updater.h",
"shell/browser/auto_updater_mac.mm",
@@ -171,6 +142,35 @@ filenames = {
"shell/browser/common_web_contents_delegate_views.cc",
"shell/browser/cookie_change_notifier.cc",
"shell/browser/cookie_change_notifier.h",
"shell/browser/electron_autofill_driver.cc",
"shell/browser/electron_autofill_driver.h",
"shell/browser/electron_autofill_driver_factory.cc",
"shell/browser/electron_autofill_driver_factory.h",
"shell/browser/electron_browser_client.cc",
"shell/browser/electron_browser_client.h",
"shell/browser/electron_browser_context.cc",
"shell/browser/electron_browser_context.h",
"shell/browser/electron_browser_main_parts.cc",
"shell/browser/electron_browser_main_parts.h",
"shell/browser/electron_browser_main_parts_mac.mm",
"shell/browser/electron_browser_main_parts_posix.cc",
"shell/browser/electron_download_manager_delegate.cc",
"shell/browser/electron_download_manager_delegate.h",
"shell/browser/electron_gpu_client.cc",
"shell/browser/electron_gpu_client.h",
"shell/browser/electron_javascript_dialog_manager.cc",
"shell/browser/electron_javascript_dialog_manager.h",
"shell/browser/electron_navigation_throttle.cc",
"shell/browser/electron_navigation_throttle.h",
"shell/browser/electron_paths.h",
"shell/browser/electron_permission_manager.cc",
"shell/browser/electron_permission_manager.h",
"shell/browser/electron_quota_permission_context.cc",
"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_ui_controller_factory.cc",
"shell/browser/electron_web_ui_controller_factory.h",
"shell/browser/feature_list.cc",
"shell/browser/feature_list.h",
"shell/browser/font_defaults.cc",
@@ -186,12 +186,12 @@ filenames = {
"shell/browser/linux/unity_service.h",
"shell/browser/login_handler.cc",
"shell/browser/login_handler.h",
"shell/browser/mac/atom_application.h",
"shell/browser/mac/atom_application.mm",
"shell/browser/mac/atom_application_delegate.h",
"shell/browser/mac/atom_application_delegate.mm",
"shell/browser/mac/dict_util.h",
"shell/browser/mac/dict_util.mm",
"shell/browser/mac/electron_application.h",
"shell/browser/mac/electron_application.mm",
"shell/browser/mac/electron_application_delegate.h",
"shell/browser/mac/electron_application_delegate.mm",
"shell/browser/mac/in_app_purchase.h",
"shell/browser/mac/in_app_purchase.mm",
"shell/browser/mac/in_app_purchase_observer.h",
@@ -222,10 +222,10 @@ filenames = {
"shell/browser/native_window_views_win.cc",
"shell/browser/net/asar/asar_url_loader.cc",
"shell/browser/net/asar/asar_url_loader.h",
"shell/browser/net/atom_url_loader_factory.cc",
"shell/browser/net/atom_url_loader_factory.h",
"shell/browser/net/cert_verifier_client.cc",
"shell/browser/net/cert_verifier_client.h",
"shell/browser/net/electron_url_loader_factory.cc",
"shell/browser/net/electron_url_loader_factory.h",
"shell/browser/net/network_context_service.cc",
"shell/browser/net/network_context_service.h",
"shell/browser/net/network_context_service_factory.cc",
@@ -289,8 +289,6 @@ filenames = {
"shell/browser/special_storage_policy.h",
"shell/browser/ui/accelerator_util.cc",
"shell/browser/ui/accelerator_util.h",
"shell/browser/ui/atom_menu_model.cc",
"shell/browser/ui/atom_menu_model.h",
"shell/browser/ui/autofill_popup.cc",
"shell/browser/ui/autofill_popup.h",
"shell/browser/ui/certificate_trust.h",
@@ -300,24 +298,24 @@ filenames = {
"shell/browser/ui/cocoa/NSColor+Hex.mm",
"shell/browser/ui/cocoa/NSString+ANSI.h",
"shell/browser/ui/cocoa/NSString+ANSI.mm",
"shell/browser/ui/cocoa/atom_bundle_mover.h",
"shell/browser/ui/cocoa/atom_bundle_mover.mm",
"shell/browser/ui/cocoa/atom_inspectable_web_contents_view.h",
"shell/browser/ui/cocoa/atom_inspectable_web_contents_view.mm",
"shell/browser/ui/cocoa/atom_menu_controller.h",
"shell/browser/ui/cocoa/atom_menu_controller.mm",
"shell/browser/ui/cocoa/atom_native_widget_mac.h",
"shell/browser/ui/cocoa/atom_native_widget_mac.mm",
"shell/browser/ui/cocoa/atom_ns_window.h",
"shell/browser/ui/cocoa/atom_ns_window.mm",
"shell/browser/ui/cocoa/atom_ns_window_delegate.h",
"shell/browser/ui/cocoa/atom_ns_window_delegate.mm",
"shell/browser/ui/cocoa/atom_preview_item.h",
"shell/browser/ui/cocoa/atom_preview_item.mm",
"shell/browser/ui/cocoa/atom_touch_bar.h",
"shell/browser/ui/cocoa/atom_touch_bar.mm",
"shell/browser/ui/cocoa/delayed_native_view_host.cc",
"shell/browser/ui/cocoa/delayed_native_view_host.h",
"shell/browser/ui/cocoa/electron_bundle_mover.h",
"shell/browser/ui/cocoa/electron_bundle_mover.mm",
"shell/browser/ui/cocoa/electron_inspectable_web_contents_view.h",
"shell/browser/ui/cocoa/electron_inspectable_web_contents_view.mm",
"shell/browser/ui/cocoa/electron_menu_controller.h",
"shell/browser/ui/cocoa/electron_menu_controller.mm",
"shell/browser/ui/cocoa/electron_native_widget_mac.h",
"shell/browser/ui/cocoa/electron_native_widget_mac.mm",
"shell/browser/ui/cocoa/electron_ns_window.h",
"shell/browser/ui/cocoa/electron_ns_window.mm",
"shell/browser/ui/cocoa/electron_ns_window_delegate.h",
"shell/browser/ui/cocoa/electron_ns_window_delegate.mm",
"shell/browser/ui/cocoa/electron_preview_item.h",
"shell/browser/ui/cocoa/electron_preview_item.mm",
"shell/browser/ui/cocoa/electron_touch_bar.h",
"shell/browser/ui/cocoa/electron_touch_bar.mm",
"shell/browser/ui/cocoa/event_dispatching_window.h",
"shell/browser/ui/cocoa/event_dispatching_window.mm",
"shell/browser/ui/cocoa/root_view_mac.h",
@@ -331,6 +329,8 @@ filenames = {
"shell/browser/ui/drag_util.h",
"shell/browser/ui/drag_util_mac.mm",
"shell/browser/ui/drag_util_views.cc",
"shell/browser/ui/electron_menu_model.cc",
"shell/browser/ui/electron_menu_model.h",
"shell/browser/ui/file_dialog.h",
"shell/browser/ui/file_dialog_gtk.cc",
"shell/browser/ui/file_dialog_mac.mm",
@@ -357,11 +357,11 @@ filenames = {
"shell/browser/ui/tray_icon_gtk.h",
"shell/browser/ui/tray_icon_observer.h",
"shell/browser/ui/tray_icon_win.cc",
"shell/browser/ui/views/atom_views_delegate.cc",
"shell/browser/ui/views/atom_views_delegate.h",
"shell/browser/ui/views/atom_views_delegate_win.cc",
"shell/browser/ui/views/autofill_popup_view.cc",
"shell/browser/ui/views/autofill_popup_view.h",
"shell/browser/ui/views/electron_views_delegate.cc",
"shell/browser/ui/views/electron_views_delegate.h",
"shell/browser/ui/views/electron_views_delegate_win.cc",
"shell/browser/ui/views/frameless_view.cc",
"shell/browser/ui/views/frameless_view.h",
"shell/browser/ui/views/global_menu_bar_x11.cc",
@@ -382,10 +382,10 @@ filenames = {
"shell/browser/ui/views/submenu_button.h",
"shell/browser/ui/views/win_frame_view.cc",
"shell/browser/ui/views/win_frame_view.h",
"shell/browser/ui/win/atom_desktop_native_widget_aura.cc",
"shell/browser/ui/win/atom_desktop_native_widget_aura.h",
"shell/browser/ui/win/atom_desktop_window_tree_host_win.cc",
"shell/browser/ui/win/atom_desktop_window_tree_host_win.h",
"shell/browser/ui/win/electron_desktop_native_widget_aura.cc",
"shell/browser/ui/win/electron_desktop_native_widget_aura.h",
"shell/browser/ui/win/electron_desktop_window_tree_host_win.cc",
"shell/browser/ui/win/electron_desktop_window_tree_host_win.h",
"shell/browser/ui/win/jump_list.cc",
"shell/browser/ui/win/jump_list.h",
"shell/browser/ui/win/notify_icon.cc",
@@ -421,18 +421,18 @@ filenames = {
"shell/browser/window_list_observer.h",
"shell/browser/zoom_level_delegate.cc",
"shell/browser/zoom_level_delegate.h",
"shell/common/api/atom_api_asar.cc",
"shell/common/api/atom_api_clipboard.cc",
"shell/common/api/atom_api_clipboard.h",
"shell/common/api/atom_api_clipboard_mac.mm",
"shell/common/api/atom_api_command_line.cc",
"shell/common/api/atom_api_crash_reporter.cc",
"shell/common/api/atom_api_key_weak_map.h",
"shell/common/api/atom_api_native_image.cc",
"shell/common/api/atom_api_native_image.h",
"shell/common/api/atom_api_native_image_mac.mm",
"shell/common/api/atom_api_shell.cc",
"shell/common/api/atom_api_v8_util.cc",
"shell/common/api/electron_api_asar.cc",
"shell/common/api/electron_api_clipboard.cc",
"shell/common/api/electron_api_clipboard.h",
"shell/common/api/electron_api_clipboard_mac.mm",
"shell/common/api/electron_api_command_line.cc",
"shell/common/api/electron_api_crash_reporter.cc",
"shell/common/api/electron_api_key_weak_map.h",
"shell/common/api/electron_api_native_image.cc",
"shell/common/api/electron_api_native_image.h",
"shell/common/api/electron_api_native_image_mac.mm",
"shell/common/api/electron_api_shell.cc",
"shell/common/api/electron_api_v8_util.cc",
"shell/common/api/electron_bindings.cc",
"shell/common/api/electron_bindings.h",
"shell/common/api/features.cc",
@@ -447,10 +447,6 @@ filenames = {
"shell/common/asar/asar_util.h",
"shell/common/asar/scoped_temporary_file.cc",
"shell/common/asar/scoped_temporary_file.h",
"shell/common/atom_command_line.cc",
"shell/common/atom_command_line.h",
"shell/common/atom_constants.cc",
"shell/common/atom_constants.h",
"shell/common/color_util.cc",
"shell/common/color_util.h",
"shell/common/crash_reporter/crash_reporter.cc",
@@ -465,8 +461,10 @@ filenames = {
"shell/common/crash_reporter/linux/crash_dump_handler.h",
"shell/common/crash_reporter/win/crash_service_main.cc",
"shell/common/crash_reporter/win/crash_service_main.h",
"shell/common/deprecate_util.cc",
"shell/common/deprecate_util.h",
"shell/common/electron_command_line.cc",
"shell/common/electron_command_line.h",
"shell/common/electron_constants.cc",
"shell/common/electron_constants.h",
"shell/common/gin_converters/accelerator_converter.cc",
"shell/common/gin_converters/accelerator_converter.h",
"shell/common/gin_converters/blink_converter.cc",
@@ -547,40 +545,44 @@ filenames = {
"shell/common/platform_util_linux.cc",
"shell/common/platform_util_mac.mm",
"shell/common/platform_util_win.cc",
"shell/common/process_util.cc",
"shell/common/process_util.h",
"shell/common/skia_util.cc",
"shell/common/skia_util.h",
"shell/common/v8_value_converter.cc",
"shell/common/v8_value_converter.h",
"shell/renderer/api/atom_api_context_bridge.cc",
"shell/renderer/api/atom_api_context_bridge.h",
"shell/renderer/api/atom_api_renderer_ipc.cc",
"shell/renderer/api/atom_api_spell_check_client.cc",
"shell/renderer/api/atom_api_spell_check_client.h",
"shell/renderer/api/atom_api_web_frame.cc",
"shell/renderer/api/context_bridge/render_frame_context_bridge_store.cc",
"shell/renderer/api/context_bridge/render_frame_context_bridge_store.h",
"shell/renderer/atom_autofill_agent.cc",
"shell/renderer/atom_autofill_agent.h",
"shell/renderer/atom_render_frame_observer.cc",
"shell/renderer/atom_render_frame_observer.h",
"shell/renderer/atom_renderer_client.cc",
"shell/renderer/atom_renderer_client.h",
"shell/renderer/atom_sandboxed_renderer_client.cc",
"shell/renderer/atom_sandboxed_renderer_client.h",
"shell/renderer/api/electron_api_context_bridge.cc",
"shell/renderer/api/electron_api_context_bridge.h",
"shell/renderer/api/electron_api_renderer_ipc.cc",
"shell/renderer/api/electron_api_spell_check_client.cc",
"shell/renderer/api/electron_api_spell_check_client.h",
"shell/renderer/api/electron_api_web_frame.cc",
"shell/renderer/browser_exposed_renderer_interfaces.cc",
"shell/renderer/browser_exposed_renderer_interfaces.h",
"shell/renderer/content_settings_observer.cc",
"shell/renderer/content_settings_observer.h",
"shell/renderer/electron_api_service_impl.cc",
"shell/renderer/electron_api_service_impl.h",
"shell/renderer/electron_autofill_agent.cc",
"shell/renderer/electron_autofill_agent.h",
"shell/renderer/electron_render_frame_observer.cc",
"shell/renderer/electron_render_frame_observer.h",
"shell/renderer/electron_renderer_client.cc",
"shell/renderer/electron_renderer_client.h",
"shell/renderer/electron_renderer_pepper_host_factory.cc",
"shell/renderer/electron_renderer_pepper_host_factory.h",
"shell/renderer/electron_sandboxed_renderer_client.cc",
"shell/renderer/electron_sandboxed_renderer_client.h",
"shell/renderer/guest_view_container.cc",
"shell/renderer/guest_view_container.h",
"shell/renderer/renderer_client_base.cc",
"shell/renderer/renderer_client_base.h",
"shell/renderer/web_worker_observer.cc",
"shell/renderer/web_worker_observer.h",
"shell/utility/atom_content_utility_client.cc",
"shell/utility/atom_content_utility_client.h",
"shell/utility/electron_content_utility_client.cc",
"shell/utility/electron_content_utility_client.h",
]
lib_sources_nss = [
@@ -589,28 +591,28 @@ filenames = {
]
lib_sources_extensions = [
"shell/browser/extensions/api/runtime/atom_runtime_api_delegate.cc",
"shell/browser/extensions/api/runtime/atom_runtime_api_delegate.h",
"shell/browser/extensions/api/runtime/electron_runtime_api_delegate.cc",
"shell/browser/extensions/api/runtime/electron_runtime_api_delegate.h",
"shell/browser/extensions/api/tabs/tabs_api.cc",
"shell/browser/extensions/api/tabs/tabs_api.h",
"shell/browser/extensions/atom_extensions_browser_client.cc",
"shell/browser/extensions/atom_extensions_browser_client.h",
"shell/browser/extensions/atom_browser_context_keyed_service_factories.cc",
"shell/browser/extensions/atom_browser_context_keyed_service_factories.h",
"shell/browser/extensions/atom_display_info_provider.cc",
"shell/browser/extensions/atom_display_info_provider.h",
"shell/browser/extensions/atom_extension_host_delegate.cc",
"shell/browser/extensions/atom_extension_host_delegate.h",
"shell/browser/extensions/atom_extension_loader.cc",
"shell/browser/extensions/atom_extension_loader.h",
"shell/browser/extensions/atom_extension_system.cc",
"shell/browser/extensions/atom_extension_system.h",
"shell/browser/extensions/atom_extension_system_factory.cc",
"shell/browser/extensions/atom_extension_system_factory.h",
"shell/browser/extensions/atom_extension_web_contents_observer.cc",
"shell/browser/extensions/atom_extension_web_contents_observer.h",
"shell/browser/extensions/atom_navigation_ui_data.cc",
"shell/browser/extensions/atom_navigation_ui_data.h",
"shell/browser/extensions/electron_extensions_browser_client.cc",
"shell/browser/extensions/electron_extensions_browser_client.h",
"shell/browser/extensions/electron_browser_context_keyed_service_factories.cc",
"shell/browser/extensions/electron_browser_context_keyed_service_factories.h",
"shell/browser/extensions/electron_display_info_provider.cc",
"shell/browser/extensions/electron_display_info_provider.h",
"shell/browser/extensions/electron_extension_host_delegate.cc",
"shell/browser/extensions/electron_extension_host_delegate.h",
"shell/browser/extensions/electron_extension_loader.cc",
"shell/browser/extensions/electron_extension_loader.h",
"shell/browser/extensions/electron_extension_system.cc",
"shell/browser/extensions/electron_extension_system.h",
"shell/browser/extensions/electron_extension_system_factory.cc",
"shell/browser/extensions/electron_extension_system_factory.h",
"shell/browser/extensions/electron_extension_web_contents_observer.cc",
"shell/browser/extensions/electron_extension_web_contents_observer.h",
"shell/browser/extensions/electron_navigation_ui_data.cc",
"shell/browser/extensions/electron_navigation_ui_data.h",
"shell/browser/extensions/electron_process_manager_delegate.cc",
"shell/browser/extensions/electron_process_manager_delegate.h",
"shell/browser/extensions/electron_extensions_api_client.cc",
@@ -619,25 +621,25 @@ filenames = {
"shell/browser/extensions/electron_extensions_browser_api_provider.h",
"shell/browser/extensions/electron_messaging_delegate.cc",
"shell/browser/extensions/electron_messaging_delegate.h",
"shell/common/extensions/atom_extensions_api_provider.cc",
"shell/common/extensions/atom_extensions_api_provider.h",
"shell/common/extensions/atom_extensions_client.cc",
"shell/common/extensions/atom_extensions_client.h",
"shell/renderer/extensions/atom_extensions_renderer_client.cc",
"shell/renderer/extensions/atom_extensions_renderer_client.h",
"shell/common/extensions/electron_extensions_api_provider.cc",
"shell/common/extensions/electron_extensions_api_provider.h",
"shell/common/extensions/electron_extensions_client.cc",
"shell/common/extensions/electron_extensions_client.h",
"shell/renderer/extensions/electron_extensions_renderer_client.cc",
"shell/renderer/extensions/electron_extensions_renderer_client.h",
"shell/renderer/extensions/electron_extensions_dispatcher_delegate.cc",
"shell/renderer/extensions/electron_extensions_dispatcher_delegate.h",
]
app_sources = [
"shell/app/atom_main.cc",
"shell/app/atom_main.h",
"shell/app/electron_main.cc",
"shell/app/electron_main.h",
]
framework_sources = [
"shell/app/atom_library_main.h",
"shell/app/atom_library_main.mm",
"shell/app/electron_library_main.h",
"shell/app/electron_library_main.mm",
]
login_helper_sources = [ "shell/app/atom_login_helper.mm" ]
login_helper_sources = [ "shell/app/electron_login_helper.mm" ]
}

View File

@@ -36,8 +36,9 @@ NetLog.prototype.startLogging = function (path, ...args) {
const _originalStopLogging = NetLog.prototype.stopLogging
NetLog.prototype.stopLogging = function () {
const logPath = this._currentlyLoggingPath
this._currentlyLoggingPath = null
return _originalStopLogging.call(this)
return _originalStopLogging.call(this).then(() => logPath)
}
const currentlyLoggingPathDeprecated = deprecate.warnOnce('currentlyLoggingPath')

View File

@@ -340,9 +340,38 @@ WebContents.prototype.printToPDF = function (options) {
}
}
WebContents.prototype.print = function (...args) {
WebContents.prototype.print = function (options = {}, callback) {
// TODO(codebytere): deduplicate argument sanitization by moving rest of
// print param logic into new file shared between printToPDF and print
if (typeof options === 'object') {
// Optionally set size for PDF.
if (options.pageSize !== undefined) {
const pageSize = options.pageSize
if (typeof pageSize === 'object') {
if (!pageSize.height || !pageSize.width) {
throw new Error('height and width properties are required for pageSize')
}
// Dimensions in Microns - 1 meter = 10^6 microns
options.mediaSize = {
name: 'CUSTOM',
custom_display_name: 'Custom',
height_microns: Math.ceil(pageSize.height),
width_microns: Math.ceil(pageSize.width)
}
} else if (PDFPageSizes[pageSize]) {
options.mediaSize = PDFPageSizes[pageSize]
} else {
throw new Error(`Unsupported pageSize: ${pageSize}`)
}
}
}
if (features.isPrintingEnabled()) {
this._print(...args)
if (callback) {
this._print(options, callback)
} else {
this._print(options)
}
} else {
console.error('Error: Printing feature is disabled.')
}

View File

@@ -10,7 +10,7 @@ if (!process.electronBinding('features').isExtensionsEnabled()) {
const { app, session, BrowserWindow, deprecate } = require('electron')
app.once('ready', function () {
app.whenReady().then(function () {
const addExtension = function (srcDirectory) {
return session.defaultSession.loadExtension(srcDirectory)
}

View File

@@ -466,7 +466,7 @@ app.on('will-quit', function () {
})
// We can not use protocol or BrowserWindow until app is ready.
app.once('ready', function () {
app.whenReady().then(function () {
// The public API to add/remove extensions.
BrowserWindow.addExtension = function (srcDirectory) {
const manifest = getManifestFromPath(srcDirectory)

View File

@@ -204,7 +204,7 @@ const { setDefaultApplicationMenu } = require('@electron/internal/browser/defaul
// Note that the task must be added before loading any app, so we can make sure
// the call is maded before any user window is created, otherwise the default
// menu may show even when user explicitly hides the menu.
app.once('ready', setDefaultApplicationMenu)
app.whenReady().then(setDefaultApplicationMenu)
if (packagePath) {
// Finally load app's main.js and transfer control to C++.

View File

@@ -14,7 +14,6 @@ const remoteObjectCache = v8Util.createIDWeakMap()
const contextId = v8Util.getHiddenValue(global, 'contextId')
ipcRendererInternal.invoke('ELECTRON_BROWSER_GET_LAST_WEB_PREFERENCES').then(preferences => {
console.log(preferences)
if (!preferences.enableRemoteModule) {
console.warn('%cElectron Deprecation Warning', 'font-weight: bold', "The 'remote' module is deprecated and will be disabled by default in a future version of Electron. To ensure a smooth upgrade and silence this warning, specify {enableRemoteModule: true} in the WebPreferences for this window.")
}

View File

@@ -1,6 +1,6 @@
{
"name": "electron",
"version": "9.0.0-nightly.20200130",
"version": "10.0.0-nightly.20200210",
"repository": "https://github.com/electron/electron",
"description": "Build cross platform desktop apps with JavaScript, HTML, and CSS",
"devDependencies": {

View File

@@ -35,7 +35,7 @@ mas_disable_remote_accessibility.patch
mas_disable_custom_window_frame.patch
chrome_key_systems.patch
allow_nested_error_trackers.patch
blink_initialization_order.patch
add_didinstallconditionalfeatures.patch
ssl_security_state_tab_helper.patch
desktop_media_list.patch
proxy_config_monitor.patch
@@ -80,5 +80,5 @@ add_trustedauthclient_to_urlloaderfactory.patch
feat_allow_disabling_blink_scheduler_throttling_per_renderview.patch
accessible_pane_view.patch
fixme_grit_conflicts.patch
fix_add_executable_to_chromedriver_s_rpath_for_electron_8.patch
fix_use_the_new_mediaplaypause_key_listener_for_internal_chrome.patch
fix_use_native_window_button_positions_when_macos_locale_is_rtl.patch

View File

@@ -10,10 +10,10 @@ Allows Electron to restore WER when ELECTRON_DEFAULT_ERROR_MODE is set.
This should be upstreamed.
diff --git a/content/gpu/gpu_main.cc b/content/gpu/gpu_main.cc
index 0a56e27b49e101f4ac3bd1a0d386c3977666bb6d..d0ccfac9c90d1427778222badb6246aaa1f7b8a4 100644
index 6c446a1506dd1c7728c82f5b11cf7fd3575383d9..057fe111375542e68cad4283dbf2295a977a891a 100644
--- a/content/gpu/gpu_main.cc
+++ b/content/gpu/gpu_main.cc
@@ -259,6 +259,10 @@ int GpuMain(const MainFunctionParams& parameters) {
@@ -261,6 +261,10 @@ int GpuMain(const MainFunctionParams& parameters) {
logging::SetLogMessageHandler(GpuProcessLogMessageHandler);
@@ -24,8 +24,8 @@ index 0a56e27b49e101f4ac3bd1a0d386c3977666bb6d..d0ccfac9c90d1427778222badb6246aa
// We are experiencing what appear to be memory-stomp issues in the GPU
// process. These issues seem to be impacting the task executor and listeners
// registered to it. Create the task executor on the heap to guard against
@@ -371,7 +375,6 @@ int GpuMain(const MainFunctionParams& parameters) {
GpuProcess gpu_process(io_thread_priority);
@@ -383,7 +387,6 @@ int GpuMain(const MainFunctionParams& parameters) {
}));
#endif
- auto* client = GetContentClient()->gpu();

View File

@@ -0,0 +1,137 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jeremy Apthorp <nornagon@nornagon.net>
Date: Wed, 15 Jan 2020 16:35:18 -0800
Subject: add DidInstallConditionalFeatures
This adds a hook on script context creation _after conditional features
have been installed_. Electron uses this to run preload scripts and
various other initialization. This is necessary because at the time
DidCreateScriptContext is called, not all JS APIs are available in the
context, which can cause some preload scripts to trip.
diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h
index 68654a3e7d5ec6caddccb667f9f8fa2feabfa71b..650ce53e112bd65e1901a09480452855a0c16dda 100644
--- a/content/public/renderer/render_frame_observer.h
+++ b/content/public/renderer/render_frame_observer.h
@@ -115,6 +115,8 @@ class CONTENT_EXPORT RenderFrameObserver : public IPC::Listener,
virtual void DidHandleOnloadEvents() {}
virtual void DidCreateScriptContext(v8::Local<v8::Context> context,
int32_t world_id) {}
+ virtual void DidInstallConditionalFeatures(v8::Local<v8::Context> context,
+ int32_t world_id) {}
virtual void WillReleaseScriptContext(v8::Local<v8::Context> context,
int32_t world_id) {}
virtual void DidClearWindowObject() {}
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 6730d6f6eb8448452991ebf5968a8c5a398b6a88..b87f9c7ac0f31ec33f03c36131c3255c8a31c22c 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -5187,6 +5187,12 @@ void RenderFrameImpl::DidCreateScriptContext(v8::Local<v8::Context> context,
observer.DidCreateScriptContext(context, world_id);
}
+void RenderFrameImpl::DidInstallConditionalFeatures(
+ v8::Local<v8::Context> context, int world_id) {
+ for (auto& observer : observers_)
+ observer.DidInstallConditionalFeatures(context, world_id);
+}
+
void RenderFrameImpl::WillReleaseScriptContext(v8::Local<v8::Context> context,
int world_id) {
for (auto& observer : observers_)
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index bc896201057832415b5d54dc8987bb74bf7aa778..5c96af71646722b1108a8d6eafba1adaddf0a05a 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -773,6 +773,8 @@ class CONTENT_EXPORT RenderFrameImpl
bool ShouldTrackUseCounter(const blink::WebURL& url) override;
void DidCreateScriptContext(v8::Local<v8::Context> context,
int world_id) override;
+ void DidInstallConditionalFeatures(v8::Local<v8::Context> context,
+ int world_id) override;
void WillReleaseScriptContext(v8::Local<v8::Context> context,
int world_id) override;
void DidChangeScrollOffset() override;
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h
index 30638c31e30d98bb23292115b25b528ff8e8f62c..e0f2f786b75f861851d1194f57b253a173053299 100644
--- a/third_party/blink/public/web/web_local_frame_client.h
+++ b/third_party/blink/public/web/web_local_frame_client.h
@@ -652,6 +652,9 @@ class BLINK_EXPORT WebLocalFrameClient {
virtual void DidCreateScriptContext(v8::Local<v8::Context>,
int32_t world_id) {}
+ virtual void DidInstallConditionalFeatures(v8::Local<v8::Context>,
+ int32_t world_id) {}
+
// WebKit is about to release its reference to a v8 context for a frame.
virtual void WillReleaseScriptContext(v8::Local<v8::Context>,
int32_t world_id) {}
diff --git a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
index 8095edd988c171a8ad7382d1c2f9fa63ee9e5ffc..510dae593d2a0e2ce13a2879dde5c31e01d21c21 100644
--- a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
+++ b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
@@ -231,6 +231,7 @@ void LocalWindowProxy::Initialize() {
}
InstallConditionalFeatures();
+ GetFrame()->Client()->DidInstallConditionalFeatures(context, world_->GetWorldId());
if (World().IsMainWorld()) {
GetFrame()->Loader().DispatchDidClearWindowObjectInMainWorld();
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
index f8c512c9db0b88904a562b7d4195790d4b0f86a6..d31ef9bd5b98f584a3296638662ae0d27aa37b65 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
@@ -267,6 +267,13 @@ void LocalFrameClientImpl::DidCreateScriptContext(
web_frame_->Client()->DidCreateScriptContext(context, world_id);
}
+void LocalFrameClientImpl::DidInstallConditionalFeatures(
+ v8::Local<v8::Context> context,
+ int32_t world_id) {
+ if (web_frame_->Client())
+ web_frame_->Client()->DidInstallConditionalFeatures(context, world_id);
+}
+
void LocalFrameClientImpl::WillReleaseScriptContext(
v8::Local<v8::Context> context,
int32_t world_id) {
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
index a055f4b0cc1ccc30752b65d6dc54e638e9b63001..0e6501adbf6f9696429c3fa95357de399ee30a9d 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.h
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
@@ -79,6 +79,8 @@ class LocalFrameClientImpl final : public LocalFrameClient {
void DidCreateScriptContext(v8::Local<v8::Context>,
int32_t world_id) override;
+ void DidInstallConditionalFeatures(v8::Local<v8::Context>,
+ int32_t world_id) override;
void WillReleaseScriptContext(v8::Local<v8::Context>,
int32_t world_id) override;
diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h
index 1d6facb9ec63abebc5b79a57860765bc8b3f6638..0b58cb679ed34c54e39af661d4a432d482db8c3c 100644
--- a/third_party/blink/renderer/core/frame/local_frame_client.h
+++ b/third_party/blink/renderer/core/frame/local_frame_client.h
@@ -303,6 +303,8 @@ class CORE_EXPORT LocalFrameClient : public FrameClient {
virtual void DidCreateScriptContext(v8::Local<v8::Context>,
int32_t world_id) = 0;
+ virtual void DidInstallConditionalFeatures(v8::Local<v8::Context>,
+ int32_t world_id) = 0;
virtual void WillReleaseScriptContext(v8::Local<v8::Context>,
int32_t world_id) = 0;
virtual bool AllowScriptExtensions() = 0;
diff --git a/third_party/blink/renderer/core/loader/empty_clients.h b/third_party/blink/renderer/core/loader/empty_clients.h
index f3f00e7d6ac44d77dd75997abf8b93eb59476eb3..2010792697b3443dd6f5058bed5ccd0026c4a152 100644
--- a/third_party/blink/renderer/core/loader/empty_clients.h
+++ b/third_party/blink/renderer/core/loader/empty_clients.h
@@ -370,6 +370,8 @@ class CORE_EXPORT EmptyLocalFrameClient : public LocalFrameClient {
void DidCreateScriptContext(v8::Local<v8::Context>,
int32_t world_id) override {}
+ void DidInstallConditionalFeatures(v8::Local<v8::Context>,
+ int32_t world_id) override {}
void WillReleaseScriptContext(v8::Local<v8::Context>,
int32_t world_id) override {}
bool AllowScriptExtensions() override { return false; }

View File

@@ -1,28 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Samuel Attard <samuel.r.attard@gmail.com>
Date: Thu, 20 Sep 2018 17:50:24 -0700
Subject: blink_initialization_order.patch
Backport of https://chromium-review.googlesource.com/c/chromium/src/+/1030530
to fix the order of V8 and Blink initialization. Also fixes order
of DidCreateScriptContext notification with initialization of window globals
to fix electron/electron#13787. The backport landed in Chromium 67 but the
DidCreateScriptContext re-ordering needs to be upstreamed or kept indefinitely
diff --git a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
index c845acb8321e94c916798826a168e06df34ffff4..941ca9d3905c0c2f36606655bf60e9e9bd1f9196 100644
--- a/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
+++ b/third_party/blink/renderer/bindings/core/v8/local_window_proxy.cc
@@ -211,11 +211,10 @@ void LocalWindowProxy::Initialize() {
GetFrame()->IsMainFrame());
MainThreadDebugger::Instance()->ContextCreated(script_state_, GetFrame(),
origin);
+ InstallConditionalFeatures();
GetFrame()->Client()->DidCreateScriptContext(context, world_->GetWorldId());
}
- InstallConditionalFeatures();
-
if (World().IsMainWorld()) {
GetFrame()->Loader().DispatchDidClearWindowObjectInMainWorld();
}

View File

@@ -14,7 +14,7 @@ when there is code doing that.
This patch reverts the change to fix the crash in Electron.
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
index 0cf193d31a02193ff9173dadc33ee11c01df5750..1a889815d6da2506952691fa13d712884ef3913d 100644
index 28d4c323a1c94ad61f83d4d9cc37863801f02276..85cb2f33afff53c8e524b04e398241928acf8305 100644
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -357,10 +357,6 @@ void LocalFrame::DetachImpl(FrameDetachType type) {

View File

@@ -9,10 +9,10 @@ potentially prevent a window from being created.
TODO(loc): this patch is currently broken.
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 04fb97db324c9051ea794e4445e543d7926af9ee..849d51d9158b6f091b798cee5bda66a8327d2b28 100644
index 49587997fa1ebe73dd00e96c95ae0448fcc7fa62..7e203486c32617e325c8aa6305c4ee57c93540f7 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -4483,6 +4483,7 @@ void RenderFrameHostImpl::CreateNewWindow(
@@ -4487,6 +4487,7 @@ void RenderFrameHostImpl::CreateNewWindow(
last_committed_origin_, params->window_container_type,
params->target_url, params->referrer.To<Referrer>(),
params->frame_name, params->disposition, *params->features,
@@ -49,7 +49,7 @@ index bcdc73fdf89d46e267f0c9568e46172ec89f9f23..930e043a0fdf40ef0e48a19597da567c
bool opener_suppressed,
bool* no_javascript_access) {
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index d6948f86672e8567b68d0222ca5d2278cab63e55..1fcc4c057ac5686f47eba791d1f0cf2c8c639574 100644
index 51f31b2c7e431004f2f1bf54e043ed497d166d4f..f9601b5813746ce930bb7082178e1f826aaeb62e 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -146,6 +146,7 @@ class NetworkService;
@@ -70,7 +70,7 @@ index d6948f86672e8567b68d0222ca5d2278cab63e55..1fcc4c057ac5686f47eba791d1f0cf2c
bool opener_suppressed,
bool* no_javascript_access);
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 8b6362f566c215552e5eaba06cbbac31c6ab792d..272f0ed4ffada8191e725f31c8533bcb35622e46 100644
index bd44565e78aaa70e9402312830d30c4a908ede11..463906df3f761bb321c8580185c5e12dceb96854 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -69,6 +69,7 @@
@@ -91,7 +91,7 @@ index 8b6362f566c215552e5eaba06cbbac31c6ab792d..272f0ed4ffada8191e725f31c8533bcb
// moved on send.
bool is_background_tab =
diff --git a/content/shell/browser/web_test/web_test_content_browser_client.cc b/content/shell/browser/web_test/web_test_content_browser_client.cc
index 4497b2d0c264f3e8ebc05230bdc117b6abccc23b..2eaa105035208d92cdcfe0e4de2a62ebbce1414b 100644
index 62e1749ae329791ed31374b255958bfc971599ab..64285a53a4baa65216f58412909202ce085fca12 100644
--- a/content/shell/browser/web_test/web_test_content_browser_client.cc
+++ b/content/shell/browser/web_test/web_test_content_browser_client.cc
@@ -326,6 +326,8 @@ bool WebTestContentBrowserClient::CanCreateWindow(

View File

@@ -52,15 +52,6 @@ index 392cf3d58c64c088596e8d321a2ce37b0ec60b6e..43e30f47240dc10a3a9b950255d4e487
return modifiers;
}
@@ -151,6 +152,8 @@ void GlobalShortcutListenerX11::OnXKeyPressEvent(::XEvent* x_event) {
modifiers |= (x_event->xkey.state & ShiftMask) ? ui::EF_SHIFT_DOWN : 0;
modifiers |= (x_event->xkey.state & ControlMask) ? ui::EF_CONTROL_DOWN : 0;
modifiers |= (x_event->xkey.state & Mod1Mask) ? ui::EF_ALT_DOWN : 0;
+ // For Windows key
+ modifiers |= (x_event->xkey.state & Mod4Mask) ? ui::EF_COMMAND_DOWN: 0;
ui::Accelerator accelerator(
ui::KeyboardCodeFromXKeyEvent(x_event), modifiers);
diff --git a/ui/base/accelerators/media_keys_listener.cc b/ui/base/accelerators/media_keys_listener.cc
index 1145e1f3d79482b5bb468c3128431ac674310e5f..e9f595045e0c076e0735f27dfc38bfbc7951d372 100644
--- a/ui/base/accelerators/media_keys_listener.cc
@@ -76,7 +67,7 @@ index 1145e1f3d79482b5bb468c3128431ac674310e5f..e9f595045e0c076e0735f27dfc38bfbc
} // namespace ui
diff --git a/ui/base/accelerators/media_keys_listener_mac.mm b/ui/base/accelerators/media_keys_listener_mac.mm
index 85378bb565de617b1bd611d28c8714361747a357..94a899e76586d2c7bb199828bfa4aa1ef9ccfcbc 100644
index 85378bb565de617b1bd611d28c8714361747a357..d67d558b91b49835dfa927893093948093c54f7a 100644
--- a/ui/base/accelerators/media_keys_listener_mac.mm
+++ b/ui/base/accelerators/media_keys_listener_mac.mm
@@ -11,6 +11,7 @@

View File

@@ -8,10 +8,10 @@ run before shutdown. This is required to cleanup WebContents asynchronously
in atom::CommonWebContentsDelegate::ResetManageWebContents.
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index 89a157897b578fe454ad795da06a935786618937..79fe191082e23f5a870cc46641dec702870665ac 100644
index 00d50221bbb63070be48e2493e766242b76724c8..ce20a8dc5135a9b9b6565ac3f1daf0cbeb2df185 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -1499,7 +1499,7 @@ void BrowserMainLoop::MainMessageLoopRun() {
@@ -1504,7 +1504,7 @@ void BrowserMainLoop::MainMessageLoopRun() {
NOTREACHED();
#else
base::RunLoop run_loop;

View File

@@ -15,10 +15,10 @@ the redraw locking mechanism, which fixes these issues. The electron issue
can be found at https://github.com/electron/electron/issues/1821
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
index 5bfd124520083b72287a69d6dd8b450067021a15..3245b3a09df4e97331ddee77395274477af04a78 100644
index a5e45290e69648177440032da3f2f793b9c65600..4e17c9e207a540862138be576f9deb1a4c8d7b3c 100644
--- a/ui/views/win/hwnd_message_handler.cc
+++ b/ui/views/win/hwnd_message_handler.cc
@@ -304,6 +304,10 @@ constexpr int kSynthesizedMouseMessagesTimeDifference = 500;
@@ -305,6 +305,10 @@ constexpr int kSynthesizedMouseMessagesTimeDifference = 500;
} // namespace
@@ -29,7 +29,7 @@ index 5bfd124520083b72287a69d6dd8b450067021a15..3245b3a09df4e97331ddee7739527447
// A scoping class that prevents a window from being able to redraw in response
// to invalidations that may occur within it for the lifetime of the object.
//
@@ -355,6 +359,7 @@ class HWNDMessageHandler::ScopedRedrawLock {
@@ -356,6 +360,7 @@ class HWNDMessageHandler::ScopedRedrawLock {
cancel_unlock_(false),
should_lock_(owner_->IsVisible() && !owner->HasChildRenderingWindow() &&
::IsWindow(hwnd_) &&
@@ -37,7 +37,7 @@ index 5bfd124520083b72287a69d6dd8b450067021a15..3245b3a09df4e97331ddee7739527447
(!(GetWindowLong(hwnd_, GWL_STYLE) & WS_CAPTION) ||
!ui::win::IsAeroGlassEnabled())) {
if (should_lock_)
@@ -969,6 +974,10 @@ HWNDMessageHandler::RegisterUnadjustedMouseEvent() {
@@ -970,6 +975,10 @@ HWNDMessageHandler::RegisterUnadjustedMouseEvent() {
return scoped_enable;
}

View File

@@ -20,10 +20,10 @@ to deal with color spaces. That is being tracked at
https://crbug.com/634542 and https://crbug.com/711107.
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index cd52b3a69753b09f496c6ab0c66e441c443a023a..0c8740c58309682654874da01f6e5c390a61de61 100644
index 4691cedce6d16b5ffcbed995bc2a4a49dda2556b..7c95c65dbb7067524f8696ea4d86e27dacc815cb 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -1803,6 +1803,12 @@ const gfx::ColorSpace& LayerTreeHostImpl::GetRasterColorSpace() const {
@@ -1814,6 +1814,12 @@ const gfx::ColorSpace& LayerTreeHostImpl::GetRasterColorSpace() const {
const gfx::ColorSpace& LayerTreeHostImpl::GetRasterColorSpaceAndId(
int* id) const {
@@ -220,10 +220,10 @@ index be727deec562337330e29570cfc232d57cc69a83..fee41b66cf4b3b14c6f5b1b7278c9070
+
+#undef PATCH_CS
diff --git a/content/browser/gpu/gpu_process_host.cc b/content/browser/gpu/gpu_process_host.cc
index e4a4b968e3f94cd10444495c066651130f076a5a..7481ee690590102b1ec71c3bce6c075402f2c0e6 100644
index 34510d80f708b2e61dac8605526d7b34c484a962..3ba61b3c1fbec6e9d5d9fe62704f6a9d05c4cbdd 100644
--- a/content/browser/gpu/gpu_process_host.cc
+++ b/content/browser/gpu/gpu_process_host.cc
@@ -216,6 +216,7 @@ GpuTerminationStatus ConvertToGpuTerminationStatus(
@@ -221,6 +221,7 @@ GpuTerminationStatus ConvertToGpuTerminationStatus(
// Command-line switches to propagate to the GPU process.
static const char* const kSwitchNames[] = {
@@ -232,7 +232,7 @@ index e4a4b968e3f94cd10444495c066651130f076a5a..7481ee690590102b1ec71c3bce6c0754
service_manager::switches::kGpuSandboxAllowSysVShm,
service_manager::switches::kGpuSandboxFailuresFatal,
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 5ba898b3e6d59e84f0cf329843c51b294a0f093f..f190662cb5a01542b40ca9e992d63451e4c8f4ac 100644
index 89fa83bbda39e90c1fcd6df83cd248c1f2de7195..8d69e9a2f2ee1ea7e639c1bfcdf42eb89a4099ff 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -228,6 +228,7 @@
@@ -243,7 +243,7 @@ index 5ba898b3e6d59e84f0cf329843c51b294a0f093f..f190662cb5a01542b40ca9e992d63451
#include "ui/gl/gl_switches.h"
#include "ui/native_theme/native_theme_features.h"
#include "url/origin.h"
@@ -3082,6 +3083,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
@@ -3083,6 +3084,7 @@ void RenderProcessHostImpl::PropagateBrowserCommandLineToRenderer(
// Propagate the following switches to the renderer command line (along
// with any associated values) if present in the browser command line.
static const char* const kSwitchNames[] = {
@@ -252,10 +252,10 @@ index 5ba898b3e6d59e84f0cf329843c51b294a0f093f..f190662cb5a01542b40ca9e992d63451
service_manager::switches::kDisableInProcessStackTraces,
service_manager::switches::kDisableSeccompFilterSandbox,
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index 2d802d7f5ff7958c550bcbc3afbeecb13a90d39e..711890dbcc64f20eabe55feaa0446ea4537c6594 100644
index bef9630bc7a15b9b8fcebd064d4cea013e6adc4d..c376dab8247eb8352f045dbcd1b8d01a6571aaa3 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -2854,6 +2854,9 @@ cc::LayerTreeSettings RenderWidget::GenerateLayerTreeSettings(
@@ -2853,6 +2853,9 @@ cc::LayerTreeSettings RenderWidget::GenerateLayerTreeSettings(
settings.main_frame_before_activation_enabled =
cmd.HasSwitch(cc::switches::kEnableMainFrameBeforeActivation);

View File

@@ -6,7 +6,7 @@ Subject: fix: disabling compositor recycling
Compositor recycling is useful for Chrome because there can be many tabs and spinning up a compositor for each one would be costly. In practice, Chrome uses the parent compositor code path of browser_compositor_view_mac.mm; the NSView of each tab is detached when it's hidden and attached when it's shown. For Electron, there is no parent compositor, so we're forced into the "own compositor" code path, which seems to be non-optimal and pretty ruthless in terms of the release of resources. Electron has no real concept of multiple tabs per window, so it should be okay to disable this ruthless recycling altogether in Electron.
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 064c44b2d056a3428428fd415b2a78c621cc09c2..ff183a91e42597835878c2be189229c28cb9792b 100644
index 6e8d054ba55b927b08aeaee46676886220ef1045..221b596c774a42487b95d678fde2db730b4b1288 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -469,7 +469,11 @@

View File

@@ -6,7 +6,7 @@ Subject: disable_hidden.patch
Electron uses this to disable background throttling for hidden windows.
diff --git a/content/browser/renderer_host/render_widget_host_impl.cc b/content/browser/renderer_host/render_widget_host_impl.cc
index 5903e48135ff28a46267a0c4790798fd0fae70f9..8a63a103a897f9752cb06c44921f05404f71d2c9 100644
index 954011b5d5623ddb24971e8797d3ba9c957b2e94..8e095e6cbc3408c8b884ea0cecb5f869c7b83ffd 100644
--- a/content/browser/renderer_host/render_widget_host_impl.cc
+++ b/content/browser/renderer_host/render_widget_host_impl.cc
@@ -613,6 +613,9 @@ void RenderWidgetHostImpl::WasHidden() {
@@ -20,7 +20,7 @@ index 5903e48135ff28a46267a0c4790798fd0fae70f9..8a63a103a897f9752cb06c44921f0540
TRACE_EVENT0("renderer_host", "RenderWidgetHostImpl::WasHidden");
diff --git a/content/browser/renderer_host/render_widget_host_impl.h b/content/browser/renderer_host/render_widget_host_impl.h
index ff2505c99eff7a72528582753a1a161cd26264cc..0ae5bb7f78c3a29cbc146c69c7e7760092875f3e 100644
index 9faf49a3fd83fa162de5478065007b0a85b49003..bef9bd9ab188af5c75fb92737579c52b0bf2bef1 100644
--- a/content/browser/renderer_host/render_widget_host_impl.h
+++ b/content/browser/renderer_host/render_widget_host_impl.h
@@ -176,6 +176,9 @@ class CONTENT_EXPORT RenderWidgetHostImpl

View File

@@ -6,10 +6,10 @@ Subject: disable_user_gesture_requirement_for_beforeunload_dialogs.patch
See https://github.com/electron/electron/issues/10754
diff --git a/third_party/blink/renderer/core/dom/document.cc b/third_party/blink/renderer/core/dom/document.cc
index a39760942f5048ed581f861e7dc53357e341bdd5..6e78db32a1d1129fd8efc937cedefb5771ce12e7 100644
index f7a30a0bd0d37b0a23ae441794f5a968e45dc3d9..74e1143f30411106b598fb7bd12f618fd439b041 100644
--- a/third_party/blink/renderer/core/dom/document.cc
+++ b/third_party/blink/renderer/core/dom/document.cc
@@ -3890,7 +3890,9 @@ bool Document::DispatchBeforeUnloadEvent(ChromeClient* chrome_client,
@@ -3896,7 +3896,9 @@ bool Document::DispatchBeforeUnloadEvent(ChromeClient* chrome_client,
"frame that never had a user gesture since its load. "
"https://www.chromestatus.com/feature/5082396709879808";
Intervention::GenerateReport(frame_, "BeforeUnloadNoGesture", message);

View File

@@ -61,7 +61,7 @@ index 95679ab2915ad496ca0018aa13874b84eb11d7fd..c278e0fc072409677beafc7f252ebcf6
//
// Returns the current WebKit preferences. Note: WebPreferences is cached, so
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 272f0ed4ffada8191e725f31c8533bcb35622e46..174c50f9b89982e66836ce791fb446767e0c214a 100644
index 463906df3f761bb321c8580185c5e12dceb96854..053abd33b8f73b0f12a7729b507914516dff584e 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -1192,6 +1192,8 @@ bool RenderViewImpl::OnMessageReceived(const IPC::Message& message) {
@@ -111,7 +111,7 @@ index a6d03eca18db4566002d71ec0b6aedae39a78be7..5eaf6fa6e7568d89d3051617f3ac99b3
// Visibility -----------------------------------------------------------
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc
index ef6fe6f27f6bc184a0f5a926225a79800a5aff73..d31101df348199bd2ac09bc745517d0c7051047c 100644
index 7f58ed742695387c9516dd5c5c3f195e66348cfc..0688b04bc98cecc7506aa69af6b1c2a355dddf62 100644
--- a/third_party/blink/renderer/core/exported/web_view_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
@@ -3334,12 +3334,20 @@ PageScheduler* WebViewImpl::Scheduler() const {
@@ -138,7 +138,7 @@ index ef6fe6f27f6bc184a0f5a926225a79800a5aff73..d31101df348199bd2ac09bc745517d0c
PageVisibilityState WebViewImpl::GetVisibilityState() {
diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_party/blink/renderer/core/exported/web_view_impl.h
index 54366cdabce974234c4acbe01e1cb911202878fb..a5daf03349802b7a8b09b55f55a221e9b8dfa5d4 100644
index 710607bd9112b399e14826105e45f5bf93ab6524..dafc73dc85222298a3e027433939632f4fddb9c1 100644
--- a/third_party/blink/renderer/core/exported/web_view_impl.h
+++ b/third_party/blink/renderer/core/exported/web_view_impl.h
@@ -310,6 +310,7 @@ class CORE_EXPORT WebViewImpl final : public WebView,

View File

@@ -1,32 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Erick Zhao <ezhao@slack-corp.com>
Date: Wed, 29 Jan 2020 14:21:15 -0800
Subject: fix: add executable to chromedriver's rpath for electron 8+
Chromedriver errors on startup for Electron 8+ because FFmpeg
is not included. Adding the executable path to rpath fixes the
issue.
This is in patch form rather than copying the executable command
in Electron's BUILD.gn because one of Chromedriver's deps
(//net/server:http_server) hsa a visibility list that Electron
is not on.
diff --git a/chrome/test/chromedriver/BUILD.gn b/chrome/test/chromedriver/BUILD.gn
index 1ce029a1ba3ec9da3527008d8c2b38446ab4b2f3..de2cc3074fef3d75f041ec8230bd18d3827192cc 100644
--- a/chrome/test/chromedriver/BUILD.gn
+++ b/chrome/test/chromedriver/BUILD.gn
@@ -330,6 +330,13 @@ executable("chromedriver") {
"//net/traffic_annotation:test_support",
"//services/network/public/mojom",
]
+ # Fixes bad rpath on Electron 8+
+ if (is_mac) {
+ ldflags = [
+ "-rpath",
+ "@executable_path/.",
+ ]
+ }
}
python_library("chromedriver_py_tests") {

View File

@@ -0,0 +1,31 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Sesh Sadasivam <sesh@fb.com>
Date: Fri, 31 Jan 2020 19:02:27 -0800
Subject: fix: use native window button positions when MacOS locale is RTL
Classes that inherit from `NSThemeFrame` seem to show window buttons in the
incorrect position when the primary MacOS language is set to an RTL
(right-to-left) language like Arabic or Hebrew. The fix in this commit mirrors
that of `tabbed_browser_window.mm`
(https://chromium-review.googlesource.com/c/chromium/src/+/562603/10/chrome/browser/ui/cocoa/tabbed_browser_window.mm#88).
This change should be upstreamed, and then this patch can be removed.
diff --git a/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm b/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm
index 9905e1c8914f852e250480797f43d17bf9d7f794..0016cc129805726d6518036fb181a2a9715af8c5 100644
--- a/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm
+++ b/components/remote_cocoa/app_shim/native_widget_mac_nswindow.mm
@@ -69,6 +69,13 @@ - (void)mouseDown:(NSEvent*)event {
- (BOOL)usesCustomDrawing {
return NO;
}
+// AppKit's implementation only returns YES if [self class] == [NSThemeFrame
+// class]. See:
+// https://chromium-review.googlesource.com/c/chromium/src/+/562603/10/chrome/browser/ui/cocoa/tabbed_browser_window.mm#88
+- (BOOL)_shouldFlipTrafficLightsForRTL API_AVAILABLE(macosx(10.13)) {
+ return self.window.windowTitlebarLayoutDirection ==
+ NSUserInterfaceLayoutDirectionRightToLeft;
+}
@end
@implementation NativeWidgetMacNSWindowBorderlessFrame

View File

@@ -42,10 +42,10 @@ index 906a1ee4ac58b0744a32153bbaafeac4322a60e4..c90f4aead36cbf3767dc5094728963c2
// another SiteInstance for the same site.
void RegisterSiteInstance(SiteInstanceImpl* site_instance);
diff --git a/content/browser/frame_host/navigation_request.cc b/content/browser/frame_host/navigation_request.cc
index 0fd355a218cc454380c9e48ae299872484078f4d..8824293926782106cb7f8fb1eb76adda6963b97d 100644
index e911c3aa1cf13b17bd43ad8c9d50f0fd59996907..373e36eb61d57e1bcd98d45419ee4b434820bf02 100644
--- a/content/browser/frame_host/navigation_request.cc
+++ b/content/browser/frame_host/navigation_request.cc
@@ -1198,6 +1198,24 @@ void NavigationRequest::BeginNavigation() {
@@ -1185,6 +1185,24 @@ void NavigationRequest::BeginNavigation() {
TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationRequest", this,
"ResponseStarted");
@@ -71,10 +71,10 @@ index 0fd355a218cc454380c9e48ae299872484078f4d..8824293926782106cb7f8fb1eb76adda
render_frame_host_ =
frame_tree_node_->render_manager()->GetFrameHostForNavigation(this);
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc
index d55a185f524c004e060936e43229568b36cad8a9..a82d6547951e42b1ef2af260c42e5c426baac896 100644
index e41e833e963617cf5b2e463e839b2ae0bfd212ae..f544da86cb12d2786f7aad24953741ed77a0ac24 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -2173,6 +2173,16 @@ bool RenderFrameHostManager::InitRenderView(
@@ -2247,6 +2247,16 @@ bool RenderFrameHostManager::InitRenderView(
scoped_refptr<SiteInstance>
RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
NavigationRequest* request) {
@@ -91,7 +91,7 @@ index d55a185f524c004e060936e43229568b36cad8a9..a82d6547951e42b1ef2af260c42e5c42
SiteInstance* current_site_instance = render_frame_host_->GetSiteInstance();
// All children of MHTML documents must be MHTML documents. They all live in
@@ -2192,10 +2202,60 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
@@ -2266,10 +2276,60 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
//
// TODO(clamy): We should also consider as a candidate SiteInstance the
// speculative SiteInstance that was computed on redirects.
@@ -156,9 +156,9 @@ index d55a185f524c004e060936e43229568b36cad8a9..a82d6547951e42b1ef2af260c42e5c42
// Account for renderer-initiated reload as well.
// Needed as a workaround for https://crbug.com/1045524, remove it when it is
@@ -2215,6 +2275,9 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
@@ -2300,6 +2360,9 @@ RenderFrameHostManager::GetSiteInstanceForNavigationRequest(
request->GetRestoreType() != RestoreType::NONE, request->is_view_source(),
request->WasServerRedirect());
request->WasServerRedirect(), cross_origin_policy_swap);
+ GetContentClient()->browser()->RegisterPendingSiteInstance(
+ render_frame_host_.get(), dest_site_instance.get());
@@ -220,7 +220,7 @@ index 930e043a0fdf40ef0e48a19597da567c8603878c..b6ba4dfad79d6031efd725de795bf901
const MainFunctionParams& parameters) {
return nullptr;
diff --git a/content/public/browser/content_browser_client.h b/content/public/browser/content_browser_client.h
index 1fcc4c057ac5686f47eba791d1f0cf2c8c639574..c5eb6fbfc4b6aab5e830c725899f270aff3b4b46 100644
index f9601b5813746ce930bb7082178e1f826aaeb62e..f94bc9e640b54c6abf05bfe074ae0635d57470e8 100644
--- a/content/public/browser/content_browser_client.h
+++ b/content/public/browser/content_browser_client.h
@@ -233,8 +233,45 @@ class CONTENT_EXPORT ContentBrowserClient {

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