playwright/browser_patches
Andrey Lushnikov e64f66685a
devops: fork webkit into a separate browser (#5834)
Official WebKit no longer supports Mac 10.14. However, since
this system is still very much in use, we want to be able to
keep it running for a while.

This patch adds a new browser that we would compile and maintain
specifically for Mac 10.14: `deprecated-webkit-mac-10.14`. This
browser is a clone of Webkit r1443 that is the last known revision
to compile on Mac 10.14.

As we move on, we're free to modify this browser however we want,
backporting important patches.

References #5833
2021-03-16 01:08:21 -07:00
..
chromium browser(chromium): roll to 857950 (#5709) 2021-03-03 13:19:57 -08:00
deprecated-webkit-mac-10.14 devops: fork webkit into a separate browser (#5834) 2021-03-16 01:08:21 -07:00
ffmpeg devops: bundle ffmpeg license file with our archives (#5301) 2021-02-03 19:36:10 -08:00
firefox chore: consolidate browser cheatsheets (#5832) 2021-03-15 17:54:25 -07:00
tools devops: automation to compile chromium for mac arm64 (#5101) 2021-01-22 11:27:40 +03:00
webkit chore: consolidate browser cheatsheets (#5832) 2021-03-15 17:54:25 -07:00
winldd devops: trigger all builds with new windows buildbot (#4638) 2020-12-08 11:03:11 -08:00
README.md chore: consolidate browser cheatsheets (#5832) 2021-03-15 17:54:25 -07:00
checkout_build_archive_upload.sh devops: fork webkit into a separate browser (#5834) 2021-03-16 01:08:21 -07:00
export.sh devops: suppport WK_CHECKOUT_PATH variable (#4617) 2020-12-07 08:42:20 -08:00
prepare_checkout.sh devops: fork webkit into a separate browser (#5834) 2021-03-16 01:08:21 -07:00
sanitize_and_compress_log.js devops: use node.js to gzip logs 2020-04-20 02:52:26 -07:00
send_telegram_message.sh chore: remove //browser_patches/buildbots folder (#5535) 2021-02-22 09:09:19 -08:00
upload.sh devops: use node.js to gzip logs 2020-04-20 02:52:26 -07:00

README.md

Contributing Browser Patches

Firefox and WebKit have additional patches atop to expose necessary capabilities.

Ideally, all these changes should be upstreamed. For the time being, it is possible to setup a browser checkout and develop from there.

WebKit upstream status

1. Setting up local browser checkout

From the playwright repo, run the following command:

$ ./browser_patches/prepare_checkout.sh firefox <path to checkout>

(you can optionally pass "webkit" for a webkit checkout)

If you don't have a checkout, don't pass a path and one will be created for you in ./browser_patches/firefox/checkout

NOTE: this command downloads GBs of data.

This command will:

  • create a browser_upstream remote in the checkout
  • create a playwright-build branch and apply all playwright-required patches to it.

2. Developing a new change

You want to create a new branch off the playwright-build branch.

Assuming that you're under ./browser_patches/firefox/checkout:

$ git checkout -b my-new-feature playwright-build
$ # develop my feature on the my-new-feature branch ....

3. Exporting your change to playwright repo

Once you're happy with the work you did in the browser-land, you want to export it to the playwright repo.

Assuming that you're in the root of the playwright repo and that your browser checkout has your feature branch checked out:

$ ./browser_patches/export.sh firefox <path to checkout>

This script will:

  • create a new patch and put it to the ./browser_patches/firefox/patches/
  • update the ./browser_patches/firefox/UPSTREAM_CONFIG.sh if necessary
  • bump the ./browser_patches/firefox/BUILD_NUMBER number.

If you omit the path to your checkout, the script will assume one is located at ./browser_patches/firefox/checkout

Send a PR to the Playwright repo to be reviewed.

4. Rolling Playwright to the new browser build

Once the patch has been committed, the build bots will kick in, compile and upload a new browser version to all the platforms. Then you can roll the browser:

$ node utils/roll_browser.js chromium 123456

Cheatsheet

FireFox

Stack trace

In //mozglue/misc/StackWalk.cpp add

#define MOZ_DEMANGLE_SYMBOLS 1

In native code use

nsTraceRefcnt::WalkTheStack(stderr);

If the stack trace is still mangled cat it to tools/rb/fix_linux_stack.py

Logging

Upstream documentation: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Gecko_Logging

MOZ_LOG=nsHttp:5

Module name is a string passed to the mozilla::LazyLogModule of the corresponding component, e.g.:

LazyLogModule gHttpLog("nsHttp");

WebKit

Debugging windows

In Source\WTF\wtf\win\DbgHelperWin.cpp replace

#if !defined(NDEBUG) with #if 1

Then regular WTFReportBacktrace() works.

Enable core dumps on Linux

mkdir -p /tmp/coredumps
sudo bash -c 'echo "/tmp/coredumps/core-pid_%p.dump" > /proc/sys/kernel/core_pattern'
ulimit -c unlimited

Then to read stack traces run the following command:

# To find out crashing process name
file core-pid_29652.dump
# Point gdb to the local binary of the crashed process and the core file
gdb $HOME/.cache/ms-playwright/webkit-1292/minibrowser-gtk/WebKitWebProcess core-pid_29652
# Inside gdb update .so library search path to the local one
set solib-search-path /home/yurys/.cache/ms-playwright/webkit-1292/minibrowser-gtk
# Finally print backtrace
bt