Skip to content
This repository has been archived by the owner on Nov 6, 2019. It is now read-only.

# Testing Firefox in "headless" mode #603

Open
jugglinmike opened this issue Sep 11, 2018 · 30 comments
Open

# Testing Firefox in "headless" mode #603

jugglinmike opened this issue Sep 11, 2018 · 30 comments

Comments

@jugglinmike
Copy link
Collaborator

In its default configuration, Firefox requires a display in order to run. This project currently executes Firefox using xvfb, a utility that creates virtual displays in the X windowing system. Recently, we have been struggling with a regression that appears to be related to the communication between Firefox and the virtual display (see gh-592).

As of version 55, Firefox implements a "headless" mode which allows the browser to be run in the absence of a display. In gh-592, @whimboo recommended enabling that feature instead of configuring Firefox to use a virtual display. In addition to side-stepping the regression, they mentioned that it would be faster overall.

There are implementation details which the feature's documentation does not describe but which may adversely influence conformance test results:

  • the effective resolution (critical for "reftests," which use WebDriver's "screenshot" command)
  • the effect on display-oriented web platform features (I'm thinking particularly of Fullscreen, but there may be more... Maybe CSS units like vh and vh)

More generally, I wonder about authenticity. Which is more true-to-life: Firefox with a virtual frame buffer or Firefox in headless mode?

@whimboo are you familiar with the feature? Can you speak to any of these concerns? Or do you know who I could contact to learn more?

@jgraham
Copy link
Collaborator

jgraham commented Sep 11, 2018

Using Xvfb is more like a real user experience, certainly. Xvfb uses the normal Firefox code but renders to a framebuffer that is never drawn to the screen. Headless mode more or less stubs out the rendering code.

Headless mode may be faster since it does less. It could be more reliable if the X server does something asynchronously that is synchronous in the headless implementation.

At some point headless mode on Linux passed all web-platform tests that Linux+xvfb did on our CI (excluding disabled tests), without needing special metadata just for headless. But I don't think that configuration is actually run, so it's hard to know whether that level of compatibility is being maintained.

Overall I would hesitate to move to using headless by default for a case where we are so interested in the precise behaviour of the browser

@jugglinmike
Copy link
Collaborator Author

Thanks, James!

@gsnedders
Copy link
Member

Like @jgraham, I'd be hesitate to move away from the codepaths that actually get run by users. Certainly headless is a useful performance optimisation for many things, but it isn't testing what users actually see, and I think that (more than performance) is what we should be focusing on. (Performance, after all, can be solved in other ways, like more parallelism.)

@foolip
Copy link
Member

foolip commented Sep 14, 2018

@jugglinmike have you looked at running Chrome headless?

I think there is an argument for exercising the headless codepaths, namely that this is what web developers setting up cross-browser testing are likely to do if they know how. It's certainly a risk that there are differences between headless and headful, but perhaps we could do a weekly or monthly run of headful to compare against, rather than always spending more cycles?

Aside: It would be great if ./wpt run were headless by default, since it's not really possible to use your machine will windows are flying around.

@andreastt
Copy link
Member

A datapoint is that we have not had many deviations in results between Xvfb and headless mode in the Firefox CI, as https://searchfox.org/mozilla-central/search?q=headless&case=false&regexp=false&path=testing%2Fmarionette%2Fharness%2F**%2F*.py shows.

To the contrary, running Firefox in headless mode provides more stable results because Marionette does not have to interact with unpredictable window managers and the inherent asynchronous nature of the X11 protocol. Headless will also be faster because anything related to painting and window manipulation is stubbed out.

Headless mode is controlled through the MOZ_HEADLESS environment variable. MOZ_HEADLESS_WIDTH and MOZ_HEADLESS_HEIGHT can be used to control the default window size. Subsequent window resizing using WebDriver/Marionette will update this state.

There is arguably a stronger argument for using headless in the WPT CI than there is for wpt.fyi result collection, where you might value speed over correctness. I would be strongly opposed to use headless in the Firefox CI, where emulating the user’s environment by interacting with the WM, loading libgtk, &c. is paramount to ensure Firefox is not only theoretically usable.

I think the open question is what difference in actual test results we can expect from running in headless mode? If there are no differences, isn’t the Xvfb approach only theoretically better in this context?

@jgraham
Copy link
Collaborator

jgraham commented Sep 14, 2018

I think that we should make --headless an option to wptrunner that abstracts the details of enbling headless mode across different browsers. It could make sense to enable that for the stability checks, but unless we have some reasonable assurance that headless mode matches non-headless in all cases (e.g. the relevant browser running both configurations in CI with identical results) I don't think we should enable it for wpt.fyi-ingested runs.

For local runs I can see the advantage of implying --headless by default as long as the output clearly informs people what's happening (we would of course have --no-headless to turn it off).

@andreastt
Copy link
Member

andreastt commented Sep 14, 2018

I filed https://bugzilla.mozilla.org/show_bug.cgi?id=1434382 about a wptrunner --headless flag some time ago, but maybe a GitHub issue would’ve been better.

@foolip
Copy link
Member

foolip commented Sep 14, 2018

@andreastt the searchfox.org link you shared doesn't seem to list test statuses, should I be able to see a list of tests that do differ between headless and Xvfb there?

@foolip
Copy link
Member

foolip commented Sep 14, 2018

I've filed web-platform-tests/wpt#13005 for the CLI feature request.

@andreastt
Copy link
Member

@foolip For the functional Marionette tests, all tests are expected to pass unless marked to skip, so we only have one test for the remote protocol that we can’t get working.

Looking at WPT results I’m sure is a more relevant datapoint, but I wanted to point out that we don’t have many known-headless-issues in our WebDriver implementation.

@jugglinmike
Copy link
Collaborator Author

I think there is an argument for exercising the headless codepaths, namely that this is what web developers setting up cross-browser testing are likely to do if they know how. It's certainly a risk that there are differences between headless and headful, but perhaps we could do a weekly or monthly run of headful to compare against, rather than always spending more cycles?

@foolip I haven't attempted to use Chrome's headless feature. There hasn't been a need to change the approach that was initially implemented, and I've had my doubts about authenticity. I'm comfortable if this makes our results less representative of a web developer's testing experience if it means the results are more representative of a user's browsing experience.

To the extent that these things don't align, we're sure to surprise some people no matter which "side" we choose. Targeting the user is what the web developer is doing, anyway. If their process is flawed, then that's clearly a problem, but it may be something we can help fix. I just think we should consider the "headless" mode the special case.

Hoping to get some clarity about the actual effect on test results, I enabled Chrome's headless mode on Bocoup's fork and triggered a TaskCluster build. The experiment was fairly catastrophic: over 2,000 testharness.js tests timed out, and 2 of the 26 TaskCluster tasks never completed. It's safe to say that I'm missing something. If anyone reading has any tips on how the feature should be enabled for WPT, then I'd be happy to try again!

@foolip
Copy link
Member

foolip commented Sep 19, 2018

Oh, wow, that's not quite ready to land then :)

I'm afraid I don't have any tips, if we wanted to pursue this we'd have to dig into the failure categories one by one.

@andreastt
Copy link
Member

Just out of curiosity, I would be interested to know how Firefox fares in that experiment. Setting MOZ_HEADLESS=1 in the environment should be sufficient.

@jugglinmike
Copy link
Collaborator Author

I'll give it a shot, @andreastt . Is setting MOZ_HEADLESS=1 different than using the -headless flag?

@andreastt
Copy link
Member

andreastt commented Sep 19, 2018 via email

@jugglinmike
Copy link
Collaborator Author

@andreastt I wanted to verify this locally before experimenting with all of WPT
on TaskCluster. I hit a wall right out of the gate, though: things stall out
immediately after starting the browser. Here's the last thing that the WPT CLI
outputs following ./wpt run --binary-arg=-headless firefox dom/events/CustomEvent.html:

 7:33.05 INFO Application command: /home/mike/projects/bocoup/google-wpt/web-platform-tests/_venv/browsers/firefox/firefox -headless -profile /tmp/tmpWt0563.mozrunner
 7:33.07 INFO Starting runner
 7:33.10 pid:11492 Full command: /home/mike/projects/bocoup/google-wpt/web-platform-tests/_venv/browsers/firefox/firefox -headless -profile /tmp/tmpWt0563.mozrunner
pid:11492 *** You are running in headless mode.

After a few minutes, it exits with:

 8:42.82 INFO Browser exited with return code -15
 8:52.83 WARNING Forcibly terminating runner process
 8:52.86 WARNING u'stop': ()
 8:52.86 ERROR Max restarts exceeded
 8:52.86 INFO Got 0 unexpected results
 8:52.86 SUITE_END

web-platform-test
~~~~~~~~~~~~~~~~~
Ran 0 checks ()
Expected results: 0
OK
 8:52.95 INFO Closing logging queue
 8:52.95 INFO queue closed
 8:52.95 ERROR No tests ran

Are you set up to try this on your end? If not, can I get you more debugging
information?

@whimboo
Copy link

whimboo commented Sep 19, 2018

@jugglinmike do you have a link to the TaskCluster / Buildbot log?

@jugglinmike
Copy link
Collaborator Author

Nope, that was a result of running WPT locally. I can generate logs for you, though. Full command:

./wpt run --binary-arg=-headless --log-mach=mach.txt --log-mach-level=debug firefox dom/events/CustomEvent.html

Output:

https://gist.github.com/jugglinmike/151e08f22d7b4427e0bd670294d37d49

@andreastt
Copy link
Member

Can you include --webdriver-arg=-vv in that?

@jugglinmike
Copy link
Collaborator Author

Sure, though the command

./wpt run --binary-arg=-headless --webdriver-arg=-vv --log-mach=log-mach-2.txt --log-mach-level=debug firefox dom/events/CustomEvent.html

Produced a log file that has no more information than the previous file:

https://gist.github.com/jugglinmike/7cc77c951cb50bedeb374d60fb6f936a

Should I be using --log-tbpl? Or some additional --webdriver-arg?

@whimboo
Copy link

whimboo commented Sep 20, 2018

--webdriver-arg would only work for those wpt tests which use geckodriver, which is tests/webdriver only. Running any other test which is using purely Marionette won't work.

But in such a case you should tweak the test runner and set the preference marionette.log.level to trace.

@jugglinmike
Copy link
Collaborator Author

Thanks, @whimboo! I think we're getting somewhere. Full command:

./wpt run --binary-arg=-headless --log-mach=mach.txt --log-mach-level=debug --setpref marionette.log.level=trace firefox dom/events/CustomEvent.html

Output:

https://gist.github.com/jugglinmike/97f57b6aa7c3e5d3d92ffd5bc8cd612a

In particular:

[2m�[34m 0:41.85�(B�[m �[34mINFO�(B�[m Starting runner
[2m�[34m 0:41.85�(B�[m DEBUG Test runner started
[2m�[34m 0:41.88�(B�[m �[2m�[36mpid:10575�(B�[m Full command: /home/mike/projects/bocoup/google-wpt/web-platform-tests/_venv/browsers/firefox/firefox -headless -profile /tmp/tmpGLs4P9.mozrunner
[2m�[36mpid:10575�(B�[m *** You are running in headless mode.
[2m�[34m 0:41.92�(B�[m DEBUG Got command: u'log'
[2m�[34m 0:41.93�(B�[m DEBUG Executor setup
[2m�[34m 0:41.93�(B�[m DEBUG Got command: u'log'
[2m�[34m 0:41.93�(B�[m DEBUG Connecting to Marionette on port 2828
[2m�[34m 0:41.93�(B�[m DEBUG Got command: u'log'
[2m�[34m 0:41.93�(B�[m DEBUG Waiting for Marionette connection
[2m�[34m 0:42.70�(B�[m �[2m�[36mpid:10575�(B�[m 1537466880599	Marionette	DEBUG	Received observer notification profile-after-change
[2m�[34m 0:42.84�(B�[m �[2m�[36mpid:10575�(B�[m 1537466880733	Marionette	DEBUG	Received observer notification command-line-startup
[2m�[34m 0:43.05�(B�[m �[2m�[36mpid:10575�(B�[m 1537466880940	Marionette	DEBUG	Received observer notification toplevel-window-ready
[2m�[34m 0:44.01�(B�[m �[2m�[36mpid:10575�(B�[m 1537466881909	Marionette	DEBUG	Received observer notification sessionstore-windows-restored
[2m�[34m 0:44.01�(B�[m �[2m�[36mpid:10575�(B�[m 1537466881910	Marionette	DEBUG	Init aborted (running=false, enabled=false, finalUIStartup=true)
[2m�[34m 1:51.55�(B�[m DEBUG init_failed called from timer
[2m�[34m 1:51.55�(B�[m DEBUG Got command: u'init_failed'
[2m�[34m 1:51.60�(B�[m �[34mINFO�(B�[m Browser exited with return code -15
[2m�[34m 1:51.60�(B�[m DEBUG PROCESS LEAKS None
[2m�[34m 1:51.60�(B�[m DEBUG stopped
[2m�[34m 1:51.60�(B�[m DEBUG ensure_runner_stopped
[2m�[34m 1:51.60�(B�[m DEBUG waiting for runner process to end

@whimboo
Copy link

whimboo commented Sep 21, 2018

Hm, please note that the initialization of Marionette got aborted because the component is not enabled! I also don't see that the -marionette argument is passed to the Firefox binary, nor that the marionette.enabled preference is set to true anywhere.

@andreastt
Copy link
Member

Depending on what version of Firefox you’re using, you need to set the preference in the correct case. Since recently, Nightly only supports Trace (capital T).

The log does say that it’s connecting to Marionette, and Marionette does appear to be enabled. The -marionette flag is not the only way to enable Marionette: you can also set the marionette.enabled preference to true, which is what I suspect wptrunner is doing.

If you could try --setpref marionette.log.level=Trace I would be much obliged.

@whimboo
Copy link

whimboo commented Sep 21, 2018

@andreastt, nope. The case is irrelevant to Marionette so far. I exactly requested to revert that for your patch on https://bugzilla.mozilla.org/show_bug.cgi?id=1482829 before it landed.

So while the internal Marionette component is enabled, the internal enabled state is false. The wptrunner shouldn't do that, but the Marionette client in geckoinstance.py. I wonder if there is a bug.

@jugglinmike
Copy link
Collaborator Author

If you could try --setpref marionette.log.level=Trace I would be much obliged.

I think @whimboo may be on to something, since making that change had no discernable effect on the log.

I also don't see that the -marionette argument is passed to the Firefox binary, nor that the marionette.enabled preference is set to true anywhere.

The following commands also hang:

./wpt run --binary-arg=-headless --setpref marionette.enabled=true --no-pause firefox dom/events/CustomEvent.html
./wpt run --binary-arg=-headless --setpref marionette.enabled=True --no-pause firefox dom/events/CustomEvent.html

However, explicitly specifying -marionette works:

./wpt run --binary-arg=-headless --binary-arg=-marionette --no-pause firefox dom/events/CustomEvent.html

Which is strange. For kicks, I tried specifying a bogus argument instead of -headless:

./wpt run --binary-arg=-bogus --no-pause firefox dom/events/CustomEvent.html

That also hangs, giving a pretty good indication of the problem here. The WPT CLI currently replaces the -marionette argument with any user-specified --binary-arg, but it ought to use -marionette in all cases. I've submitted a fix for that here: web-platform-tests/wpt#13154.

In the mean time, I've triggered a build on TaskCluster by explicitly specifying both arguments: https://tools.taskcluster.net/groups/F8b0wLxIRY2VkFN0Ykn9Dw

@andreastt
Copy link
Member

Yes, regrading the log pref casing I was misremembering events. The casing shouldn’t matter. Also the debug log shows enable=false which does indeed mean Marionette is not getting enabled.

That also hangs, giving a pretty good indication of the problem here. The WPT CLI currently replaces the -marionette argument with any user-specified --binary-arg, but it ought to use -marionette in all cases. I've submitted a fix for that here: web-platform-tests/wpt#13154.

Thanks! But shouldn’t it be -marionette plus whatever is given in --binary-arg?

@jugglinmike
Copy link
Collaborator Author

Yup, that wasn't to say -marionette should be used exclusively. The patch includes a test which verifies the user-specified argument is also used.

@jugglinmike
Copy link
Collaborator Author

For Firefox Nightly running against WPT commit e6fd8f35c3604d3b94d0a975a3e1d5fa8ef0cabc, we observed 184 discrepancies between "xvfb" and "headless". At the bottom of this comment, you'll find a summary which includes a "score" for each test.

  • reftest pass: 1
  • reftest failure: 0
  • testharness "OK": (number of passing subtests) / (total number of subtests)
  • testharness error: -1
  • testharness timeout: -1

Bear in mind that some of these discrepancies are likely due to unrelated flakiness (more discussion on that here).

Discrepancies between Firefox run with xvfb and `-headless`
type name xvfb headless
reftest /css/CSS2/backgrounds/background-position-002.xht 0 1
reftest /css/CSS2/generated-content/content-175.xht 0 1
reftest /css/CSS2/margin-padding-clear/margin-collapse-001.xht 0 1
reftest /css/CSS2/margin-padding-clear/margin-em-inherit-001.xht 0 1
reftest /css/CSS2/margin-padding-clear/margin-right-103.xht 0 1
reftest /css/CSS2/margin-padding-clear/margin-right-104.xht 0 1
reftest /css/CSS2/margin-padding-clear/margin-right-113.xht 0 1
reftest /css/CSS2/normal-flow/blocks-020.xht 0 1
reftest /css/CSS2/normal-flow/blocks-021.xht 0 1
reftest /css/CSS2/normal-flow/blocks-022.xht 0 1
reftest /css/CSS2/normal-flow/inline-replaced-width-014.xht 0 1
reftest /css/CSS2/positioning/absolute-replaced-width-003c.xht 0 1
reftest /css/CSS2/positioning/left-offset-percentage-002.xht 0 1
reftest /css/CSS2/positioning/top-offset-percentage-002.xht 0 1
reftest /css/CSS2/tables/separated-border-model-007.xht 0 1
reftest /css/CSS2/tables/separated-border-model-008.xht 0 1
reftest /css/CSS2/tables/separated-border-model-009.xht 0 1
reftest /css/CSS2/visuren/top-114.xht 0 1
reftest /css/compositing/mix-blend-mode/mix-blend-mode-animation.html 1 0
reftest /css/compositing/mix-blend-mode/mix-blend-mode-parent-element-overflow-scroll.html 1 0
reftest /css/css-backgrounds/background-334.html 0 1
reftest /css/css-backgrounds/border-image-outset-003.html 0 1
reftest /css/css-display/display-contents-state-change-001.html 0 1
reftest /css/css-flexbox/flex-vertical-align-effect.html 0 1
reftest /css/css-flexbox/flexbox_visibility-collapse-line-wrapping.html 0 1
reftest /css/css-flexbox/percentage-heights-004.html 1 0
reftest /css/css-images/tiled-radial-gradients.html 0 1
reftest /css/css-multicol/multicol-fill-auto-001.xht 0 1
reftest /css/css-multicol/multicol-inherit-001.xht 0 1
reftest /css/css-multicol/multicol-overflow-000.xht 0 1
reftest /css/css-transforms/matrix/svg-matrix-005.html 0 1
reftest /css/css-ui/box-sizing-007.html 1 0
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-007.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-013.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-019.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-025.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-031.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-037.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-043.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-049.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-055.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-061.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-067.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-073.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-079.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-085.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-091.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-097.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-107.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-115.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-123.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-131.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-139.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-147.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-155.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-163.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-171.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-179.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-187.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-195.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-203.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-211.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-219.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vlr-227.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-006.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-012.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-018.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-024.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-030.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-036.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-042.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-048.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-054.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-060.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-066.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-072.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-078.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-084.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-090.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-096.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-106.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-114.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-122.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-130.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-138.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-146.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-154.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-162.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-170.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-178.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-186.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-194.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-202.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-210.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-218.xht 0 1
reftest /css/css-writing-modes/abs-pos-non-replaced-vrl-226.xht 0 1
reftest /css/css-writing-modes/available-size-006.html 0 1
reftest /css/css-writing-modes/available-size-007.html 0 1
reftest /css/css-writing-modes/available-size-008.html 0 1
reftest /css/css-writing-modes/available-size-015.html 0 1
reftest /css/css-writing-modes/available-size-019.html 0 1
reftest /css/css-writing-modes/scrollbar-vertical-rl.html 1 0
reftest /css/css-writing-modes/sizing-orthog-htb-in-vlr-007.xht 0 1
reftest /css/css-writing-modes/sizing-orthog-htb-in-vlr-008.xht 0 1
reftest /css/css-writing-modes/sizing-orthog-htb-in-vrl-008.xht 0 1
reftest /css/css-writing-modes/sizing-orthog-htb-in-vrl-011.xht 0 1
reftest /css/css-writing-modes/sizing-orthog-htb-in-vrl-020.xht 0 1
reftest /css/css-writing-modes/sizing-orthog-prct-htb-in-vrl-001.xht 0 1
reftest /css/css-writing-modes/text-indent-vlr-011.xht 0 1
reftest /css/css-writing-modes/text-indent-vlr-013.xht 0 1
reftest /css/css-writing-modes/text-indent-vrl-010.xht 0 1
reftest /css/css-writing-modes/text-indent-vrl-012.xht 0 1
reftest /css/mediaqueries/device-aspect-ratio-001.html 1 0
reftest /css/mediaqueries/device-aspect-ratio-005.html 1 0
reftest /css/selectors/focus-within-001.html 0 1
reftest /css/selectors/focus-within-002.html 0 1
reftest /css/selectors/focus-within-003.html 0 1
reftest /css/selectors/focus-within-004.html 0 1
reftest /css/selectors/focus-within-005.html 0 1
reftest /css/selectors/focus-within-006.html 0 1
reftest /css/selectors/focus-within-007.html 0 1
reftest /css/selectors/focus-within-008.html 0 1
reftest /css/selectors/focus-within-010.html 0 1
reftest /css/selectors/focus-within-shadow-001.html 0 1
reftest /css/selectors/focus-within-shadow-002.html 0 1
reftest /css/selectors/focus-within-shadow-003.html 0 1
reftest /css/selectors/focus-within-shadow-004.html 0 1
reftest /css/selectors/focus-within-shadow-005.html 0 1
reftest /css/selectors/focus-within-shadow-006.html 0 1
reftest /css/selectors/selection-image-001.html 0 1
reftest /css/vendor-imports/mozilla/mozilla-central-reftests/flexbox/flexbox-justify-content-horiz-001b.xhtml 0 1
reftest /css/vendor-imports/mozilla/mozilla-central-reftests/selectors4/focus-within-1.html 0 1
reftest /css/vendor-imports/mozilla/mozilla-central-reftests/values3/calc-text-indent-intrinsic-1.html 1 0
reftest /html/rendering/replaced-elements/embedded-content/video-controls-vertical-writing-mode.html 0 1
reftest /webvtt/rendering/cues-with-video/processing-model/selectors/cue/background_shorthand_css_relative_url.html 0 1
testharness /FileAPI/url/sandboxed-iframe.html 0.685714285714 -1
testharness /WebCryptoAPI/sign_verify/test_ecdsa.https.html 0.0 0.0
testharness /WebCryptoAPI/wrapKey_unwrapKey/test_wrapKey_unwrapKey.https.html 0.65250965251 0.649805447471
testharness /async-local-storage/non-secure-context-dynamic-import.tentative.html 0.5 0.0
testharness /content-security-policy/inside-worker/dedicated-script.html -1 -1
testharness /content-security-policy/inside-worker/shared-script.html 0.555555555556 1.0
testharness /content-security-policy/script-src/script-src-1_4_2.html 0.5 1.0
testharness /content-security-policy/script-src/worker-set-timeout-blocked.sub.html 0.0 1.0
testharness /css/css-overflow/overflow-shorthand-001.html 1.0 0.25
testharness /css/css-ui/caret-color-013.html 1.0 0.363636363636
testharness /css/css-values/viewport-units-css2-001.html 0.9875 0.9875
testharness /css/cssom/overflow-serialization.html 1.0 0.0
testharness /css/cssom/shorthand-values.html 0.473684210526 0.421052631579
testharness /fetch/api/redirect/redirect-count.any.html -1 1.0
testharness /fetch/api/redirect/redirect-count.any.worker.html -1 1.0
testharness /fullscreen/api/document-fullscreen-enabled-active-document.html 0.0 1.0
testharness /fullscreen/api/promises-reject.html 0.5 1.0
testharness /fullscreen/idlharness.window.html 0.958333333333 1.0
testharness /hr-time/timeOrigin.html 0.666666666667 1.0
testharness /html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/open-features-non-integer-screeny.html 1.0 0.25
testharness /html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-fetch-error.sub.html -1 0.0
testharness /html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-script-error.html -1 0.0
testharness /html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports.html 0.0 0.0
testharness /html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-external-classic.html 0.0 0.0
testharness /html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-external-module.html 0.0 0.0
testharness /html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-inline-classic.html 0.0 0.0
testharness /html/semantics/scripting-1/the-script-element/module/dynamic-import/propagate-nonce-inline-module.html 0.0 0.0
testharness /navigation-timing/nav2_test_attributes_values.html 1.0 0.0
testharness /referrer-policy/css-integration/external-import-stylesheet.html 0.0 1.0
testharness /referrer-policy/css-integration/external-stylesheet.html 0.0 1.0
testharness /referrer-policy/css-integration/internal-import-stylesheet.html 0.0 1.0
testharness /referrer-policy/css-integration/processing-instruction.html 0.0 1.0
testharness /resource-timing/resource_initiator_types.html 0.628571428571 0.647058823529
testharness /webgl/bufferSubData.html 1.0 0.0
testharness /webgl/compressedTexImage2D.html 1.0 0.0
testharness /webgl/compressedTexSubImage2D.html 0.5 0.0
testharness /webgl/texImage2D.html 1.0 0.0
testharness /webgl/texSubImage2D.html 1.0 0.0
testharness /webgl/uniformMatrixNfv.html 1.0 0.0
testharness /webstorage/storage_local_setitem_quotaexceedederr.html 0.0 1.0
testharness /webstorage/storage_session_setitem_quotaexceedederr.html 0.0 1.0
testharness /x-frame-options/deny.sub.html 0.0 1.0
testharness /x-frame-options/multiple.sub.html 0.166666666667 0.666666666667
testharness /x-frame-options/sameorigin.sub.html 0.833333333333 1.0
testharness /xhr/send-content-type-charset.htm 0.777777777778 1.0
wdspec /webdriver/tests/element_click/interactability.py 0.833333333333 1.0
wdspec /webdriver/tests/fullscreen_window/fullscreen.py -1 1.0
wdspec /webdriver/tests/fullscreen_window/user_prompts.py -1 1.0
wdspec /webdriver/tests/maximize_window/user_prompts.py 0.666666666667 1.0

jugglinmike added a commit to bocoup/results-collection that referenced this issue Sep 24, 2018
As of [1] (merged on 2018-09-24), the WPT CLI enables the "headless"
mode of Chrome and Firefox by default. This mode is more convenient for
contributors running the tests from their development system, but it
also relies on functionality which is not enabled during typical usage
of the browsers.  Results collected in this mode are therefore less
authentic than results collected using a virtual display.

@jgraham commented on this in [2]:

> unless we have some reasonable assurance that headless mode matches
> non-headless in all cases (e.g. the relevant browser running both
> configurations in CI with identical results) I don't think we should
> enable it for wpt.fyi-ingested runs.

That issue includes evidence that the results are not equivalent,
meaning "headless" mode is not appropriate for publicly documenting the
capabilities of each browser.

Extend the results collection system to use the new `--no-headless`
command-line argument.

[1] web-platform-tests/wpt#13076
[2] web-platform-tests#603
@whimboo
Copy link

whimboo commented Sep 25, 2018

Please note that we don't run headless in our own CI yet. So we aren't aware of differences ourselves. But lately we were at least talking about enabling headless for wdspec as the first step. So this may happen soon.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants