Commit graph

701 commits

Author SHA1 Message Date
Dmitry Gozman 58fc6b4003
chore: align some server-side methods with rpc calls (#3504)
- Never write to console on the server side - we use stdout for
  communication. This includes logPolitely and deprecate.
- Pass undefined instead of null in some BrowserContext methods.
- Use explicit _setFileChooserIntercepted instead of on/off magic.
2020-08-17 16:19:21 -07:00
Dmitry Gozman 141a255a07
chore: remove unused methods from server side (#3502)
Most of these were api methods that are no longer called directly.
2020-08-17 14:36:51 -07:00
Dmitry Gozman 1e9c0eb705
chore: remove logger infrastructure from server side (#3487)
We do not implement LoggerSink on the server, so we can
use a simple debugLogger.
2020-08-17 14:12:31 -07:00
Dmitry Gozman bc23324878
chore: remove apiName plumbing and some unused methods from server side (#3481)
We append apiName where needed on the client instead.
2020-08-14 18:25:32 -07:00
Dmitry Gozman ae4280a12b
chore: cleanup more non-rpc code (#3471)
- Replaces BrowserServer class with BrowserProcess struct.
- Removes src/api.ts.
- Removes helper.installApiHooks.
- Removes BrowserType.launchServer.
2020-08-14 13:19:12 -07:00
Dmitry Gozman 9b52ca8676
chore: remove unused non-rpc code, test options, infra, bots (#3444) 2020-08-13 16:00:23 -07:00
Andrey Lushnikov 515665908e chore: add comment to clarify /sbin 2020-08-13 11:44:21 -07:00
Joel Einbinder 1ef199f512
fix(launchDoctor): add sudo to install missing packages hint (#3402) 2020-08-12 08:48:35 -07:00
Andrey Lushnikov c035560389
fix: full path to ldconfig in linux (#3401) 2020-08-12 08:47:41 -07:00
Andrey Lushnikov 2db97e3b2d
feat(firefox): migrate to protocol-based proxy implementation (#3362)
This migrates Firefox to the protocol-based proxy implementation.

Benefits:
- supports secure web proxies (already supported by Chromium)
- unlocks support for SOCKS proxies with authentication
2020-08-11 11:36:27 -07:00
Max Schmitt e582cc678c
fix(launcher): make PrintDeps.exe path configurable (#3311) 2020-08-05 13:33:40 -07:00
Yury Semikhatsky 7e8d03b050
fix(launcher): extend list of known missing DLLs (#3256)
#2745
2020-07-31 14:11:11 -07:00
Yury Semikhatsky cbfdca736c
feat(launcher): check dependencies before launch on Windows (#3240) 2020-07-30 17:15:46 -07:00
Dmitry Gozman cefb1b9727
feat(rpc): run fixtures.jest.js with channel (#3227)
Also, introduce setupInProcess wrapper to be used for in-process rpc.
2020-07-30 10:22:28 -07:00
Andrey Lushnikov e09132527d
fix: a pretty error when browser executable is not found (#3220)
Make sure executable exists before launching it. If it doesn't and
we were launched without custom executable path, print a helpful
instruction to run `npm i playwright` and get browsers downloaded.

Note: there's already a test that makes sure bad executable paths
are treated fairly: 9132d23b2b/test/launcher.jest.js (L54-L59)

This doesn't test missing default browser installation which I think is
fine.

Fixes #3161
2020-07-29 23:16:24 -07:00
Andrey Lushnikov f111ad7437
fix: add missing libgles2 package to launch doctor (#3209)
References #2745
2020-07-29 10:40:33 -07:00
Andrey Lushnikov 6bc02f8fb6
feat(launchdoctor): detect missing libraries for dlopen (#3202)
WebKit WPE assumes `libglesv2.so` is available on the host system
and uses `dlopen` to open it.

This patch starts using `ldconfig -p` to check if the library
exists on the system.

References #2745
2020-07-29 09:58:45 -07:00
Andrey Lushnikov 6fa7547ce3
fix(launchDoctor): add package mapping for libvpx.so.5 (#3180)
Since we were bundling the library with the browsers before, the
mapping was missing.

References #2745
2020-07-27 10:39:45 -07:00
Max Schmitt 9b502af4e3
fix(launchDoctor): support existing LD_LIBRARY_PATH (#3165) 2020-07-27 10:05:12 -07:00
Dmitry Gozman fd2e65b73c
api: export all browsers from every package (#3128)
This makes it easier to reason about our packages.
The only difference is what each package downloads.
When the browser is not downloaded, it will fail to launch.

Each browser gets a 'download' attribute in the browser.json file.
2020-07-24 16:36:00 -07:00
Andrey Lushnikov 86b64a2311
feat(launchDoctor): package mappings for Ubuntu 20.04 (#3155)
This teaches Launch Doctor to print a command to install missing
packages on Ubuntu 20.04.

References #2745
2020-07-24 16:15:42 -07:00
Andrey Lushnikov d4b707861c
feat: validate Ubuntu version if launching firefox (#3156)
The original plan was to rnu some checks against libc version the
binary is compiled with, but these turn out to be a little complicated:
parsing out libc version from both static binary and host system
requires text processing, and it's hard to make sure it works reliably
across distributions.

Instead, let's start with a very particular check against running
Firefox on Ubuntu 16.04.

References #2745
2020-07-24 16:14:14 -07:00
Andrey Lushnikov bbe7dbe9ae
feat(installer): start downloadinb Ubuntu 20.04 builds (#3126)
Start auto-detecting Ubuntu 20.04 and downloading custom webkit
build for it.

References #2745
2020-07-23 17:37:47 -07:00
Dmitry Gozman 2bed312911
fix(electron): emit close events in the correct order (#3111) 2020-07-23 11:02:43 -07:00
Dmitry Gozman 65002a0ac2
feat(rpc): support firefox user prefs (#3093)
Also ignore firefoxUserPrefs in launchPersistentContext according to our api.
2020-07-22 17:20:00 -07:00
Andrey Lushnikov ea5dfdbec7
fix: re-write Chromium startup error with clear instructions (#3070)
This patch detects Chromium crash with a sandboxing error and re-writes
the error to surface information nicely.

#### Error Before:

```sh
pwuser@23592d09b3bd:~/tmp$ node a.js
(node:324) UnhandledPromiseRejectionWarning: browserType.launch: Protocol error (Browser.getVersion): Target closed.
=========================== logs ===========================
[browser] <launching> /home/pwuser/.cache/ms-playwright/chromium-790602/chrome-linux/chrome --disable-background-networking --enable-features=NetworkService,NetworkServiceInProcess --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-breakpad --disab
le-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-default-apps --disable-dev-shm-usage --disable-extensions --disable-features=TranslateUI,BlinkGenPropertyTrees,ImprovedCookieControls,SameSiteByDefaultCookies --disable-hang-monitor --disab
le-ipc-flooding-protection --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-sync --force-color-profile=srgb --metrics-recording-only --no-first-run --enable-automation --password-store=basic --use-mock-keychain --user-data-dir=/tmp/playwrig
ht_chromiumdev_profile-mjSfr2 --remote-debugging-pipe --headless --hide-scrollbars --mute-audio --no-startup-window
[browser] <launched> pid=401
[browser] [0722/170825.030020:FATAL:zygote_host_impl_linux.cc(117)] No usable sandbox! Update your kernel or see https://chromium.googlesource.com/chromium/src/+/master/docs/linux/suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live
dangerously and need an immediate workaround, you can try using --no-sandbox.
[browser] #0 0x55ac4f8c7be9 base::debug::CollectStackTrace()
[browser] #1 0x55ac4f841c13 base::debug::StackTrace::StackTrace()
[browser] #2 0x55ac4f853680 logging::LogMessage::~LogMessage()
[browser] #3 0x55ac4df2307e content::ZygoteHostImpl::Init()
[browser] #4 0x55ac4f40dd47 content::ContentMainRunnerImpl::Initialize()
[browser] #5 0x55ac4f45c9fa service_manager::Main()
[browser] #6 0x55ac4f40c361 content::ContentMain()
[browser] #7 0x55ac4f45b5bd headless::(anonymous namespace)::RunContentMain()
[browser] #8 0x55ac4f45b2bc headless::HeadlessShellMain()
[browser] #9 0x55ac4ccc22e7 ChromeMain
[browser] #10 0x7f0f3d736b97 __libc_start_main
[browser] #11 0x55ac4ccc212a _start
[browser]
[browser] Received signal 6
[browser] #0 0x55ac4f8c7be9 base::debug::CollectStackTrace()
[browser] #1 0x55ac4f841c13 base::debug::StackTrace::StackTrace()
[browser] #2 0x55ac4f8c7785 base::debug::(anonymous namespace)::StackDumpSignalHandler()
[browser] #3 0x7f0f437b3890 (/lib/x86_64-linux-gnu/libpthread-2.27.so+0x1288f)
[browser] #4 0x7f0f3d753e97 gsignal
[browser] #5 0x7f0f3d755801 abort
[browser] #6 0x55ac4f8c66e5 base::debug::BreakDebugger()
[browser] #7 0x55ac4f853aeb logging::LogMessage::~LogMessage()
[browser] #8 0x55ac4df2307e content::ZygoteHostImpl::Init()
[browser] #9 0x55ac4f40dd47 content::ContentMainRunnerImpl::Initialize()
[browser] #10 0x55ac4f45c9fa service_manager::Main()
[browser] #11 0x55ac4f40c361 content::ContentMain()
[browser] #12 0x55ac4f45b5bd headless::(anonymous namespace)::RunContentMain()
[browser] #13 0x55ac4f45b2bc headless::HeadlessShellMain()
[browser] #14 0x55ac4ccc22e7 ChromeMain
[browser] #15 0x7f0f3d736b97 __libc_start_main
[browser] #16 0x55ac4ccc212a _start
[browser]   r8: 0000000000000000  r9: 00007ffd38a863b0 r10: 0000000000000008 r11: 0000000000000246
[browser]  r12: 00007ffd38a87680 r13: 00007ffd38a86610 r14: 00007ffd38a87690 r15: aaaaaaaaaaaaaaaa
[browser]   di: 0000000000000002  si: 00007ffd38a863b0  bp: 00007ffd38a86600  bx: 00007ffd38a86e44
[browser]   dx: 0000000000000000  ax: 0000000000000000  cx: 00007f0f3d753e97  sp: 00007ffd38a863b0
[browser]   ip: 00007f0f3d753e97 efl: 0000000000000246 cgf: 002b000000000033 erf: 0000000000000000
[browser]  trp: 0000000000000000 msk: 0000000000000000 cr2: 0000000000000000
[browser] [end of stack trace]
[browser] Calling _exit(1). Core file will not be generated.
============================================================
Note: use DEBUG=pw:api environment variable and rerun to capture Playwright logs.Error
    at /home/pwuser/tmp/node_modules/playwright/lib/chromium/crConnection.js:131:63
    at new Promise (<anonymous>)
    at CRSession.send (/home/pwuser/tmp/node_modules/playwright/lib/chromium/crConnection.js:130:16)
    at CRSession.send (/home/pwuser/tmp/node_modules/playwright/lib/helper.js:78:31)
    at Function.connect (/home/pwuser/tmp/node_modules/playwright/lib/chromium/crBrowser.js:54:39)
    at Chromium._connectToTransport (/home/pwuser/tmp/node_modules/playwright/lib/server/chromium.js:52:38)
    at Chromium._innerLaunch (/home/pwuser/tmp/node_modules/playwright/lib/server/browserType.js:87:36)
    at async ProgressController.run (/home/pwuser/tmp/node_modules/playwright/lib/progress.js:75:28)
    at async Chromium.launch (/home/pwuser/tmp/node_modules/playwright/lib/server/browserType.js:60:25)
    at async /home/pwuser/tmp/a.js:4:19
(node:324) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise reject
ion, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:324) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
```


#### Error After:

```sh
pwuser@23592d09b3bd:~/tmp$ node a.js
(node:222) UnhandledPromiseRejectionWarning: browserType.launch: Chromium sandboxing failed!
================================
To workaround sandboxing issues, do either of the following:
  - (preferred): Configure environment to support sandboxing: https://github.com/microsoft/playwright/blob/master/docs/troubleshooting.md
  - (alternative): Launch Chromium without sandbox using 'chromiumSandbox: false' option
================================
Error
    at /home/pwuser/tmp/node_modules/playwright/lib/chromium/crConnection.js:131:63
    at new Promise (<anonymous>)
    at CRSession.send (/home/pwuser/tmp/node_modules/playwright/lib/chromium/crConnection.js:130:16)
    at CRSession.send (/home/pwuser/tmp/node_modules/playwright/lib/helper.js:78:31)
    at Function.connect (/home/pwuser/tmp/node_modules/playwright/lib/chromium/crBrowser.js:54:27)
    at Chromium._connectToTransport (/home/pwuser/tmp/node_modules/playwright/lib/server/chromium.js:53:38)
    at Chromium._innerLaunch (/home/pwuser/tmp/node_modules/playwright/lib/server/browserType.js:89:36)
    at async ProgressController.run (/home/pwuser/tmp/node_modules/playwright/lib/progress.js:75:28)
    at async Chromium.launch (/home/pwuser/tmp/node_modules/playwright/lib/server/browserType.js:61:25)
    at async /home/pwuser/tmp/a.js:4:19
(node:222) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise reject
ion, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 2)
(node:222) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
```

References #2745
2020-07-22 10:57:58 -07:00
Andrey Lushnikov 47e30f047b
feat: introduce chromiumSandbox launch option (#3067)
The option is intended to be used instead of the `--no-sandbox`
argument that is accepted exclusively by Chromium and crashes
WebKit.

References #2745
2020-07-21 13:49:09 -07:00
Andrey Lushnikov af20d2704f
fix: auto-add --no-sandbox when running Chromium under root (#3064)
References #2745
2020-07-21 13:21:42 -07:00
Dmitry Gozman 5848ed8f41
feat(rpc): introduce protocol.pdl (#3054)
We now generate channels.ts from the protocol definition. There are still some shortcomings,
like union types - these will be addressed in follow ups.
2020-07-20 17:38:06 -07:00
Andrey Lushnikov 9a2245d30a
devops: show package names instead of missing libs on Ubuntu 18.04 (#3013)
This patch starts putting package names to install on Ubuntu instead
of missing dependencies list.

The mapping of library to package name is obtained using the following
script: https://gist.github.com/aslushnikov/2766200430228c3700537292fccad064

References #2745
2020-07-17 16:50:20 -07:00
Dmitry Gozman 91e1a25f34
feat(rpc): gracefully close browsers in server process on disconnect (#3005) 2020-07-17 16:14:23 -07:00
Dmitry Gozman aa4c893b09
feat(rpc): implement waitForNavigation on the client (#2949)
Drive-by: fix electron issues, exposed by the test using
waitForNavigation.

Drive-by: mark some tests skip(CHANNEL) that were mistakenly
marked skip(USES_HOOKS).
2020-07-15 18:48:19 -07:00
Andrey Lushnikov 0b9218149f
feat: validate browser dependencies before launching on Linux (#2960)
Missing dependencies is #1 problem with launching on Linux.

This patch starts validating browser dependencies before launching
browser on Linux. In case of a missing dependency, we will abandon
launching with an error that lists all missing libs.

References #2745
2020-07-15 15:24:38 -07:00
Dmitry Gozman cc8fe5a763
feat(rpc): support electron (#2933) 2020-07-13 21:46:59 -07:00
Andrey Lushnikov a403d4beff
fix(firefox): fix launching firefox without dependencies (#2900)
We always have to reject promises with some error. Otherwise,
our error-rewriting logic in try-catch miserably fails.

With this patch, attempt to launch Firefox when it's missing
dependencies will actually result in a thrown exception with
pretty logs. Without this patch, Playwright throws internal error.
2020-07-10 16:04:19 -07:00
Dmitry Gozman 8fe29feb21
feat(rpc): support more chromium-specific apis (#2883)
This includes page CDPSession, backgroundPages() and serviceWorkers().

This has also revealed an issue with closing order between the context
and the service worker.
2020-07-08 21:36:03 -07:00
Dmitry Gozman 2a86ead0ac
chore: replace FrameTask with internal events on Frame (#2856)
We now use a few helper.waitForEvent calls to wait for internal
events kNavigationEvent and kLifecycleEvent. With these events,
we should be able to replicate logic over rpc.
2020-07-07 15:22:05 -07:00
Pavel Feldman bc3050776e
chore: prepare library types for rpc (#2706) 2020-06-25 08:30:56 -07:00
Pavel Feldman fca514d74e
chore: move non-trivial types out of types.ts (#2680) 2020-06-23 14:51:06 -07:00
Pavel Feldman c220fc7f46
chore(logs): rework logs for simplicity (#2592) 2020-06-16 17:11:19 -07:00
Pavel Feldman 894826dec0
chore: form the debug script for authoring hints / helpers (#2551) 2020-06-11 18:18:33 -07:00
Pavel Feldman 17433d1881
chore: verify launch options (#2530) 2020-06-10 20:48:54 -07:00
Pavel Feldman 903de2582a
chore(websocket): extract common socket part (#2506) 2020-06-10 16:33:27 -07:00
Dmitry Gozman 1bb33650b0
chore: remove ExtendedEventEmitter and inline waitForEvent (#2529) 2020-06-10 15:12:50 -07:00
Pavel Feldman 8ee19d53e7
feature(webkit): roll WebKit to 1273 (#2514) 2020-06-10 13:36:45 -07:00
Dmitry Gozman 80705ff5e9
chore: simplify logging a bit (#2512)
This merges a few classes and stops inheriting from InnerLogger.
2020-06-09 16:11:17 -07:00
Pavel Feldman 9aa9d6bc1d
feat(downloads): accept downloads in persistent, allow specifying the downloadsPath (#2503) 2020-06-08 21:45:35 -07:00
Dmitry Gozman 3ec79e17fc
chore: simplify timeout handling in progress (#2487) 2020-06-05 15:53:30 -07:00
Dmitry Gozman 300099734c
chore: migrate waitForEvent to Progress (#2483)
Drive-by: remove/simplify some helper code.
2020-06-05 14:14:19 -07:00
Pavel Feldman fb058ffe0d
feat(proxy): allow specifying proxy (#2485) 2020-06-05 13:50:15 -07:00
Dmitry Gozman 1d37a10558
chore: migrate navigations to Progress (#2463) 2020-06-04 16:43:48 -07:00
Dmitry Gozman 724d73c03b
feat(debug): chromium debugging port (#2246)
This exposes Chromium remote debugging pipe under the port PLAYWRIGHT_CHROMIUM_DEBUG_PORT.
2020-06-04 16:40:07 -07:00
Dmitry Gozman d5c992e1db
chore: unify evaluations across browsers even more (#2459)
This moves all the logic around UtilityScript to javascript.ts.
Also uncovers a bug in WebKit where we cannot returnByValue after navigation.
2020-06-03 17:50:16 -07:00
Dmitry Gozman 8e6375f532
chore: reduce the number of evaluate methods, improve types (#2454)
Types can now handle non-trivial tuples with handles inside.
2020-06-03 13:22:05 -07:00
Pavel Feldman c001facffc
feat(firefox): allow passing user prefs at launch time (#2417) 2020-05-31 09:28:57 -07:00
Dmitry Gozman d980ed7e7e
chore: introduce Progress concept (#2350)
A progress roughly corresponds to an api call. It is used:

- to collect logs related to the call;
- to handle timeout;
- to provide "cancellation token" behavior so that cancelable process can either
  early-exit with progress.throwIfCanceled() or race against it with progress.race();
- to ensure resources are disposed in the case of a failure
  with progress.cleanupWhenCanceled();
- (possibly) to log api calls if needed;
- (in the future) to augment async stacks.
2020-05-29 14:39:34 -07:00
Andrey Lushnikov 7a785ac268
fix: properly rewrite error message (#2392)
Error message is included in error's stack, so we should
re-write stack as well.

Fixes #2373
2020-05-28 16:33:31 -07:00
Dmitry Gozman 057ae14adc
feat: make browserServer.kill() wait for the process to exit (#2375)
This ensures we cleaned everything up.
2020-05-27 19:59:03 -07:00
Dmitry Gozman 1e2b46437d
feat(debug): when debugging, use zero as default timeout (#2362)
Otherwise, operations always time out while stepping in debugger.
2020-05-27 13:25:57 -07:00
Dmitry Gozman 8f0f32b5e6
chore: move debug-related code to src/debug (#2309) 2020-05-26 14:08:32 -07:00
Dmitry Gozman 27d30fe162
chore: encapsulate more launching logic in BrowserType (#2339) 2020-05-22 16:06:00 -07:00
Dmitry Gozman 55d47fd48f
chore: unify launching server between browser types (#2338) 2020-05-22 07:03:42 -07:00
Dmitry Gozman 3aca21c13b
chore: simplify launch routine a bit more (#2336) 2020-05-21 19:16:13 -07:00
Dmitry Gozman aae3f1e75d
feat(default context): support selected options for default context (#2177) 2020-05-21 15:13:16 -07:00
Pavel Feldman 2ede4bce12
chore: further unify launching and connection (#2320) 2020-05-21 09:43:10 -07:00
Pavel Feldman f9b437a49e
chore: pull common functionality into the BrowserTypeBase (#2312) 2020-05-20 16:30:04 -07:00
Dmitry Gozman 48440f7ed7
test: unflake fixtures test (#2313)
Drive-by: ensure we call onkill before manually exiting the process.
2020-05-20 14:58:27 -07:00
Pavel Feldman e558f0516b
chore: print the launch error message to console (#2304) 2020-05-20 00:10:10 -07:00
Dmitry Gozman 7efc22c062
fix(chromium): websocket wrapper leaks child sessions (#2291)
When a parent session is detached, we do not always get Target.detachedFromTarget
for child sessions. This is especially true when the socket disconnects, leaving
all child sessions in the maps.

Flakily reproducible by browserType.connect multiclient tests.
2020-05-19 15:02:13 -07:00
Dmitry Gozman 481643409e
feat(debug): persist devtools preferences in Chromium (#2266)
We store devtools-preferences.json file in the downloaded browser directory.
2020-05-19 14:55:11 -07:00
Dmitry Gozman 82cab094e8
feat(logging): add logging to websocket transport (#2289) 2020-05-18 19:00:38 -07:00
Dmitry Gozman e8e761f77f
chore: use internal BrowserOptions to unify browsers (#2230) 2020-05-14 13:22:33 -07:00
Joel Einbinder dbef7de42a
feat(electron): types (#2231) 2020-05-13 20:51:53 -07:00
Yury Semikhatsky f10e8c4d47
chore(chromium): nicer error when running as root without --no-sandbox (#2214) 2020-05-12 16:43:15 -07:00
Pavel Feldman 414ae0025e
fix(electron): handle in-event await errors (#2207) 2020-05-12 15:28:37 -07:00
Pavel Feldman 3f8dfed67f
feat(electron): add app.firstWindow convenience method (#2195) 2020-05-12 08:43:41 -07:00
Pavel Feldman ffe7084652
feat(electron): experimental electron support (#2166) 2020-05-11 18:00:33 -07:00
Dmitry Gozman a2bee2ca73
fix(launch): handle timeout and exceptions during launch (#2185) 2020-05-11 15:00:13 -07:00
Pavel Feldman 9895cd0a31
chore: optionally create downloads folder (#2188) 2020-05-11 14:42:13 -07:00
Dmitry Gozman 8c083486a0
fix(launch): handle websocket connect exceptions (#2184) 2020-05-11 13:49:57 -07:00
Dmitry Gozman ae8d97cdf9
feat(persistent context): ensure initial about:blank (#2161)
We declare only the initial about:blank to be a supported usecase, so that
we can support options for the default context in the future.
2020-05-10 15:23:53 -07:00
Pavel Feldman 793a2bf7d4
fix(firefox): do not run firefox as a part of the installation process (#2125) 2020-05-06 10:42:27 -07:00
Pavel Feldman 710c156d48
fix(chromium): disable same site by default and improved controls (#2097) 2020-05-04 13:43:44 -07:00
Pavel Feldman 1f0217986e
feat(firefox): cache firefox pre-compiled scripts (#2087) 2020-05-04 09:34:59 -07:00
Pavel Feldman 0228ba4992
feat(registry): implement download registry (#1979) 2020-04-29 17:19:21 -07:00
Pavel Feldman 2cdf297245
chore: remove uncompiled download-browser (#2018) 2020-04-28 17:06:01 -07:00
Pavel Feldman d52bd92983
chore: read browser revisions off browsers.json (#2009) 2020-04-28 10:37:23 -07:00
Pavel Feldman b60c006c63
chore: simplify and restructure downloads (#1974) 2020-04-24 19:14:10 -07:00
Joel Einbinder 671cfa0a54
fix(types): support objects with typed keys and values (#1752)
There are a few places in the API where we use objects as maps. This patch adds them to docs and the types.

For `env`, we accept booleans and numbers as well because they are often used for their string values.
2020-04-23 14:45:57 -07:00
Pavel Feldman 2fcc2b5552
chore(chromium): resize browser frame when emulating viewport (#1924) 2020-04-23 10:38:58 -07:00
Pavel Feldman 5b085fdf03
feat(logger): introduce context-level logger (#1896) 2020-04-20 23:24:53 -07:00
Pavel Feldman 1f43ae692f
feat(logging): introduce logger sink api (#1861) 2020-04-20 07:52:26 -07:00
Yury Semikhatsky c359116a3b
fix: create _defaultContext only in persistent mode (#1854) 2020-04-18 19:58:11 -07:00
Pavel Feldman 022bc67c07
chore(chromium): allow passing --remote-debugging-port for debugging (#1857) 2020-04-18 19:06:42 -07:00
Pavel Feldman 9249f33709
feat(webkit): roll WebKit, migrate to Playwright.exe (#1749) 2020-04-10 21:02:28 -07:00
Yury Semikhatsky a1ffed6052
fix(firefox): do not create first window on start (#1727) 2020-04-10 14:12:30 -07:00
Yury Semikhatsky a7ae205254
feat(firefox): support downloads (#1689) 2020-04-07 15:01:42 -07:00
Andrey Lushnikov 949dc7b514
chore: bump extract-zip dependency (#1696)
Fixes #1510
2020-04-07 14:56:30 -07:00
Andrey Lushnikov e15fc08d46
chore: migrate node types to 10.17.17 (#1690) 2020-04-07 07:40:57 -07:00
Andrey Lushnikov 65ca87cd9a
fix: fix PLAYWRIGHT_BROWSERS_PATH treatment (#1662)
Drive-by: introduce installation tests that use `npm pack`
to simulate installation from NPM registry.

Fixes #1651
2020-04-03 23:16:14 -07:00
Joel Einbinder b7d0c32338
fix(browser): wait for the pipe to disconnect in browser.close (#1652)
With WebKit, sometimes the process closes before the stdio is streams are closed. I explicitly wait for the browser disconnect event now when closing.
2020-04-03 16:34:07 -07:00
Pavel Feldman 75571e8eb8
feat(downloads): support downloads on cr and wk (#1632) 2020-04-02 17:56:14 -07:00
Joel Einbinder 3d6d9db44a
fix: wait for the process to close when closing the browser (#1629) 2020-04-02 16:57:12 -07:00
Pavel Feldman e241c1bef8
chore: remove web mode (#1625) 2020-04-01 14:42:47 -07:00
Joel Einbinder 6053784188
feat: add missing slowMo to launchPersistentContext (#1597)
`slowMo` was missing in `launchPersistentContext`, and I refactored the types a bit.
2020-03-31 16:34:59 -07:00
Andrey Lushnikov 950d427927
fix: catch websocket error events (#1595) 2020-03-30 18:18:38 -07:00
Pavel Feldman 1f08b72a27
test: add web socket leak test coverage (#1586) 2020-03-30 13:49:52 -07:00
Joel Einbinder 31f186cc3d
fix(browserFetcher): support macos 10.13 for firefox and chromium (#1549)
I don't have a macos 10.13 build to test on, and we aren't set up to compile it for WebKit. However there is a good chance this will work for Chromium and Firefox.

I also improved the error message received when on an unsupported platform.

#1535
2020-03-30 13:25:20 -07:00
Pavel Feldman 5499b1844d
feat(websocket): wrap firefox web socket too (#1580) 2020-03-28 10:14:59 -07:00
Pavel Feldman 48516ed7ed
feat(websocket): use proxy web socket on chromium (#1573) 2020-03-27 15:18:34 -07:00
Pavel Feldman 00cb4e370f
chore: move transport to object messages (#1567) 2020-03-26 23:30:55 -07:00
Dmitry Gozman 60942d0af5
chore(selectors): move selectors logic to selectors.ts (#1536)
This encapsulates selectors logic in one place, in a preparation for more complex scenarios like main-world selectors or piercing frames.

Note: we had `Page.fill should wait for visible visibilty` test, but we do not actually wait for visible in page.fill(). It happened to pass due to lucky evaluation order.

References #1316.
2020-03-25 14:08:46 -07:00
Max Schmitt 4b1fa2f2f9
feat: show warning on ff & wk if devtools was given (#1463)
Show just a warning instead of preventing the launch on Firefox and WebKit to minimize the error rate / entry barrier.

Not fully sure if `console.warn` is okay for that.

Closes #1440
2020-03-24 14:42:20 -07:00
Andrey Lushnikov b778789ba8
feat: re-make global browser installation (#1506)
This patch removes the `PLAYWRIGHT_GLOBAL_INSTALL=1` variable
and instead introduces a new var - `PLAYWRIGHT_BROWSERS_PATH`.

You can specify `PLAYWRIGHT_BROWSERS_PATH` to affect where playwright
installs browsers and where it looks for browsers.

Fixes #1102
2020-03-24 00:08:00 -07:00
Pavel Feldman c0c9b7f137
test: make debugp collect IO (take 2) (#1493) 2020-03-23 15:08:02 -07:00
Pavel 1ddf05113b Revert "test: make debugp collect IO (#1485)"
This reverts commit b1bebdad2e.
2020-03-23 13:48:22 -07:00
Pavel Feldman b1bebdad2e
test: make debugp collect IO (#1485) 2020-03-23 13:42:51 -07:00
Joel Einbinder 825555cddf
types: better types (#1166)
This generates typescript definitions based on the api.md, instead of autogenerating them from the typescript source code.

Now types
 - only include the public api
 - work with older versions of typescript
 - include descriptions
 - are more consistent
 - are more complete

#6
2020-03-20 01:30:35 -07:00
Andrey Lushnikov f5ecbff16e
devops: remake downloading logic (#1419)
This patch:
- removes `browserType.downloadBrowserIfNeeded()` method. The method
  turned out to be ill-behaving and cannot not be used as we'd like to (see #1085)
- adds a `browserType.setExecutablePath` method to set a browser
  exectuable.

With this patch, we take the following approach towards managing browser downloads:
- `playwright-core` doesn't download any browsers. In `playwright-core`, `playwright.chromium.executablePath()` returns `null` (same for firefox and webkit).
- clients of `playwright-core` (e.g. `playwright` and others) download browsers one way or another.
They can then configure `playwright` with executable paths and re-export the `playwright` object to their clients.
- `playwright`, `playwright-firefox`, `playwright-chromium` and `playwright-webkit` download 
browsers. Once browsers are downloaded, their executable paths are saved to a `.downloaded-browsers.json` file. This file is read in `playwright/index.js` to configure browser executable paths and re-export the API.
- special case is `install-from-github.js` that also cleans up old browsers.
2020-03-19 11:43:35 -07:00
Joel Einbinder b0749e3a6d
fix(docs): fixup and lint optionals and return values in api.md (#1376)
Currently in our API `?` means null, but sometimes it means optional. Linting optional/nulls with this patch is required for #1166 to land nicely.

Previously, return types were not being linted in `api.md`. This is fixed, along with many broken return types.

This patch considers `?` to mean nullable, and has some heuristics to determine optionality. I believe this to be the minimal patch needed to unblock #1166. After it lands, we can consider changing the api docs to hopefully remove some heuristics and strangeness.
2020-03-18 16:23:25 -07:00
Dmitry Gozman dd850ada89
api(eval): allow non-toplevel handles as eval arguments (#1404) 2020-03-18 10:41:46 -07:00
Dmitry Gozman 9b86c631c8
api: make BrowserContext.pages() synchronous (#1369)
Returns all pages which have been initialized already.

References #1348.
2020-03-13 11:33:33 -07:00
Pavel Feldman 9aa56a6b9e
api(browserType): remove devices, errors (#1368) 2020-03-12 17:58:00 -07:00
Pavel Feldman b43f33f4d3
api(review): misc changes to API. (#1356) 2020-03-11 18:10:48 -07:00
Pavel Feldman 5d4fdd050a
feat(webkit): roll webkit to 1178 (#1339) 2020-03-11 14:08:22 -07:00
Yury Semikhatsky 9bd3711394
fix(context): reliably fire BrowserContext.Close event when browser is closing (#1277) 2020-03-09 16:53:33 -07:00
Dmitry Gozman c43de22193
chore(wk, ff): simplify target management (#1279) 2020-03-09 12:32:42 -07:00
Dmitry Gozman aee6324bba
feat(firefox): roll firefox (#1273) 2020-03-06 16:49:48 -08:00
Dmitry Gozman e5f82af47c
api(popups): emit PageEvent immediately, and resolve page() once initialized (#1229)
This way we do not miss any popups, even immediately closed ones.
2020-03-05 15:18:27 -08:00
Yury Semikhatsky e770d706a1
fix(chromium): do not create default page and context in headless (#1247) 2020-03-05 14:46:12 -08:00
Yury Semikhatsky 665888d579
feat(popups): auto-attach to all pages in Chromium (#1226) 2020-03-05 10:45:32 -08:00
Yury Semikhatsky 31e26a2208
fix(api): fire BrowserContext.Page event in WebKit and Firefox (#1186) 2020-03-02 18:32:56 -08:00
Yury Semikhatsky a57978a5f0
api(chromium): remove Target from public API (#1163) 2020-03-02 13:58:22 -08:00
Yury Semikhatsky f242e0c74f
fix: make Transport.send() synchronous (#1177) 2020-03-02 13:51:32 -08:00
Andrey Lushnikov 08fbc92752
feat: support PLAYWRIGHT_DOWNLOAD_HOST (#1179)
This patch starts respecting `PLAYWRIGHT_DOWNLOAD_HOST` env variable
in `playwright` package and it's vendored flavors (`playwright-firefox`,
`playwright-chromium` and `playwright-webkit`).

Fixes #1045
2020-03-02 13:45:10 -08:00
Pavel Feldman dc161df063
fix(launch): throw upon page argument when non-persistent (#1144) 2020-02-27 14:09:24 -08:00
Dmitry Gozman c6fde22b1f
chore(webkit): always attach to all pages, simplify initialization (#1139) 2020-02-27 08:49:09 -08:00
Andrey Lushnikov 4ebf419259
fix(yarn): download browsers to package directories (#1133)
This patch makes it so all our packages, like `playwright` and
browser-specific flavors, download browsers to their
directories rather then using directory of `playwright-core`.

This way yarn@1 caches are not busted: they didn't expect that directory
content might change after packages's explicit install step
is failed, there's that was what we were doing.

Fixes #1085
2020-02-26 15:13:31 -08:00
Andrey Lushnikov 4ab880175a chore: fix lint 2020-02-26 14:08:21 -08:00
Pavel Feldman d20f3cac89
feat(webkit): no start window, healthy pipe (#1113) 2020-02-26 13:02:15 -08:00
Dmitry Gozman dcdc7db158
feat(chromium): use no-startup-window to not create default context (#1106) 2020-02-25 11:43:17 -08:00
Dmitry Gozman 6acc439450
feat(api): move targets from CRBrowser to CRBrowserContext (#1089)
This makes them work for default context.
2020-02-24 14:35:51 -08:00
Daniel Imms 8a7728da3d
docs: document LaunchOptions.dumpio (#1051) 2020-02-18 08:56:20 -08:00
Pavel Feldman 4d7e531520
fix(webkit): wait for the pipe ready on windows (#997) 2020-02-13 17:46:40 -08:00
Pavel Feldman f7fb35bdbf
fix(windows): wait for pipe available again (#993) 2020-02-13 14:13:10 -08:00
Andrey Lushnikov f8f818f676 Revert "Revert "feat: do not wait for first page in non-persistent mode (#939)""
Apparently a good fix is coming: https://github.com/microsoft/playwright/pull/993/
Pavel want to re-revert.
2020-02-13 13:54:01 -08:00
Andrey Lushnikov 71892b4aaa Revert "feat: do not wait for first page in non-persistent mode (#939)"
This reverts commit a567123596.

Reason for revert: WK-Win fails to start if we start talking over the
pipe too early.
2020-02-13 13:44:58 -08:00
Dmitry Gozman a567123596
feat: do not wait for first page in non-persistent mode (#939) 2020-02-13 10:51:17 -08:00
Andrey Lushnikov d735de5347
feat: do not let users pass userDataDir to browserType.launch() (#974)
We now have a separate method for this - `browserType.launchPersistent`.
This will probably save our users quite some time.
2020-02-12 19:32:23 -08:00
Andrey Lushnikov 0d16d144b2
fix(firefox): rely on bundled firefox preferences (#943)
Since Firefox r1027 we bundle preferences alongside with build.

Fixes #857
2020-02-11 19:10:02 -08:00
Andrey Lushnikov ad9d6cc31f
feat: introduce browserType.downloadBrowserIfNeeded() (#834)
Fixes #823
2020-02-11 11:33:48 -08:00
Pavel Feldman 72b9cf010e
feat(context): introduce BrowserContext close event (#918) 2020-02-11 10:27:19 -08:00
Pavel Feldman 780235479e
fix(firefox): bring headful window to front on launch (#923)
Fixes #914
2020-02-10 20:35:58 -08:00
Pavel Feldman e9c14770d3
fix(webkit): fix remaining tests on windows (#905) 2020-02-07 17:39:32 -08:00
Joel Einbinder 73148fda79
chore(lint): add @typescript-eslint/no-unnecessary-type-assertion rule (#898) 2020-02-07 13:38:50 -08:00
Pavel Feldman 42c2cfc7cc
fix(pipe): sort out pipes on platforms (#895) 2020-02-07 11:48:55 -08:00
Pavel Feldman 0ed43e8781
feat(webkit) await the reading from pipe message (#894) 2020-02-07 10:52:59 -08:00
Joel Einbinder 126eb505e8
fix(transport): dispatch messages in separate tasks (#841)
Fixes a bug in our pipe, and the same one in the non-standard `ws` module. Our protocol messages are I/O events, and therefore they should each be executed in their own task.
2020-02-06 14:14:46 -08:00
Pavel Feldman a547aa7984
feat(connect): allow multiple webkit connections over web socket (#863) 2020-02-06 12:41:43 -08:00
Pavel Feldman 55b6fe241e
feat(launch): introduce client, server & persistent launch modes (3) (#854) 2020-02-05 16:36:36 -08:00
Pavel Feldman a2ab645e63
feat(launch): introduce client, server & persistent launch modes (2) (#840) 2020-02-05 12:41:55 -08:00
Pavel Feldman 0518625dcc
feat(launch): introduce client, server & persistent launch modes (1) (#838) 2020-02-04 19:41:38 -08:00
Andrey Lushnikov 1489fbdbff
fix: do not recommend yarn (#794)
There's some confusion around Yarn vs Yarn 2 and their interop, which
apparently causes some [installation issues](https://stackoverflow.com/questions/59918776/playwright-error-firefox-revision-is-not-downloaded-run-npm-install-or-yarn)
2020-01-31 17:23:39 -08:00
Andrey Lushnikov ce7c8d74b5
feat: introduce BrowserType.name() (#732)
This helps a lot to produce nice logging:

```js
const { chromium, webkit } = require('playwright');

(async () => {
  for (const launcher of [chromium, webkit]) {
    console.log(`Testing on ${launcher.name()}`);
    const browser = await launcher.launch();
    // ...
    await browser.close();
  }
})();
```
2020-01-28 18:09:07 -08:00
Dmitry Gozman c04ad140f3 feat(launcher): gracefully close browser on sigint (#650) 2020-01-28 13:07:53 -08:00
Pavel Feldman 6e4bf9561b fix(install): check macOS version to be 10.14 or higher (#671)
Fixes #669
2020-01-27 09:37:33 -08:00
Pavel Feldman b4b7c5eeef
feat(webkit): enable user-data-dir tests for all platforms (#646)
Fixes #560
2020-01-24 17:42:24 -08:00
Dmitry Gozman be19ae5e67 feat(browserApp): kill and onclose (#641) 2020-01-24 15:58:04 -08:00
Dmitry Gozman c453851217
api: introduce BrowserType with a single interface, update top-level api (#636) 2020-01-24 14:49:47 -08:00
André Abreu 199d094c6d fix: make launch options in ffPlaywright optional (#637) 2020-01-24 13:27:49 -08:00
Dmitry Gozman 056fbbd53e
fix(api): make pipe connection the default, expose webSocket launch option (#562) 2020-01-23 17:45:31 -08:00
Andrey Lushnikov b4b81bae02
chore: move downloads to Azure CDN (#615)
This should drastically speedup downloads across the globe.
2020-01-23 16:00:55 -08:00
Dmitry Gozman 866c60254b fix(firefox): disable ICC color correction based on OS display (#614)
This way screenshots will be consistent across host environments.
2020-01-23 15:44:31 -08:00
Dmitry Gozman ac2ba3cbd9
fix(api): BrowserServer -> BrowserApp, resuse it between browsers (#599) 2020-01-23 14:40:37 -08:00
Pavel Feldman b4209e9dc8
test: move user-data-dir tests into shared location (#603) 2020-01-23 12:18:41 -08:00
Dmitry Gozman 24f5f1f952
fix(wk websocket): do not send messages to a closing websocket (#593) 2020-01-23 10:33:05 -08:00
Dmitry Gozman fa2f321fdd
fix(api): remove BrowserServer.connect (#574) 2020-01-23 08:51:43 -08:00
Dmitry Gozman 3269358ac8
feat(webkit): covert pipe to websocket when asked (#570) 2020-01-22 17:42:10 -08:00
Joel Einbinder 8127c890e4 fix(firefox): be able to launch on headful+windows (#553)
Without the `-wait-for-browser` flag, the launcher process immediately exits on windows. Because we listen to 'exit', we think the browser has closed.

We still can't close the Firefox process very well.

For the reference, this is based upon https://wiki.mozilla.org/Platform/Integration/InjectEject/Launcher_Process/
2020-01-21 17:22:48 -08:00
Andrey Lushnikov b8bb58e48b chore: migrate browser builds to a new CDN (#549) 2020-01-21 15:43:58 -08:00
Andrey Lushnikov d51094105c feat(webkit): download both wpe and gtk together 2020-01-17 16:30:19 -08:00
Andrey Lushnikov 9e27d140c3 devops: rename minibrowser-linux into minibrowser-gtk
This is a preparation for the minibrowser-wpe upcoming build.
2020-01-17 13:42:33 -08:00
Pavel Feldman 2a619db582
fix(webkit): introduce user-data-dir and use it on win (#505) 2020-01-16 22:11:14 -08:00
Pavel Feldman dae6e7cabc feat(win): download win from CDN (#519) 2020-01-16 19:43:39 -08:00
Dmitry Gozman 9b46014493
fix(launcher): ensure that local browser launch waits for process exit (#489) 2020-01-16 09:32:58 -08:00
Dmitry Gozman 5b1aef4c20 api: remove BrowserFetcher from api, update docs (#487) 2020-01-14 10:07:26 -08:00
Dmitry Gozman fb1b3d9a89 chore: finish strict type checks across src (#482) 2020-01-13 22:08:35 -08:00
Dmitry Gozman a1d1f26fb7 chore: more strict type checking (#466) 2020-01-13 13:33:25 -08:00
Andrey Lushnikov 27f32a72e9
devops: migrate to new CDN for browser builds (#467) 2020-01-13 13:27:03 -08:00
Yury Semikhatsky 778ab3deff chore: replace CHROME with CHROMIUM (#465) 2020-01-13 10:13:28 -08:00
Andrey Lushnikov 7a7ff9e994 Revert "Revert "feat(firefox): roll Firefox to r1011 (#452)""
This reverts commit a738af4603.
2020-01-11 02:32:28 +01:00
Pavel Feldman a738af4603 Revert "feat(firefox): roll Firefox to r1011 (#452)"
This reverts commit c1f75f7833.
2020-01-10 12:17:34 -08:00
Andrey Lushnikov c1f75f7833 feat(firefox): roll Firefox to r1011 (#452) 2020-01-10 10:54:24 -08:00
Dmitry Gozman 350452c31d
docs: unify XYZPlaywright api and docs (#443) 2020-01-09 14:49:22 -08:00
Joel Einbinder f161a36a16 feat(webkit): roll webkit to 1076 (#431) 2020-01-08 15:34:35 -08:00
Dmitry Gozman f31ae5e2ed
docs: fix docs around server apis (#417) 2020-01-08 14:02:53 -08:00
Dmitry Gozman 28bad69093
fix(server): tidy up BrowserServer.close methods (#426) 2020-01-08 13:55:38 -08:00
Dmitry Gozman 66e8a9c04f fix(webkit): band-aid double connection fix to unblock tests (#422) 2020-01-08 07:13:51 -08:00
Dmitry Gozman 8697929e39
chore: move webkit server code to src/server (#415) 2020-01-07 16:15:07 -08:00
Dmitry Gozman c3210d0f6d
chore: move firefox server code to src/server (#412) 2020-01-07 16:13:49 -08:00
Dmitry Gozman 6318b1de75 chore: move server-side code to src/server (#411) 2020-01-07 15:27:45 -08:00