2017-11-24 09:35:57 +00:00
# Upgrading Chromium
2017-08-07 22:31:12 +00:00
This document is meant to serve as an overview of what steps are needed
on each Chromium upgrade in Electron.
2017-11-20 22:02:54 +00:00
- Upgrade libcc to a new Chromium version
- Make Electron code compatible with the new libcc
2017-11-21 07:18:12 +00:00
- Update Electron dependencies (crashpad, NodeJS, etc.) if needed
2017-11-20 22:02:54 +00:00
- Make internal builds of libcc and electron
- Update Electron docs if necessary
## Upgrade `libcc` to a new Chromium
2017-11-24 10:06:04 +00:00
1. Get the code and initialize the project:
- ```sh
$ git clone git@github.com:electron/libchromiumcontent.git
$ cd libchromiumcontent
$ ./script/bootstrap -v```
2017-11-24 13:21:41 +00:00
2. Update the Chromium snapshot
- Choose a version number from [OmahaProxy ](https://omahaproxy.appspot.com/ ) and update the `VERSION` file with it
- This can be done manually by visiting OmahaProxy in a browser, or automatically:
- One-liner for the latest stable mac version: `curl -so- https://omahaproxy.appspot.com/mac > VERSION`
- One-liner for the latest win64 beta version: `curl -so- https://omahaproxy.appspot.com/all | grep "win64,beta" | awk -F, 'NR==1{print $3}' > VERSION`
- run `$ ./script/update`
- Time to brew some tea -- this may run for 30m or more.
- It will probably fail applying patches.
3. Fix `*.patch` files in the `/patches` and `/patches-mas` folders.
4. (Optional) Run a separate script to apply patches (`script/update` uses it internally):
2017-11-24 10:06:04 +00:00
- `$ ./script/apply-patches`
- There is also another script `/script/patch.py` that could be more useful
- Check `--help` to learn how it works with `$ ./script/patch.py -h`
2017-11-24 13:21:41 +00:00
5. Run the build when all patches can be applied without errors
2017-11-24 10:06:04 +00:00
- `$ ./script/build`
- If some patches are no longer compatible with the Chromium code, fix compilation errors.
2017-11-24 13:21:41 +00:00
6. When build succeeds, create a `dist` for Electron
2017-11-24 10:06:04 +00:00
- `$ ./script/create-dist --no_zip`
- It will create `dist/main` folder in the root of the libcc repo
- You will need it to build Electron.
2017-11-24 13:21:41 +00:00
7. (Optional) Update script contents if there are errors resultant of some files being removed or renamed. (`--no_zip` prevents script from create `dist` archives, you don't need them.)
2017-11-20 22:02:54 +00:00
## Update Electron Code
2017-11-24 10:06:04 +00:00
1. Get the code:
- ```sh
$ git clone git@github.com:electron/electron.git
$ cd electron
```
2. If you already have libcc built on you machine in its own repo, you need to tell Electron explicitly to use it:
- ```sh
2017-11-20 22:02:54 +00:00
$ ./script/bootstrap.py -v \
--libcc_source_path < libcc_folder > /src \
--libcc_shared_library_path < libcc_folder > /shared_library \
--libcc_static_library_path < libcc_folder > /static_library
2017-11-21 14:19:33 +00:00
```
- If you haven't yet built libcc but it's already supposed to be upgraded to a new Chromium, bootstrap Electron as usual
`$ ./script/bootstrap.py -v`
2017-11-20 22:02:54 +00:00
- Ensure that libcc submodule (`vendor/libchromiumcontent`) points to a right revision
2017-11-24 10:06:04 +00:00
3. Set CLANG_REVISION in` script/update-clang.sh` to match the version Chromium is using.
- Located in `electron/libchromiumcontent/src/tools/clang/scripts/update.py`
4. Checkout Chromium if you haven't already:
- https://chromium.googlesource.com/chromium/src.git/+/{VERSION}/tools/clang/scripts/update.py
- (Replace the `{VERSION}` placeholder in the url above to the Chromium version libcc uses.)
5. Build Electron.
- Try to build Debug version first: `$ ./script/build.py -c D`
- You will need it to run tests
6. Fix compilation and linking errors
7. Ensure that Release build can be built too
- `$ ./script/build.py -c R`
2017-11-21 07:18:12 +00:00
- Often the Release build will have different linking errors that you'll need to fix.
- Some compilation and linking errors are caused by missing source/object files in the libcc `dist`
2017-11-24 10:06:04 +00:00
8. Update `./script/create-dist` in the libcc repo, recreate a `dist` , and run Electron bootstrap script once again.
2017-11-20 22:02:54 +00:00
2017-11-21 14:19:33 +00:00
### Tips for fixing compilation errors
2017-11-20 22:02:54 +00:00
- Fix build config errors first
- Fix fatal errors first, like missing files and errors related to compiler flags or defines
2017-11-21 07:18:12 +00:00
- Try to identify complex errors as soon as possible.
2017-11-20 22:02:54 +00:00
- Ask for help if you're not sure how to fix them
- Disable all Electron features, fix the build, then enable them one by one
- Add more build flags to disable features in build-time.
2017-11-21 07:18:12 +00:00
When a Debug build of Electron succeeds, run the tests:
2017-11-20 22:02:54 +00:00
`$ ./script/test.py`
Fix the failing tests.
Follow all the steps above to fix Electron code on all supported platforms.
2017-11-24 10:06:04 +00:00
## Updating Crashpad
2017-11-20 22:02:54 +00:00
2017-11-24 13:21:41 +00:00
If there are any compilation errors related to the Crashpad, it probably
means you need to update the fork to a newer revision. See
[Upgrading Crashpad ](https://github.com/electron/electron/tree/master/docs/development/upgrading-crashpad.md )
for instructions on how to do that.
2017-11-20 22:02:54 +00:00
2017-11-24 10:06:04 +00:00
## Updating NodeJS
2017-11-20 22:02:54 +00:00
2017-11-24 13:21:41 +00:00
Upgrade `vendor/node` to the Node release that corresponds to the v8 version
used in the new Chromium release. See the v8 versions in Node on
2017-01-25 20:31:06 +00:00
2017-11-24 13:21:41 +00:00
See [Upgrading Node ](https://github.com/electron/electron/tree/master/docs/development/upgrading-node.md )
for instructions on this.
2017-08-07 22:31:12 +00:00
2017-03-29 22:08:06 +00:00
## Verify ffmpeg Support
2017-03-29 22:07:30 +00:00
2017-11-24 10:06:04 +00:00
Electron ships with a version of `ffmpeg` that includes proprietary codecs by default. A version without these codecs is built and distributed with each release as well. Each Chrome upgrade should verify that switching this version is still supported.
2017-03-29 22:07:30 +00:00
2017-11-24 13:21:41 +00:00
You can verify Electron's support for multiple `ffmpeg` builds by loading the
following page. It should work with the default `ffmpeg` library distributed
with Electron and not work with the `ffmpeg` library built without proprietary
codecs.
2017-03-29 22:07:30 +00:00
```html
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" >
< title > Proprietary Codec Check< / title >
< / head >
< body >
< p > Checking if Electron is using proprietary codecs by loading video from http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4< / p >
< p id = "outcome" > < / p >
< video style = "display:none" src = "http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4" autoplay > < / video >
< script >
const video = document.querySelector('video')
video.addEventListener('error', ({target}) => {
if (target.error.code === target.error.MEDIA_ERR_SRC_NOT_SUPPORTED) {
document.querySelector('#outcome').textContent = 'Not using proprietary codecs, video emitted source not supported error event.'
} else {
document.querySelector('#outcome').textContent = `Unexpected error: ${target.error.code}`
}
})
video.addEventListener('playing', () => {
document.querySelector('#outcome').textContent = 'Using proprietary codecs, video started playing.'
})
< / script >
< / body >
< / html >
```
2017-08-07 22:31:12 +00:00
## Useful Links
2017-01-25 20:31:06 +00:00
- [Chrome Release Schedule ](https://www.chromium.org/developers/calendar )
2017-08-07 22:31:12 +00:00
- [OmahaProxy ](http://omahaproxy.appspot.com )
- [Chromium Issue Tracker ](https://bugs.chromium.org/p/chromium )