Commit Graph

279 Commits

Author SHA1 Message Date
Yury Semikhatsky
b3e7838582
browser(firefox): clear AuthCache when setting context proxy (#4793) 2020-12-21 15:54:15 -08:00
Andrey Lushnikov
761bd78879
browser(firefox): fix build on MacOS (#4758) 2020-12-17 21:02:01 -08:00
Andrey Lushnikov
5f6ccee742
browser(firefox): roll Firefox to beta Dec 14, 2020 (#4716)
Merge conflicts: 57ba98733f
2020-12-14 15:28:48 -08:00
Andrey Lushnikov
17f1b20f39
devops: trigger all builds with new windows buildbot (#4638) 2020-12-08 11:03:11 -08:00
Dmitry Gozman
e1e000d264
browser(firefox): do not spam stderr with screencast logs (#4630) 2020-12-08 09:30:34 -08:00
Andrey Lushnikov
e75ebc1752
browser(firefox): roll Firefox to Dec, 7 2020 (#4622) 2020-12-07 10:27:50 -08:00
Andrey Lushnikov
8551fff43b
browser(firefox): disable cross-process navigation (#4594)
This disable cross-process navigation until we properly support it.

References #4297
2020-12-04 10:13:50 -08:00
Dmitry Gozman
e8419f85b6
browser(firefox): support alertCheck and confirmCheck dialogs (#4553)
These are shown with "prevent this page from showing more dialogs" checkbox.
2020-11-30 20:05:15 -08:00
Andrey Lushnikov
730f6f87a2
browser(firefox): roll Firefox to beta Nov 30, 2020 (#4542) 2020-11-30 10:17:03 -08:00
Joel Einbinder
d06afadb8b
browser(firefox): send dragend after drop and survive navigations (#4506) 2020-11-25 03:47:34 -08:00
Andrey Lushnikov
17bec4f6f8
browser(firefox): rebaseline atop of Nov, 23 2020 (#4516) 2020-11-23 16:21:07 -08:00
Dmitry Gozman
14a96ca21f
browser(firefox): ensure detachedFromTarget is always sent (#4505)
browser(firefox): ensure detachedFromTarget is always sent

LinkedBrowser can throw when removing listeners in PageTarget.dispose,
and that prevents BrowserHandler from sending Browser.detachedFromTarget.

Using a try-catch seems good enough.
2020-11-20 10:48:06 -08:00
Andrey Lushnikov
6bc45d9247
browser(firefox): browser.version() to return full version (#4491)
Currently, browser.version() returns `83.0`, whereas launching firefox
with `--version` flag returns `83.0b3`. This patch alings protocol's
`Browser.version()` with flag output.
2020-11-19 08:24:17 -08:00
Andrey Lushnikov
cb1f2a38f3
browser(firefox): roll Firefox to Nov 17,2020 (#4477)
Changes accomodate touchEventsOverride that has moved to the
browser side.
2020-11-18 08:19:09 -08:00
Yury Semikhatsky
39fcf1bc54
browser(firefox): do not leak reponses (#4453) 2020-11-16 13:16:20 -08:00
Joel Einbinder
e91140e88c
browser(firefox): force a layout before dispatching a tap (#4428) 2020-11-16 11:07:06 -08:00
Yury Semikhatsky
0167f8c182
browser(firefox): allow to override request url (#4436) 2020-11-13 14:56:27 -08:00
Dmitry Gozman
2e65f78874
browser(firefox): close browser when pipe disconnects (#4437) 2020-11-13 14:51:40 -08:00
Yury Semikhatsky
8488c296f9
browser(firefox): allow to override content-type along with post data (#4416) 2020-11-12 10:41:49 -08:00
Dmitry Gozman
ae738c1fac
browser(firefox): ignore WebProgress events coming from workers (#4380)
Somehow, we get WebProgress state changes when worker is loaded
with a blob url. This messes up frame navigation detection.

Luckily, it's easy to filter out non-document state changes.
2020-11-09 09:29:34 -08:00
Dmitry Gozman
06c8881dad
browser(firefox): fix videoSessionId (#4374)
PRIx8 produced "%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx",
so video session ids were clashing between pages, and popup videos
did not work.
2020-11-06 15:08:03 -08:00
Andrey Lushnikov
c522a0dfba
browser(firefox): force always active docshell (#4363)
This forces active docshell for all content processes.

References #4208
2020-11-05 17:53:22 -08:00
Yury Semikhatsky
aafcf932bc
browser(firefox): bundle VS C++ redistributable dlls (#4359) 2020-11-05 13:56:15 -08:00
Andrey Lushnikov
799604c085
browser(firefox): roll Firefox to beta @ Nov, 3 (#4327) 2020-11-03 14:51:37 -08:00
Andrey Lushnikov
e3b12b0a0d
browser(firefox): fix closing browser contexts with beforeunload (#4314)
References #4021
2020-11-02 17:29:54 -08:00
Andrey Lushnikov
2b495c9750
browser(firefox): fix SimpleChannel to await initialization (#4311)
As Joel noticed recently, MessageManager in firefox doesn't guarantee
message delivery if the opposite end hasn't been initialized yet. In
this case, message will be silently dropped on the ground.

To fix this, we establish a handshake in SimpleChannel to make sure that
both ends are initialized, end buffer outgoing messages until this
happens.

Drive-by: serialize dialog events to only deliver *after* the
`Page.ready` protocol event. Otherwise, we deliver dialog events to the
unreported page.
2020-11-02 16:21:34 -08:00
Andrey Lushnikov
18c3efe79e
browser(firefox): instrument websockets (#4287) 2020-10-29 16:33:50 -07:00
Andrey Lushnikov
c5d3490b34
browser(firefox): roll firefox to beta Oct, 28 (#4274) 2020-10-28 14:47:14 -07:00
Pavel Feldman
437fe17825
browser(firefox): expose resource timing info (#4205) 2020-10-21 13:55:30 -07:00
Yury Semikhatsky
092c9905e6
browser(firefox): fix screencast timescale precision (#4196) 2020-10-20 13:39:56 -07:00
Joel Einbinder
4f7d65fe9c
browser(firefox): report pageerrors without stack properties (#4166) 2020-10-19 02:23:53 -07:00
Joel Einbinder
305d209e82
browser(firefox): always send focus events (#4150) 2020-10-16 01:28:13 -07:00
Andrey Lushnikov
8f8bebb632
browser(firefox): roll Firefox to tip-of-tree Oct, 12 (#4158) 2020-10-15 09:51:21 -07:00
Yury Semikhatsky
3c32c1683a
browser(firefox): use 16-byte long uid instead of ordinal as screencast id (#4147) 2020-10-14 16:14:24 -07:00
Joel Einbinder
a4474f6752
browser(firefox): Page.dispatchTapEvent (#4101) 2020-10-13 12:24:11 -07:00
Andrey Lushnikov
58285f6155
browser(firefox): await browser initialization when closing browser (#4121)
We try to avoid closing firefox too early, fearing that this
might terminate clean shutdown sequence.

Usually we assume that `Browser.enable` is called before `Browser.close`
- however, this is not the case in certain tests. So we have to
ensure browser initialization in `Browser.close` as well.

In my local tests, this fixes the Firefox Pipe problem: it looks like
we were closing browser too quickly.
2020-10-12 22:34:04 -07:00
Andrey Lushnikov
6a7d24469a
devops: fix firefox build (#4088)
New firefox build requires a pre-created python virtual environment.
We should detect it and create if necessary.

References #3995
2020-10-07 14:34:58 -07:00
Andrey Lushnikov
1ccce09a02
browser(firefox): roll Firefox to beta Oct 7, 2020 (#4087)
References #3995
2020-10-07 14:12:19 -07:00
Andrey Lushnikov
6beef551d9
browser(firefox): wait for search and addon manager initialization (#4081)
It looks like terminating browser when search service or addon manager is
not fully initialized results in a broken shutdown sequence. As of
today, this results in multiple errors in the browser STDERR. In future,
this might also result in browser stalling instead of terminating.

This starts awaiting search and addon manager termination.

References #3995
2020-10-07 10:24:16 -07:00
Andrey Lushnikov
3b4232864d
browser(firefox): a different way to emit 'load' event (#4080)
Using WebProgressListener events works in all cases. Currently
used `pageshow` event will stop being emitted in future when loading
was stopped with `window.stop()` api.

References #3995
2020-10-07 09:22:56 -07:00
Andrey Lushnikov
e6869edf98
browser(firefox): fix typo in dispatcher teardown (#4069) 2020-10-06 12:06:50 -07:00
Andrey Lushnikov
4ab66a4fe5
browser(firefox): follow-up with assorted simplifications (#4066)
This patch:
- moves `SimpleChannel` to synchronously dispatch buffered commands
  instead of a `await Promise.resolve()` hack
- moves dialog & screencast handling from `PageHandler` to
  `TargetManager`. This leaves `PageHandler` to be concerned solely about
  protocol.
- removes `attach` and `detach` methods for worker channels: since
  channels are buffering messages until the namespace registers, there's
  no chance to loose any events.
- slightly simplifies `PageNetwork` class: it's lifetime is now
  identical to the lifetime of the associated `PageTarget`, so a lot can
  be simplified later on.

References #3995
2020-10-06 01:53:25 -07:00
Andrey Lushnikov
c8a64b88e1
browser(firefox): enable document channel (#4065)
In the current tip-of-tree Firefox, document channel is enabled by
default, so we have to enable it in order to roll further.

This patch:
1. Removes content disposition sniffing from content process since it
   crashes renderer with document channel.
2. Merges all page-related handlers in a single `PageHandler` and
   serializes network events wrt the `Page.frameAttached` event.

The serialization mentioned in (2) is necessary: frame attachment is
reported from the content process, and network events are reported from
the browsers process. This is an inherent race, that becomes exposed by
the document channel.

On a side note, (2) makes it possible to synchronously report all
buffered events in `SimpleChannel` (cc offline discussion with @dgozman
that highlighted an unsighty approach that we currently employ there: reporting
events in a subsequent microtask.)

References #3995
2020-10-06 00:15:24 -07:00
Pavel Feldman
857abcfc10
browser(firefox): make pipe work on Windows (#4058) 2020-10-05 10:58:56 -07:00
Dmitry Gozman
133de10a47
browser(firefox): start screencast in existing pages upon setScreencastOptions (#4045)
This makes it work in persistent context.

To achieve this, we have to move screencast logic into PageTarget and
make PageHandler listen to an event.
2020-10-02 17:16:49 -07:00
Andrey Lushnikov
2c11b10598
browser(firefox): remove multisession logic (#4039)
This patch:
1. Changes `SimpleChannel` to buffer messages to the namespace that
   hasn't been registered yet. This allows us to create `SimpleChannel`
   per target on the browser side right away.
2. Removes multisession support. Now there's only one `PageAgent` in the
   content process, which talks to a single `PageHandler` on the browser
   side. Both ends can be created as-soon-as-needed; thanks to
   `SimpleChannel` bufferring, no messages will be lost and all messages
   will be delivered in proper order. (This is currently the reason why
   build 1178 flakes on windows).
3. Straightens up the target reporting. Targets are reported as soon
   as they appear on the browser side.

**NOTE:** this doesn't yet remove sessions from protocol.

References #3995
2020-10-02 04:13:42 -07:00
Andrey Lushnikov
b74a6b78ef
browser(firefox): do not double-attach session to the same target (#4027)
We currently might double-attach to the target in `BrowserHandler` since we iterate over all targets, and then subscribe to the additional event when target is getting initialized.

This patch fixes this race condition and should unblock the roll to r1177.

References #3995
2020-09-30 23:50:02 -07:00
Andrey Lushnikov
974358442d
browser(firefox): move user agent emulation to browser side (#4016)
References #3995
2020-09-30 08:02:22 -07:00
Andrey Lushnikov
e28083974d
browser(firefox): simplify PageTarget lifecycle (#4014)
As of today, we create `PageTarget` instances whenever we get a
sync IPC from the content process. This, however, breaks an invariant
that `browserContext.pages` always has all pages (and *browsing contexts* - not to be confused with *browser contexts*), associated with browser context. This invariant will be especially important when we move
user agent emulation to browser-side.

This patch makes `PageTarget` lifecycle symmetrical:
- `PageTarget` instance is created when tab is opened
- `PageTarget` is destroyed when tab is crashed or closed

This should also fix a bunch of race conditions with persistent mode, since sometimes we arrive to the window after its
initialization.

Drive-by: straighten viewport management and put a nice descriptive comment.
2020-09-30 02:10:34 -07:00
Andrey Lushnikov
24bc0e39b8
browser(firefox): remove the hack around setting viewport size (#4010)
Juggler code had a bug where we subscribed to window and tab
events, but did not iterate collections of current windows and tabs.

As a result, we were sometimes failing to set viewport size for the
initial window, and implemented an artificial promise to workaround
the problem.

This patch:
- starts calling `onOpenWindow` and `onOpenTabListener` callbacks
  for *all* windows and tabs - current and future, eliminating the
  race condition.

This worked too well and we started overriding window sizes that
were set by users with `window.open(url, 'width=300;height=400')` (we
have a test for this). To fix this, we now plumb `CHROME_WITH_SIZE`
flag from appWindow and override viewport iff this flag is not set.

After this patch, we will use the `onTabOpened` event to move user
agent emulation to the browser-side.

References #3995
2020-09-30 00:36:46 -07:00
Andrey Lushnikov
2631e1a809
browser(firefox): use browsingContextID for frame IDs (#3999)
BrowsingContextIDs are consistent across the processes, so we can use
them to target frames in both browser and content processes. This will
aid browser-side navigation.

As a nice side-effect, we can drop a round-trip to the content process
for every `requestWillBeSent` event since we *almost* always can
attribute all network events to the proper parent frames.

I say "almost", because we in fact **fail** to correctly attribute requests
from workers that are instantiated by subframes. This, however, is
not working in Chromium ATM, so I consider this to be a minor regression
that is worth the simplification.
2020-09-29 11:22:00 -07:00
Yury Semikhatsky
25b199b40a
browser(firefox): fix screencast start event for popups (#3834) 2020-09-10 14:37:48 -07:00
Yury Semikhatsky
d64d0025a4
browser(firefox): fix screencast in first window on mac headful (#3826)
* browser(firefox): fix screencast in first window on mac headful

* Revert only
2020-09-10 00:40:56 -07:00
Andrey Lushnikov
6c83266047
browser(firefox): force firefox devtools to open in a separate window (#3816)
References #3470
2020-09-09 09:36:32 -07:00
Dmitry Gozman
5364c6acbc
browser(firefox): fix automatic http->https redirect (#3812)
browser(firefox): fix automatic http->https redirect

Sometimes, Firefox does an automatic http->https redirect without hitting
the network (e.g. for http://wikipedia.org). In this case, the http request
is very strange:
- it does not actually hit the network;
- it is never intercepted;
- we cannot access its response because there was no actual response.

So, we had a bug where:
- redirects inherited the original request's listener;
- that listener was throwing an error.
This lead to the error in the listeners onDataAvailable call chain,
and original listener that renders the response was never called,
resulting in an empty page.

This change:
- ignores the original request that did not hit the network;
- does not inherit the listener;
- adds try/catch around problematic calls.
2020-09-09 09:16:03 -07:00
Yury Semikhatsky
ee1becd897
browser(firefox): autoscale screencast to fit frame (#3720) 2020-09-01 17:10:06 -07:00
Joel Einbinder
abb50a79bd
browser(firefox): fix request frame attribution (#3657)
Firefox will sometimes send multiple requests with the same http channel id. When a frame is loaded, the favicon is requested in the parent frame, but with the same channel id. This can cause the document request to report the wrong frame, causing the test 'should capture iframe navigation request' to fail. It fails consistently on my computer.

This patch adds the content policy type into the http channelId to better distinguish requests. Maybe there is something better we can do? It looks like we use channelId has request ids, so there might be more bugs with these favicon requests in playwright?
2020-08-28 17:55:05 -07:00
Yury Semikhatsky
17077fd901
browser(firefox): introduce browser level screencastFinished event (#3625) 2020-08-25 14:50:40 -07:00
Yury Semikhatsky
9f3a1b5168
browser(firefox): send screencastStarted after attachedToTarget (#3554) 2020-08-20 14:03:05 -07:00
Yury Semikhatsky
5ba0254c99
browser(firefox): make sure response is sent when context is closed (#3553) 2020-08-20 13:26:04 -07:00
Yury Semikhatsky
854d755db5
browser(firefox): make context close wait for sessions to finish (#3550) 2020-08-20 11:04:57 -07:00
Yury Semikhatsky
f13cebc66d
browser(firefox): remove redundant checks for PageTarget._browserContext (#3541) 2020-08-19 15:39:46 -07:00
Yury Semikhatsky
df50660458
browser(firefox): make tab close listener sync again (#3533) 2020-08-19 12:52:43 -07:00
Yury Semikhatsky
73cd6ecef3
browser(firefox): add screencast control methods to context (#3530) 2020-08-19 12:43:53 -07:00
Andrey Lushnikov
4dde2882e7
browser(firefox): roll Firefox to August 14 beta (#3465) 2020-08-13 23:14:24 -07:00
Joel Einbinder
a4eb86c3df
browser(firefox): update styles when changing color scheme (#3407)
`MediaFeatureValuesChanged` is what their devtools code uses to update the styles. I tried using their code directly, but it doesn't play nicely with navigations so I decided to stick with ours.
2020-08-13 12:16:00 -07:00
Andrey Lushnikov
915902c858
browser(firefox): roll Firefox to roughly July, 15 (#3411) 2020-08-12 10:09:20 -07:00
Dmitry Gozman
da95b73b59
browser(firefox): emit iframe lifecycle when initial navigation fails (#3389) 2020-08-11 16:05:34 -07:00
Yury Semikhatsky
538daf3302
browser(firefox): exclude frame from screencast video (#3372) 2020-08-10 15:10:12 -07:00
Andrey Lushnikov
a225447653
browser(firefox): introduce global proxy (#3335)
This will be used instead of messing up user preferences for proxy
setup.
2020-08-07 15:38:06 -07:00
Andrey Lushnikov
ca3bd5e2ef
browser(firefox): roll Firefox to June, 24 (#3327)
Review URL: 83e6f0114e

References #3215
2020-08-06 10:32:50 -07:00
Yury Semikhatsky
9effb32650
browser(firefox): always create new process rather than reuse one (#3312) 2020-08-05 15:48:26 -07:00
Yury Semikhatsky
90819fa350
browser(firefox): always create image buffer in headless mode (#3299) 2020-08-04 17:58:57 -07:00
Yury Semikhatsky
7e28c26f6d
browser(firefox): do not complain about SnapshotListener being cleared on Destroy (#3298) 2020-08-04 17:38:46 -07:00
Dmitry Gozman
d3a40be479
browser(firefox): reliably close the pipe (#3280) 2020-08-03 20:15:25 -07:00
Dmitry Gozman
402d1a6a67
browser(firefox): fix win compile 2 (#3277) 2020-08-03 15:26:12 -07:00
Dmitry Gozman
e481f378f1
browser(firefox): fix win compile (#3275) 2020-08-03 14:42:16 -07:00
Dmitry Gozman
1148f0b906
browser(firefox): implement RemoteDebuggingPipe (#3273) 2020-08-03 13:27:09 -07:00
Andrey Lushnikov
9103ce0060
devops: fix firefox build (#3237) 2020-07-30 11:50:52 -07:00
Andrey Lushnikov
4961c2ddbb
devops(firefox): fixate rust and cbindgen version (#3223)
Firefox buildchain does not fixate `rust` and `cbindgen` versions,
so we want to fixate them on our end.

A table with matching rust version for every firefox version can
be found at [Rust Update Policy for Firefox](https://wiki.mozilla.org/Rust_Update_Policy_for_Firefox).

Additionally, there are checks in `mozbuild` for the minimum
rust version and minimum `cbindgen` version.
2020-07-30 09:59:39 -07:00
Joel Einbinder
3e023f6c3d
Revert "browser(firefox): fix color scheme not updating until reload" (#3198) 2020-07-28 13:46:37 -07:00
Dmitry Gozman
14c6881904
browser(firefox): properly rewrite intercepted request (#3188) 2020-07-28 11:32:44 -07:00
Yury Semikhatsky
da25a5b501
browser(firefox): do not capture cursor in screencast (#3118) 2020-07-27 16:22:02 -07:00
Joel Einbinder
549a37b939
browser(firefox): fix color scheme not updating until reload (#3157) 2020-07-24 16:01:45 -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
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
Yury Semikhatsky
3d37e4586e
browser(firefox): pass actual frame duration to the codec (#3101)
#1158
2020-07-22 23:27:49 -07:00
Yury Semikhatsky
babd0cbcea
browser(firefox): fix Windows build (#3065) 2020-07-21 10:02:14 -07:00
Pavel Feldman
7f29275aa2
browser(firefox): use base64 to deliver post data (#3063) 2020-07-21 09:55:46 -07:00
Yury Semikhatsky
a5cb983768
browser(firefox): write video to .webm instead of .ivf (#3062) 2020-07-21 09:26:59 -07:00
Pavel Feldman
726f636b5c
browser(firefox): implement Page.bringToFront (#3051) 2020-07-20 16:47:27 -07:00
Yury Semikhatsky
6db8962125
browser(firefox): smooth resize in headless (#3043) 2020-07-20 14:24:52 -07:00
Yury Semikhatsky
d1f937d651
browser(firefox): stop video recording if page closed (#3040) 2020-07-20 10:44:11 -07:00
Yury Semikhatsky
562e1e6460
browser(firefox): wait for file write to finish in stopVideoRecording (#3020) 2020-07-17 17:34:09 -07:00
Yury Semikhatsky
89ccf99b90
browser(firefox): screencast for Mac headful (#2985) 2020-07-16 15:34:33 -07:00
Yury Semikhatsky
b7f7ba9230
browser(firefox): screencast support for Windows headful (#2965) 2020-07-15 16:58:58 -07:00
Yury Semikhatsky
0aff9bef11
browser(firefox): screencast for headless mac (#2956) 2020-07-15 09:37:08 -07:00
Yury Semikhatsky
89ca2db36c
browser(firefox): kick off new build after last commit (#2948) 2020-07-14 12:49:04 -07:00
Yury Semikhatsky
bf6f22d812
browser(firefox): basic screencast for headless (#2931) 2020-07-14 11:20:36 -07:00
Yury Semikhatsky
baaa65492b
browser(firefox): resize window when changing viewport (#2861) 2020-07-07 14:04:07 -07:00