Commit graph

1077 commits

Author SHA1 Message Date
Dmitry Gozman 6a53b205e5
chore: move webkit to src/server/webkit (#3589) 2020-08-23 15:39:03 -07:00
Dmitry Gozman 77f803140a
fix(electron): fix electron types, move source to src/server/electron (#3583) 2020-08-23 13:46:40 -07:00
Dmitry Gozman 2e1493a5fa
chore: move browserPaths to utils, enforce more deps (#3584) 2020-08-22 21:15:03 -07:00
Dmitry Gozman f4e8f34c96
chore: move chromium to src/server/chromium, enfore installer deps (#3582) 2020-08-22 15:46:42 -07:00
Dmitry Gozman 9fca63f8ec
chore: move src/rpc/client to src/client (#3581) 2020-08-22 15:13:51 -07:00
Dmitry Gozman 655013d025
chore: move shared utilities to src/utils (#3575) 2020-08-22 07:07:13 -07:00
Dmitry Gozman 6fe1cd9812
chore: move protocol files to src/protocol (#3571) 2020-08-21 18:46:11 -07:00
Dmitry Gozman 57e8617474
chore: refactor impl-side events to be per-class (#3569) 2020-08-21 16:26:33 -07:00
Yury Semikhatsky 1f0e9db0a6
feat(firefox): support context-level screencast api (#3555) 2020-08-20 19:49:30 -07:00
Yury Semikhatsky 071931ebb1
feat(firefox): bump to 1166 (#3557) 2020-08-20 16:51:17 -07:00
Dmitry Gozman e2bb6a07cd
fix(click): allow clicking 1x1 sized elements (#3538)
One by one seems like a resonable minimum size for clicking.

It is not surprising to see a 1x1 native accessible control
that is covered by a custom control that handles input instead.
2020-08-20 16:49:19 -07:00
Dmitry Gozman 4c5635434a
fix(permissions): browserContext.grantPermissions to respect the origin (#3542)
Due to wrong type usage, we ignored the origin while granting permissions.
Switching to generated types revealed this issue. We should follow up
with switching all dispatchers to the generated types.
2020-08-20 14:19:27 -07:00
Dmitry Gozman eab5ff4eae
chore(rpc): use channels types in dispatchers (#3549)
This ensures we actually implement channels as intended.
For example, this change found an issue with Route.fulfill.
2020-08-20 11:25:33 -07:00
Dmitry Gozman 18292325b6
api: add waitForElementState('disabled') (#3537)
Allows waiting for the element to be disabled.
2020-08-19 17:20:10 -07:00
Dmitry Gozman 0a22e2758a
fix(chromium): disable lazy loading iframes (#3535)
These do not play nicely with our "page is loaded when all frames
are loaded" logic.
2020-08-19 15:58:13 -07:00
Dmitry Gozman 9ac1bbc2a5
chore: remove more paths and url matches from the server side (#3528) 2020-08-19 13:27:58 -07:00
Yury Semikhatsky 83de0071c9
feat(screencast): add start/stop events on context (#3483) 2020-08-19 12:45:31 -07:00
Dmitry Gozman 745dc339a6
chore: merge Browser{Context,}Base into Browser{Context,} (#3524) 2020-08-19 10:31:59 -07:00
Dmitry Gozman 63a2c673b5
chore: align SerializedAXNode with rpc protocol AXNode (#3522) 2020-08-18 20:25:03 -07:00
Joel Einbinder 97157520a6
feat(slowmo): only slowmo once per user action (#3012)
This changes the behavior of slowmo to slow down user actions instead of every protocol command. This makes slowmo a lot more predictable. Without this, there is no way to set slowmo to a good value without incurring a huge delay at the start of your test when it sets things up.
2020-08-18 19:13:40 -07:00
Dmitry Gozman e54195ccfb
chore: align page.pdf options to the rpc protocol (#3521)
Drive-by: remove unused devices from playwright impl.
2020-08-18 18:48:44 -07:00
Dmitry Gozman e7e8524e14
chore: remove screenshot path from the server side (#3519)
Also fixes auto-detection of mime type based on path and adds tests.
2020-08-18 18:46:56 -07:00
Dmitry Gozman 20c6b85178
chore: remove route/unroute from the server side (#3518)
We only use a global "intercept all requests" handler on
page and browser context, instead of granular ones.
2020-08-18 17:34:04 -07:00
Dmitry Gozman 3cf48f9bd4
chore: simplify conversions around setInputFiles (#3516)
We do not need api types on the server side anymore.
2020-08-18 17:32:11 -07:00
Dmitry Gozman ecf4cd3933
chore: simplify conversions around selectOption (#3517)
We do not need to support api types on the server side.
2020-08-18 16:44:17 -07:00
Dmitry Gozman aeadf50165
chore: use HeadersArray instead of Headers object on the server side (#3512)
This simplifies implementation and avoids multiple conversions.
Also adding some tests around lowercase and wrong types.
2020-08-18 15:38:29 -07:00
Dmitry Gozman 9790ea5b5d
chore: align more server-side options with rpc protocol (#3506)
This touches:
- noDefaultViewport;
- ignoreAllDefaultArgs;
- env;
- validateXYZ logic that was copying objects - we do not need that anymore;
- shuffles some converters closer to their usage.
2020-08-18 09:37:40 -07:00
Joel Einbinder dfa1f103af
feat(screenshot): create directories for screenshot file 2020-08-17 16:53:19 -07:00
Dmitry Gozman 0e9793c452
api: ElementHandle.waitForElementState (#3501)
This method waits for visible, hidden, stable or enabled state,
similar to the actionability checks performed before actions.

This gives a bit more control to the user. Some examples:
- Allows to wait for something to be stable before taking a screenshot.
- Allows to wait for the element to be hidden/detached after a specific action.
2020-08-17 16:22:34 -07:00
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
Joel Einbinder d516f81eeb
fix(rpc): add a custom toJSON to help jest's expect library (#3489) 2020-08-16 14:41:33 -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 244c2f37b6
feat(rpc): make sure filechooser is only intercepted when needed (#3482)
So that user can choose a file manually in headful mode.
2020-08-14 18:24:36 -07:00
Dmitry Gozman 69e1e713ef
feat(click): provide preview of the element intercepting pointer events (#3449) 2020-08-14 14:48:36 -07:00
Dmitry Gozman 85c93e91a7
api: introduce ElementHandle.waitForSelector (#3452)
This is similar to Frame.waitForSelector, but relative to the handle.
2020-08-14 14:47:24 -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 dec8fb7890
fix(hover): do not require the element to be enabled before hovering (#3445) 2020-08-14 13:18:32 -07:00
Dmitry Gozman 9b52ca8676
chore: remove unused non-rpc code, test options, infra, bots (#3444) 2020-08-13 16:00:23 -07:00
Dmitry Gozman 18b2cf5ec7
feat(rpc): use rpc protocol for browserType.connect (#3380) 2020-08-13 13:24:49 -07:00
Andrey Lushnikov 515665908e chore: add comment to clarify /sbin 2020-08-13 11:44:21 -07:00
Joel Einbinder 23f5ed89b0
fix(launcher): default to ubuntu20.04 for newer releases (#3400) 2020-08-12 17:50:46 -07:00
Andrey Lushnikov 40f685226b
devops: migrate //utils/check_availability.js off browser fetcher (#3418)
The script is used to check the state of chromium CDN, whereas
our browser fetcher now defaults to Playwright CDN.
2020-08-12 15:01:07 -07:00
Dmitry Gozman a574fa6edb
api: add Frame.page() getter (#3392) 2020-08-12 14:45:36 -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
Dmitry Gozman 9697ad635f
fix(chromium): handle the case when new pending comes before old commit (#3370) 2020-08-11 08:59:00 -07:00
Yury Semikhatsky d8d845afcc
feat(screencast): add private recording APIs and basic test (#3296) 2020-08-10 21:22:57 -07:00
Andrey Lushnikov 1b8128eb84
installer: start downloading Chromium archives from our CDN (#3361)
This starts downloading newer Chromium archives from our CDN, but
retains old endpoint for older Chromium revisions.

This backwards compatibility might help later on to implement
a browser bisecting tool.

References #3259
2020-08-10 11:40:30 -07:00
Dmitry Gozman ef76f5b922
feat(rpc): introduce JSON type in the protocol for arbitrary blobs (#3367) 2020-08-10 11:20:32 -07:00
Dmitry Gozman 69c88d8063
feat(rpc): handle screenshot path on the client (#3352) 2020-08-07 15:41:34 -07:00
Dmitry Gozman 7e2cc77524
test: add a test for newCDPSession rejecting on non-pages (#3353) 2020-08-07 15:40:46 -07:00
Dmitry Gozman 83f5628549
feat(rpc): misc fixes (#3351) 2020-08-07 15:40:21 -07:00
Pavel Feldman b3091deb78
fix(cors): allow routing the cors request with credentials (#3336) 2020-08-07 14:02:41 -07:00
Joel Einbinder eac8aeedaf
chore(types): convert tests to typescript part 3 (#3340) 2020-08-07 11:19:15 -07:00
Dmitry Gozman cdfe73fee3
api(console): make ConsoleMessageLocation properties required (#3290)
Everywhere in our api, possibly missing properties are nullable.
However, to make things easier for everyone, we just default to an
empty url instead, so that users do not have to null-check it.
2020-08-05 22:25:56 -07:00
Max Schmitt e582cc678c
fix(launcher): make PrintDeps.exe path configurable (#3311) 2020-08-05 13:33:40 -07:00
Max Schmitt 4956041109
fix(validation): error typo "unknown" (#3304) 2020-08-05 11:44:32 -07:00
Dmitry Gozman 126b1f79d4
feat(rpc): run doclint against rpc client (#3260) 2020-07-31 17:00:36 -07:00
Lars den Bakker 776f0192ab
fix(chromium): remove Debugger.paused event listener on coverage stop (#3252) 2020-07-31 15:45:29 -07:00
Yury Semikhatsky 7e8d03b050
fix(launcher): extend list of known missing DLLs (#3256)
#2745
2020-07-31 14:11:11 -07:00
Dmitry Gozman 4e5aa3c9c3
feat(rpc): support chromiumSandbox option (#3251) 2020-07-31 09:31:55 -07:00
Ross Wollman ce0ddd270b
feat(download): create directories for saveAs (#3249)
This is to match the behavior for screenshots path added in #3247.
2020-07-30 23:21:03 -07:00
Pavel Feldman 93056ed8ef
chore(rpc): more protocol nits (#3246) 2020-07-30 17:51:41 -07:00
Yury Semikhatsky cbfdca736c
feat(launcher): check dependencies before launch on Windows (#3240) 2020-07-30 17:15:46 -07:00
Dmitry Gozman 2f95b6e34e
feat(selectors): auto-detect xpath starting with ".." (#3239) 2020-07-30 16:21:48 -07:00
Dmitry Gozman 6297f86cfa
feat(rpc): run generate-channels during lint (#3238) 2020-07-30 15:08:21 -07:00
Pavel Feldman 1728a3df93
chore: minor protocol fixes (#3226) 2020-07-30 11:14:41 -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
Max Schmitt 52eb6c609a
fix(rpc): protocol Route.fulfill (#3200) 2020-07-29 20:42:14 -07:00
Dmitry Gozman 3bd97776b8
feat(rpc): do not use server types and events in rpc/client (#3219)
This change removes almost all dependencies from rpc/client
to the rest of the project. The last ones would be utilities
like helper, converters, etc.
2020-07-29 17:26:59 -07:00
Dmitry Gozman 9132d23b2b
fix(screenshot): wait for stable position before taking element screenshot (#3216)
Same goes for scrollIntoViewIfNeeded.
2020-07-29 16:36:02 -07:00
Dmitry Gozman 84a17f27eb
fix(rpc): Frame.dblclick is missing notWaitAfter (#3210) 2020-07-29 11:45:19 -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
Yury Semikhatsky a700a7a9a8
feat(chromium): roll to 07/29 (#3207) 2020-07-29 09:57:02 -07:00
Dmitry Gozman fab5eba64f
fix(oopifs): translate coordinates to viewport (#3201)
Renderer-based method DOM.getContentQuads and DOM.getBoxModel return
coordinates relative to the local root's viewport, but we need them relative
to the root viewport.
2020-07-28 15:52:33 -07:00
Dmitry Gozman 6cb1e03713
feat(rpc): disallow deps into rpc client from outside (#3199)
For this, common converters are extracted from rpc serializers.
2020-07-28 15:33:38 -07:00
Yury Semikhatsky 576e2c5287
fix(webkit): correctly report outerWidth/Height on Mac (#3133) 2020-07-27 16:06:50 -07:00
Dmitry Gozman 97c10002e7
api: introduce Browser.version() (#3177) 2020-07-27 13:41:35 -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
Tierney Cyren 51ce47f30f
docs: use "Node.js" instead of "Node" (#3176)
* docs: use "Node.js" instead of "Node"

* docs: fix broken anchor
2020-07-27 10:27:41 -07:00
Dmitry Gozman b2179193c6
feat(rpc): replace implicit scopes with explicit dispose (#3173)
This adds one more protocol message __dispose__
to dispose a scope and all child objects.

Now, client side does not need a notion of scope anymore -
it just disposes the whole object subtree upon __dispose__.
Server, on the other hand, marks some objects as scopes
and disposes them manually, also asserting that all parents
are proper scopes.
2020-07-27 10:21:39 -07:00
Max Schmitt 9b502af4e3
fix(launchDoctor): support existing LD_LIBRARY_PATH (#3165) 2020-07-27 10:05:12 -07:00
Dmitry Gozman f4e584ea08
feat(rpc): align class names with api docs (#3164) 2020-07-26 21:27:09 -07:00
Dmitry Gozman 98cc9db8e8
chore: simplify doclint (#3162)
This renames CRBrowserContext events into ChromiumBrowserContext and
simplifies some doclint/coverage logic.
2020-07-24 20:40:21 -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
Dmitry Gozman d9890f1102
feat(rpc): make ElectronApplication a scope (#3159) 2020-07-24 16:22:20 -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
Dmitry Gozman 415e94f410
feat(rpc): server-side validator (#3150) 2020-07-24 15:16:33 -07:00
Pavel Feldman e7cca86757
fix(postData): allow overriding binary post data (#3120) 2020-07-24 12:16:45 -07:00
Dmitry Gozman deccddba24
feat(rpc): update BrowserServer (#3112)
- Make BrowserServer a scope.
- Plumb exitCode and signal to BrowserServer.on('close').
- Use toImpl in a test.
2020-07-24 10:17:07 -07:00
Dmitry Gozman 0f0e2acfaf
fix(type): unify selection behavior when typing (#3141)
Before typing/pressing, we focus the target element. WebKit
sometimes selects the value in this case. To unify the behavior
between the browsers we behave similar to human:
- when the input is already focused, we just type;
- when the input is not focused, we focus it, move caret
  to the start (like if user clicked at the start to focus the input)
  and then type.
Note this only affects inputs with non-empty value.
2020-07-24 09:30:31 -07:00
Andrey Lushnikov 678d16454a
devops: normalize blob names on the CDN (#3136)
This establishes a single naming for all our blobs with browser
builds that we upload to CDN: `<browser-name>-<os-version>`

- `<browser-name>` is either `firefox` or `webkit`.
- `os-version` is the OS that was used to produce the build.

References #2745
2020-07-24 00:31:18 -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
Andrey Lushnikov 63689e36a6
devops: prepare buildbots to the introduction of Ubuntu 20.04 builder (#3116)
This patch:
- specializes "linux" scripts into "Ubuntu 18.04" scripts
- renames all future linux blobs on CDN:
    * `firefox-linux.zip => firefox-ubuntu-18.04.zip`
    * `minibrowser-gtk.zip => minibrowser-gtk-ubuntu-18.04.zip`
    * `minibrowser-wpe.zip => minibrowser-wpe-ubuntu-18.04.zip`
    * `minibrowser-gtk-wpe.zip => minibrowser-gtk-wpe-ubuntu-18.04.zip`
- updates downloader to deal with the new names

References #2745
2020-07-23 11:59:23 -07:00