|2 days ago|
|chromium||2 days ago|
|ffmpeg||1 week ago|
|firefox||2 days ago|
|firefox-beta||2 days ago|
|webkit||2 days ago|
|winldd||3 months ago|
|README.md||2 days ago|
|build.sh||3 days ago|
|checkout_build_archive_upload.sh||1 week ago|
|clean.sh||3 days ago|
|export.sh||3 days ago|
|prepare_checkout.sh||3 days ago|
|repack-juggler.mjs||2 days ago|
|sanitize_and_compress_log.js||2 years ago|
|send_telegram_message.sh||2 months ago|
|upload.sh||2 months ago|
|utils.sh||3 months ago|
- Contributing Browser Patches
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.
1. Setting up local browser checkout
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
NOTE: this command downloads GBs of data.
This command will:
- create a
browser_upstreamremote in the checkout
- create a
playwright-buildbranch and apply all playwright-required patches to it.
2. Developing a new change
You want to create a new branch off the
Assuming that you're under
$ 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
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
- update the
- bump the
If you omit the path to your checkout, the script will assume one is located at
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
See browser stdout/stderr
DEBUG=pw:browser environment variable to see it.
When compiling set the
FF_DEBUG_BUILD=1 environment variable.
#define MOZ_DEMANGLE_SYMBOLS 1
In native code use
#include "mozilla/StackWalk.h" // ... MozWalkTheStack(stderr);
If the stack trace is still mangled
cat it to
Upstream documentation: https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Gecko_Logging
Module name is a string passed to the
mozilla::LazyLogModule of the corresponding component, e.g.:
Inside Juggler, you can use
Inside Objective-C you can use NSLog.
NSLog(@"Foobar value: %@", value);
#if !defined(NDEBUG) with
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